Python 如何仅在单个主机上运行@roles任务
我有一个用Python 如何仅在单个主机上运行@roles任务,python,fabric,Python,Fabric,我有一个用@roles修饰的任务,我偶尔希望在一台主机上运行它(用于金丝雀测试部署) 缔约国指出: …除非在命令行上进行重写,否则将对[角色中]列出的主机执行my_func 但我无法让这里提到的“覆盖”功能正常工作。。。我试过: $ fab bogomips -H django@worker2 $ fab bogomips -R some-other-role 但它总是在decorator中提到的整个角色上执行 我错过了什么?如何覆盖运行@roles-修饰任务的位置?根据,这实际上是预期的行为
@roles
修饰的任务,我偶尔希望在一台主机上运行它(用于金丝雀测试部署)
缔约国指出:
…除非在命令行上进行重写,否则将对[角色中]列出的主机执行my_func
但我无法让这里提到的“覆盖”功能正常工作。。。我试过:
$ fab bogomips -H django@worker2
$ fab bogomips -R some-other-role
但它总是在decorator中提到的整个角色上执行
我错过了什么?如何覆盖运行
@roles
-修饰任务的位置?根据,这实际上是预期的行为,并且在此场景中必须使用稍微不同的语法
下面是一个不起作用的命令:
$ fab bogomips -R some-other-role # fabric ignores the -R values!
这是一个有效的版本:
$ fab bogomips:roles=some-other-role
问题是:
文件:
- 对于每个任务,命令行主机列表(fab mytask:host=host1)绝对覆盖其他所有内容李>
- 对于每个任务,装饰器指定的主机列表(@hosts('host1'))覆盖env变量李>
- 在fabfile(env.hosts=['host1'])中设置的全局指定主机列表可以覆盖命令行上设置的此类列表,但前提是您不小心(或希望它们这样做)
- 在命令行(--hosts=host1)上设置的全局指定主机列表将初始化env变量,但仅此而已
值得一提的是,我遇到了同样的行为。当任务被角色(“…”)修饰时,它似乎忽略了
--roles
标志。例如,使用--roles=NOT_A_ROLE
尝试您的代码,它应该可以正常工作而不会抛出任何错误。但是,从任务中删除“@roles(“…”)装饰程序,它将抛出一个错误(角色不存在)。但至少角色标志在这种情况下似乎起作用。绝对不是文档描述的行为。
$ fab bogomips:roles=some-other-role