在fabric website上,给出了以下示例:
from fabric.api import env
env.roledefs = {
'web': {
'hosts': ['www1', 'www2', 'www3'],
'foo': 'bar'
},
'dns': {
'hosts': ['ns1', 'ns2'],
'foo': 'baz'
}
}
从文档中可以看出,当在主机www1、www2和ww3上执行时,这个设置应该给env dict键“foo”一个值“bar”。我无法得到这种行为,尽管fabric确实正确地确定了主机。fabfile示例:
^{pr2}$示例命令:
fab set_role print_foo
意外输出:
[www1] Executing task 'print_foo'
WRONG
[www2] Executing task 'print_foo'
WRONG
[www3] Executing task 'print_foo'
WRONG
Done.
我是不是误解了这个目的?我怎样才能让一个服务器看到一个密钥的不同值,而另一个服务器却没有太多麻烦呢?在
我使用的是fabric 1.10.0
只是一个答案:
我也被这个弄糊涂了。事实证明,在Fabric 1.11中可以访问: https://github.com/fabric/fabric/issues/1276
有两个问题,首先使用的fabric版本比基于字典的定义旧,因此它将密钥解释为主机名。可以通过升级到>;=fabric 1.10.0来解决此问题。第二,这里定义的设置不会自动填充env,但是如果您使用任务来设置角色,则可以这样设置:
调用方式:
^{pr2}$相关问题 更多 >
编程相关推荐