salt_pillar

来源:互联网 发布:2017百万公众网络平台 编辑:程序博客网 时间:2024/06/17 11:05

salt 的pillar
Pillar 用于给特定的minion定义任何你需要的数据,这些数据可以被salt 的其他组件使用。
pillar 在解析完成后,是一个嵌套的dict结构,最上层的key 是minion ID ,其value是该minino所拥有的pillar 数据,每一个value也是一个key/value
pillar数据是与特定的minion 关联的,每个Minion只能看到自己的数据,所以,pillar可以用来传递敏感数据。
PILLAR可以用在:

  • 敏感数据
    例如ssh key 加密证书 ,由于pillar 使用独立的加密session ,可以确保这些敏感数据不被其他minion看到
  • 变量
    可以在pillar中处理平台的差异,比如针对不同的操作系统设置软件包的名字,然后在state中引用
  • 其他任何数据
    可以在pillar中添加任何需要用到的数据,比如定义用户和UID的对应关系,minion的角色等。
  • 在targetting中,pillar可以用来选择minion,使用-I 选项。
    如何查看pillar的属性:
salt '*' sys.doc pillar            //查看与pillar有关的帮助信息salt '*' pillar.items              //获取所有pillar items值salt '*' pillar.data               //等价于pillar.itemssalt '*' saltutil.refresh_pillar   //刷新pillar值salt '*' saltutil.sync_all         //刷新pillar值,与refresh_pillar操作类似,但范围更大salt '*' sys.list_functions pillar //列出所有的pillar相关函数方法salt '*' pillar.get xxx            //获取某项的值salt '*' pillar.raw                //内存中获取

如何定义pillar:
pillar默认定义在/srv/pillar,需要在master的主配置文件中打开。

在master的配置文件中打开pillar功能
默认情况下,master配置文件中的所有数据都添加到pillar中且对所有的minion可用,如果要禁用此项,可以在master中添加如下数据,重启生效。

pillar_opts: False

使用sls文件定义pillar
pillar使用与state相似的sls文件,pillar文件放在master配置文件中pillar_roots定义的目录下,示例如下:
top.sls引用时可以用两种方法:可以将引用文件放在同级,上面使用的就是这种;另一种是是在pillar目录下创建packages 、services目录,在该目录下创建init.sls文件

pillar_roots:  base:    - /srv/pillar

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

pillar的用法:
结构

tree pillar/pillar/├── packages.sls├── ports.sls├── top.sls└── version.sls
  1. 标记软件的信息,例如版本,所用端口
cat top.slsbase:  "os: CentOS":    - match: grain    - version    - ports  "os: Ubuntu":    - match: grain    - version    - portscat version.slszabbix:  - package_name: zabbix  - version: 3.2.2.0cat ports.slszabbix:  - package_name: zabbix  - ports: 10050  - usr: root使用同步将其同步: salt "*" saltutil.refresh_pillarginkgo:    Truejinkeen-ubuntu:    True获取所有信息salt "*" pillar.items获取指定项信息salt "*" pillar.items zabbix:"version"ginkgo:    ----------    zabbix:version:        3.2.2.0jinkeen-ubuntu:    ----------    zabbix:version:        3.2.2.0
  1. 为不同系统安装软件:
/srv/pillar/top.sls:base:    '*':        - data        - packages/srv/pillar/packages.sls:{% if grains['os'] == 'RedHat' %}apache: httpdgit: git{% elif grains['os'] == 'Debian' %}apache: apache2git: git-core{% endif %}/srv/pillar/data/init.sls:role: DB_master

这段代码的意思是:base 环境中所有的Minion都具有packages和data中定义的数据,pillar采用与file server 相同的文件映射方式,在本例中,packages映射到文件/srv/pillar/packages.sls ,data映射到/srv/pillar/data/init.sls 。注意,key和value要用冒号加空格分割,没有空格的话,解析将解析失败。
3. 储存敏感信息:

四、敏感数据密码信息/// 暂时不明白。这里以mysql 的用户、密码及库名为例 ,如下:# cat /srv/pillar/database.slsdbname: projectdbuser: usernamedbpass: passworddbhost: localhost在模块文件中引用是,就可以像如下进行引用:# cat website.conf// MySQL settingsdefine('DB_NAME', '{{ pillar['dbname'] }}');// MySQL database usernamedefine('DB_USER', '{{ pillar['dbuser'] }}');// MySQL database passworddefine('DB_PASSWORD', '{{ pillar['dbpass'] }}');// MySQL hostnamedefine('DB_HOST', '{{ pillar['dbhost'] }}');

pillar如何使用:
pillar解析后是dict对象,直接使用Python语法,可以用索引(pillar)
在state 文件中调用:

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

进一步优化,设置默认值。

apache:  pkg.installed:    - name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}

(1)pillar是存储在master端,缓存在minion端,存储的是minion端的配置信息,是动态数据,不需要在minion上操作。需要在master的配置文件上开启pillar,并给每个pillar定义一个top入口。
(2)grains是存储在minion端,缓存在master端,存储的是minion在刚启动时收集的静态数据,如系统、cpu、内存等信息。需要在minion上定义grains。

原创粉丝点击