Salt-Stack 将文件 python API 从 salt master 复制到特定的 minion

Salt-Stack 将文件 python API 从 salt master 复制到特定的 minion

我使用的是 CentOS6.5。通过在 master 上运行以下命令,我可以成功地将文件从 master 复制到 id=minionId 的 minion:

salt minionId cp.get_file salt://fileInMaster.txt /home/johnDoe/fileNowInMinion.txt ##run on master 

如果我必须使用 Python 完成同样的事情,我该怎么做?以下此链接我发现的唯一方法是通过在 minion 上运行脚本将文件从 master 复制到 minion。我想在 master 上运行一个 python 脚本,将文件从 master 复制到具有给定 ID 的特定 minion

答案1

使用 Python 客户端 API,或者安装并运行公开 REST API 的 salt-api。我将详细介绍 Python 客户端 API:http://salt.readthedocs.org/en/v2014.1.13/ref/clients/index.html

脚本 totin.py,将 /srv/salt/vim/vimrc.local 复制到 tin:/tmp/vimrc.local

#!/usr/bin/env python
import json
import salt.client

minion = 'tin'
source = 'salt://vim/vimrc.local'
target = '/tmp/vimrc.local'

local = salt.client.LocalClient()
ret = local.cmd('tin', 'cp.get_file', [source, target])
print json.dumps(ret, indent=2)

测试:

$ sudo python totin.py 
{
  "tin": "/tmp/vimrc.local"
}

核实:

$ sudo salt tin cmd.run 'ls -l /tmp/vimrc.local'
tin:
    -rw-r--r-- 1 root root 652 Dec  4 20:45 /tmp/vimrc.local

答案2

您可以使用 pexpect 或某些 shell 调用模块(os.system、subprocess.call 等)在 python 中包装您的 salt 命令。

相关内容