简介  

  grains用于存储静态不易变更的数据,而pillar一般用于存储动态, 敏感的数据,通过minion和master设置或获取grains信息,而pillar信息只能在master端配置,在到minion端执行。pillar 默认使用sls文件进行数据存储(YAML格式),除此之外, pillar也同事支持多种后端的数据存储方式,例如:mysql,mongodb,ldap,json,cobbler甚至是puppet。

常用的场景:

  1. 敏感数据:例如ssh key,加密整数等,由于Pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。

  2. 不同变量:可以再pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在state中引用。

  3. 用户版本等变量:可以在pillar中添加任何需要用到的数据,比如定义用户和UID的对应关系,软件版本和端口,minion的角色等等

基础内容:

  • 默认目录: /srv/pillar/, 在master配置文件中指定,目录默认需要自己创建。修改配置文件可修改。
  • 入口文件: /srv/pillar/top.sls , pillar默认的主入口配置文件。
  • Pillar默认值:与grains不同,所有的pillar值都是人为设定的,默认pillar为空。
  • sls 文件:pillar的文件,sls是saltstack的缩写,YAML风格,支持jinja模板。

常用命令:

    salt '*' sys.doc pillar            # 查看与pillar有关的帮助信息
salt '*' pillar.items # 获取所有pillar items值
salt '*' pillar.data # 等价于pillar.items
salt '*' saltutil.refresh_pillar # 刷新pillar值
salt '*' saltutil.sync_all # 刷新pillar值,与refresh_pillar操作类似,但范围更大
salt '*' sys.list_functions pillar # 列出所有的pillar相关函数方法
salt '*' pillar.get xxx # 获取某项的值,类似于python字典的get函数
salt '*' pillar.raw # 内存中获取
salt '*' state.highstate pillar={'test': 'abc'} # 在命令设置pillar 数据
# 数据格式,类似于字典
foo:
bar:
baz:qux
# 获取方式:
{{ pillar['foo']['bar']['baz']}}
{{ salt['pillar.get']('foo:bar:baz', 'qux')}}

pillar.get

Master配置文件中关于pillar的相关信息

(1)pillar目录
pillar_roots:
base:
- /srv/pillar
(2)是否将master配置文件中的数据信息添加到pillar中,默认是不加,需要的话可以改成True,重启服务生效。
pillar_opts: False
(3)pillar 源,salt支持引入pillar外部资源,例如从数据库导入pillar值,默认是关闭的
ext_pillar_first: False
(4)开启pillar gitgs ssl验证
pillar_gitfs_ssl_verify: True
(5)开启pillar render 错误信息
pillar_safe_render_error: True
(6)设置pillar配置合并策略
pillar_source_merging_strategy: smart

Pillar的刷新方式:

  • salt '*' saltutil.refresh_pillar
  • salt '*' saltutil.sync_all
(1) salt '*' saltutil.refresh_pillar
[root@saltmaster pillar]# salt '*' saltutil.refresh_pillar
saltmaster:
True
(2) salt '*' saltutil.sync_all
[root@saltmaster pillar]# salt '*' saltutil.sync_all
saltmaster:
----------
beacons:
clouds:
engines:
grains:
log_handlers:
modules:
output:
proxymodules:
renderers:
returners:
sdb:
states:
utils:

刷pillar 的输出结果

关于pillar的 sls 文件使用说明:

  默认的入口文件为/src/pillar/top.sls

  top.sls的引用方式分为两种:

  • 将引用sls文件放在同级目录
  • 在/src/pillar/ 目录下创建对应的packages, services目录,并在该目录下创建init.sls文件。

备注:如果要引用执行的sls文件和目录同时存在,也就是方法一和方法二都存在,packages.sls和packages/init.sls,会优先使用packages.sls文件。

(1)方式一:
[root@saltmaster srv]# tree /srv/pillar/
/srv/pillar/ # 默认pillar文件目录
├── packages.sls # packages 引用文件
├── services.sls # services 引用文件
└── top.sls # 固定的入口文件top.sls
(2)方式二:
[root@saltmaster srv]# tree /srv/pillar/
/srv/pillar/
├── packages # packages 目录
│   └── init.sls # 引用文件
├── services # services 目录
│   └── init.sls # 引用文件
└── top.sls # 固定的入口文件top.sls # 引入文件说明
[root@saltmaster pillar]# cat packages.sls
zabbix:
package-name: zabbix
version: 2.2.4
[root@saltmaster pillar]# cat services.sls
zabbix:
port: 10050
user: admin

top.sls引用说明

配置好top.sls以及附属sls文件后,可以刷新一下pillar,查看各个pillar值

[root@saltmaster pillar]# salt '*' pillar.items
saltmaster:
----------
zabbix:
----------
package-name:
zabbix
port:
10050
user:
admin
version:
2.2.4

