我目前正在尝试自动化部署过程,涉及3台不同的机器:
下面是我想使用Python的Fabric库执行的场景(我是新来的):
def deploy():
execute(taskA, hosts=[hostA])
execute(taskB, hosts=[hostB])
execute(taskC, hosts=[hostC])
我尝试过如下设置变量 env.passwords
:
但它会使SSH连接挂起。在
我目前的解决方法是在每次调用execute
之前修改变量env.user
和env.password
(我也可以在taskA、taskB和taskC的开头这样做)。我真的不觉得那很优雅,完全脱离了布料的精神。在
如果有人遇到这种情况,在尝试使用env.passwords
dict时发现他/她有一个挂起的SSH连接,那么我就是你的了!当然,如果有人已经成功地实现了更优雅的多主机密码处理,我很乐意听到任何提示。在
正如我在上面的评论中所说,使用use-ssh\u-config变量效果很好。但是,如果您使用密码进行SSH,Fabric当前无法处理每主机/每个用户/每个密码的连接(这是正常的,因为使用SSH密码被认为是不安全的)
这就是为什么我深入研究了Fabric的源代码,并添加了新的“特性”。Here是我的存储库,如果你想看看的话。基本上,我使用了
env.roledefs
变量,它将角色作为字典条目列出。每个角色都有一个主机、用户和密码的列表。现在,如果要在一个或多个主机(具有不同的用户名和密码)中执行任务,有两种方法可以执行:@complete_roles('role1', 'role2')
注释任务execute(task, complete_roles=['role1', 'role2'])
只要确保在
env.roledefs
中有'role1'和'role2'作为键如果你想知道更多关于我的贡献的信息,只需检查两个最新的提交。我知道,我的代码不是最干净的。。。在
最好将您的ssh详细信息保存在
~/.ssh/config
中,并让Fabric使用它。看到了吗http://docs.fabfile.org/en/1.4.0/usage/execution.html#ssh-config
https://stackoverflow.com/a/9685171
相关问题 更多 >
编程相关推荐