Salt Highstate数据结构定义
作者言
这篇文档详细解释了SLS文件中,每个部分的名称与含义,以及SLS中的数据处理后的数据结构。
我只是SaltStack的初学者,如果文中有错误的地方,请不吝赐教。
在学习的过程,我做了一些实验,犯了不少错,积累了一些经验,对SaltStack的运行也有一定了解,如果有什么问题,或是不太理解的地方,非常欢迎留言交流!
Salt State Tree
Top file
Salt State系统的入口文件,其中定义了minion处于哪个环境,加载哪些SLS模块。
State tree
存放在file_roots目录下的一系列SLS文件。使用SLS模块的形式来组织State tree。
Include声明
Include声明
一个list,其元素是要引用到本SLS文件的其他SLS模块。 只能用在highstate结构的顶层。
示例:
include:
- edit.vim
- http.server
Module引用
Module引用
SLS模块的名字,以在Salt master上的文件结构命名。名为
edit.vim的模块指向salt://edit/vim.sls。
ID声明
ID声明
定义一个独立的highstate数据段。ID在highstate dict中作为key,其对应的value是包含state声明和requisit声明的另一个dict。
用在highstate结构的顶层或extend声明的下一层。
ID在整个State tree中必须是唯一的。如果同一个ID用了两次,只有最先匹配到的生效,其他所有的同名ID声明被忽略。
Extend声明
Extend声明
扩展被引用的SLS模块中的name声明。extend声明也是一个dict,其key必须是在被引用的SLS模块中定义的ID。
只能用在highstate结构的顶层。
在需要增加或修改另一个SLS文件中定义的state声明时,Extend声明非常有用。下面的代码来自mywebsite.sls文件,其中include并且extend了apache.sls模块(增加了apache监视的对象),使得Apache服务在配置文件mywebsite发生改变时自动重启。
include:
- apache
extend:
apache:
service:
- watch:
- file: mywebsite
mywebsite:
file:
- managed
State声明
State声明
一个list,至少包含一个定义function声明的string,0个或多个function arg声明的dict。
还有一些可选的成员,比如名字覆盖部分(name和names声明),requistie声明。
只能用在ID声明的下一级。
Requisite声明
Requisite声明
一个list,其成员是requisite引用。
用来生成动作依赖树。Salt states被设计成按确定的顺序执行,require或watch其他Salt state可以调整执行的顺序。
做为list组件用在state声明下一级,或是作为key用在ID声明下一级。
Requisite引用
Requisite引用
只有一个key的dict。key是被引用的state声明的名字,value是被引用的ID声明的名字。 只能用作requisite声明的成员。
Function声明
Function声明
state中要要执行的function。1个state声明中只能有1个function声明。
下面的例子中,state声明调用了state模块pkg模块中的installed功能。
httpd:
pkg.installed
可以用行内缩写方式声明function(上面的例子中就是),使用完整写法使得数据结构更清晰:
httpd:
pkg:
- installed
需要注意的是连续的两个简写形式是无效的,为了避免疑惑,建议全部采用完整写法。
INVALID:
httpd:
pkg.installed
service.running
VALID:
httpd:
pkg:
- installed
service:
- running
只能用作state声明的成员。
Function arg声明
Function arg声明
只有1个key的dict,作为参数传递给function声明,其值为有效的Python类型。其类型必须满足function的需要。 用在function声明下一级。
下面的例子中,state声明是file,function声明是managed,user、group和mode是传递给managed的参数:
/etc/http/conf/http.conf:
file.managed:
- user: root
- group: root
- mode: 644
Name声明
Name声明
覆盖state声明中的name参数。name参数的默认值是ID声明。 name总是1个单key字典,其值类型是string。
在有的场景下,修改默认的name参数非常有用。比如说,可以避免ID冲突。下面例子中的两个state不能同时使用/etc/motd作为ID:
motd_perms:
file.managed:
- name: /etc/motd
- mode: 644
motd_quote:
file.append:
- name: /etc/motd
- text: "Of all smells, bread; of all tastes, salt."
另外一个使用name声明的场景是,ID声明非常长,又需要在多次引用这个ID。在下面的例子,使用mywebsite比/etc/apache2/sites-available/mywebsite.com方便多了:
mywebsite:
file.managed:
- name: /etc/apache2/sites-available/mywebsite.com
- source: salt://mywebsite.com
a2ensite mywebsite.com:
cmd.wait:
- unless: test -L /etc/apache2/sites-enabled/mywebsite.com
- watch:
- file: mywebsite
apache2:
service:
- running
- watch:
- file: mywebsite
Names声明
Names声明
将1个state声明扩展为多个不同名的state声明。
看下面的例子:
python-pkgs:
pkg.installed:
- names:
- python-django
- python-crypto
- python-yaml
转换成lowstate后的结果是:
python-django:
pkg.installed
python-crypto:
pkg.installed
python-yaml:
pkg.installed
完整的例子
下面的YAML是一个完整的例子,其中的名字部分使用的是hightstate组件名。
<Include Declaration>:
- <Module Reference>
- <Module Reference>
<Extend Declaration>:
<ID Declaration>:
[<overrides>]
# standard declaration
<ID Declaration>:
<State Declaration>:
- <Function>
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Name>: <name>
- <Requisite Declaration>:
- <Requisite Reference>
- <Requisite Reference>
# inline function and names
<ID Declaration>:
<State Declaration>.<Function>:
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Names>:
- <name>
- <name>
- <name>
- <Requisite Declaration>:
- <Requisite Reference>
- <Requisite Reference>
# multiple states for single id
<ID Declaration>:
<State Declaration>:
- <Function>
- <Function Arg>
- <Name>: <name>
- <Requisite Declaration>:
- <Requisite Reference>
<State Declaration>:
- <Function>
- <Function Arg>
- <Names>:
- <name>
- <name>
- <Requisite Declaration>:
- <Requisite Reference>
Salt Highstate数据结构定义的更多相关文章
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- 从string.size()和string.length()聊到长度的问题和一个关于数据结构定义的技巧
最近工作中要查看一下string的长度,然后忘了是哪个函数,所以去网上搜了一搜,决定把网上学的和其他的一些有关长度的东西在这里汇总一下, 然后就有了此帖. string 是从c语言的char数组的概念 ...
- c#-1 数据结构 定义相关 界面交互数据 Model层
1.时间用Nullable<UInt32> 除了最初时间用DateTime TimeSpan不行. 2.其他元素也用Nullable<UInt32> 3.list集合数据绑定类 ...
- Salt States概览
作者言 我也只是SaltStack的初学者,如果文中有错误的地方,请不吝赐教. 在学习的过程,我也做了不少实验,犯了不少错,积累了一些经验,对SaltStack的运行也有一定了解,如果有什么问题,或是 ...
- salt demo 环境
demo 环境 安装 virtualBox和vagrant 安装工具包:virtualBox, vagrant 下载 https://github.com/UtahDave/salt-vagrant- ...
- 数据结构《17》---- 自动补齐之《二》----Ternary Search Tree
一. 序言 上一篇文章中,给出了 trie 树的一个实现.可以看到,trie 树有一个巨大的弊病,内存占用过大. 本文给出另一种数据结构来解决上述问题---- Ternary Search Tree ...
- Scalaz(31)- Free :自由数据结构-算式和算法的关注分离
我们可以通过自由数据结构(Free Structure)实现对程序的算式和算法分离关注(separation of concern).算式(Abstract Syntax Tree, AST)即运算表 ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
- 《数据结构与算法分析》学习笔记(五)——二叉树
(一)查找二叉树ADT 1.二叉查找树ADT性质: 对于树中的每个节点X,它的左子树中所有关键字值都小于X的关键字值,而它的右子树值的关键字值都大于X的关键字值. 2.一些ADT的基本操作 结 ...
随机推荐
- Spring中基于注解的IOC(二):案例与总结
2.Spring的IOC案例 创建maven项目 导入依赖 pom.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...
- Easy2game使用
每个独享IP服务器,开设3-5个高速接口IP,用户可自行选择当地连接速度快的接口接入服务器,服务器再为用户自动分配所绑定的独享IP连接至游戏服务器,可保证连接的稳定性,统一性 打开软件 添加程序 服务 ...
- Windows 10 下 GCC / LLVM 的安装和使用
win10下gcc的安装和makehttps://www.jianshu.com/p/46824c62dfed 方案1:直接官方下载安装minGw或Cygwininstall download: ht ...
- Tensorflow快餐教程(1) - 30行代码搞定手写识别
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusing/article/details ...
- error: stdio.h: 没有那个文件或目录
在64位系统中,编写一个C语言程序后,使用gcc进行编译时,出现了如下的错误: test.c:1:19: fatal error: stdio.h: 没有那个文件或目录 #include <s ...
- (四)Kubernetes 资源清单定义
Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...
- Linux必知必会--sed
致沅弟:至于当大事,全在明强二字. --<曾国藩家书> 参考资料:https://man.linuxde.net/sed https://www.jianshu.com/p/047cd ...
- PAT 甲级 1025.PAT Ranking C++/Java
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Z ...
- Codeforces Round #142 (Div. 1) C. Triangles
Codeforces Round #142 (Div. 1) C. Triangles 题目链接 今天校内选拔赛出了这个题,没做出来....自己思维能力还不够强吧.我题也给读错了.. 每次拆掉一条边, ...
- httprunner学习5-参数化与数据驱动
前言 参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了. 不同的地方在于声明变量时对应值只有一个,参数化是多个值,存放在list里面. httpr ...