关于salt state

核心是写sls(SaLt State file)文件,sls文件默认格式是YAML格式(以后会支持XML),并默认使用jinja模板,YAML与XML类似,是一种简单的适合用来传输数据的格式,而jinja是根据django的模板语言发展而来的语言,简单并强大,支持for if 等循环判断。salt state主要用来描述系统,软性,服务,配置文件应该出于的状态,常常被称为配置管理!

通常state,pillar会用sls文件来编写。state文件默认是放在/srv/salt中,实际工作中为了更便捷管理,前面我们设置的目录为/srv/salt/state,后期再根据不同的项目或用途,再在state下新建子目录管理。

YAML语法

1、空格和TAB
yaml两个空格为缩进,不能用tab
2、冒号 :和减号 -
: 和- 之间要有一个空格
3、数字解析
mode: 0644 会解析成为mode: 644 最好使用mode: (0644)

JinJa模板

Jinja 基于Python模板引擎开发,saltstack默认使用yaml_jinja渲染器,渲染流程时先jinja在yaml解析.所以在开始解析yaml的时候可以使用jinja”偷个腥”,用法如下:
1、jinja中使用grains{{ grains['os'] }}
2、jinja中使用Pillar{{ pillar['apache']['PORT'] }}
3、jinja的逻辑关系

{% if grains['os'] == 'RedHat' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

sls文件执行的两种方式

建议:srv/salt/state下新建各用途的目录,再在目录中再新建sls文件(默认为init.sls),不要把所有的sls文件都放在state下,显的很乱且不好管理!
NO1:
在/srv/salt/state下新建top.sls,top.sls中指定要执行的sls文件,state.highstate推送匹配的所有sls文件
例:

[root@test11 state]# pwd
/srv/salt/state
[root@test11 state]# salt '*' state.highstate #执行top.sls下匹配的所有sls
[root@test11 state]# vim top.sls
base:
 '*':                                         #要推送到的客户端,*指所有minion端,也可以指定单个
   - hosts                                    #/srv/salt/state/hosts下的init.sls
[root@Master salt]# vim init.sls 
/tmp/hosts:                                   #推送到的目的地下的文件名
 file.managed:
   - source: salt://hosts/templates/hosts     #推送的文件存放位置,在/srv/salt/etc下
   - user: root
   - group: root
   - mode: 600

NO2:
指定推送单个sls文件:salt '*' state.sls [sls文件]
例:
按照上述例子推送hosts文件:salt '*' state.sls hosts

注:大家可能注意到上面命令state.sls hosts这个目录就可以了,原因是salt用的是python写的,在py下init为默认的初始配置,所以可以略写,但如果要执行的是hosts目录下的其它sls文件,假如是a.sls文件,可参考如下执行:
salt '*' state.sls hosts.a

状态之间的依赖关系

1、我依赖谁                  #require    
2、谁依赖我[我被谁依赖]       #require_in
3、我监控谁                  #watch         如果配置文件有修改,那么会重载、重启服务
4、谁监控我[我被谁监控]       #watch_in      如果配置文件有修改,那么会重载、重启服务
5、我引用谁                  #include
6、我扩展谁                  #extend

salt schedule

schedule是salt中的crontab,结合pillar使用,就是周期性执行一些函数,以下例说明:

[root@Master pillar]# cat hosts/init.sls 
schedule:
  hosts:                   ##这个是ID,可以随意起,全文件唯一
    function: state.sls    ##对于master,function就是runner
    seconds: 30            ##间隔秒数
    minutes: 15            ##间隔分数
    minutes: 2             ##间隔小时数
    args:
      - 'hosts'

注:上面sls文件的意思是每隔2小时15分30秒执行hosts的state.sls文件。

文档更新时间: 2019-06-04 15:11   作者:子木