不同主机上Fabric的不同参数

4
请告诉我如何在一组主机上执行fab脚本,使用相同的命令但参数值不同。 类似这样:
from fabric.api import *

def command(parameter):
        run ("command%s" % parameter)

我不知道如何执行这个命令。例如:

fab -H host1,host2,host3 command:param1 command:param2 command:param3

Fabric 的执行过程如下:

  • 在 host1 上执行 command:param1
  • 在 host2 上执行 command:param2
  • 在 host3 上执行 command:param3
1个回答

3
我处理这个问题的方式是将任务参数化。在我的情况下,主要是关于部署到开发、测试和生产环境。
fabfile.py:
from ConfigParser import ConfigParser


from fabric.tasks import Task
from fabric.api import execute, task


@task()
def build(**options):
    """Your build function"""


class Deploy(Task):

    name = "dev"

    def __init__(self, *args, **kwargs):
        super(Deploy, self).__init__(*args, **kwargs)

        self.options = kwargs.get("options", {})

    def run(self, **kwargs):
        options = self.options.copy()
        options.update(**kwargs)
        return execute(build, **options)


config = ConfigParser()
config.read("deploy.ini")

sections = [
    section
    for section in config.sections()
    if section != "globals" and ":" not in section
]

for section in sections:
    options = {"name": section}
    options.update(dict(config.items("globals")))
    options.update(dict(config.items(section)))

    t = Deploy(name=section, options=options)
    setattr(t, "__doc__", "Deploy {0:s} instance".format(section))
    globals()[section] = task

deploy.ini:

[globals]
repo = https://github.com/organization/repo

[dev]
dev = yes
host = 192.168.0.1
domain = app.local

[prod]
version = 1.0
host = 192.168.0.2
domain = app.mydomain.tld

希望这足够明显,您可以通过编辑deploy.ini配置文件来配置各种部署,并随后自动创建与正确参数匹配的新任务。
如果您更喜欢YAMLJSON,则可以将此模式适应为相应的格式。

谢谢!这正是我需要的。 - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接