Salt - State

States是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件。如安装软件啊,更改配置啊等,就需要编写states sls文件(描述状态配置的文件)去描述和实现这些功能。编写states sls文件一般是是YAML语法格式,也支持使用Python语言来编写。
定义例子:

1
2
3
4
5
6
7
apache: #state名称:apache
pkg: #管理对象类型:pkg,进行软件安装(yum、apt)
- installed #pkg要执行的方法:install,如未安装就进行安装
service: #管理对象类型:service,管理系统守护进程

- running #service要执行的方法:running,如未运行就进行启动
- require: #关键字require,确保apache服务只有在成功安装软件包后才会启动
- pkg: apache

State Tree

Top file:配置管理入口文件,和pillar类似,指定minions需要完成那些配置管理,默认为top.sls
注:在定义top.sls时,会先找apache/init.sls,如果没有的话,会找
apache.sls

1
2
3
  base:
    '*':
     - apache

配置

跟系统文件树一样,salt state文件也有自己的树系统,这通过配置文件中的file_roots配置

1
2
3
4
#在/etc/salt/master 中配置下面选项,指定salt state的根目录在/srv/salt
file_roots:
base:
- /srv/salt

修改master配置文件后需要重启。

创建Top文件

在/srv/salt目录下创建一个top.sls文件,这个文件提供了其它文件的映射。

1
2
3
4
5
[root@Automation salt]# vi top.sls
[root@Automation salt]# cat top.sls
base:
'*':
- webserver

创建State文件

在top.sls相同的目录下,创建一个名为webserver.sls的空文件,也可以在同目录下创建一个文件夹webserver,在里边创建init.sls。

1
2
3
4
5
[root@Automation salt]# vi webserver.sls
[root@Automation salt]# cat webserver.sls
httpd:
pkg:
- installed

执行Salt State

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Automation salt]# salt '*' state.highstate
192.168.244.130:
----------

ID: httpd
Function: pkg.installed
Result: True
Comment: Package httpd is already installed.
Started: 20:54:04.497245
Duration: 2334.569 ms
Changes:

Summary
------------

Succeeded: 1
Failed: 0
------------

Total states run: 1

master将会指导所有的目标minions运行state.highstate。
当minion执行highstate,它将会下载top文件中匹配的内容,minion将表达式中匹配的内容下载、编译、执行。一旦完成,minion将返回所有的动作执行结果和所有更改。

状态间关系

  • Ordering
  • require
  • include
    包含某个文件 比如新建一个test.sls文件内,就可以继承nginx和php相关模块配置,而不必重新编写

    1
    2
    3
    4
    [root@Automation salt]# cat test.sls 
    include:
    - nginx
    - php

  • watch
    监测依赖的state的状态,如果状态发生变化,做出反应(例如监控文件变化,发生变化后立即重启服务)

    1
    2
    3
    4
    5
    6
    7
    8
    ntpd:  
    service.running:
    - watch: #这里它是监听ID为file: /etc/ntp.conf,如果下方的状态没有发生改变,那么我这个重启规则就不会执行,那么就不会执行服务重启操作。
    - file: /etc/ntp.conf #也就相当于如果minion端的ntp.conf或者master端的salt://files/ntp.conf的文件没有发生改变,也就不会发生文件下发操作,也就可以理解为如果没有发生文件更改。

    /etc/ntp.conf:
    file.managed:
    - source: salt://files/ntp.conf

主要模块

  • 软件包状态管理模块 - pkg

    1
    2
    3
    4
    pkg.installed  # 安装
    pkg.latest # 确保最新版本
    pkg.remove # 卸载
    pkg.purge # 卸载并删除配置文件
  • 文件状态管理模块 - file

    1
    2
    3
    file.managed:     #保证文件存在并且为对应的状态
    file.recurse:    #保证目录存在并且为对应的状态
    file.absent:    #确保文件不存在,如果存在则进行删除操作

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [root@Automation salt]# vi file.sls
    [root@Automation salt]# cat file.sls
    create test_create_directory:
    file.directory:
    - name: /opt/my_new_directory
    - user: root
    - group: root
    - mode: 755
    [root@Automation salt]# salt '*' state.apply file
    192.168.244.130:
    ----------
    file_|-create test_create_directory_|-/opt/my_new_directory_|-directory:
    ----------
    __run_num__:
    0
    changes:
    ----------
    /opt/my_new_directory:
    New Dir
    comment:
    Directory /opt/my_new_directory updated
    duration:
    52.238
    name:
    /opt/my_new_directory
    result:
    True
    start_time:
    21:07:18.721680

  • 服务状态管理模块 - service

    1
    2
    3
    4
    service.running        #确保服务处于运行状态
    service.enabled #确保服务会开机自动启动
    service.disabled #确保服务不会开机自启动
    service.dead #确保服务当前没有运行

    例子:

    1. on minion,service mysqld stop
    2. execute state

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      [root@Automation salt]# cat mysql.sls 
      mysql running:
      service.running:
      - name: mysqld
      [root@Automation salt]# salt '*' state.apply mysql
      192.168.244.130:
      ----------
      service_|-mysql running_|-mysqld_|-running:
      ----------
      __run_num__:
      0
      changes:
      ----------
      mysqld:
      True
      comment:
      Started Service mysqld
      duration:
      1189.538
      name:
      mysqld
      result:
      True
      start_time:
      21:20:29.182736
    3. mysql start

唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!