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

2. 自定义grains项

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

(1)在minion端写入roles

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

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

salt server2 grains.item roles

在server3中通过grains文件设置roles

(1)设置grains文件

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

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

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

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端

在server2中查看模块是否加入

cd /var/cache/salt
tree .

4. 在target中匹配minion

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

在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

三、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数据

查询pillar项

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

四、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

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

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

(3)将修改推送到server2中

salt server2 state.sls apache.install

2. 通过grains取主机ip值

方法一:

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

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

方法二:

在httpd.conf模板文件中设置

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

3.  使用pillar进行取值

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

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

在/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

方法二:直接在模板文件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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值