saltstack—— grains,pillar,jinja模块的使用

本篇博客实验环境详见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

在这里插入图片描述
推送。

猜你喜欢

转载自blog.csdn.net/qq_41961805/article/details/92778198