一、说明

      本文基于前两篇的salstack的安装部署和使用的基础上,又一个常用的功能,

State模块是saltstack核心的功能,状态管理包括:Package,File,Network,                     Service, User等常用功能,其他功能参考官方文档:

https://docs.saltstack.com/en/latest/ref/states/all/index.html

本次的实验环境依然和前面的一致两台。

任务:通过grins,pillar,state向指定minion安装apache软件包,并启动。

开启state的文件目录

#cat  -n /etc/salt/master

file_roots:
   base:
     - /srv/salt

二、pillar结合grains的文件编写

主要通过pillar,grains给state提供特定安装条件

1、pillar中的变量生成配置

#cat /srv/pillar/top.sls

base:
   "*":
      - apacheData

#cat /srv/pillar/apacheData.sls

pkg:
    {% if grains["os_family"] == "RedHat" %}
       apache: httpd
    {% else %}
       apache: apache2
    {% endif %}

说明:通过 pillar,结合grains的os_family值,让apache的变量在minion端动态生成保存在pillar.data中;

2、同步更新到minion

#salt "*" saltutil.refresh_pillar

此时可通过salt "*" pillar.data pkg  如图:


saltstack state模块-状态管理_state



三、state文件编写

1、states配置文件

cat /srv/salt/top.sls

base:
   "*":
      - apache

cat /srv/salt/apache.sls

apache:
   pkg:
      - installed
      - name: {{ pillar["pkg"]["apache"] }}
   service.running:
      - name: {{ pillar["pkg"]["apache"] }} 
      - require:
         - pkg: {{ pillar["pkg"]["apache"] }}

2、同步到minion

测试是否有错误:

# salt  "*" state.highstate test=True

如果没有问题

#salt  "*" state.highstate

执行成功出现类似下面的提示

saltstack state模块-状态管理_state_02

验证:

[root@web02_135 pillar]# salt -C "minion_local" cmd.run "service httpd status"
minion_local:
    httpd (pid  12909) is running...


到此一个通过过pillar 结合grains 和state让客户端操持状态和任务下发完成。本文只是抛砖引玉,入门使用。欢迎交流指正。