saltstack狀態文件設定:

編輯/etc/salt/master,修改其中關于“設置文件的目錄”的設置:

wKiom1ioU9yjVAQbAAASdBuXfz0630.png

說明:注意語法格式,頂格/冒號/兩個空格

state_top:?top.sls
#?The?state?system?uses?a?"top"?file?to?tell?the?minions?what?environment?to
#?use?and?what?modules?to?use.?The?state_top?file?is?defined?relative?to?the
#?root?of?the?base?environment?as?defined?in?"File?Server?settings"?below.
#state_top:?top.sls
[root@master?~]#?mkdir?-p?/etc/salt/states
[root@master?~]#?vim?/etc/salt/states/top.sls
[root@master?~]#?sed?-i?'329s/#//'?/etc/salt/master?
state_top:?top.sls
說明:將329行的注釋取消

進入base環境下,并配置下top.sls

[root@master?~]#?cd?/etc/salt/states/
[root@master?states]#?mkdir?-p?init
[root@master?states]#?mkdir?-p?prod
[root@master?states]#?vim?top.sls
[root@master?states]#?cat?top.sls?
base:'node01.saltstack.com':-init.pkg

說明:base是指定一個名稱,init為文件夾的名稱,pkg為pkg.sls

[root@master?states]#?ll
總用量?12
drwxr-xr-x?2?root?root?4096?2月??15?14:16?init
drwxr-xr-x?2?root?root?4096?2月??15?14:16?prod
-rw-r--r--?1?root?root???46?2月??15?14:17?top.sls
[root@master?states]#?cd?init/
[root@master?init]#?vim?pkg.sls
[root@master?init]#?cat?pkg.sls?
pkg.init:pkg.installed:-?names:-?lrzsz-?mtr-?nmap

案例1:使用salt初始化系統模塊:

[root@master?init]#?salt?'*'?state.sls?init.pkg
node01.saltstack.com:
----------ID:?pkg.initFunction:?pkg.installedName:?mtrResult:?TrueComment:?Package?mtr?is?already?installed.Started:?14:56:02.574416Duration:?11389.014?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?nmapResult:?TrueComment:?Package?nmap?is?already?installed.Started:?14:56:13.963968Duration:?3.619?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?lrzszResult:?TrueComment:?Package?lrzsz?is?already?installed.Started:?14:56:13.967979Duration:?1.042?msChanges:???
Summary
------------
Succeeded:?3
Failed:????0
------------
Total?states?run:?????3

案例2:saltstack修改內核參數:

[root@master?~]#?cd?/etc/salt/states/init/
[root@master?init]#?tree
.
└──?pkg.sls
0?directories,?1?file
[root@master?init]#?mkdir?-p?files
[root@master?init]#?cd?files/
[root@master?init]#?vim?limit.sls
limit-conf-config:file.managed:-?name:?/etc/security/limits.conf-?source:?salt://init/files/limits.conf-?user:?root-?group:?root-?mode:?644
[root@master?files]#?cd?/etc/security/
[root@master?security]#?ls
access.conf???????console.perms????limits.d????????opasswd???????????time.conf
chroot.conf???????console.perms.d??namespace.conf??pam_env.conf
console.apps??????group.conf???????namespace.d?????pam_winbind.conf
console.handlers??limits.conf??????namespace.init??sepermit.conf
[root@master?security]#?cp?limits.conf?/etc/salt/states/init/files/
[root@master?files]#?vim?limits.conf?
*???????????????soft????core????????????0
*???????????????hard????rss?????????????10000
[root@master?states]#?pwd
/etc/salt/states
注意:要將新的模塊添加到top.sls中,不然會有其它報錯
[root@master?states]#?cat?top.sls?
base:'*':-?init.pkg-?init.limit
[root@master?init]#?salt?'*'?state.highstate
node01.saltstack.com:
----------ID:?pkg.initFunction:?pkg.installedName:?mtrResult:?TrueComment:?Package?mtr?is?already?installed.Started:?17:42:55.479576Duration:?7120.831?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?nmapResult:?TrueComment:?Package?nmap?is?already?installed.Started:?17:43:02.601307Duration:?2.278?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?lrzszResult:?TrueComment:?Package?lrzsz?is?already?installed.Started:?17:43:02.603841Duration:?0.952?msChanges:???
----------ID:?limit-conf-configFunction:?file.managedName:?/etc/security/limits.confResult:?TrueComment:?File?/etc/security/limits.conf?updatedStarted:?17:43:02.612678Duration:?19.256?msChanges:???----------diff:---??+++??@@?-39,8?+39,8?@@#<domain>??????<type>??<item>?????????<value>#-#*???????????????soft????core????????????0-#*???????????????hard????rss?????????????10000+*???????????????soft????core????????????0+*???????????????hard????rss?????????????10000#@student????????hard????nproc???????????20#@faculty????????soft????nproc???????????20#@faculty????????hard????nproc???????????50
Summary
------------
Succeeded:?4?(changed=1)
Failed:????0
------------
Total?states?run:?????4
客戶端測試:
[root@node01?security]#?egrep?-v?'#|^$'?limits.conf?
*???????????????soft????core????????????0
*???????????????hard????rss?????????????10000


