saltstack編寫自定義模塊

saltstack遠程執行底層原理

Salt的底層通信是通過ZeroMQ完成的,採用了ZeroMQ的訂閱發佈模式(Pub和Sub),如下圖所示。

  簡單來講,Pub/Sub模式類似於廣播電臺,在訂閱發佈模式中Pub將消息發送到總線,所有的Sub收到來自總線的消息後,根據自己的訂閱條件來接收特定的消息。對應到Salt中就是master將事件發佈到消息總線,minion訂閱並監聽事件,然後minion會查看事件是否 ,通過正則匹配的各種方法去匹配minion。下面簡要說明下Saltmaster和minion的通信過程, Salt master啓動時會監聽兩個端口,默認是4505和4506。

4506的作用: Salt Master Ret接口,支持認證(auth)、文件服務、結果收集等功能;   
4505的作用:Salt Master pub接口,提供遠程執行命令發送功能。

  Salt minion啓動時從配置文件中獲取master的地址,如果爲域名,則進行解析。解析完成後,會連接master的4506(Ret接口)進行key認證。認證通過,會獲取到master的publish_port(默認是4505),然後連接publish_port訂閱來自master pub接口的任務。當master下發操作指令時,所有的minion都能接收到,然後minion會檢查本機是否匹配。如果匹配,則執行。執行完畢後,把結果發送到master的4506(Ret接口)由master進行處理,命令發送通信完全是異步的,並且命令包很小。此外,這些命令包通過maqpack進行序列化後數據會進一步壓縮(Maqpack是一種高效的二進制序列化格式),所以Salt的網絡負載非常低。

salt命令的結構語法

# salt '<target>' <function> [arguments]
salt 'salt-minion-1' cmd.run 'uptime'

 

 

匹配方式

1、通配符匹配
[root@salt-master ~]# salt '*' test.ping
[root@salt-master ~]# salt 'salt-minion01' test.ping
[root@salt-master ~]# salt '*01' test.ping
[root@salt-master ~]# salt 'salt-minion0[1|2]' test.ping
[root@salt-master ~]# salt 'salt-minion0[!1|2]' test.ping
[root@salt-master ~]# salt 'salt-minion0?' test.ping

2、列表匹配
[root@salt-master ~]# salt -L 'salt-minion01,salt-minion02' test.ping

3、正則匹配
[root@salt-master ~]# salt -E '^salt' test.ping
[root@salt-master ~]# salt -E '^salt.*2$' test.ping

4、IP匹配

[root@salt-master ~]# salt -S '192.168.1.32' test.ping
[root@salt-master ~]# salt -S '192.168.1.0/24' test.ping
5、複合匹配
[root@salt-master ~]# salt -C 'G@os:CentOS and [email protected]' test.ping

6、分組匹配
[root@salt-master ~]# vim /etc/salt/master
nodegroups:
  webserver: 'salt-minion01,salt-minion02'
  dbserver: 'salt-minion03
[root@salt-master ~]# systemctl restart salt-master
[root@salt-master ~]# salt -N 'webserver' test.ping
[root@salt-master ~]# salt -N 'dbserver' test.ping

7、Grains匹配
[root@salt-master ~]# salt -G 'os:CentOS' test.ping
[root@salt-master ~]# salt -G 'localhost:salt-minion02' test.ping
說明:上面這些匹配方式在top.sls文件中同樣適用。

常用模式:分組匹配和列表匹配

saltstack模塊介紹

 

模塊介紹:

test模塊

模塊名:test
功能:用於測試
[root@salt-master ~]# salt '*' test.ping

user模塊

參考:http://docs.saltstack.cn/ref/modules/all/salt.modules.useradd.html#module-salt.modules.useradd
# salt '*' user.add name <uid> <gid> <groups> <home> <shell>
[root@salt-master ~]# salt '*' user.add testuser

cmd模塊

模塊名:cmd
功能:實現遠程的命令行調用執行(默認具備root操作權限,使用時需評估風險)
#查看所有minion內存和磁盤使用情況
[root@salt-master ~]# salt '*' cmd.run "free -m"
[root@salt-master ~]# salt '*' cmd.run "df -h"

pkg模塊

模塊名:pkg
功能:軟件包狀態管理,會根據操作系統不同,選擇對應的安裝方式(如CentOS系統默認使用yum,Debian系統默認使用apt-get)

#安裝
[root@salt-master ~]# salt '*' pkg.install "vsftpd"
#卸載
[root@salt-master ~]# salt '*' pkg.remove "vsftpd"
#安裝最新版本
[root@salt-master ~]# salt '*' pkg.latest_version "vsftpd"
#更新軟件包
[root@salt-master ~]# salt '*' pkg.upgrade "vsftpd"

#查看幫助手冊
[root@salt-master ~]# salt '*' pkg

file模塊

模塊名:file
功能:被控主機常見的文件操作,包括文件讀寫、權限、查找、校驗

#校驗所有minion主機文件的加密信息,支持md5、sha1、sha224、shs256、sha384、sha512加密算法
[root@salt-master ~]# salt '*' file.get_sum /etc/passwd md5

#修改所有minion主機/etc/passwd文件的屬組、用戶權限、等價於chown root:root /etc/passwd
[root@salt-master ~]# salt '*' file.chown /etc/passwd root root

#獲取所有minion主機/etc/passwd的stats信息
[root@salt-master ~]# salt '*' file.stats /etc/passwd

#獲取所有minion主機/etc/passwd的權限mode,如755,644
[root@salt-master ~]# salt '*' file.get_mode /etc/passwd

#修改所有minion主機/etc/passwd的權限mode爲0644
[root@salt-master ~]# salt '*' file.set_mode /etc/passwd 0644

#在所有minion主機創建/opt/test目錄
[root@salt-master ~]# salt '*' file.mkdir /opt/test

#在所有minion主機穿件/tmp/test.conf文件
[root@salt-master ~]# salt '*' file.touch /tmp/test.conf

#將所有minion主機/tmp/test.conf文件追加內容'maxclient 100'
[root@salt-master ~]# salt '*' file.append /tmp/test.conf 'maxclient 100'

#刪除所有minion主機的/tmp/test.conf文件
[root@salt-master ~]# salt '*' file.remove /tmp/test.conf

補充:
# file.managed 下發文件,確保文件存在
# file.directory 建立目錄
# file.symlink 建立軟連接
# file.recurse 下發整個目錄
# file.tidied: 查找匹配的文件或目錄刪除,如果沒有不做操作


service模塊

模塊名:service
功能:被控主機程序包服務管理

#開啓(enable)禁用(disable)
salt '*' service.enable <service name>
salt '*' service.disabled <service name>

#reload、restart、start、stop、status操作
salt '*' service.reload <service name>
salt '*' service.restart <service name>
salt '*' service.start <service name>
salt '*' service.stop <service name>
salt '*' service.status <service name>

編寫自定義模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章