saltstack的pillar和state

一、pillar的定义

  Saltstack默认将主控端配置文件中的所有数据都定义到pillar中,而且对所有被控主机开放,可以通过修改/etc/salt/master配置中的pillar_opts:Ture来开启这项功能

开启后可以运行 salt '*' pillar.data 来查看效果(显示太多就不截图了)

 

pillar支持在sls文件中定义数据,格式需符合YAML规范,和Saltstack的state组件十分相似,两者的入口文件都是top.sls,当不用将两者混淆

 

修改主配置文件/etc/salt/master中的pillar_rooots参数,定义pillar的主目录:

pillar_roots:
  base:
    - /srv/pillar

创建 pillar 目录

install -d /srv/pillar

 

进入pillar 目录创建入口文件 top.sls(*代表任意主机)

base:
  '*':
    - data

创建data.sls

flow:
  maxconn: 30000
  maxmem: 6G

然后执行salt '*' pillar.data查看,pillar数据多出刚才加的数据(如果没有。可以执行salt '*' saltutil.refresh_pillar来刷新被控主机pillar数据)

 

二、state定义

  state是Saltstack最核心的功能,通过预先定制好的sls文件对被控主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等

state是通过sls文件进行描述的,支持YMAL语法,例:

1 apache:
2   pkg:
3     - installed
4   service.running:
5     - name: apache
6     - require:
7       - pkg: apache

1行表示定义的state名称

2、4行表示state声明开始,使用了pkg和service两个状态对象,pkg使用系统本地的软件包管理器(yum或apt)管理将要安装的软件,service管理系统守护进程

3、5行表示要执行的方法,这些方法定义了apache软件包和服务目标的状态,这里要求软件包处于已安装状态,服务必须运行,如没有则会被安装然后启动

6行的关键字require,它确保了apache服务只有在成功安装软件包后才会启动

 

top.sls中引用二级配置有两种方式:一种是直接引用如上面的data.sls。另一种是先创建目录,在引用目录中的init.sls

下面结合pillar和state来实现一个根据不同操作系统类型部署apache环境的任务

1、定义pillar

/srv/pillar/top.sls

base:
  '*':
    - apache

创建apache目录,进入创建init.sls

/srv/pillar/apache/init.sls

pkgs:
{% if grains['os_family'] == 'RedHat' %}
  apache: httpd
  {% elif grains['os_family'] == 'Debian' %}
  apache: apache2
{% endif %}

测试salt '*' pillar.data pkgs,放回添加的结果说明配置已经生效

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'] }}

 

执行state

salt '*' state.highstate

 

它会根据操作系统的不同去安装apache

ubuntu

centos

 

参考资料:python自动化运维技术与最佳实践

posted @ 2017-02-22 16:09  J_hong  阅读(1239)  评论(0)    收藏  举报