Saltstack使用Pillar和Grains数据来管理和分类Minion,其中Grains数据作为Minion的“固有属性”存储在 Minion端,而Pillar则作为“变量数据”存储在Salt-Master端,本文就如何灵活的应用和管理Pillar来实现分类与配置部署的话题 予以探讨。

常见的Pillar配置

一般来说,常见的配置Pillar样例如下所示:

 .
├── top.sls
├── appcase
│   ├── conf.sls
│   └── init.sls
├── basiccase
│   └── init.sls
├── schedule.sls
└── users.sls

通过定义top.sls来统一的进行管理,而从分层的sls结构很好的定义一些应用或者OS基础层的相关Pillar参数。

然而,由于Saltstack本身提供的Pillar暂时还不够强大,比如像灵活控制Top.sls或者使用Extends这样的特性在原生的支持 上便很难达成,网上因此也出现了很多介绍如何结合Cobbler或者Reclass来辅助增强Pillar的文章(都是非常优秀的技术博客文章,鄙人均一 一拜读,感谢大神们的分享)。

鄙人这里不打算介绍如何结合第三方的应用来扩展Pillar,而考虑使用Saltstack本身的良好扩展性来达成效果,具体细节且待我一一说来。

使用Pydsl扩展Pillar

其实真的应该说是一叶障目,为什么不能简单的直接使用Python去定制Pillar呢?在需要使用额外的逻辑生成pillar而又不想使用诸如ext_pillar的特性时便可以用到这种直接以Python生成dict方式。

#!py
#base:
#  '*':
#    - scheduledef pillar_helper():return {'base': {'*': ['schedule'], 'TestVM': ['users']}}def run():return pillar_helper()

这样一来,通过pydsl的方式去管理,无论是自定义额外模块还是编写额外方法去判断处理都是可行的了。为了更好的去理解,简单介绍一个应用的实例吧,结构如下所示(注意与常见配置的一些差异~):

.
├── appcase
│   ├── conf.sls
│   └── init.sls
├── basiccase
│   └── init.sls
├── nodes
│   └── TestVM.sls
├── schedule.sls
├── top.sls
├── top.slsc
└── users.sls

其中,top.sls实际算是pydsl格式文件,内容为:

#!py
#base:
#  '*':
#    - scheduledef pillar_helper():return {'base': {'*': ['schedule'], 'TestVM': ['users', 'nodes.TestVM']}}def run():return pillar_helper()

而这样一来,便可以通过Python脚本的扩展方式灵活的管理每台具体主机或者组的Pillar参数,如上的TestVM.sls即定义了TestVM自身的Pillar值:

[root@monitor pillar]# cat /srv/pillar/nodes/TestVM.sls
role: blog_app

使用 salt '*' saltutil.refresh_pillar 刷新 pillar 数据后可以确认下,的确是预想的那样:

[root@monitor ~]# salt 'TestVM' pillar.item role
TestVM:----------    role:blog_app

实际还可以根据需求将此扩展到适合的结构,毕竟可以使用Python嘛,扩展性无与伦比。

转载于:https://blog.51cto.com/jackywu/1434687

salt pillar 自定义扩展相关推荐

  1. SaltStack:Salt Pillar

    Pillar是什么? Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用.Salt在 0.9.8版本中引入了Pillar.P ...

  2. VS Code 安装 Go 插件、自定义扩展配置、断点调试

    1. 安装插件 使用快捷键 Ctrl+Shift+X 打开插件安装页面,安装 Go 插件. 2. 自定义扩展配置 使用快捷键 Ctrl+, 打开自定义配置页,编辑 settings.json ,定义与 ...

  3. 2022还在使用Mysql进行数据检索?ElasticSearch自定义扩展词库完成检索

    文章目录 1.为什么要自定义扩展ES词库呢? 2.如何自定义扩展词库呢? 3.Docker安装Nginx 4.在nginx中保存一个简易词库 5.修改IK分词器的配置文件,让其指向nginx保存的词库 ...

  4. class ts 扩展方法_JUnit 5自定义扩展

    前言 在org.junit.jupiter.api.extension包下,JUnit5提供了丰富的扩展接口,通过实现这些接口,我们可以定制自己的扩展并注册到JUnit中来实现功能扩展. Extens ...

  5. SharePoint 2013 自定义扩展菜单(二)

    转载自:http://www.cnblogs.com/jianyus/p/3376075.html 包含另外三个例子,列表设置.管理中心.人员和组添加菜单 接博文<SharePoint 2013 ...

  6. Nacos自定义扩展的 Data Id 配置

    Spring Cloud Alibaba Nacos Config可支持自定义 Data Id 的配置. 一个完整的配置案例如下所示: 下边我们在service2微服务下配置扩展. spring:ap ...

  7. ETL作业调度软件TASKCTL自定义扩展作业类型插件安装

    TASKCTL批量自动化调度作业类型扩展插件的安装方法如下几种: 1. 直接覆盖法 直接覆盖法的意思就是将自定义扩展好的插件,通常是一个shell脚本,上传至后台调度核心服务上,然后修改后台任务类型的 ...

  8. 使用C#为.NET Interactive开发自定义扩展

    在前面的文章中,我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL. 那么,能不能为.NET Interactive开发交互功能呢? 今天,我们就来演示如何实现. ...

  9. ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建

    ASP.NET并没有包含对扩展程序的具体实现.然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl.我们可通过该类创建自己的扩展程序.但并不建议这样做,因为 ...

最新文章

  1. springboot中配置了拦截器后,拦截器无效的解决方案之一
  2. 利用OpenCV的compareHist函数作直方图的相似度对比的源程序
  3. gridcontrol 控件的用法
  4. 华为FusionCube从融合到超融合 只为让计算变简单
  5. Linux系统编程2:基础篇之详解Linux中的权限问题
  6. Oracle的基本查询知识
  7. DeepFake技术--DeepFakes 概述(一)(二)
  8. QQ 音乐竟然可以免费听歌了,白嫖党的春天来了
  9. 微机原理 寻址方式 及基于EMU8086的用例
  10. C++关键字protected的作用详解
  11. 计算概论(一)计算起源、图灵机、计算原理
  12. php mysql好学吗_零基础小白PHP开发好学吗
  13. 中山大学农学院袁超磊课题组博士后招聘
  14. 基于matlab的控制系统仿真题,MATLAB与控制系统仿期末考试试卷真
  15. 【电子学会】2019年09月图形化一级 -- 猫捉老鼠
  16. 风帆头,旗帜服,“背”在肩上的古国王印
  17. apache 开启php fpm,apache php fpm安装方法详解
  18. Python中print(f‘***‘)中f是什么意思
  19. OpenCV库中watershed函数(分水岭算法)的详细使用例程
  20. 数字中台视角下的企业技术平台规划与实践

热门文章

  1. Java 类实例化顺序
  2. python破解加密的rar,zip文件
  3. Awk打印教程及示例
  4. JavaScriptCore全面解析 (上篇)
  5. 【Kay】1 数据仓库简介
  6. 2019年等保2.0标准的安全区域边界解读
  7. 同盟“口水战” IBM、SAP乘虚而入占市场
  8. JDK8都10岁了,你还在用for循环遍历list吗?
  9. Jqgrid入门-Jqgrid格式化数据(九)
  10. 下载的asp源码怎么使用?