SaltStack入门【Pillar配置】

Piller介绍

Salt中的pillar接口是Salt开发中最重要的接口之一。Pillar是用来产生特定于minions的任意数据的接口。pillar中产生的数据几乎可以在Salt的任何组件中使用,用途广泛:

高度敏感的数据:
通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
Minion配置:
minion模块,像是execution模块,states,和returner可以通过存储在pillar中的数据配置。
Variables:
特定minions或者groups需要变量可以定义在pillar中,以后可以在sls公式或者模板文件中使用。
任意的数据:
Pillar可以包含任何基础数据结构,像是一个列表的值,键值存储结构都可以定义使得可以在sls公式中简单的遍历一组值。
Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。

一、master配置文件:

pillar_roots:
  base:
    - /srv/pillar

二、配置示例:

这段代码定义了base环境下的Pillar文件保存在/srv/pillar/目录下。与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:

示例1:

1、/srv/pillar/top.sls:

base:
 '*':
  - packages

2、/srv/pillar/packages.sls

## 根据操作系统不同,判定系统下的软件包名称,来解决saltstack配置的平台兼容性,例如在CentOS下apache的包叫httpd,而在Debian系统中apache 叫 apapche2

{% if grains['os'] == 'CentOS' %}
apache: httpd
git: git     ##可以附加多个定义
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core ##可以附加多个定义
{% endif %}

##此处特别要注意,作者就因为这一点点疏忽导致浪费一小天时间,在使用这个grains判断条件时,一定要事先查看好它的返回值,如果写错了会导致定义失败,报如下错误:

[root@master pillar]# salt '*' state.highstate
test01:
    Data failed to compile:
----------
    Rendering SLS 'base:filetest' failed: Jinja variable 'apache' is undefined
test02:
    Data failed to compile:
----------
    Rendering SLS 'base:filetest' failed: Jinja variable 'apache' is undefined

提示apache未定义,导致这个错误的就是因为我把grains返回值 CentOS 写成了 Centos,返回值写错了,条件判定不到,请大家一定要注意,认真查看配置。
可以通过下边的命令来先查看grains返回值:

salt ‘*’ grains.item os

[root@tmaster pillar]# salt '*' grains.item os
test01:
    ----------
    os:
        CentOS
test02:
    ----------
    os:
        CentOS

 

3、/srv/salt/top.sls :

base:
 '*':
  - packinstall

4、/srv/salt/packinstall.sls :

apache:
  pkg.installed:
    - name: {{ pillar['apache'] }}
git:
  pkg.installed:
    - name: {{ pillar['git'] }}

按照以上4个步骤配置就完成使用pillar的配置。

示例2: 利用pillar屏蔽敏感信息 定义服务连接数据库的权限的配置参数
/srv/pillar/database.sls

dbname: project
dbuser: username
dbpass: password
dbhost: localhost

website.conf

// MySQL settings
define('DB_NAME', '{{ pillar['dbname'] }}');
// MySQL database username
define('DB_USER', '{{ pillar['dbuser'] }}');
// MySQL database password
define('DB_PASSWORD', '{{ pillar['dbpass'] }}');
// MySQL hostname
define('DB_HOST', '{{ pillar['dbhost'] }}');

示例3: ##根据服务器角色,来分发对应的文件
首先这个角色值是在minion自定义的

vi /etc/salt/minion 
# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the 'roles' grain having two values that can be matched against.
grains:
  roles:
     webserver
##定义完成后,重启minion
service salt-minion restart

master端读取grains数据

[root@master pillar]# salt '*' grains.item roles
test01:
    ----------
    roles:
        memcache
test02:
    ----------
    roles:
        webserver

已经成功的读取了我们自定义的角色名称
接下来配置pillar下的top.sls文件

base:
 '*':
  - file

file.sls

pkgs:
  {% if grains['roles'] == 'webserver' %}
  filename: webserver.conf
  {% elif grains['roles'] == 'memcache' %}
  filename: memcache.conf
  {% endif %}

配置完成之后我们可以验证一下,是否生效
salt ‘*’ pillar.data

root@master pillar]# salt '*' pillar.data
test01:
    ----------
    pkgs:
        ----------
        filename:
            memcache.conf
test02:
    ----------
    pkgs:
        ----------
        filename:
            webserver.conf

salt ‘*’ pillar.item pkgs

salt '*' pillar.item pkgs
root@master pillar]# salt '*' pillar.item pkgs
test01:
    ----------
    pkgs:
        ----------
        filename:
            memcache.conf
test02:
    ----------
    pkgs:
        ----------
        filename:
            webserver.conf

salt ‘*’ state.highstate 更新配置

[root@master pillar]# salt '*' state.highstate
test02:
----------
          ID: /tmpabc
    Function: file.managed
        Name: /tmp/webserver.conf
      Result: True
     Comment: File /tmp/webserver.conf is in the correct state
     Started: 11:22:26.558099
    Duration: 8.805 ms
     Changes:   

Summary
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
test01:
----------
          ID: /tmpabc
    Function: file.managed
        Name: /tmp/memcache.conf
      Result: True
     Comment: File /tmp/memcache.conf is in the correct state
     Started: 11:23:56.456624
    Duration: 21.128 ms
     Changes:   

Summary
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1

至此pillar的配置方法,和利用pillar来解决平台的差异性和根据角色分发文件已经讲解完成,pillar还可以做更多的事儿,这取决于你的想象力。

发表评论