- Saltstack數據系統
分為Grains和Pillar
一、Grains
靜態數據,當Minion啟動的時候收集的MInion本地的相關信息。(包含操作系統版本、內核版本、CPU、內存、硬盤、設備型號等)
備注:不重啟minion,這些信息數據是不會改變的。
1)信息管理,包括資產管理;
例:
salt 'linux-node1*' grains.ls # 列出ID為linux-node1的主機,grains的所有key salt 'linux-node1*' grains.items # 列出主機的詳細信息,可用於資產管理 salt '*' grains.item os # 列出所有主機的系統版本 salt '*' grains.item fqdn_ip4 # 列出所有主機的IP地址
2)用於目標選擇;(查詢具體id的主機,查詢系統版本為centos的主機 等場景)
例:
salt -G 'os:Centos' test.ping # 所有主機系統為centos版本ping測試 salt -G 'os:Centos' cmd.run 'echo 123' # 所有主機系統為centos版本執行命令'echo 123'
3)配置管理中使用
自定義grains的item
方式一: 修改配置文件 vim /etc/salt/minion
重啟 systemctl restart salt-minion
通過自定義的item,可以實現重啟所有角色為apache的主機
salt '*' grains.item roles # 獲取所有主機的roles salt -G 'roles:apache' cmd.run 'systemctl restart httpd' # 所有主機roles為apache的執行命令systemctl restart httpd
方式二:(生產環境使用)
修改配置文件 vim /etc/salt/grains,寫法
cloud: openstack
重啟 systemctl restart salt-minion
salt '*' grains.item cloud # 獲取所有主機的cloud
修改/etc/salt/grains不重啟服務的方法,刷新命令如下(備注:方式一和方式二修改配置文件,通過此命令都可以不用重啟服務)
salt '*' saltutil.sync_grains
grains在top FILE中的使用案例
vim /srv/salt/top.sls
base: 'linux-node1.example.com': - web.apache 'roles:apache': - match: grain - web.apach
grains腳本目錄,必須是base下創建_grains目錄(如:/srv/salt/_grains)
創建一個python腳本在/srv/salt/_grains目錄下
腳本名:my_grains.py
#!/usr/bin/env python #-*- coding: utf-8 -*- def my_grains(): # 初始化grains字典 grains = {} # 設置字典中的key-value grains['iaas'] = 'openstack' grains['edu'] = 'shhnwangjian' # 返回字典 return grains
通過master同步腳本文件至每台minion
salt '*' saltutil.sync_grains
文件放在minion主機的/var/cache/salt/minion/extmods/grains目錄下
salt '*' grains.item edu # 獲取所有主機的edu
grains優先級(item名稱相同的情況下): 1. 系統自帶 2. grains文件寫到 3. minion配置文件寫的 4. 自己寫的腳本
二、Pillar
動態數據,給特定的minion指定特定的數據。只有指定的minion自己能看到自己的數據。
salt '*' pillar.items
開啟系統自帶,修改配置文件
vim /etc/salt/master
重啟systemctl restart salt-master
執行salt '*' pillar.items 可以看到系統自帶的item
piller存在文件路徑設置
mkdir /srv/pillar
重啟systemctl restart salt-master
實現pillar流程
1)創建一個piller文件,python jinja2寫法
mkdir /srv/pillar/web cd /srv/pillar/web vim apache.sls
{% if grains['os'] == 'CentOS' %} apache: httpd {% elif grains['os'] == 'Debian' %} apache: apache2 {% endif %}
2)創建TOP FILE文件
vim /srv/pillar/top.sls
base: 'linux-node2.example.com': - web.apache
salt '*' saltutil.refresh_pillar # 刷新 salt '*' pillar.items apache
目標選擇
salt -I 'apache:httpd' test.ping
三、Grains VS Pillar