繁体   English   中英

在不同主机中构建不同的参数

[英]fabric different parameters in different hosts

请告诉我如何在具有相同命令BUT的主机列表中执行fab-script,并使用不同的参数值。 像这样的东西:

from fabric.api import *

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

并执行此。 我现在不怎么样。 例如:

fab -H host1,host2,host3命令:param1命令:param2命令:param3

Fabric还执行以下操作:

  • 命令:param1在host1上执行
  • 命令:param2在host2上执行
  • 命令:param3在host3上执行

我这样做的方法是参数化任务。 就我而言,它是关于开发,测试和生产的部署。

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

暂无
暂无

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

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