0%

Salt state实例解析

在Salt的官方教程中,以apache和sshd的state配置作为例子。掌握这两个例子,就能够触类旁通,处理日常工作中大部分的配置管理问题。

本文对这两个例子进行详细的分析和注释.

在Salt的官方教程中,以apache和sshd的state配置作为例子。掌握这两个例子,就能够触类旁通,处理日常工作中大部分的配置管理问题。
本文对这两个例子进行详细的分析和注释。

目录结构

文档
中的例子包含了多个文件。这些文件之间互相引用和关联。目录结构及文件清单如下:

  • apache/init.sls

  • apache/httpd.conf

  • ssh/init.sls

  • ssh/server.sls

  • ssh/banner

  • ssh/ssh_config

  • ssh/sshd_config

  • ssh/custom-server.sls

两个配置分别放在了apachessh文件夹。一个Salt状态可以使用单个的SLS文件,或者使用一个文件夹。后者更加灵活方便。

apache/init.sls

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
30
31
32
33
34

apache:
pkg:
- installed
service:
- running
- watch:
- pkg: apache
- file: /etc/httpd/conf/httpd.conf
- user: apache
user.present:
- uid: 87
- gid: 87
- home: /var/www/html
- shell: /bin/nologin
- require:
- group: apache
group.present:
- gid: 87
- require:
- pkg: apache

/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
custom_var: "override"
- defaults:
custom_var: "default value"
other_var: 123

说明:

  1. sls文件使用YAML格式定义,最外面的层级定义配置项。
  2. 一个sls文件中可以有多个配置项,配置项的ID可以起任意的名字。本例中包含ID为apache/etc/httpd/conf/httpd.conf两个配置项。
  3. 配置项内是一系列的状态声明。所有的状态项来自Salt状态模块。即可以使用Salt内置的状态模块,也可以编写自定义的状态模块
  4. 状态声明内部指定状态函数的调用。状态函数是每个Salt状态模块中定义的函数。
  • apache配置项
  • /etc/httpd/conf/httpd.conf配置项
    • file.managed是简写形式,直接调用file模块managed方法根据需要从master获取文件并可能会通过模板系统(templating system)进行渲染。文件要满足如下要求:
      1. 使用master上面的apache/httpd.conf文件
      2. user=root
      3. group=root
      4. mode=644
      5. 使用jinja模板渲染
      6. 上下文变量:
        • custom_var=”override”
      7. 默认值:
        • custom_var=”default value”
        • other_var=123

ssh/init.sls

1
2
3
4
5
6
7
8
9
10
11
openssh-client:
pkg.installed

/etc/ssh/ssh_config:
file.managed:
- user: root
- group: root
- mode: 644
- source: salt://ssh/ssh_config
- require:
- pkg: openssh-client

说明:

ssh/server.sls

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
30
31
32
33

include:
- ssh

openssh-server:
pkg.installed

sshd:
service.running:
- require:
- pkg: openssh-client
- pkg: openssh-server
- file: /etc/ssh/banner
- file: /etc/ssh/sshd_config

/etc/ssh/sshd_config:
file.managed:
- user: root
- group: root
- mode: 644
- source: salt://ssh/sshd_config
- require:
- pkg: openssh-server

/etc/ssh/banner:
file:
- managed
- user: root
- group: root
- mode: 644
- source: salt://ssh/banner
- require:
- pkg: openssh-server

说明:

  • include语句将别的state添加到当前文件中,使得state可以跨文件引用。

    使用include相当于把被引用的内容文件添加到自身,可以require、watch或extend被引用的SLS中定义的内容。

    这里引用了sshstate。

  • openssh-server配置项

  • sshd

  • /etc/ssh/sshd_config配置项

  • /etc/ssh/banner配置项

ssh/custom-server.sls

1
2
3
4
5
6
7
include:
- ssh.server

extend:
/etc/ssh/banner:
file:
- source: salt://ssh/custom-banner

说明:

  • 引用sshstate的server配置项
  • extend可以复用已有的state,在原来的基础上进行扩展,增加新的配置或修改已有的配置。
    1. /etc/ssh/banner配置项的文件修改为salt://ssh/custom-banner