如何在Fabric中动态编辑env.roledefs?

狐狸

我已经检查了这个问题,但不能解决我的问题。

我想做类似的事情:

@task
def setEnv(environment):
    if environment == 'prod':
        env.roledefs['nginx'] = [ 'www@tnginx01', 'www@tnginx02' ]
        env.roledefs['middle'] = [ 'www@tmiddle01', 'www@tmiddle02' ]
    elif environment == 'preprod':
        env.roledefs['nginx'] = [ 'www@pnginx01', 'www@pnginx02' ]
        env.roledefs['middle'] = [ 'www@pmiddle01', 'www@pmiddle02' ]
    else:
        puts(red("This environment doesn't exist. Possible values are 'preprod' and 'prod'", True))
        sys.exit()

    env.first_middle = env.roledefs['middle'][0]

@task
@roles(env.first_middle)
def deploy():
    run('pwd')

但是,似乎无法在Fabfile加载到内存后更改env.roledefs的值。当您尝试运行时fab setEnv:prod deploy,它将不起作用:

找不到主机。请指定(单个)主机字符串进行连接

有谁知道这是怎么做到的吗?请注意,我不能使用roledefs来表示环境。我已经使用roledefs来存储属于同一“集群”的服务器,并且每个环境都有几个群集和多个服务器。

狐狸

我刚刚找到解决问题的方法。

关键是不能在Fabric任务中编辑env.roledefs因此,对其进行代码编辑必须位于全局范围的开始

if env.get('env') == 'prod':
    env.roledefs['nginx'] = [ 'www@tnginx01', 'www@tnginx02' ]
    env.roledefs['middle'] = [ 'www@tmiddle01', 'www@tmiddle02' ]
elif env.get('env') == 'preprod':
    env.roledefs['nginx'] = [ 'www@pnginx01', 'www@pnginx02' ]
    env.roledefs['middle'] = [ 'www@pmiddle01', 'www@pmiddle02' ]
else:
    puts(red("This environment doesn't exist. Possible values are 'preprod' and 'prod'", True))
    sys.exit()

    env.first_middle = env.roledefs['middle'][0]

@task
@roles(env.first_middle)
def deploy():
    run('pwd')

然后我像这样调用fabfile:

fab --set env=preprod deploy

我的答案受此链接启发,使我有了这个主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Fabric中动态编辑env.roledefs?

来自分类Dev

如何在PhpStorm中编辑.env文件?

来自分类Dev

如何在c#中编辑匿名动态列表

来自分类Dev

如何在Android中动态创建的编辑文本单击时获取编辑文本的ID?

来自分类Dev

如何在Fabric.js中动态缩放对象以达到画布大小

来自分类Dev

如何在运行docker run命令时在docker文件中动态传递ENV值?

来自分类Dev

如何在正在运行的Docker容器中动态编辑文件

来自分类Dev

如何在Vue中创建动态编辑器表单组件

来自分类Dev

如何在共享的首选项中存储动态添加的编辑文本的值

来自分类Dev

如何在 jquery 和 HTML 中动态编辑和更新表格行

来自分类Dev

使用数组对象时如何在bot框架编辑器中传递动态变量值

来自分类Dev

如何在Dockerfile中合并ENV语句?

来自分类Dev

如何在 jquery 中访问 .env 文件?

来自分类Dev

如何在PHP中编辑文件的JSON?

来自分类Dev

如何在扫描的.jpeg中编辑文本?

来自分类Dev

如何在Laravel集合中编辑项目

来自分类Dev

如何在R中编辑多人对象

来自分类Dev

如何在设计中编辑错误消息

来自分类Dev

如何在PyCharm中编辑提交消息?

来自分类Dev

如何在R中编辑姓氏?

来自分类Dev

如何在CamanJS中编辑远程图像

来自分类Dev

如何在代码中编辑约束

来自分类Dev

如何在Nano终端中编辑文件?

来自分类Dev

如何在WordPress中编辑单个页面

来自分类Dev

如何在PSQL中编辑函数

来自分类Dev

您如何在iptables中编辑规则?

来自分类Dev

如何在JavaScript中编辑输入值?

来自分类Dev

如何在Java中编辑.yml文件?

来自分类Dev

如何在QML中编辑QQmlListProperty

Related 相关文章

热门标签

归档