- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
关于fabric website ,给出这个例子:
from fabric.api import env
env.roledefs = {
'web': {
'hosts': ['www1', 'www2', 'www3'],
'foo': 'bar'
},
'dns': {
'hosts': ['ns1', 'ns2'],
'foo': 'baz'
}
}
据我从文档中得知,当在主机“www1”、“www2”、“www3”上执行时,此设置应该为 env dict 键“foo”提供值“bar”。我无法得到这种行为,尽管结构确实正确地确定了主机。示例 fabfile:
env.foo = 'WRONG'
@task()
def set_role():
env.roles.append('web')
@task()
def print_foo():
print env.foo
示例命令:
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.10.0 来解决。其次,此处定义的设置不会自动填充 env,但如果您使用任务来设置角色,则可以像这样设置:
@task
def set_role(role_name):
env.roles.append(role_name)
for k, v in env.roledefs[role_name].iteritems():
if k == 'hosts':
continue
env[k] = v
调用方式:
fab set_role:dns do_my_task
关于python - Fabric env.roledefs 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813995/
我查过this question但这并不能解决我的问题。 我想做这样的事情: @task def setEnv(environment): if environment == 'prod':
关于fabric website ,给出这个例子: from fabric.api import env env.roledefs = { 'web': { 'hosts':
当部署到生产环境时,我想在每台服务器之后暂停,以检查部署是否按计划在该服务器上进行,然后 Fabric 继续到下一台服务器。 这就是我定义角色的方式: def dev(): """Deve
类似于this question我一直在尝试访问 Fabric 提供的 env.roledefs 中的附加键: from fabric.api import env env.roledefs = {
我是一名优秀的程序员,十分优秀!