案例3:同步某個計劃任務

最近發現很多服務器上沒有配置ntp服務器指向,簡單寫個計劃任務,然后通過狀態文件下發
思路:
a)準備好需要下發的文件
b)編輯sls文件
c)修改top.sls,添加信息進去
[root@master?~]#?cat?/var/spool/cron/root?
*/5?*?*?*?*?/usr/sbin/ntpdate?-u?202.120.2.101>/dev/null?2>&1
[root@master?~]#?cd?/etc/salt/states/
[root@master?states]#?ls
init??prod??top.sls
[root@master?states]#?cd?init/
[root@master?init]#?ls
files??limit.sls??pkg.sls
[root@master?init]#?cp?limit.sls?ntp-crontab.sls
[root@master?init]#?ls
files??limit.sls??ntp-crontab.sls??pkg.sls
[root@master?init]#?cd?files/
[root@master?files]#?cp?/var/spool/cron/root?.
[root@master?files]#?pwd
/etc/salt/states/init/files
[root@master?files]#?cat?root?
*/5?*?*?*?*?/usr/sbin/ntpdate?-u?202.120.2.101>/dev/null?2>&1
[root@master?files]#?mv?root?ntp-crontab.conf
[root@master?files]#?cat?ntp-crontab.conf?
*/5?*?*?*?*?/usr/sbin/ntpdate?-u?202.120.2.101>/dev/null?2>&1
[root@master?files]#?cd?..
[root@master?init]#?ls
files??limit.sls??ntp-crontab.sls??pkg.sls
[root@master?~]#?cat?/etc/salt/states/init/ntp-crontab.sls?
ntp-crontab-config:file.managed:-?name:?/var/spool/cron/root-?source:?salt://init/files/ntp-crontab.conf-?user:?root-?group:?root-?mode:?644
計劃任務更新執行結果:
[root@master?init]#?salt?'*'?state.highstate
node01.saltstack.com:
----------ID:?pkg.initFunction:?pkg.installedName:?mtrResult:?TrueComment:?Package?mtr?is?already?installed.Started:?21:09:06.608808Duration:?4265.514?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?nmapResult:?TrueComment:?Package?nmap?is?already?installed.Started:?21:09:10.874647Duration:?0.685?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?lrzszResult:?TrueComment:?Package?lrzsz?is?already?installed.Started:?21:09:10.875446Duration:?0.583?msChanges:???
----------ID:?limit-conf-configFunction:?file.managedName:?/etc/security/limits.confResult:?TrueComment:?File?/etc/security/limits.conf?is?in?the?correct?stateStarted:?21:09:10.879350Duration:?4.1?msChanges:???
----------ID:?ntp-crontab-configFunction:?file.managedName:?/var/spool/cron/rootResult:?TrueComment:?File?/var/spool/cron/root?updatedStarted:?21:09:10.883639Duration:?9.342?msChanges:???----------diff:New?filemode:0644
Summary
------------
Succeeded:?5?(changed=1)
Failed:????0
------------
Total?states?run:?????5
node02.saltstack.com:
----------ID:?pkg.initFunction:?pkg.installedName:?mtrResult:?TrueComment:?Package?mtr?is?already?installed.Started:?21:09:07.831431Duration:?4292.2?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?nmapResult:?TrueComment:?Package?nmap?is?already?installed.Started:?21:09:12.123977Duration:?0.714?msChanges:???
----------ID:?pkg.initFunction:?pkg.installedName:?lrzszResult:?TrueComment:?Package?lrzsz?is?already?installed.Started:?21:09:12.124798Duration:?0.426?msChanges:???
----------ID:?limit-conf-configFunction:?file.managedName:?/etc/security/limits.confResult:?TrueComment:?File?/etc/security/limits.conf?is?in?the?correct?stateStarted:?21:09:12.128235Duration:?5.165?msChanges:???
----------ID:?ntp-crontab-configFunction:?file.managedName:?/var/spool/cron/rootResult:?TrueComment:?File?/var/spool/cron/root?updatedStarted:?21:09:12.133621Duration:?8.761?msChanges:???----------diff:New?filemode:0644
Summary
------------
Succeeded:?5?(changed=1)
Failed:????0
------------
Total?states?run:?????5
檢查結果:
[root@node01?spool]#?cd?/var/spool/cron/
[root@node01?cron]#?ls
root
[root@node01?cron]#?cat?root
*/5?*?*?*?*?/usr/sbin/ntpdate?-u?202.120.2.101>/dev/null?2>&1
[root@node02?~]#?cat?/var/spool/cron/root?
*/5?*?*?*?*?/usr/sbin/ntpdate?-u?202.120.2.101>/dev/null?2>&1
通過對比會發現,與master的下發文件一致

案例4:同步內網的hosts文件(適用于內網沒有建立獨立DNS的情況)

