Pillar是什么?

Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。Salt在 0.9.8版本中引入了Pillar。Pillar在解析完成后,是一个嵌套的dict结构;最上层的key是minion ID,其value是该minion所拥有的Pillar数据;每一个value也都是key/value。

这里可以看出Pillar的一个特点,Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar 可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。

Pillar可以用在哪些地方?

  • 敏感数据

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

  • 变量

可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用。

  • 其他的任何数据

可以在Pillar中添加任何需要用到的数据。比如定义用户和UID的对应关系,mnion的角色等。

  • 用在Targetting中

Pillar可以用来选择minion,使用-I选项

怎样定义Pillar数据?

master配置文件中定义

默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

pillar_opts: False

使用SLS文件定义Pillar

Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:

pillar_roots:base:- /srv/pillar

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

base:'*':- data    - packages

/srv/pillar/packages.sls:

{% if grains['os'] == 'RedHat' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: 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要用冒号加空格分隔,没有空格的话将解析失败。

Pillar还可以使用其他的匹配方式来选择minion,下面的例子中,servers只应用到操作系统是Debain的机器:

dev:'os:Debian':- match: grain    - servers

如何知道minion拥有哪些Pillar数据?

使用执行模块pillar。pillar模块有两个funtion:pillar.data和pillar.raw。示例如下:

# salt '*' pillar.data
kaibin.test3:----------master:----------__role:masterauth_mode:1auto_accept:Falsecachedir:/var/cache/salt/mastercli_summary:Falseclient_acl:----------client_acl_blacklist:----------cluster_masters:cluster_mode:paranoidcolor:Trueconf_file:/etc/salt/masterconfig_dir:/etc/saltcython_enable:Falsedaemon:Truedefault_include:master.d/*.confenable_gpu_grains:Falseenforce_mine_cache:Falseenumerate_proxy_minions:Falseenvironment:Noneext_job_cache:ext_pillar:extension_modules:/var/cache/salt/extmodsexternal_auth:----------failhard:Falsefile_buffer_size:1048576file_client:localfile_ignore_glob:Nonefile_ignore_regex:Nonefile_recv:Falsefile_recv_max_size:100file_roots:----------base:- /srv/myself/fileserver_backend:- rootsfileserver_followsymlinks:Truefileserver_ignoresymlinks:Falsefileserver_limit_traversal:Falsegather_job_timeout:5gitfs_base:mastergitfs_env_blacklist:gitfs_env_whitelist:gitfs_insecure_auth:Falsegitfs_mountpoint:gitfs_passphrase:gitfs_password:gitfs_privkey:gitfs_pubkey:gitfs_remotes:gitfs_root:gitfs_user:hash_type:md5hgfs_base:defaulthgfs_branch_method:brancheshgfs_env_blacklist:hgfs_env_whitelist:hgfs_mountpoint:hgfs_remotes:hgfs_root:id:kaibin.test3interface:192.168.65.129ioflo_console_logdir:ioflo_period:0.01ioflo_realtime:Trueioflo_verbose:0ipv6:Falsejinja_lstrip_blocks:Falsejinja_trim_blocks:Falsejob_cache:Truekeep_jobs:24key_logfile:/var/log/salt/keykeysize:4096log_datefmt:%H:%M:%Slog_datefmt_logfile:%Y-%m-%d %H:%M:%Slog_file:/var/log/salt/masterlog_fmt_console:[%(levelname)-8s] %(message)slog_fmt_logfile:%(asctime)s,%(msecs)03.0f [%(name)-17s][%(levelname)-8s] %(message)slog_granular_levels:----------log_level:warningloop_interval:60maintenance_floscript:/usr/lib/python2.6/site-packages/salt/daemons/flo/maint.flomaster_floscript:/usr/lib/python2.6/site-packages/salt/daemons/flo/master.flomaster_job_cache:local_cachemaster_pubkey_signature:master_pubkey_signaturemaster_roots:----------base:- /srv/salt-mastermaster_sign_key_name:master_signmaster_sign_pubkey:Falsemaster_tops:----------master_use_pubkey_signature:Falsemax_event_size:1048576max_minions:0max_open_files:100000minion_data_cache:Trueminionfs_blacklist:minionfs_env:baseminionfs_mountpoint:minionfs_whitelist:nodegroups:----------open_mode:Falseorder_masters:Falseoutputter_dirs:peer:----------permissive_pki_access:Falsepidfile:/var/run/salt-master.pidpillar_opts:Truepillar_roots:----------base:- /srv/pillarpillar_source_merging_strategy:smartpillar_version:2ping_on_rotate:Falsepki_dir:/etc/salt/pki/masterpreserve_minion_cache:Falsepub_hwm:1000publish_port:4505publish_session:86400queue_dirs:raet_main:Trueraet_mutable:Falseraet_port:4506range_server:range:80reactor:reactor_refresh_interval:60renderer:yaml_jinjarep_hwm:50000ret_port:4506root_dir:/rotate_aes_key:Truerunner_dirs:saltversion:2014.7.0search:search_index_interval:3600serial:msgpackshow_jid:Falseshow_timeout:Falsesign_pub_messages:Falsesock_dir:/var/run/salt/mastersqlite_queue_dir:/var/cache/salt/master/queuesssh_passwd:ssh_port:22ssh_sudo:Falsessh_timeout:60ssh_user:rootstate_aggregate:Falsestate_auto_order:Truestate_events:Falsestate_output:fullstate_top:salt://top.slsstate_verbose:Truesvnfs_branches:branchessvnfs_env_blacklist:svnfs_env_whitelist:svnfs_mountpoint:svnfs_remotes:svnfs_root:svnfs_tags:tagssvnfs_trunk:trunksyndic_event_forward_timeout:0.5syndic_master:syndic_max_event_process_time:0.5syndic_wait:5timeout:5token_dir:/var/cache/salt/master/tokenstoken_expire:43200transport:zeromquser:rootverify_env:Truewin_gitrepos:- https://github.com/saltstack/salt-winrepo.gitwin_repo:/srv/salt/win/repowin_repo_mastercachefile:/srv/salt/win/repo/winrepo.pworker_floscript:/usr/lib/python2.6/site-packages/salt/daemons/flo/worker.floworker_threads:5zmq_filtering:False

在master上修改Pilla文件后,需要用以下命令刷新minion上的数据:

salt '*' saltutil.refresh_pillar

如果定义好的pillar不生效,建议刷新一下试试。

Pillar中数据如何使用?

Pillar解析后是dict对象,直接使用Python语法,可以用索引(pillar['pkgs']['apache'])或get方法(pillar.get('users', {}))。详见下面的例子

示例

targeting

使用-I选项表示使用Pillar来匹配minion.

salt -I 'role:DB*' test.ping

在Pillar中使用列表

Pillar的key/value结构中的value可以是string,也可以是一个list。Pillar文件定义如下:
/srv/pillar/users/init.sls:

users:thatch: 1000shouse: 1001utahdave: 1002redbeard: 1003

在top.sls中引用Pillar文件,对所有的minion应用users中的内容:
/srv/pillar/top.sls:

base:'*':- data    - users

现在所有的minion都具有了users数据,可以在state文件中使用:
/srv/salt/users/init.sls:

{% for user, uid in pillar.get('users', {}).items() %}`user`:user.present:- uid: `uid`{% endfor %}

利用Pillar处理平台差异

不同的操作系统不仅管理资源的方式不同,软件包的名字、配置文件的路径也有有可能不一样。Salt的执行模块屏蔽了系统管理资源的差异。其他的差异可以根 据grains中的的os、cpuarch等信息来处理,这些条件判断可以写在State文件中,但会使得State文件的逻辑不清晰。Pillar可以 很好地解决这个问题。下面的例子中,在不同的os上安装对应的软件包,但state file完全一样,不需要针对os作修改,灵活方便。

/srv/pillar/pkg/init.sls:

pkgs:{% if grains['os_family'] == 'RedHat' %}apache: httpdvim: vim-enhanced  {% elif grains['os_family'] == 'Debian' %}apache: apache2vim: vim  {% elif grains['os'] == 'Arch' %}apache: apachevim: vim  {% endif %}

/srv/pillar/top.sls:

base:'*':- data    - users    - pkg

/srv/salt/apache/init.sls:

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

还可以在state file中设置默认值: srv/salt/apache/init.sls:

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

自定义pillar数据

  1. 定义pillar目录

pillar_roots:base:- /srv/base/pillartest:- /srv/test/pillarprod:- /srv/prod/pillar

2.创建pillar top file

[root@master pillar]# pwd
/srv/base/pillar
[root@master pillar]# cat top.sls
base:'kaibin.test2':- zabbix

3.创建自定义sls文件

[root@master pillar]# cat zabbix.sls
Zabbix_Server: 192.168.65.128

4.刷新pillar数据

[root@master pillar]# salt '*' saltutil.refresh_pillar
master:True
kaibin.test2:True

5.检索自定义pillar数据

[root@master pillar]# salt '*' pillar.item Zabbix_Server
master:----------
kaibin.test2:----------Zabbix_Server:192.168.65.128

6.pillar的匹配

[root@master pillar]# salt -I 'Zabbix_Server:192.168.65.128' test.ping
kaibin.test2:True
[root@master pillar]# salt '*' pillar.get Zabbix_Server
master:
kaibin.test2:192.168.65.128

转载于:https://blog.51cto.com/kaibinyuan/1628144

SaltStack:Salt Pillar相关推荐

  1. salt pillar 自定义扩展

    Saltstack使用Pillar和Grains数据来管理和分类Minion,其中Grains数据作为Minion的"固有属性"存储在 Minion端,而Pillar则作为&quo ...

  2. 详述SaltStack Salt 命令注入漏洞(CVE-2020-16846/25592)

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 11月3日,SaltStack 发布 Salt 安全补丁,修复了三个严重漏洞,其中两个是为了回应起初通过 ZDI 报告的5个 bug. ...

  3. SaltStack Salt 开源管理框架修复2个严重漏洞,多款开源产品等受影响

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 用于数据中心和云服务器中的开源管理框架 SaltStack Salt 的开发人员警告用户称从中发现两个严重的远程代码执行漏洞,督促用户 ...

  4. saltstack数据系统——pillar

    pillar 存储位置:master端,数据类型:动态数据 ,数据采集方式: 在master端定义,指定给对应的minion.可以使用saltuitl.refresh_pillar刷新. 应用:存储m ...

  5. SaltStack:Salt SSH

    20. Salt SSH 在版本0.17.0当中,引入了新的传输系统,它支持通过SSH通道来实现Salt的通信.通过这种方式,我们可以将Salt routines直接通过SSH通道在远程主机上执行,而 ...

  6. Saltstack的pillar组件(6)

    pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等.在pillar中定义的数据与不同业务特性的min ...

  7. saltstack grain pillar

    Grain Pillar概念 本质上都是key value 型的数据库. Grains 是存储在minon上的数据,minion启动后就进行Grain计算,是一种静态数据. Pillar 数据存储在m ...

  8. 命令注入_深入分析SaltStack Salt命令注入漏洞

    一.概述 11月3日,SaltStack发布了Salt的安全补丁,修复了三个高危漏洞.其中有两个修复程序,是为了解决外部研究人员通过ZDI项目提交的五个漏洞.这些漏洞可导致在运行Salt应用程序的系统 ...

  9. Saltstack之pillar组件

    我看了很久pillar这个组件,搜索了不少,还不是很明白这组件的作用,大概我了解到,pillar这个组件比较灵活,可以自己定义minion的信息,还可以结合jinjia. 网上的解析: pillar: ...

最新文章

  1. DOM+XPath提取规则注记!
  2. 英特尔“包抄”英伟达:oneAPI对标CUDA、为《王者荣耀》云游戏提供GPU
  3. 几条跟堆栈扯上关系的汇编指令
  4. 博客园是否提供“我参与的主题”功能?
  5. Python基础知识(第二天)
  6. u盘复制不进去东西_限制电脑只能识别自己指定的U盘
  7. python qq签到_Yii Framework 中文网每天签到 Python 脚本
  8. squid 服务器的应用
  9. 前端学习(833):操作元素小结
  10. Part Ⅳ Shopping 购物??
  11. 如何使用ITEXTSHARP将HTML代码字符串写进PDF
  12. 单例模式中的多线程分析synchronized
  13. 【程序源代码】万岳在线教育系统WEB开源版
  14. 走查是什么意思啊?如何给原稿进行走查?
  15. 二维表 转一维表 mysql_Excel二维表转换成一维表(2种方法)
  16. PackageManagerService根据权限等级管理权限流程分析(默认赋予apk权限)
  17. pip国内常用镜像源汇总
  18. 【日拱一卒行而不辍20221010】自制操作系统
  19. ASP.NET MVC 音乐商店 - 目录
  20. 腾讯通服务器临时文件,腾讯通详细使用教程

热门文章

  1. 写一个我的世界的代码
  2. 声学概念解释——图解什么是脉冲响应
  3. MT5 EA交易期货-报单部分成交
  4. 面对惠普将放弃PC业务,谈戴尔对其Latitude的信心
  5. 软件设计师 计算机网络
  6. 美国创投七十年 (下篇)| 邦专栏
  7. 从支付宝、微信到有道翻译官,中国二维码频频风靡海外
  8. 女生节横幅标语计算机学院,今天是她们的节日——计算机学院女生节顺利开展...
  9. 《静儿的服务治理私房菜》服务治理和架构
  10. html怎么复制到Excel表格里,html表格转excel【如何将网页中的表格快速复制到EXCEL中】...