本篇博客实验环境详见saltstack安装部署和saltstack自动化部署——httpd服务
grains模块的使用
[root@server1 salt]# mkdir _grains
[root@server1 salt]# ls
_grains httpd nginx top.sls
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env python
def my_grains():
grains = {'foo': 'bar', 'hello': 'world'}
grains['salt'] = 'stack'
return grains
写一个.py文件。
[root@server1 _grains]# salt '*' saltutil.sync_grains
在server2可以查看到编写的py文件。
推送时指定键会输出指定的值。
通过角色ping通主机对应的远程主机,角色的设置在前两篇已经配置。
[root@server1 salt]# salt server2 grains.item fqdn
pillar模块的使用
Grains很强大,但是其缺点是这些数据相对来说都是静态数据。如果有变化的数据如何处理呢?这时我们就用到了pillar。pillar数据存储在master上。指定的minion只能看到自己pillar数据,其他的minion看不到任何pillar数据,这一点与状态文件正好相反。所有通过认证的minion都可以获取状态文件,但是每隔minion却都有自己的一套pillar数据,而且每台minion的pillar都进行了加密,所以很适用于敏感数据
Pillar是Salt用来分发全局变量到所有minions的一个接口
[root@server1 salt]# vim /etc/salt/master
打开pillar模块功能。
[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# systemctl restart salt-master
[root@server1 srv]# cd pillar/
创建目录重启服务。
[root@server1 pillar]# vim vars.sls
{% if grains['fqdn'] == 'server3' %}
webserver: httpd
state: master
{% elif grains['fqdn'] == 'server2' %}
webserver: nginx
state: backup
{% endif %}
编写sls文件,对相应主机进行设置。
base:
'*': ##所有主机
- vars ##刚刚写的sls文件,后缀可以省略,在当前目录。
[root@server1 pillar]# salt '*' pillar.items
[root@server1 pillar]# salt '*' saltutil.refresh_pillar ##刷新
[root@server1 pillar]# salt -I 'state:master' test.ping
jinja模块的使用
[root@server1 httpd]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja ##jinja模块
port: 80 ##设置端口
[root@server1 httpd]# vim service.sls
include:
- httpd.install
httpd-service:
service.running:
- name: httpd
- enable: true
- reload: true
- watch:
- file: httpd-install
[root@server1 httpd]# salt server3 state.sls httpd.service
推送。
[root@server1 httpd]# vim files/httpd.conf
修改主配置文件
用变量设置端口。
[root@server1 httpd]# salt server2 state.sls httpd.service
推送到server2.
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
查看server2的httpd服务的主配置文件,端口已经根据设置的变量修改了。
我们也可以不再模版内的主配置文件编写,直接在install.sls文件编写。
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
port: 80
host: {{ grains['ipv4'][-1] }} ##设置端口
[root@server1 httpd]# salt server3 state.sls httpd.service
推送到server3。
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
在server3查看主配置文件,端口已经修改。
也可以在pillar目录中进行设置。
[root@server1 httpd]# vim /srv/pillar/vars.sls
{% if grains['fqdn'] == 'server3' %}
webserver: httpd
state: master
ip: 172.25.26.3 ##ip
port: 80 ##端口
{% elif grains['fqdn'] == 'server2' %}
webserver: nginx
state: backup
ip: 172.25.26.3
port: 80
{% endif %}
[root@server1 httpd]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
port: {{ pillar['port'] }} ##指定pillar下设置的端口
host: {{ pillar['ip'] }} ##指定ip
[root@server1 httpd]# salt server3 state.sls httpd.service
推送。