Linux之Saltstack中grains、pillar取值和jinja模板的应用

一、grains和pillar介绍

1. Grains简介

Grains是SaltStack的一个组件,存放在SaltStack的minion端。当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。由于grains是静态数据,因此不推荐经常去修改它。

应用场景:

(1)信息查询,可用作CMDB

(2)在target中使用,匹配minion

(3)在state系统中使用,配置管理模块

2. Pillar介绍

pillar和grains一样也是一个数据系统,但是应用场景不同。pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。pillar更加适合在配置管理中运用。

二、Grains取值

1. 查询minion端的IP、FQDN等信息

salt server2 grains.ls                #默认可用的grains
salt server2 grains.items             #查看每一项的值
salt server2 grains.item os           #取单项的值
salt server2 grains.item fqdn
salt server2 grains.item nodename

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第1张图片

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第2张图片

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第3张图片

2. 自定义grains项

在server2中通过/etc/salt/minion配置文件设置roles

(1)在minion端写入roles

vim /etc/salt/minion
grains:
  roles:
    - apache
systemctl restart salt-minion

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第4张图片

(2)在master端进行测试,查看自定义roles

salt server2 grains.item roles

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第5张图片

在server3中通过grains文件设置roles

(1)设置grains文件

cd /etc/salt/
vim grains
roles:
  - nginx

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第6张图片

(2)在server1端查看roles自定义项

salt server3 grains.item roles
salt server3 saltutil.sync_grains    #同步数据

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第7张图片

3. 在salt-master端创建_grains目录,编写grains

mkdir /srv/salt/_grains
vim my_grains.py
def my_grains():
     grains = {}
     grains['hello'] = 'world'
     grains['salt'] = 'stack'
     return grains
salt server2 saltutil.refresh_modules  
salt server2 grains.item hello  
salt server2 saltutil.sync_grains    #同步模块到minion端

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第8张图片

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第9张图片

在server2中查看模块是否加入

cd /var/cache/salt
tree .

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第10张图片

4. 在target中匹配minion

salt -G 'roles:apache' test.ping    #匹配minion
salt -G 'roles:nginx' test.ping

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第11张图片

在top文件中匹配自定义项

vim /srv/salt/top.sls 
base:
  'roles:apache':
    - match: grain
    - apache.install
  'roles:nginx':
    - match: grain
    - nginx.service
salt -G "os:RedHat" test.ping

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第12张图片

三、Pillar取值

1. 声明pillar,在配置文件中定义pillar基础目录

vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar
mkdir /srv/pillar
systemctl restart salt-master
cd /srv/pillar/
mkdir web
vim web/vars.sls        #自定义pillar项
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
vim top.sls
base:
  '*':
    - web.vars
salt '*' saltutil.refresh_pillar    #刷新pillar数据

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第13张图片

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第14张图片

查询pillar项

salt '*' pillar.items    #查询所有的pillar项
salt server2 pillar.item webserver    #查询某一minion端的pillar项
salt server3 pillar.item webserver

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第15张图片

四、jinja模板在服务中的应用(httpd为例)

1. 安装文件中定义变量的取值

(1)修改apache目录中的安装文件sls(添加jinja模板)

cd /srv/salt/apache
vim install.sls 
install-apache:
  pkg.installed:
    - pkgs:
      -  httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja
      port: 80
      host: 172.25.5.2
 
  service.running:
    - name: httpd
    - reload: True
    - watch:
      - file: install-apache

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第16张图片

(2)修改files目录下的模板文件httpd.conf(主机和端口设置为变量)

vim files/httpd.conf
Listen {
    { host }}:{
    { port }}

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第17张图片

(3)将修改推送到server2中

salt server2 state.sls apache.install

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第18张图片

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第19张图片

2. 通过grains取主机ip值

方法一:

(1)修改apache的安装文件install.sls

vim install.sls
host: {
    { grains['ipv4'][-1]}}
salt server2 state.sls apache.install    #推送

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第20张图片

方法二:

在httpd.conf模板文件中设置

vim apache/install.sls
#host: {
    { grains['ipv4'][-1]}}    #将该行注释掉
vim files/httpd.conf 
Listen {
    { grains['ipv4'][-1] }}:{
    { port }}

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第21张图片

3.  使用pillar进行取值

方法一:在install.sls文件设置变量,在pillar目录中定义变量的取值

vim apache/install.sls
host: {
    { pillar['ip'] }}
vim files/httpd.conf
Listen {
    { host }}:{
    { port }}

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第22张图片

在/srv/pillar目录中设置pillar变量的取值

cd /srv/pillar/
vim web/vars.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
ip: 172.25.5.2
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
salt server2 state.sls apache.install

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第23张图片

方法二:直接在模板文件httpd.conf文件中设定变量

cd /srv/salt/apache/
vim install.sls 
#host: {
    { pillar['ip'] }}
vim files/httpd.conf 
Listen {
    { pillar['ip'] }}:{
    { port }}
salt server2 state.sls apache.install

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第24张图片

4. 将端口设置为变量

vim apache/install.sls 
#port: 80
vim apache/lib.sls
{% set port = '80' %}
vim files/httpd.conf
{% from 'apache/lib.sls' import port %}
salt server2 state.sls apache.install

Linux之Saltstack中grains、pillar取值和jinja模板的应用_第25张图片

你可能感兴趣的:(pillar取值,grains取值,jinja模板,变量传值的方法)