Salt提供了非常丰富的功能模块,涉及操作系统的基础功能、常用工具支持等,可以通过sys模块列出当前版本支持的模块。
<code>salt </code><code>'*'</code> <code>sys.list_modules</code>
<code>781915e2:</code>
<code> </code><code>- acl</code>
<code> </code><code>- aliases</code>
<code> </code><code>- alternatives</code>
<code> </code><code>- apache</code>
<code> </code><code>- archive</code>
<code> </code><code>- artifactory</code>
<code> </code><code>- at</code>
<code> </code><code>- blockdev</code>
<code> </code><code>- btrfs</code>
<code> </code><code>- buildout</code>
<code> </code><code>- cloud</code>
<code> </code><code>- cmd</code>
<code>......</code>
API的原理是通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现的。
API实现test.ping示例:
<code>>>> </code><code>import</code> <code>salt.client</code>
<code>>>> client </code><code>=</code> <code>salt.client.LocalClient()</code>
<code>>>> ret </code><code>=</code> <code>client.cmd(</code><code>'*'</code><code>,</code><code>'test.ping'</code><code>)</code>
<code>>>> </code><code>print</code> <code>ret</code>
<code>{</code><code>'781915e2'</code><code>: </code><code>True</code><code>} </code><code>#结果以一个标准的Python字典形式的字符串返回,可以通过eval()函数转换成Python的字典类型,方便后续的业务逻辑处理</code>
(1)Archive模块
功能:实现系统层面的压缩包调用,支持gunzip、gzip、rar、tar、unrar、unzip等。
示例:
<code>salt </code><code>'781915e2'</code> <code>cmd.run </code><code>'mkdir /opt/test'</code> <code>#为被控端minion创建/opt/test目录</code>
<code> </code>
<code>scp</code> <code>test</code><code>.txt.gz root@kurol:</code><code>/opt/test</code> <code>#将测试的gzip文件拷贝给被控端minion</code>
<code>salt </code><code>'781915e2'</code> <code>archive.gunzip </code><code>/opt/test/test</code><code>.txt.gz </code><code>#解压被控端/opt/test/test.txt.gz文件</code>
<code>salt </code><code>'781915e2'</code> <code>archive.</code><code>gzip</code> <code>/opt/test/test</code><code>.txt </code><code>#压缩</code>
API调用:
<code>>>> client.cmd(</code><code>'*'</code><code>,</code><code>'archive.gunzip'</code><code>,[</code><code>'/opt/test/test.txt.gz'</code><code>])</code>
<code>{</code><code>'781915e2'</code><code>: []}</code>
(2)cmd模块
功能:实现远程的命令行调用执行(默认具备root操作权限,使用时需评估风险)
<code>[root@server ~]</code><code># salt '*' cmd.run "free -m"</code>
<code> </code><code>total used </code><code>free</code> <code>shared buffers cached</code>
<code> </code><code>Mem: 996 834 162 0 121 252</code>
<code> </code><code>-/+ buffers</code><code>/cache</code><code>: 460 536</code>
<code> </code><code>Swap: 0 0 0</code>
API调用:
<code>client.cmd(</code><code>'*'</code><code>,</code><code>'cmd.run'</code><code>,['free </code><code>-</code><code>m])</code>
(3)cp模块
功能:实现远程文件、目录的复制,以及下载URL文件等操作。
<code>salt </code><code>'*'</code> <code>cp</code><code>.cache_local_file </code><code>/etc/hosts</code> <code>#将指定被控主机的/etc/hosts文件复制到被控主机本地的salt cache目录(/var/cache/salt/minion/localfiles)</code>
<code> </code><code>/var/cache/salt/minion/localfiles/etc/hosts</code>
<code> </code>
<code>salt </code><code>'*'</code> <code>cp</code><code>.get_dir salt:</code><code>//path/to/dir/</code> <code>/minion/dest</code> <code>#将主服务器file_roots指定位置下的目录复制到被控主机,salt:// 第一个‘/’为 配置文件base指定的根,第二个为路径分割符</code>
<code>salt </code><code>'*'</code> <code>cp</code><code>.get_file salt:</code><code>//path/to/file</code> <code>/minion/dest</code> <code>#将主服务器file_roots指定位置下的文件复制到被控主机</code>
<code>salt </code><code>'*'</code> <code>cp</code><code>.get_url http:</code><code>//www</code><code>.baidu.com </code><code>/tmp/index</code><code>.html </code><code>#下载URL内容到被控主机指定位置</code>
<code> </code><code>/tmp/index</code><code>.html</code>
<code>client.cmd(</code><code>'*'</code><code>,</code><code>'cp.get_file'</code><code>,[</code><code>'salt://path/to/file '</code><code>,</code><code>' /minion/dest'</code><code>])</code>
(4)cron模块
功能:实现被控主机的crontab操作
<code>salt </code><code>'*'</code> <code>cron.raw_cron root </code><code>#查看指定被控主机、root用户的crontab清单</code>
<code> </code><code>#secu-tcs-agent monitor, install at Sat Mar 18 15:55:40 CST 2017</code>
<code> </code><code>* * * * * /usr/local/sa/agent/secu-tcs-agent-mon-safe.sh /usr/local/sa/agent > /dev/null 2>&1</code>
<code> </code><code>*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &</code>
<code> </code><code>*/20 * * * * /usr/sbin/ntpdate ntpupdate.tencentyun.com >/dev/null &</code>
<code> </code><code>30 2 * * * /www/server/panel/certbot-auto renew >> /www/server/panel/logs/certbot.log</code>
<code>salt </code><code>'*'</code> <code>cron.set_job root </code><code>'*'</code> <code>'*'</code> <code>'*'</code> <code>'*'</code> <code>1 /usr/local/weekly </code><code>#为指定的被控主机、root用户添加/usr/local/weekly任务作业</code>
<code> </code><code>new</code>
<code>salt </code><code>'789880e2'</code> <code>cron.rm_job root /usr/local/weekly </code><code>#删除指定的被控主机、root用户crontab的/usr/local/weekly任务作业</code>
<code> </code><code>removed</code>
<code>client.cmd(</code><code>'*'</code><code>,</code><code>'cron.set_job,['</code><code>root</code><code>','</code><code>*</code><code>','</code><code>*</code><code>','</code><code>*</code><code>','</code><code>*</code><code>','</code><code>*</code><code>','</code><code>/</code><code>usr</code><code>/</code><code>echo'])</code>
本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1934033,如需转载请自行联系原作者