У меня есть задача, украшенная @roles
, что я иногда хотел бы запускать на одном хосте (для развертывания канарейки-тестирования).Как выполнить задачу с заданной ролью в ролях на одном хосте
from fabric.api import *
env.roledefs = {
'web-workers': ['[email protected]', '[email protected]'],
'some-other-role': ['[email protected]'],
}
@task
@roles('web-workers')
def bogomips():
run('uptime')
В docs for @roles
говорится, что:
... запрещая переопределение в командной строке, my_func будет выполняться против хозяев, перечисленных [в роли] ...
Но я не могу получить упомянутые здесь функции «переопределения», которые были здесь упомянуты, чтобы работать ... Я пробовал:
$ fab bogomips -H [email protected]
$ fab bogomips -R some-other-role
, но он всегда выполняется на всей роли, упомянутой в декораторе ...
Что мне здесь не хватает? Как я могу переопределить, где запущена задача @roles
?
Для чего это стоит, я сталкиваюсь с таким же поведением. Кажется, что игнорируется флаг '--roles', когда задача украшена ролями ('...'). Например, попробуйте свой код с '--roles = NOT_A_ROLE', и он должен работать без каких-либо ошибок. Удалите декоратор '@roles ('...') из задачи, и он выкинет ошибку (роль не существует). Но, по крайней мере, флаг роли, похоже, работает в этом сценарии. Определенно это не похоже на поведение, описанное в документах. – YellowShark