1. 主机规划

服务器名称 操作系统版本 内网IP 外网IP(模拟) Hostname 部署模块
salt100 CentOS7.5 172.16.1.100 10.0.0.100 salt100 salt-master、salt-minion
salt01 CentOS7.5 172.16.1.11 10.0.0.11 salt01 salt-minion
salt02 CentOS7.5 172.16.1.12 10.0.0.12 salt02 salt-minion
salt03 CentOS7.5 172.16.1.13 10.0.0.13 salt03 salt-minion
Pillar文档

https://docs.saltstack.com/en/latest/topics/pillar/index.html

注意事项

修改了master或者minion的配置文件,那么必须重启对应的服务。

2. Grains VS Pillar

数据系统 类型 数据采集方式 应用场景 定义位置
Grains 静态 minion启动时收集 数据查询、目标选择、配置管理 minion
Pillar 动态 master自定义 敏感数据、目标选择、配置管理 master

3. Pillar基本信息

PillarPillar数据是动态的       给特定的minion指定特定的数据。只有指定的minion自己能够看到自己的数据  【所以必须要有top.sls】因此可以用于敏感数据Pillar刷新:
salt '*' saltutil.sync_all   # 可以使用但是不推荐
salt '*' saltutil.sync_pillar  有报错,适用于无master模式【masterless】
salt '*' saltutil.refresh_modules  刷新的是模块,所以不建议使用
salt '*' saltutil.refresh_pillar  # 推荐使用 ★★★★★特别注意:如果不执行salt '*' saltutil.refresh_pillar 直接使用 salt '*' pillar.items 查看信息,也可看见信息是最新的,但是查看具体要更新项时却是旧信息,所以必须要执行pillar刷新命令。使用:
1、目标选择
2、配置管理
3、机密数据【敏感数据】

4. 显示系统自带的pillar

系统自带的pillar默认是不显示的

注意:看完之后还原回去,因为数据较多。和自定义数据杂在一起,不方便查看

4.1. 修改配置文件并重启服务

[root@salt100 ~]# salt 'salt01' pillar.items  # 默认不显示pillar信息
salt01:----------
[root@salt100 ~]# vim /etc/salt/master
………………
# The pillar_opts option adds the master configuration file data to a dict in
# the pillar called "master". This is used to set simple configurations in the
# master config file that can then be used on minions.
#pillar_opts: False
pillar_opts: True
………………
[root@salt100 ~]# systemctl restart salt-master.service  # 修改了配置文件,重启服务

4.2. 显示pillar信息

