返回介绍

10.6 state 介绍

发布于 2024-01-29 22:54:23 字数 2918 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文