我正在寻找一种在多个服务器上执行任务的方法(是的,我知道roledefs-R和hosts-H选项),但是我需要一些额外的参数,比如每个主机的不同用户等等,我想保持它的整洁,因为我保持我的主机作为函数的定义(如堆栈的某个地方建议的那样),以便能够在一个服务器上执行任务像这样
def test():
user='root'
env.host='myapp-test.com'
我从修改开始环境任务但事实证明它们是由generator迭代的,通过context_manager访问它们只是为了查看(如fab docs)。在
我想保持“像主机一样的功能”,所以最后我修改了环境主机动态编写decorator,它根据当前的环境主机(将来将重写默认任务装饰器)下面的工作代码(出于安全原因,我不得不更改代码中的名称希望不会破坏任何功能):
^{pr2}$我可以运行组执行任务fab live_服务器pull_提交,也可以运行单个fab live1 pull_提交。在
我知道也可能会有类似于任务重复的情况,使用单独的服务器fab live1 pull_committees live2 pull_committees,但我相信fabric是为具有不同应用程序和用户路径的分布式系统编写的
所以我的问题是:有没有更简单的方法?像是织物内置的东西(还有带额外dict键的roledefs对我不起作用)?或者我没有看到一些织物的功能? 我想保留这个简单的单/多主机部署命令,比如:fab live_servers pull-committes,fab-test-pull-committes
与其使用当前的方法,不如考虑使用
host_string
作为ARG服务器字典的键,然后根据需要在任务中加载信息(包括对fabric环境的任何必需更新)。进行这种调整意味着你也应该能够让角色发挥作用。在例如:
另一个建议是考虑使用ssh配置文件(~/.ssh/config)为所有机器定义ssh别名。这会将所有主机/主机的字符串/用户名信息放在一个中心位置,这样您就可以用一个有意义的名称来引用主机,并简化ARG_服务器。在
^{pr2}$根据更传统的结构任务模型,您现在应该能够执行以下操作:
或角色(根据结构文档)。在
相关问题 更多 >
编程相关推荐