我使用的是 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 命令。