[root@salt100 ~]# salt 'salt01' pillar.items  # 显示系统pillar信息
salt01:----------master:----------__cli:salt-master__role:masterallow_minion_key_revoke:Truearchive_jobs:Falseauth_events:Trueauth_mode:1auto_accept:Falseazurefs_update_interval:60cache:localfscache_sreqs:Truecachedir:/var/cache/salt/masterclean_dynamic_modules:Truecli_summary:Falseclient_acl_verify:Truecluster_masters:cluster_mode:Falsecon_cache:Falseconf_file:/etc/salt/masterconfig_dir:/etc/saltcython_enable:Falsedaemon:Falsedecrypt_pillar:decrypt_pillar_default:gpgdecrypt_pillar_delimiter::decrypt_pillar_renderers:- gpgdefault_include:master.d/*.confdefault_top:basediscovery:Falsedjango_auth_path:django_auth_settings:drop_messages_signature_fail:Falsedummy_pub:Falseeauth_acl_module:eauth_tokens:localfsenable_gpu_grains:Falseenable_ssh_minions:Falseenforce_mine_cache:Falseengines:env_order:event_match_type:startswithevent_return:event_return_blacklist:event_return_queue:0event_return_whitelist:ext_job_cache:ext_pillar:extension_modules:/var/cache/salt/master/extmodsexternal_auth:----------extmod_blacklist:----------extmod_whitelist:----------failhard:Falsefile_buffer_size:1048576file_client:localfile_ignore_glob:file_ignore_regex:file_recv:Falsefile_recv_max_size:100file_roots:----------base:- /srv/saltfileserver_backend:- rootsfileserver_followsymlinks:Truefileserver_ignoresymlinks:Falsefileserver_limit_traversal:Falsefileserver_verify_config:Truegather_job_timeout:10git_pillar_base:mastergit_pillar_branch:mastergit_pillar_env:git_pillar_global_lock:Truegit_pillar_includes:Truegit_pillar_insecure_auth:Falsegit_pillar_passphrase:git_pillar_password:git_pillar_privkey:git_pillar_pubkey:git_pillar_refspecs:- +refs/heads/*:refs/remotes/origin/*- +refs/tags/*:refs/tags/*git_pillar_root:git_pillar_ssl_verify:Truegit_pillar_user:git_pillar_verify_config:Truegitfs_base:mastergitfs_disable_saltenv_mapping:Falsegitfs_env_blacklist:gitfs_env_whitelist:gitfs_global_lock:Truegitfs_insecure_auth:Falsegitfs_mountpoint:gitfs_passphrase:gitfs_password:gitfs_privkey:gitfs_pubkey:gitfs_ref_types:- branch- tag- shagitfs_refspecs:- +refs/heads/*:refs/remotes/origin/*- +refs/tags/*:refs/tags/*gitfs_remotes:gitfs_root:gitfs_saltenv:gitfs_saltenv_blacklist:gitfs_saltenv_whitelist:gitfs_ssl_verify:Truegitfs_update_interval:60gitfs_user:hash_type:sha256hgfs_base:defaulthgfs_branch_method:brancheshgfs_env_blacklist:hgfs_env_whitelist:hgfs_mountpoint:hgfs_remotes:hgfs_root:hgfs_saltenv_blacklist:hgfs_saltenv_whitelist:hgfs_update_interval:60http_max_body:107374182400http_request_timeout:3600.0id:salt01interface:0.0.0.0ioflo_console_logdir:ioflo_period:0.01ioflo_realtime:Trueioflo_verbose:0ipc_mode:ipcipc_write_buffer:0ipv6:Falsejinja_env:----------jinja_lstrip_blocks:Falsejinja_sls_env:----------jinja_trim_blocks:Falsejob_cache:Truejob_cache_store_endtime:Falsekeep_acl_in_token:Falsekeep_jobs:24key_cache:key_logfile:/var/log/salt/keykey_pass:Nonekeysize:2048local:Truelock_saltenv:Falselog_datefmt:%H:%M:%Slog_datefmt_console:%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)03d [%(name)-17s:%(lineno)-4d][%(levelname)-8s][%(process)d] %(message)slog_granular_levels:----------log_level:warninglog_level_logfile:warninglog_rotate_backup_count:0log_rotate_max_bytes:0loop_interval:60maintenance_floscript:/usr/lib/python2.7/site-packages/salt/daemons/flo/maint.flomaster_floscript:/usr/lib/python2.7/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_stats:Falsemaster_stats_event_iter:60master_tops:----------master_use_pubkey_signature:Falsemax_event_size:1048576max_minions:0max_open_files:100000memcache_debug:Falsememcache_expire_seconds:0memcache_full_cleanup:Falsememcache_max_items:1024min_extra_mods:minion_data_cache:Trueminion_data_cache_events:Trueminionfs_blacklist:minionfs_env:baseminionfs_mountpoint:minionfs_update_interval:60minionfs_whitelist:module_dirs:nodegroups:----------on_demand_ext_pillar:- libvirt- virtkeyopen_mode:Falseoptimization_order:- 0- 1- 2order_masters:Falseoutputter_dirs:peer:----------permissive_acl:Falsepermissive_pki_access:Falsepidfile:/var/run/salt-master.pidpillar_cache:Falsepillar_cache_backend:diskpillar_cache_ttl:3600pillar_includes_override_sls:Falsepillar_merge_lists:Falsepillar_opts:Truepillar_roots:----------base:- /srv/pillar- /srv/spm/pillarpillar_safe_render_error:Truepillar_source_merging_strategy:smartpillar_version:2pillarenv:Noneping_on_rotate:Falsepki_dir:/etc/salt/pki/masterpreserve_minion_cache:Falsepub_hwm:1000publish_port:4505publish_session:86400publisher_acl:----------publisher_acl_blacklist:----------python2_bin:python2python3_bin:python3queue_dirs:raet_alt_port:4511raet_clear_remote_masters:Trueraet_clear_remotes:Falseraet_lane_bufcnt:100raet_main:Trueraet_mutable:Falseraet_port:4506raet_road_bufcnt:2range_server:range:80reactor:reactor_refresh_interval:60reactor_worker_hwm:10000reactor_worker_threads:10regen_thin:Falserenderer:yaml_jinjarenderer_blacklist:renderer_whitelist:require_minion_sign_messages:Falseret_port:4506root_dir:/roots_update_interval:60rotate_aes_key:Truerunner_dirs:runner_returns:Trues3fs_update_interval:60salt_cp_chunk_size:98304saltenv:Nonesaltversion:2018.3.3schedule:----------search:serial:msgpackshow_jid:Falseshow_timeout:Truesign_pub_messages:Truesigning_key_pass:Nonesock_dir:/var/run/salt/mastersock_pool_size:1sqlite_queue_dir:/var/cache/salt/master/queuesssh_config_file:/root/.ssh/configssh_identities_only:Falsessh_list_nodegroups:----------ssh_log_file:/var/log/salt/sshssh_passwd:ssh_port:22ssh_scan_ports:22ssh_scan_timeout:0.01ssh_sudo:Falsessh_sudo_user:ssh_timeout:60ssh_use_home_key:Falsessh_user:rootssl:Nonestate_aggregate:Falsestate_auto_order:Truestate_events:Falsestate_output:fullstate_output_diff:Falsestate_top:salt://top.slsstate_top_saltenv:Nonestate_verbose:Truesudo_acl:Falsesvnfs_branches:branchessvnfs_env_blacklist:svnfs_env_whitelist:svnfs_mountpoint:svnfs_remotes:svnfs_root:svnfs_saltenv_blacklist:svnfs_saltenv_whitelist:svnfs_tags:tagssvnfs_trunk:trunksvnfs_update_interval:60syndic_dir:/var/cache/salt/master/syndicssyndic_event_forward_timeout:0.5syndic_failover:randomsyndic_forward_all_events:Falsesyndic_jid_forward_cache_hwm:100syndic_log_file:/var/log/salt/syndicsyndic_master:masterofmasterssyndic_pidfile:/var/run/salt-syndic.pidsyndic_wait:5tcp_keepalive:Truetcp_keepalive_cnt:-1tcp_keepalive_idle:300tcp_keepalive_intvl:-1tcp_master_pub_port:4512tcp_master_publish_pull:4514tcp_master_pull_port:4513tcp_master_workers:4515test:Falsethin_extra_mods:thorium_interval:0.5thorium_roots:----------base:- /srv/thoriumtimeout:5token_dir:/var/cache/salt/master/tokenstoken_expire:43200token_expire_user_override:Falsetop_file_merging_strategy:mergetransport:zeromqunique_jid:Falseuser:rootutils_dirs:- /var/cache/salt/master/extmods/utilsverify_env:Truewinrepo_branch:masterwinrepo_cachefile:winrepo.pwinrepo_dir:/srv/salt/win/repowinrepo_dir_ng:/srv/salt/win/repo-ngwinrepo_insecure_auth:Falsewinrepo_passphrase:winrepo_password:winrepo_privkey:winrepo_pubkey:winrepo_refspecs:- +refs/heads/*:refs/remotes/origin/*- +refs/tags/*:refs/tags/*winrepo_remotes:- https://github.com/saltstack/salt-winrepo.gitwinrepo_remotes_ng:- https://github.com/saltstack/salt-winrepo-ng.gitwinrepo_ssl_verify:Truewinrepo_user:worker_floscript:/usr/lib/python2.7/site-packages/salt/daemons/flo/worker.floworker_threads:5zmq_backlog:1000zmq_filtering:Falsezmq_monitor:False

5. pillar文件存放位置

[root@salt100 ~]# vim /etc/salt/master  # 存放默认路径即可,这样就不需要修改配置文件了
# Salt Pillars allow for the building of global data that can be made selectively
# available to different minions based on minion grain filtering. The Salt
# Pillar is laid out in the same fashion as the file server, with environments,
# a top file and sls files. However, pillar data does not need to be in the
# highstate format, and is generally just key/value pairs.
#pillar_roots:
#  base:
#    - /srv/pillar  # pillar文件存放目录
#

6. 自定义Pillar

6.1. pillar的sls文件编写

pillar SLS文件中涉及一层grains情况
[root@salt100 web]# pwd  # 定义一个文件目录,方便后期维护
/srv/pillar/web_pillar
[root@salt100 web]# cat apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'redhat03' %}
apache: apache2
{% endif %}
pillar SLS文件中涉及多层grains情况
并包含优先级和 or 或 and 的写法
[root@salt100 web]# pwd  # 定义一个文件目录,方便后期维护
/srv/pillar/web_pillar
[root@salt100 pillar]# cat web_pillar/service_appoint.sls   # 注意写法:多层指定、包含优先级以及 or 或 and
{% if (grains['ip4_interfaces']['eth0'][0] == '172.16.1.11' and grains['host'] == 'salt01') or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.12' and grains['host'] == 'salt02')or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.13' and grains['host'] == 'salt03')
%}
service_appoint: www
{% elif grains['ip4_interfaces']['eth0'][0] == '172.16.1.100' %}
service_appoint: mariadb
{% endif %}

6.2. pillar的top file编写【必须有top.sls】

将 pillar 信息指定给被选择的 minion;所以必须要有 top file 文件。

[root@salt100 pillar]# pwd
/srv/pillar
[root@salt100 pillar]# cat top.sls
base:'*':- web_pillar.service_appoint# 使用通配符'salt0*':- web_pillar.apache# 指定具体minion'salt03':- web_pillar.apache

6.3. pillar信息刷新并查看

如果不执行salt ‘’ saltutil.refresh_pillar 直接使用 salt '’ pillar.items 查看信息,也可看见信息是最新的,但是查看具体更新项时却是旧信息,所以必须要执行pillar刷新命令。

[root@salt100 pillar]# salt '*' saltutil.refresh_pillar  # 刷新
salt100:True
salt01:True
salt02:True
salt03:True
[root@salt100 pillar]# salt '*' pillar.item apache  # 查看具体想
salt100:----------service_appoint:mariadb
salt01:----------apache:apache3service_appoint:www
salt03:----------apache:httpdservice_appoint:www
salt02:----------apache:httpdservice_appoint:www

7. 层级关系编写

7.1. pillar的sls文件编写

[root@salt100 pillar]# cat /srv/pillar/web_pillar/user.sls
level1:level2:{% if grains['os'] == 'CentOS' %}my_user: - zhangsan01- zhangsan02{% elif grains['os'] == 'redhat03' %}my_user: lisi001{% endif %}

7.2. pillar的top file编写【必须有top.sls】

[root@salt100 pillar]# pwd
/srv/pillar
[root@salt100 pillar]# cat top.sls
# 以下内容直接使用即可,sls支持注释
base:'*':- web_pillar.service_appoint# 使用通配符'salt0*':- web_pillar.apache- web_pillar.user # 引用# 指定具体minion'salt03':- web_pillar.apache- web_pillar.user # 引用

7.3. pillar信息刷新并查看

[root@salt100 pillar]# salt '*' saltutil.refresh_pillar  # 刷新pillar
………………
[root@salt100 pillar]# salt '*' pillar.items  # 查看全部信息
salt03:----------apache:httpdlevel1:----------   # 该行表示 一个层级level2:----------my_user:- zhangsan01- zhangsan02service_appoint:www
salt02:----------apache:httpdlevel1:----------level2:----------my_user:- zhangsan01- zhangsan02service_appoint:www
salt01:----------apache:apache3level1:----------level2:----------my_user:lisi001service_appoint:www
salt100:----------service_appoint:mariadb
[root@salt100 pillar]# salt '*' pillar.item level1  # 查看指定 level1 的信息
salt03:----------level1:----------level2:----------my_user:- zhangsan01- zhangsan02
salt02:----------level1:----------level2:----------my_user:- zhangsan01- zhangsan02
salt01:----------level1:----------level2:----------my_user:lisi001
salt100:----------level1:

7.4. 多层级查看

[root@salt100 pillar]# salt '*' pillar.item level1:level2  # 多层级访问
salt01:----------level1:level2:----------my_user:lisi001
salt03:----------level1:level2:----------my_user:- zhangsan01- zhangsan02
salt02:----------level1:level2:----------my_user:- zhangsan01- zhangsan02
salt100:----------level1:level2:
[root@salt100 pillar]# salt '*' pillar.item level1:level2:my_user  # 多层级访问
salt01:----------level1:level2:my_user:lisi001
salt03:----------level1:level2:my_user:- zhangsan01- zhangsan02
salt02:----------level1:level2:my_user:- zhangsan01- zhangsan02
salt100:----------level1:level2:my_user:
[root@salt100 web_pillar]# salt '*' pillar.item level1:level2:my_user:0  # 取列表中的第一个值★★★★★
salt03:----------level1:level2:my_user:0:zhangsan01
salt01:----------level1:level2:my_user:0:
salt02:----------level1:level2:my_user:0:zhangsan01
salt100:----------level1:level2:my_user:0:

8. Pillar使用方式

8.1. 查询pillar的指定信息

[root@salt100 pillar]# salt 'salt0*' pillar.item apache  # 通配符匹配
salt03:----------apache:httpd
salt02:----------apache:httpd
salt01:----------apache:apache3
[root@salt100 pillar]# salt 'salt0*' pillar.item level1:level2:my_user  # 多层查询
salt01:----------level1:level2:my_user:lisi
salt02:----------level1:level2:my_user:zhangsan
salt03:----------level1:level2:my_user:zhangsan
[root@salt100 web_pillar]# salt '*' pillar.item level1:level2:my_user:0  # 取列表中的第一个值★★★★★
salt03:----------level1:level2:my_user:0:zhangsan01
salt01:----------level1:level2:my_user:0:
salt02:----------level1:level2:my_user:0:zhangsan01
salt100:----------level1:level2:my_user:0:

8.2. 通过pillar查询信息

[root@salt100 pillar]# salt -I 'apache:httpd' cmd.run 'echo "zhangliang $(date +%Y)"'  # 通过pillar配置
salt02:zhangliang 2018
salt03:zhangliang 2018
[root@salt100 pillar]# salt -I 'level1:level2:my_user:lisi' cmd.run 'whoami'  # pillar多层级匹配
salt01:root

9. 在状态SLS的top file中使用pillar

9.1. top.sls编写

[root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# cat top.sls
base:# 使用pillar匹配,添加如下几行'level1:level2:my_user':- match: pillar- web.apache

9.2. state.highstate执行

[root@salt100 salt]# salt 'salt01' state.highstate test=True # 预执行正常
[root@salt100 salt]# salt 'salt01' state.highstate           # 执行正常

Saltstack_使用指南05_数据系统-Pillar相关推荐

  1. Saltstack_使用指南04_数据系统-Grains

    1. 主机规划 服务器名称 操作系统版本 内网IP 外网IP(模拟) Hostname 部署模块 salt100 CentOS7.5 172.16.1.100 10.0.0.100 salt100 s ...

  2. Saltstack_使用指南17_salt-ssh

    1. 主机规划 salt 版本 1 [root@salt100 ~]# salt --version 2 salt 2018.3.3 (Oxygen) 3 [root@salt100 ~]# salt ...

  3. Saltstack_实战指南01_系统规划

    1. 实战项目GitHub地址 之前<Saltstack_使用指南>详细讲解了saltstack的使用.那么从这节开始实战讲解,当然不会再像之前那样详细说明了.只是讲一些系统规划之类的信息 ...

  4. saltstack数据系统——pillar

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

  5. 最新老男孩Linux架构师实战课程14期视频全套1-13天

    ===============课程目录=============== (1)\\Day01-老男孩教育linux架构师14期-云计算-OpenStack实战:目录中文件数:18个 ├─(1) 01-课 ...

  6. linux系统间拷贝文件,Linux系统下不同机器之间拷贝文件的方法

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  7. Saltstack数据系统Grains和Pillar(三)

    Saltstack数据系统 分为Grains和Pillar 一.Grains 静态数据,当Minion启动的时候收集的MInion本地的相关信息.(包含操作系统版本.内核版本.CPU.内存.硬盘.设备 ...

  8. saltstack(十):saltstack数据系统-grains和pillar

    saltstack数据系统-grains和pillar https://www.cnblogs.com/shhnwangjian/p/5985868.html 1.1         granis G ...

  9. saltstack高级状态的使用、top file的使用、数据系统grains和pillar的使用

    saltstack高级状态的使用.top file的使用.数据系统grains和pillar的使用 1. YAML语言 YAML是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类 ...

最新文章

  1. 吴 恩 达 教 你 做 机 器 学 习 职 业 规 划
  2. Java对象析构_c++之对象构造顺序和销毁(析构函数)
  3. HDU4462-稻草人
  4. linux测试地址是否能访问_一个小测试能看出孩子注意力是否集中,提前弥补,上小学会很轻松...
  5. java.lang.ClassNotFoundException: lombok.Data
  6. 跳过人脸检测和关键点定位,Facebook等提出实时3D人脸姿态估计新方法
  7. python可以体现数学中映射概念的是_【课时27+集合+在我的世界里+你就是唯一】 - #1...
  8. 砂.随笔.九.12.14公司停电,冒雨修爪爪
  9. 机器学习中为什么需要梯度下降_机器学习 —— 多元梯度下降
  10. mac储存文件应该放在哪里_单位不能存档,个人档案应该放在哪里呢,影响今后退休金吗?...
  11. [转]教你如何在博客园放“可运行代码
  12. BootDo管理系统
  13. psp3000 java_psp上的python
  14. 干法读后感--磨练灵魂 提升心志
  15. 电力监控服务器维修,地铁电力监控系统(PSCADA)发生故障应该如何处理
  16. html5制作颜色的诗句,带有颜色的诗句(精选60句)
  17. teredo服务器文件,可用teredo服务器
  18. 视频号哪些领域值得做变现机会更大:国仁楠哥
  19. 区块链需要c语言和linux嘛,区块链技术如何运作?使用什么开发语言?
  20. Ural_1671. Anansi's Cobweb(并查集)

热门文章

  1. [转] 介绍vi命令
  2. 【adb 打开图片】
  3. qt子控件单独指定鼠标形状等样式
  4. str.replace()——Python的“第四”字符串格式
  5. 《中国合伙人》之苏梅“是我们改变了世界,还是世界改变了我们?”
  6. 产品三部曲(产品设计 )
  7. 简化Kubernetes应用部署工具-Helm简介
  8. 七日杀服务器自动保存时间,七日杀服务端架设 免主机跳出存档清空解决方法和技巧...
  9. 我的phthon之旅第1篇
  10. Veeam Agent Windows 5 安装