saltstack自動化運維管理----------(grains、pillar)
1.grains
1.grains簡介
Grains是SaltStack的一個組件,存放在SaltStack的minion端。
當salt-minion啓動時會把收集到的數據靜態存放在Grains當中,只有當minion重啓時纔會進行數據的更新。由於grains是靜態數據,因此不推薦經常去修改它。
應用場景:信息查詢,可用作CMDB。在target中使用,匹配minion。在state系統中使用,配置管理模塊
2.信息查詢
用於查詢minion端的IP、FQDN等信息
- 默認可用的grains:
salt '*' grains.ls
2. 查看每一項的值:
salt '*' grains.items
3. 取單項的值:
salt server5 grains.item ipv4
salt server5 grains.item fqdn
3.自定義grains項
在server4中:
在server4的/etc/salt/minion中定義:
vim /etc/salt/minion
##寫入
grains:
roles: apache
重啓salt-minion,否則數據不會更新:
systemctl restart salt-minion
在server5中:
在server5的/etc/salt/minion中定義:
vim /etc/salt/minion
##寫入
grains:
roles: nginx
重啓salt-minion,否則數據不會更新:
systemctl restart salt-minion
4.編寫grains模塊
1。編寫模塊
在salt-master端創建_grains目錄:
mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py
##寫入
def my_grain():
grains = {}
grains['linux'] = 'redhat'
grains['hello'] = 'world'
return grains
salt '*' saltutil.sync_grains #同步grains到minion端
2。grains匹配運用
在target中匹配minion:
salt -G roles:apache cmd.run hostname
salt -G roles:nginx cmd.run hostname
salt -G hello:world cmd.run hostname
在top文件中匹配:
vim /srv/salt/top.sls
##寫入
base:
'roles: apache':
- match: grain
- apache
'roles: nginx':
- match: grain
- nginx
2.pillar
1.pillar簡介
pillar和grains一樣也是一個數據系統,但是應用場景不同。
pillar是將信息動態的存放在master端,主要存放私密、敏感信息(如用戶名密碼等,而且可以指定某一個minion纔可以看到對應的信息。
pillar更加適合在配置管理中運用。
2.聲明pillar
定義pillar基礎目錄:
vim /etc/salt/master
##修改
pillar_roots:
base:
- /srv/pillar
mkdir /srv/pillar
重啓salt-master服務:
/etc/init.d/salt-master restart
注意:默認目錄就是/srv/pillar,可以不用修改配置文件,服務業就不需要重啓。
3.自定義pillar項
定義項:
vim /srv/pillar/top.sls
##寫入
base:
'*':
- packages
vim /srv/pillar/apache.sls
##寫入
{% if grains['fqdn'] == 'server5' %}
package: nginx
{% elif grains['fqdn'] == 'server4' %}
package: httpd
{% endif %}
注意: 這裏會匹配所有minion,現在只有兩臺minion,所以endif後面不加參數,否則報錯。如果有更多的minion,則需要寫
刷新pillar數據:
salt '*' saltutil.refresh_pillar
查詢pillar數據:
salt 'server4' pillar.items package
salt 'server5' pillar.items package
4.pillar數據匹配
命令行中匹配
salt -I package:nginx cmd.run hostname
state系統中使用
state系統中使用
vim /srv/salt/apache/init.sls
web:
pkg.installed:
- pkgs:
- {{ pillar['package'] }}
-php
service.running:
- name: httpd
- enable: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
file.managed:
- source: salt://apache/files/httpd.conf
在server2上安裝了apache,在server3上安裝了nginx