pillar 中jinja模板的使用

  通过jinja模板来写 sls 文件,然后通过操作系统的不同利用grains 获取 pillar 信息。同样在state组件里也可以更方便的调用pillar。

[root@saltmaster pillar]# cat top.sls
base:
'*':
- packages
[root@saltmaster pillar]# cat packages.sls
pkgs: # 模块名称
{% if grains['os'] == 'CentOS' %} # 使用jinja模板,通过grains筛选主机
apache: httpd # 安装包名称
git: git
{% elif grains['os'] == 'SUSE' %}
apache: apache2
git: git-core
{% endif %}
[root@saltmaster pillar]# salt '*' saltutil.refresh_pillar
[root@saltmaster pillar]# salt "*" pillar.items
saltmaster:
----------
pkgs:
----------
apache:
httpd
git:
git
salt-minion-1:
----------
pkgs:
----------
apache:
apache2
git:
git-core

pillar 对敏感数据密码信息的存储

# cat /srv/pillar/database.sls
dbname: project
dbuser: username
dbpass: password
dbhost: localhost
# 在模块文件中引用方式:
# cat website.conf
# MySQL setttings
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'] }}')

SaltStack Pillar 详解的更多相关文章

  1. SaltStack数据系统-Pillar详解

    1:存储位置 存储在master端,存放需要提供给minion的信息 每个minion只能访问master分配给自己的(应用场景) 2:在centos7 salt 2015.5.10 (Lithium ...

  2. saltstack配置文件详解

    软件依赖 Python版本大于2.6或版本小于3.0: 对Python版本要求 msgpack-python: SalStack消息交换库 YAML: SaltStack配置解析定义语法 Jinja2 ...

  3. SaltStack Grains 详解

    简介 Grains 是SaltStack 的重要组件之一.主要记录minion的静态信息,比如CPU,内存,磁盘,网络信息等.Grains信息是minion启动时汇报给Master的. 刷新grain ...

  4. SaltStack系列(一)之环境部署、命令及配置文件详解

    一.SaltStack介绍 1.1 saltstack简介: saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证 ...

  5. SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

    SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16   ##### 主要配置设置 ##### 配置 默认值 ...

  6. SaltStack 入门到精通第二篇:Salt-master配置文件详解

    SaltStack 入门到精通第二篇:Salt-master配置文件详解     转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...

  7. Python3安装使用SaltStack以及salt-api详解

    序言 最近在使用salt-api做主机批量管理部署,整理一下文档.之前使用saltstack 多用于命令行管理,自己做web版的自动化管理平台时,发现命令行的些许局限性,接触到salt-api,找到了 ...

  8. saltstack源码详解一

    目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...

  9. Saltstack的部署及其详解

    https://repo.saltstack.com/ Saltstack简介: salt是一个多平台基础设施管理工具通常只用在linux上,使用那个轻量级的通讯器,ZN用python写成的批量管理工 ...

随机推荐

  1. 信息传递(tarjan)

    信息传递 http://uoj.ac/problem/146 有 n 个同学(编号为 1 到n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i的同学的信息传递对象 ...

  2. KVC(forKey,forKeyPath)

    KVC是Cocoa一个大招,非常牛逼. 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)  如:Person.m文件中: @implementation Person{    ...

  3. entity_class实体类

    对应数据库中表,并继承基础模型类~

  4. msdn 硬盘

    https://msdn.microsoft.com/library/windows/hardware/ff566204 Returns the ATA-2 identify data, the Se ...

  5. Android 上传文件到XP

    Android部分: AsyncHttpClient client = new AsyncHttpClient(); RequestParams requestParams = new Request ...

  6. linux平台 spark standalone集群 使用 start-all,stop-all 管理集群的启动和退出

    一.配置/etc/profile: 文件尾部增加以下内容: export SPARK_HOME=/home/spark/spark-2.2.0-bin-hadoop2.7 export PATH=$P ...

  7. 使用 John the Ripper 破解 Windows 密码

    cd /target/windows/system32/config 使用 SamDump2 来提取哈希,并将文件放到你的 root 用户目录中的一个叫做 hashes 的 文件夹中. samdump ...

  8. 5、Docker架构和底层技术

    5.1 Docker Platform Docker提供了一个开发,打包,运行APP的平台 把APP和底层infrastructure隔离开来 5.2 Docker Engine 后台进程(docke ...

  9. LR中的迭代次数设置

    在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢?就是说这些资源用了一次就不能在用了的. --参数化时,在select  next row选择unique,update value o ...

  10. CentOS 7安装OpenVPN

    命令很简单,但是网上似乎没资料,只有RHEL6以下的资料. 直接贴命令: 1 2 3 4 5 cd ~ wget http://swupdate.openvpn.org/as/openvpn-as-2 ...