博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SaltStack Pillar 详解
阅读量:5018 次
发布时间:2019-06-12

本文共 4544 字,大约阅读时间需要 15 分钟。

简介  

  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_pillarsaltmaster:    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.slszabbix:  package-name: zabbix  version: 2.2.4[root@saltmaster pillar]# cat services.slszabbix:  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.slsbase:  '*':      - packages[root@saltmaster pillar]# cat packages.slspkgs: # 模块名称  {% 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.itemssaltmaster: ---------- pkgs: ---------- apache: httpd git: gitsalt-minion-1: ---------- pkgs: ---------- apache: apache2 git: git-core

 

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

# cat /srv/pillar/database.slsdbname: projectdbuser: usernamedbpass: passworddbhost: localhost# 在模块文件中引用方式:# cat website.conf# MySQL setttingsdefine('DB_NAME', '{
{ pillar['dbname'] }}')# MySQL database usernamedefine('DB_USER', '{
{ pillar['dbuser'] }}')# MySQL database passworddefine('DB_PASSWORD', '{
{ pillar['dbpass'] }}')# MySQL hostnamedefine('DB_HOST', '{
{ pillar['dbhost'] }}')

 

转载于:https://www.cnblogs.com/wang-yc/p/8056412.html

你可能感兴趣的文章
CentOS目录树详细解释
查看>>
UVa 10161 - Ant on a Chessboard
查看>>
C++ STL容器底层机制
查看>>
.net 查壳工具
查看>>
文本处理工具(一)基础处理
查看>>
LeetCode OJ - Evaluate Reverse Polish Notation
查看>>
Largest product in a grid( Project Euler problem 11)
查看>>
Arduino与水泵实验+土壤湿度传感器
查看>>
C# 嵌入CMD.exe
查看>>
SQL语言分为四类,每类分别是?各包括什么?
查看>>
理解Node.js安装及模块化
查看>>
程序员水平分级 你属于哪一类?
查看>>
按顺序获取key的值
查看>>
循环-16. 猴子吃桃问题(15)
查看>>
RSA工作原理
查看>>
温故而知新_C语言_前缀++(--)和后缀++(--)
查看>>
C# 接口
查看>>
C++STL - 函数模板
查看>>
django之Ajax
查看>>
20_学生选课数据库SQL语句练习题1
查看>>