saltstack可以做类似于Fabric的东西吗?

时间:2016-01-20 20:02:52

标签: python fabric salt-stack devops


我是盐堆的新手。我安装了saltstack。我可以成功运行“sudo salt'*'test.ping”。 我正在尝试用盐来代替Fabric。我在Fabric中有一些函数/过程,我想要做同样的事情。

def commit():
    message = raw_input("Enter a git commit message: ")
    local("git add . && git commit -am '{}'".format(message))

def push():
    local("git push origin master")

def prepare():
    commit()
    push()
  1. 可以用Salt代替Fabric吗?
  2. 我应该如何开始?我应该修改或创建哪个文件来定义这些执行?
  3. 我在哪里放置此定义文件?
  4. 如何让minion运行定义的函数,例如“提交”?
  5. 感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以将Salt用于配置管理和临时编排任务。您正在寻找的是execution modules。这些是简单的Python文件,您可以将它们放在主文件的<file_root>/_modules目录中(通常类似于/srv/salt/_modules)。它们将由主人自动接收并按需分发给小兵。然后你可以在一个小兵身上调用它们(使用主人的salt '<minion-id>'或使用小兵上的salt-call

在您的情况下,您可以在modules目录中创建一个文件deploy.py,其中包含以下内容:

#!/usr/bin/python

def commit(message, cwd):
    __salt__['cmd.run']("git add . && git commit -am '{}'".format(message),
                        cwd=cwd)

def push(cwd):
    __salt__['cmd.run']("git push origin master",
                        cwd=cwd)

def prepare(message, cwd):
    commit(message=message, cwd=cwd)
    push(cwd=cwd)

我在我的示例中使用的__salt__['cmd.run']函数是Salt提供的众多已内置执行模块之一。

执行模块需要放在master上,但是会在minion上运行。除了使用像cmd.run这样的现有执行模块之外,您还可以释放其中的完整Python功能。

然后您可以从Salt master中调用此脚本:

$ salt 'minion-id' deploy.prepare message='Some commit message' cwd=/path/to/git

或者,您也可以直接在minion上调用它:

$ salt-call deploy.prepare message='Some commit message' cwd=/path/to/git