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,如需轉載請自行聯系原作者