salt pillar 自定义扩展
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 自定义扩展相关推荐
- SaltStack:Salt Pillar
Pillar是什么? Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用.Salt在 0.9.8版本中引入了Pillar.P ...
- VS Code 安装 Go 插件、自定义扩展配置、断点调试
1. 安装插件 使用快捷键 Ctrl+Shift+X 打开插件安装页面,安装 Go 插件. 2. 自定义扩展配置 使用快捷键 Ctrl+, 打开自定义配置页,编辑 settings.json ,定义与 ...
- 2022还在使用Mysql进行数据检索?ElasticSearch自定义扩展词库完成检索
文章目录 1.为什么要自定义扩展ES词库呢? 2.如何自定义扩展词库呢? 3.Docker安装Nginx 4.在nginx中保存一个简易词库 5.修改IK分词器的配置文件,让其指向nginx保存的词库 ...
- class ts 扩展方法_JUnit 5自定义扩展
前言 在org.junit.jupiter.api.extension包下,JUnit5提供了丰富的扩展接口,通过实现这些接口,我们可以定制自己的扩展并注册到JUnit中来实现功能扩展. Extens ...
- SharePoint 2013 自定义扩展菜单(二)
转载自:http://www.cnblogs.com/jianyus/p/3376075.html 包含另外三个例子,列表设置.管理中心.人员和组添加菜单 接博文<SharePoint 2013 ...
- Nacos自定义扩展的 Data Id 配置
Spring Cloud Alibaba Nacos Config可支持自定义 Data Id 的配置. 一个完整的配置案例如下所示: 下边我们在service2微服务下配置扩展. spring:ap ...
- ETL作业调度软件TASKCTL自定义扩展作业类型插件安装
TASKCTL批量自动化调度作业类型扩展插件的安装方法如下几种: 1. 直接覆盖法 直接覆盖法的意思就是将自定义扩展好的插件,通常是一个shell脚本,上传至后台调度核心服务上,然后修改后台任务类型的 ...
- 使用C#为.NET Interactive开发自定义扩展
在前面的文章中,我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL. 那么,能不能为.NET Interactive开发交互功能呢? 今天,我们就来演示如何实现. ...
- ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建
ASP.NET并没有包含对扩展程序的具体实现.然而,它定义了供所有自定义扩展程序和ACT中所有扩展程序使用的基类ExtenderControl.我们可通过该类创建自己的扩展程序.但并不建议这样做,因为 ...
最新文章
- springboot中配置了拦截器后,拦截器无效的解决方案之一
- 利用OpenCV的compareHist函数作直方图的相似度对比的源程序
- gridcontrol 控件的用法
- 华为FusionCube从融合到超融合 只为让计算变简单
- Linux系统编程2:基础篇之详解Linux中的权限问题
- Oracle的基本查询知识
- DeepFake技术--DeepFakes 概述(一)(二)
- QQ 音乐竟然可以免费听歌了,白嫖党的春天来了
- 微机原理 寻址方式 及基于EMU8086的用例
- C++关键字protected的作用详解
- 计算概论(一)计算起源、图灵机、计算原理
- php mysql好学吗_零基础小白PHP开发好学吗
- 中山大学农学院袁超磊课题组博士后招聘
- 基于matlab的控制系统仿真题,MATLAB与控制系统仿期末考试试卷真
- 【电子学会】2019年09月图形化一级 -- 猫捉老鼠
- 风帆头,旗帜服,“背”在肩上的古国王印
- apache 开启php fpm,apache php fpm安装方法详解
- Python中print(f‘***‘)中f是什么意思
- OpenCV库中watershed函数(分水岭算法)的详细使用例程
- 数字中台视角下的企业技术平台规划与实践