一、grains
1、grains的概念
grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的
2、设置grains的方法
- 在server2的minion配置文件中打开grains
vim /etc/salt/minion
121 grains:
122 roles:
123 - apache
重启服务/etc/init.d/salt-minion restart
在server1(master)上:
[root@server1 salt]# salt -G 'roles:apache' cmd.run hostname #查看角色为apache的主机名
server2:
server2
也可以查看minion的各个角色
- 在server3的/etc/salt目录下书写grains文件
vim /etc/salt/grains
roles: nginx #由于是用python写的,应该注意语法格式
在master端查看的时候会发现还没有出现server3的角色,可以用
[root@server1 salt]# salt server3 saltutil.sync_grains ##刷新
这时查看就会出现server3的角色
- 方法3
在server1上
[root@server1 ~]# cd /srv/salt
[root@server1 salt]# vim _grains
[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env python
def myfunction():
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
在server1端将.py文件传给server3
[root@server1 _grains]# salt server3 saltutil.sync_grains
server3:
- grains.my_grains
并且在server3的缓存目录下可以看到该文件
[root@server3 ~]# cd /var/cache/salt/minion/files/base/_grains
[root@server3 _grains]# cat my_grains.py
#!/usr/bin/env python
def myfunction():
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
在seever1上可以查看对应的键值
二、pillar (存放的是静态数据)
1、pillar的概念
pillar是salt用来分发全局变量到所有minions的一个端口
Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
2、配置pillar
(1)编辑/etc/salt/master打开pillar存储路径
[root@server1 _grains]# cd /etc/salt/
[root@server1 salt]# vim master
694 pillar_roots:
695 base:
696 - /srv/pillar
[root@server1 salt]# /etc/init.d/salt-master restart #重启master服务
(2)刷新锁与节点的pillar
[root@server1 salt]# salt '*' saltutil.refresh_pillar
(3)编辑存储pillar键值对文件
[root@server1 salt]# cd /srv/
[root@server1 srv]# mkdir pillar
[root@server1 srv]# cd pillar/
[root@server1 pillar]# vim top.sls
base:
'*':
- web.install
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
当出现如下情况,刷新一下所有节点即可
[root@server1 pillar]# salt -I 'webserver:nginx' test.ping
server3:
Minion did not return. [No response]
查看所有pillar项
三、jinja模块的使用方法
1、方法一
在server1的httpd.install中编写jinja模版
[root@server1 apache]# cat install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- mode: 644
- user: root
- group: root
- template: jinja
- context:
bind: 172.25.66.2
port: 8080 #以键值对的形式存储bind和port
在server1的httpd配置文件中编辑要更新的端口或接口
cd /srv/salt/apache/files
vim httpd.conf
136 Listen {{ bind }}:{{ port }}
给server2端推送
[root@server1 files]# salt server2 state.sls apache.service
推送成功
在server2端检验 vim /etc/httpd/conf/httpd.conf
2、方法二
vim /srv/salt/apache/lib.sls
{% set port = 8080 %}
{% set bind = '172.25.35.2' %}
vim /srv/salt/apache/files/httpd/conf
在首行添加
1 {% from 'apache/lib.sls' import port with context %}
2 {% from 'apache/lib.sls' import bind with context %}
推送测试,在server1中/srv/salt/apache/install.sls文件中注释
# - context:
# bind: 172.25.66.2
# port: 8080
推送salt server2 state.sls apache.install
在server2中查看,会看到前两行是空白,在接听端口处会看到效果