SaltStack:Salt Pillar
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数据
定义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相关推荐
- salt pillar 自定义扩展
Saltstack使用Pillar和Grains数据来管理和分类Minion,其中Grains数据作为Minion的"固有属性"存储在 Minion端,而Pillar则作为&quo ...
- 详述SaltStack Salt 命令注入漏洞(CVE-2020-16846/25592)
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 11月3日,SaltStack 发布 Salt 安全补丁,修复了三个严重漏洞,其中两个是为了回应起初通过 ZDI 报告的5个 bug. ...
- SaltStack Salt 开源管理框架修复2个严重漏洞,多款开源产品等受影响
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 用于数据中心和云服务器中的开源管理框架 SaltStack Salt 的开发人员警告用户称从中发现两个严重的远程代码执行漏洞,督促用户 ...
- saltstack数据系统——pillar
pillar 存储位置:master端,数据类型:动态数据 ,数据采集方式: 在master端定义,指定给对应的minion.可以使用saltuitl.refresh_pillar刷新. 应用:存储m ...
- SaltStack:Salt SSH
20. Salt SSH 在版本0.17.0当中,引入了新的传输系统,它支持通过SSH通道来实现Salt的通信.通过这种方式,我们可以将Salt routines直接通过SSH通道在远程主机上执行,而 ...
- Saltstack的pillar组件(6)
pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等.在pillar中定义的数据与不同业务特性的min ...
- saltstack grain pillar
Grain Pillar概念 本质上都是key value 型的数据库. Grains 是存储在minon上的数据,minion启动后就进行Grain计算,是一种静态数据. Pillar 数据存储在m ...
- 命令注入_深入分析SaltStack Salt命令注入漏洞
一.概述 11月3日,SaltStack发布了Salt的安全补丁,修复了三个高危漏洞.其中有两个修复程序,是为了解决外部研究人员通过ZDI项目提交的五个漏洞.这些漏洞可导致在运行Salt应用程序的系统 ...
- Saltstack之pillar组件
我看了很久pillar这个组件,搜索了不少,还不是很明白这组件的作用,大概我了解到,pillar这个组件比较灵活,可以自己定义minion的信息,还可以结合jinjia. 网上的解析: pillar: ...
最新文章
- DOM+XPath提取规则注记!
- 英特尔“包抄”英伟达:oneAPI对标CUDA、为《王者荣耀》云游戏提供GPU
- 几条跟堆栈扯上关系的汇编指令
- 博客园是否提供“我参与的主题”功能?
- Python基础知识(第二天)
- u盘复制不进去东西_限制电脑只能识别自己指定的U盘
- python qq签到_Yii Framework 中文网每天签到 Python 脚本
- squid 服务器的应用
- 前端学习(833):操作元素小结
- Part Ⅳ Shopping 购物??
- 如何使用ITEXTSHARP将HTML代码字符串写进PDF
- 单例模式中的多线程分析synchronized
- 【程序源代码】万岳在线教育系统WEB开源版
- 走查是什么意思啊?如何给原稿进行走查?
- 二维表 转一维表 mysql_Excel二维表转换成一维表(2种方法)
- PackageManagerService根据权限等级管理权限流程分析(默认赋予apk权限)
- pip国内常用镜像源汇总
- 【日拱一卒行而不辍20221010】自制操作系统
- ASP.NET MVC 音乐商店 - 目录
- 腾讯通服务器临时文件,腾讯通详细使用教程
热门文章
- 写一个我的世界的代码
- 声学概念解释——图解什么是脉冲响应
- MT5 EA交易期货-报单部分成交
- 面对惠普将放弃PC业务,谈戴尔对其Latitude的信心
- 软件设计师 计算机网络
- 美国创投七十年 (下篇)| 邦专栏
- 从支付宝、微信到有道翻译官,中国二维码频频风靡海外
- 女生节横幅标语计算机学院,今天是她们的节日——计算机学院女生节顺利开展...
- 《静儿的服务治理私房菜》服务治理和架构
- html怎么复制到Excel表格里,html表格转excel【如何将网页中的表格快速复制到EXCEL中】...