[root@master?~]#?cd?/etc/salt/states/init/
[root@master?init]#?ll
總用量?16
drwxr-xr-x?2?root?root?4096?2月??18?21:01?files
-rw-r--r--?1?root?root??168?2月??18?17:42?limit.sls
-rw-r--r--?1?root?root??169?2月??18?21:08?ntp-crontab.sls
-rw-r--r--?1?root?root???79?2月??15?14:55?pkg.sls
[root@master?init]#?cd?files/
[root@master?files]#?vim?hosts.conf?
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140????master??master.saltstack.com
10.10.10.141????node01??node01.saltstack.com
10.10.10.142????node02??node02.saltstack.com
10.10.10.143????node03??node03.saltstack.com
[root@master?init]#?cat?hosts.sls?
hosts-config:file.managed:-?name:?/etc/hosts-?source:?salt://init/files/hosts.conf-?user:?root-?group:?root-?mode:?644
說明:下發文件到/etc/hosts,源文件
[root@master?states]#?cat?/etc/salt/states/top.sls?
base:'*':-?init.pkg-?init.limit-?init.ntp-crontab-?init.hosts
[root@master?states]#?salt?'*'?state.highstate
----------前面的部分我直接省略了--------------
----------ID:?hosts-configFunction:?file.managedName:?/etc/hostsResult:?TrueComment:?File?/etc/hosts?updatedStarted:?21:31:43.644962Duration:?13.119?msChanges:???----------diff:---??+++??@@?-3,3?+3,4?@@10.10.10.140?mastermaster.saltstack.com10.10.10.141?node01node01.saltstack.com10.10.10.142?node02node02.saltstack.com+10.10.10.143??node03node03.saltstack.com
Summary
------------
Succeeded:?6?(changed=1)
Failed:????0
------------
Total?states?run:?????6
客戶端進行測試:
[root@node01?cron]#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140?master?master.saltstack.com
10.10.10.141?node01?node01.saltstack.com
10.10.10.142?node02?node02.saltstack.com
10.10.10.143?node03?node03.saltstack.com
[root@node02?~]#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140?master?master.saltstack.com
10.10.10.141?node01?node01.saltstack.com
10.10.10.142?node02?node02.saltstack.com
10.10.10.143?node03?node03.saltstack.com
如果此時我在master端修改hosts.conf文件
[root@master?init]#?pwd
/etc/salt/states/init
[root@master?init]#?cat?files/hosts.conf?
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140?master?master.saltstack.com
10.10.10.141?node01?node01.saltstack.com
10.10.10.142?node02?node02.saltstack.com
10.10.10.143?node03?node03.saltstack.com
10.10.10.144?openstack01?openstack01.saltstack.com
10.10.10.145?openstack02?openstack02.saltstack.com
[root@master?init]#?salt?'*'?state.highstate
----------前面的部分我直接省略了--------------
----------ID:?hosts-configFunction:?file.managedName:?/etc/hostsResult:?TrueComment:?File?/etc/hosts?updatedStarted:?21:37:50.679328Duration:?78.269?msChanges:???----------diff:---??+++??@@?-4,3?+4,5?@@10.10.10.141node01node01.saltstack.com10.10.10.142node02node02.saltstack.com10.10.10.143node03node03.saltstack.com+10.10.10.144openstack01openstack01.saltstack.com+10.10.10.145openstack02openstack02.saltstack.com
Summary
------------
Succeeded:?6?(changed=1)
Failed:????0
------------
Total?states?run:?????6
客戶端進行測試:
[root@node01?cron]#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140?master?master.saltstack.com
10.10.10.141?node01?node01.saltstack.com
10.10.10.142?node02?node02.saltstack.com
10.10.10.143?node03?node03.saltstack.com
10.10.10.144?openstack01?openstack01.saltstack.com
10.10.10.145?openstack02?openstack02.saltstack.com
[root@node02?~]#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
10.10.10.140?master?master.saltstack.com
10.10.10.141?node01?node01.saltstack.com
10.10.10.142?node02?node02.saltstack.com
10.10.10.143?node03?node03.saltstack.com

關于salt批量配置hosts文件:http://www.ttlsa.com/linux/salt-modules-hosts/

這里我只寫一個添加hosts文件的例子,更多內容可以參考上面的鏈接(干貨很多)

[root@master?~]#?salt?'*'?hosts.set_host?10.10.10.145?openstack02.saltstack.com
node02.saltstack.com:True
node01.saltstack.com:True
[root@master?~]#?salt?'*'?hosts.set_host?10.10.10.143?openstack03.saltstack.com
node02.saltstack.com:True
node01.saltstack.com:True
[root@master?~]#?salt-ssh?'*'?cmd.run?'tail?-2?/etc/hosts'
node02:10.10.10.144?openstack01?openstack01.saltstack.com10.10.10.145?openstack02.saltstack.com
node01:10.10.10.144?openstack01?openstack01.saltstack.com10.10.10.145?openstack02.saltstack.com