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