Saltstack自動化操做記錄(2)-配置使用

 

以前梳理了Saltstack自動化操做記錄(1)-環境部署,下面說說saltstack配置及模塊使用:html

爲了試驗效果,再追加一臺被控制端minion機器192.168.1.118
須要在master控制端機器上作好主機名映射關係node

[root@linux-node1 ~]# cat /etc/hosts
127.0.0.1   localhost wutao localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.101  linux-node1 
192.168.1.102  linux-node2
192.168.1.118  linux-node3

配置新追加的這臺minion機器(配置步驟和以前同樣)
[root@linux-node3 ~]# cat /etc/salt/minion|grep -v "^#"|grep -v "^$"python

master: 192.168.1.101
id: minion-192-168-1-118

[root@linux-node3 ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon: [ OK ]linux

在master控制端查看:nginx

[root@linux-node1 ~]# salt-key -L
Accepted Keys:
minion-192-168-1-102
minion-192-168-1-118
Unaccepted Keys:
Rejected Keys:

                                    下面針對saltstack在運維中的常規操做作一詳細解析:                                    web

1)利用Saltstack遠程執行命令
saltstack的一個比較突出優點就是具有執行遠程命令的功能。操做方法與func類似,能夠幫助運維人員完成集中化的操做平臺。
命令格式:
slat '<操做目標>' <方法> [參數]正則表達式

以下示例:
查看被控制機的內存使用狀況express

[root@linux-node1 ~]# salt '*' cmd.run 'free -m'
minion-192-168-1-102:
                 total       used       free     shared    buffers     cached
    Mem:          3832       3639        193          0        223       1552
    -/+ buffers/cache:       1863       1969
    Swap:         1535         13       1522
minion-192-168-1-118:
                 total       used       free     shared    buffers     cached
    Mem:          3832       3680        152          0        175       1958
    -/+ buffers/cache:       1545       2286
    Swap:         1535         38       1497

其中針對<操做目標>,saltstack提供了多種方法對被控制端(id)進行過濾。下面列舉經常使用的具體參數:
a)-E:--pcre      經過正則表達式進行匹配。
示例:查看被控制端minion-192-168-字符開頭的主機id名是否連通。apache

[root@linux-node1 ~]# salt -E '^minion-192-168*' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

b)-L:--list        以主機id名列表的形式進行過濾,格式與Python的列表類似,即不一樣主機id名稱使用逗號分隔。
示例:獲取主機id名爲minion-192-168-1-10二、minion-192-168-1-118;獲取完整操做系統發行版名稱。vim

[root@linux-node1 ~]# salt -L 'minion-192-168-1-102,minion-192-168-1-118' grains.item osfullname
minion-192-168-1-102:
    ----------
    osfullname:
        CentOS
minion-192-168-1-118:
    ----------
    osfullname:
        CentOS

c)-G:--grain     根據被控主機的grains信息(grains是saltstack重要組件之一,重要做用是收集被控主機的基本系統信息)進行匹配過濾,格式爲'<grain value>:<glob expression>'
好比過濾內核爲Linux的主機能夠寫成'kernel:Linux',若是同時須要正則表達式的支持能夠切成--grain-pcre參數來執行。
示例:獲取主機發行版本爲6.8的Python版本號

[root@linux-node1 ~]# salt -G 'osrelease:6.8' cmd.run 'python -V'
minion-192-168-1-102:
    Python 2.7.8
minion-192-168-1-118:
    Python 2.7.8

d)-I:--pillar       根據被控主機的pillar(做用是定義與被控主機相關的任何數據,定義好的數據能夠被其餘組件使用)信息進行過濾匹配,格式爲'對象名稱:對象值',好比過濾全部具有'apache:httpd' pillar值的主機。
示例:探測具備"nginx:root:/data"信息的主機連通性

[root@linux-node1 ~]# salt -I 'nginx:root:/data' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

其中pillar屬性配置文件以下(後面會講到)

nginx:
    root:/data

e)-N:--nodegroup       根據主控端master配置文件中的分組名稱進行過濾。
以下配置的組信息(主機信息支持正則表達式、grain、條件運算符等),一般根據業務類型劃分,不一樣業務具有相同的特色,包括部署環境、應用平臺、配置文件等。

[root@linux-node1 ~]# vim /etc/salt/master
.......
nodegroups:
  web1group: 'L@minion-192-168-1-102,minion-192-168-1-118'          //前面空兩格,冒號後面空一格
  web2group: 'L@minion-192-168-1-102'

其中:
L@    表示後面的主機id格式爲列表,即主機id以逗號隔開;
G@   表示以grain格式描述;
S@   表示以ip子網或地址格式描述
示例:探測web1group(或web2group)被控主機的連通性

[root@linux-node1 ~]# salt -N web1group test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -N web2group test.ping
minion-192-168-1-102:
    True

f)-C:--compound        根據條件運算符not、and、or去匹配不一樣規則的主機信息。
示例:探測minion-192開頭而且操做系統爲Centos的主機連通性。

[root@linux-node1 ~]# salt -C 'E@^minion-192-168* and G@os:Centos' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

其中:
not語句不能做爲第一個條件執行,不過能夠經過如下方法來規避:
示例:探測非192-168-1-102開頭的主機連通性

