在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
两个配置分别放在了apache
和ssh
文件夹。一个Salt状态可以使用单个的SLS文件,或者使用一个文件夹。后者更加灵活方便。
apache/init.sls
1 |
|
说明:
- sls文件使用YAML格式定义,最外面的层级定义配置项。
- 一个sls文件中可以有多个配置项,配置项的ID可以起任意的名字。本例中包含ID为
apache
和/etc/httpd/conf/httpd.conf
两个配置项。 - 配置项内是一系列的状态声明。所有的状态项来自Salt状态模块。即可以使用Salt内置的状态模块,也可以编写自定义的状态模块
- 状态声明内部指定状态函数的调用。状态函数是每个Salt状态模块中定义的函数。
- apache配置项
- pkg模块,使用操作系统的包管理器(如yum, apt-get)安装软件包
- salt.states.pkg.installed函数, 验证软件包是否安装以及是否为指定的版本
- service模块管理服务/守护进程(daemon)的启动或停止
- salt.states.service.running函数检查服务是否已经启动
- service模块定义了salt.states.service.mod_watch函数,可以使用
watch
要素监控其他的模块是否满足。这里监控以下情况: user.present
是简写形式,直接调用user
模块的present
函数检查是否存在如下属性的apache
用户:- uid=87
- gid=87
- home目录为
/var/www/html
- 登录脚本为
/bin/nologin
- 检查依赖项:
apache
用户组
group.present
是简写形式,直接调用group
模块的present
函数检查是否存在如下属性的apache
用户组:- gid=87
- 检查依赖项:
apache
软件包
- pkg模块,使用操作系统的包管理器(如yum, apt-get)安装软件包
/etc/httpd/conf/httpd.conf
配置项
ssh/init.sls
1 | openssh-client: |
说明:
ssh/server.sls
1 |
|
说明:
include语句将别的state添加到当前文件中,使得state可以跨文件引用。
使用include相当于把被引用的内容文件添加到自身,可以require、watch或extend被引用的SLS中定义的内容。
这里引用了
ssh
state。openssh-server
配置项sshd
/etc/ssh/sshd_config
配置项/etc/ssh/banner
配置项
ssh/custom-server.sls
1 | include: |
说明:
- 引用
ssh
state的server配置项 extend
可以复用已有的state,在原来的基础上进行扩展,增加新的配置或修改已有的配置。- 将
/etc/ssh/banner
配置项的文件修改为salt://ssh/custom-banner
- 将