- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
10.6 state 介绍
state是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等,更多状态对象见http://docs.saltstack.com/ref/states/all/index.html。
10.6.1 state的定义
state的定义是通过sls文件进行描述的,支持YAML语法,定义的规则如下:
$ID: $State: - $state: states
其中:
$ID,定义state的名称,通常采用与描述的对象保持一致的方法,如apache、nginx等;
$State,须管理对象的类型,详见http://docs.saltstack.com/ref/states/all/index.html;
$state:states,定制对象的状态。
官网提供的示例如下:
1 apache: 2 pkg: 3 - installed 4 service: 5 - running 6 - require: 7 - pkg: apache
上述代码检查apache软件包是否已安装状态,如果未安装,将通过yum或apt进行安装;检查服务apache进程是否处于运行状态。下面详细进行说明:
第1行用于定义state的名称,此示例为apache,当然也可以取其他相关的名称。
第2行和第4行表示state声明开始,使用了pkg和service这两个状态对象。pkg使用系统本地的软件包管理器(yum或apt)管理将要安装的软件,service管理系统守护进程。
第3行和第5行是要执行的方法。这些方法定义了apache软件包和服务目标状态,此示例要求软件包应当处于已安装状态,服务必须运行,如未安装将会被安装并启动。
第6行是关键字require,它确保了apache服务只有在成功安装软件包后才会启动。
注意 require:在运行此state前,先运行依赖的state关系检查,可配置多个state依赖对象;watch:在检查某个state发生变化时运行此模块。
10.6.2 state的使用
state的入口文件与pillar一样,文件名称都是top.sls,但state要求sls文件必须存放在saltstack base定义的目录下,默认为/srv/salt。state描述配置.sls支持jinjia模板、grains及pillar引用等,在state的逻辑层次定义完成后,再通过salt'*'state.highstate执行生效。下面扩展10.5.1节定义的范例,结合grains与pillar,实现一个根据不同操作系统类型部署apache环境的任务。
1.定义pillar
【/srv/pillar/top.sls】
base: '*': - apache
在top.sls中引用二级配置有两种方式:一种是直接引用,如本示例中直接引用apache.sls;另一种是创建apache目录,再引用目录中的init.sls文件,两者效果是一样的。为了规范起见,笔者建议采用二级配置形式,同理,state的top.sls也采用如此方式。
#mkidr /srv/pillar/apache #创建apache目录
【/srv/pillar/apache/init.sls】
pkgs: {% if grains['os_family'] == 'Debian' %} apache: apache2 {% elif grains['os_family'] == 'RedHat' %} apache: httpd {% elif grains['os'] == 'Arch' %} apache: apache {% endif %}
测试pillar数据,执行salt'*'pillar.data pkgs,结果返回以下信息,说明配置已生效。
SN2013-08-021: ---------- pkgs: ---------- apache: httpd
2.定义state
【/srv/salt/top.sls】
base: '*': - apache
【/srv/salt/apache/init.sls】
apache: pkg: - installed - name: {{ pillar['pkgs']['apache'] }} service.running: - name: {{ pillar['pkgs']['apache'] }} - require: - pkg: {{ pillar['pkgs']['apache'] }}
在配置中,{{pillar['pkgs']['apache']}}将引用匹配到操作系统发行版对应的pillar数据,笔者的环境为CentOS,故将匹配为httpd,检查目标主机是否已经安装,没有则进行安装(yum–y install httpd),同时检查apache服务是否已经启动,没有则启动(/etc/init.d/httpd start)。
3.执行state
执行state及返回结果信息见图10-15。
图10-15 执行state的结果信息
从图10-15中可以看出,结果返回两种对象类型结果,分别为pkg与service,执行的结果是自动部署apache 2.2.15环境并启动服务。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论