[root@linux-node1 ~]# salt -C '* and not E@^192-168-1-102*' test.ping
minion-192-168-1-118:
    True
minion-192-168-1-102:
    True

g)-S:--ipcidr        根據被控主機的ip地址或ip子網進行匹配。
示例:

[root@linux-node1 ~]# salt -S 192.168.0.0/16 test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -S 192.168.1.0/24 test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -S 192.168.1.118 test.ping
minion-192-168-1-118:
    True

2)Saltstack經常使用模塊及API
saltstack提供了很是豐富的功能模塊,涉及操做系統的基礎功能、經常使用工具支持等,更多模塊信息請見:https://docs.saltstack.com/en/latest/ref/modules/all/index.html
固然,也能夠經過sys模塊列出當前版本支持的全部模塊

[root@linux-node1 ~]# salt '*' sys.list_modules
minion-192-168-1-102:
    - acl
    - aliases
    - alternatives
    - archive
    - blockdev
    - buildout
    - cloud
    - cmd
    - composer
    - config
    - cp
    - cron
    .......

接下來抽取出常見的模塊進行介紹,並列舉模塊API的用法。
API原理:經過調用master client模塊,實例化一個LocalClient對象,再調用cmd()方法來實現的。
以下是API實現test.ping的示例:

import salt.client  
client = salt.client.LocalClient()
ret = client.cmd('*','test.ping')
print ret

結果以一個標準的python字典形式的字符串返回嗎,能夠經過eval()函數轉換成python的字典類型,方便後續的業務邏輯處理,程序運行結果以下:

{'minion-192-168-1-102': True, 'minion-192-168-1-118': True}

截圖以下:

-----------------------------------------------------------------------------------------------------------------
注意:將字符字典轉換成python的字典類型,推薦使用ast模塊的literal_eval()方法,
能夠過濾表達式中的惡意函數。
-----------------------------------------------------------------------------------------------------------------

a)Archive模塊
功能:實現系統層面的壓縮包調用,支持gunzip、gzip、rar、tar、unrar、unzip等。
示例1:採用gunzip解壓被控制機的/tmp/wangshibo.gz包

[root@linux-node1 ~]# salt '*' archive.gunzip /tmp/wangshibo.gz
minion-192-168-1-102:
minion-192-168-1-118:

示例2:採用gzip壓縮被控制機的/opt/test.txt文件

[root@linux-node1 ~]# salt '*' archive.gzip /opt/test.txt
minion-192-168-1-102:
minion-192-168-1-118:

到被控制機上查看是否作了壓縮:
192.168.1.102:

[root@linux-node2 ~]# ll /opt/test.txt.gz 
-rw-r--r--. 1 root root 29 Feb 13 22:09 /opt/test.txt.gz

192.168.1.118:

[root@linux-node3 ~]# ll /opt/test.txt.gz 
-rw-r--r--. 1 root root 29 Feb 13 22:09 /opt/test.txt.gz

其餘示例:

將被控制機的/mnt/nginx-1.9.7.tar.gz包解壓,解壓默認放到被控制機的當前用戶家目錄(即/root)路徑下(注意:archive.tar後面的參數前不能加-)
[root@linux-node1 ~]# salt '*' archive.tar zxf /mnt/nginx-1.9.7.tar.gz
minion-192-168-1-118:
minion-192-168-1-102:

到其中一臺被控制機上檢查:
[root@linux-node2 ~]# cd /root/
[root@linux-node2 ~]# ls
nginx-1.9.7

將被控制機的/mnt/heihei.tar.bz2包解壓,解壓默認放到被控制機的當前用戶家目錄(即/root)路徑下
[root@linux-node1 ~]# salt '*' archive.tar jxf /mnt/heihei.tar.bz2
minion-192-168-1-102:
minion-192-168-1-118:

------------------------------------------------------
將被控制機的/mnt/test打包到/mnt下的test.tar.gz
[root@linux-node1 ~]# salt '*' archive.tar zcf /mnt/test.tar.gz /mnt/test
minion-192-168-1-118:
    - tar: Removing leading `/' from member names
minion-192-168-1-102:
    - tar: Removing leading `/' from member names

將被控制機的/mnt/huihui打包到/opt下的huihui.tar.bz2
[root@linux-node1 ~]# salt '*' archive.tar jcf /opt/test.huihui.bz2 /mnt/huihui
minion-192-168-1-102:
    - tar: Removing leading `/' from member names
minion-192-168-1-118:
    - tar: Removing leading `/' from member names

針對上面經過archive模板壓縮後的包再進行解壓縮,發現解壓縮後的文件路徑會帶有它原來的上級目錄!以下:
[root@linux-node1 ~]# salt '*' archive.tar zxf /mnt/test.tar.gz 
minion-192-168-1-102:
minion-192-168-1-118:
[root@linux-node1 ~]# salt '*' archive.tar jxf /opt/test.huihui.bz2 
minion-192-168-1-102:
minion-192-168-1-118:

到其中一臺被控制機上檢查:
[root@linux-node2 ~]# cd /root/
[root@linux-node2 ~]# ls
mnt
[root@linux-node2 ~]# ls mnt/
huihui  test
相關文章
相關標籤/搜索