Saltstack數據系統Grains和Pillar(三)


  • 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


 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM