Чтобы объяснить, почему это даже проблема. Команда fab использует матричную библиотеку для запуска задач в списках хостов. Если вы пытаетесь изменить список хостов внутри задачи, вы по сути пытаетесь изменить список, перебирая его. Или в случае, когда у вас не определены хосты, переберите пустой список, где код, для которого вы задали зацикливание списка, никогда не выполняется.
Использование env.host_string является обходным решением для этого поведения только в том, что оно указывает непосредственно функциям, с которыми хосты соединяются. Это вызывает некоторые проблемы в том, что вы будете переделывать цикл выполнения, если вы хотите иметь несколько хостов для выполнения.
Самый простой способ, с помощью которого люди могут устанавливать хосты во время выполнения, состоит в том, чтобы заполнить env как отдельную задачу, которая настраивает все строки хоста, пользователей и т. Д. Затем они запускают задачу развертывания. Это выглядит так:
fab production deploy
или
fab staging deploy
Там, где постановка и производство подобны заданным вами задачам, но они сами не вызывают следующую задачу. Причина, по которой он должен работать следующим образом, состоит в том, что задача должна завершиться и выйти из цикла (хостов, в случае env Нет, но это цикл из одного на тот момент), а затем сделать цикл более хосты (теперь определяемые предыдущей задачей) заново.