繁体   English   中英

结构,@ parallel和动态更改的主机

[英]Fabric, @parallel and dynamically changing hosts

我有一个脚本,该脚本启动EC2实例并将新实例的公共DNS作为列表传递给另一个尝试在其上部署代码和内容的类。

我的部署过程正在使用@parallel,以使每个主机的整个过程并行。
通过在部署程序类实例化时尝试设置env.hosts,我遇到了尚未克服的障碍。

似乎@parallel装饰器导致我的任务在设置env.hosts之前被分叉,因此这些任务不熟悉新的主机。

class Deployer(object):

"""Deploys workers code on given list of workers"""

   def __init__(self, hosts):
        env.hosts = hosts
        global pool_size
        pool_size = len(hosts)

   @parallel(pool_size=pool_size)
   def update_workers(self):
       sudo("aptitude update")
       #skip grub update.
       sudo("DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" dist-upgrade")

   @parallel(pool_size=pool_size)
   def copy_conf_to_worker(self, local_path):
       result = put(local_path,'/tmp/',use_sudo=False)

调用课程时:

deployer = Deployer(hosts)
deployer.update_workers()

我被提示输入主机:

2014-08-20 14:15:30,896 INFO 41 Going to deploy the next hosts: ['some-host.compute-1.amazonaws.com']
No hosts found. Please specify (single) host string for connection:

这是否可能,或者我应该考虑采取其他措施? 提前致谢。

我找不到解决方案,所以我使用了一种解决方法:
我将任务移到fab文件中:

fabfile.py

from fabric.api import *
# Fabric related conf
env.disable_known_hosts = False
env.reject_unknown_hosts = False
env.use_ssh_config = True
env.connection_attempts = 3
env.coloreize_errors = True
env.forward_agent = True
pool_size=len(env.hosts)

@parallel(pool_size=pool_size)
def update_workers():
    sudo("aptitude update")
    #skip grub update.
    sudo("DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" dist-upgrade")

@parallel(pool_size=pool_size)
def copy_conf_to_worker(local_path):
    env.host_string = env.host
    result = put(local_path,'/tmp/',use_sudo=False)

从代码中,我调用了fable.py:

def run_fabric_tasks(self, path_to_conf_file):
        cmd = 'fab update_workers copy_conf_to_worker:%s -H %s' % (path_to_conf_file, ",".join(self.hosts))
        result = local(cmd)
        deploy_workers(path_to_conf_file)
        return result

我知道这可能更优雅(参数/命令明智),但这只是对我有用的原始解决方案。 如果有什么更优雅的话,我想知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM