saltstack配置管理之states
states是saltstack中的配置语言,我们安装一个包,管理一个配置文件,最后保证服务的正常运行,都需要我们编写一些states sls文件(描述状态的文件)去描述和实现我们的功能。sls文件都是YAML语法编写,也可以用python。
YAML语法规则:每个缩进级别由两个空格组成,不要使用tab键。冒号后面也有一个空格。想要表示列表项,使用短横杠加一个空格,多个同样的缩进级别为同一列表的一部分。
sls指salt state,常见的就是用于state中的/srv/salt和pillar中的/srv/pillar。
salt和数据息息相关,YAML是python中字典类型数据结构的序列化格式。它们是一组键值对,每项都有一个唯一的键,引用一个值。值可以是一个单项,一个列表项,也可以是其他的键值对。
sls文件中每个小节的key为id。如果小节内没有显示声明name属性,那么id会作为那么,id必须全局唯一。
state和pillar系统中都有一个名为top.sls文件,用于将sls文件绑定在一起并指定在哪个环境下为minion提供哪些sls文件。top.sls文件中的每个key都定义一个环境,一般情况下,定一个base环境,此环境下包含所有minion,也可以定义其他环境和包含其他minion的子集。
如:
base:
'*':
- common
dev:
'^minion':
- lamp
而include块的实现,可以使得一个sls文件引用其他sls文件,通常放在sls文件顶部。include作为一个顶级声明,不能在一个文件中出现多次。
Include:
- base
- macs
此处sls文件将include块内容替换成base.sls(或者base/init.sls),macs.sls(或者macs/init.slsl)的内容。sls文件中不能包含已存在于include的sls文件的id。
sls文件目录可以有多层深度,每一个层级将在sls名后面加点,比如有top.sls:
base:
'*':
- web.httpd.httpd
首先读取top.sls文件,去找配置根目录下web目录下httpd目录下的httpd.sls文件。
(没有httpd.sls文件,再去找配置根目录下web目录下httpd目录下httpd目录下的init.sls文件),都没有则报错。
查看states列表 #salt 'minion-01' sys.list_state_modules
查看指定states用法 #salt 'minion-01' sys.state_doc file
查看指定states的所有function #salt 'minion-01' sys.list_state_functions file
查看指定states的指定function用法 #salt 'minion-01' sys.state_doc file.copy
使用states:
- 编写top.sls文件(易于管理,但非必须)
- 编写states.sls文件
top.sls是states系统的入口文件,指定了哪些设备调用哪些states.sls文件。
我们来查看一个sls文件的例子:

state sls文件具有声明式和命令式的的特性,state可以通过requisite来改变命令实际执行的顺序,require是最基本的requisite。还是这个例子:

cmd.run这个模块下,定义了require,在此模块运行的前提是profile.sls文件和id为java-source-install的模块要已经运行。
通过添加watch requisite,强制state在发现它watch的项目发生了变更时执行一个指定的动作。

如此例,我修改了tomcat-users.xml文件,然后重新salt 'minion-01' state.highstate可以看到如下tomcat service restarted。

当一个服务通过watch出发时,如果服务此时时关闭的,则salt会尝试启动它;当服务在运行中,则salt会根据情况尝试service.reload、service.fullrestart或者service.restart中的一个。
onchanges requisite和watch类似,只有当state成功完成并且有变化时,那些onchanges关联到的列表项才会执行。
onfail requisite,告警给用户或自动进行正确处理。
use只会继承非requisite选项。如下面的sls,mysql_conf会从apache2_conf中继承user、group、及mode,并且不会出发apache重启。

prereq,salt会先对prereq中指定关联的项目运行test模式来预计是否会进行变更,如果有,则salt会用prereg标记该state需要执行。

反转requisite,都可以在最后添加_in的方式来进行反转。一般情况下在一个sls文件中定义好配置,在另一个sls文件中include,并通过使用use_in requirsite使其具有更多的特性。
saltstack配置管理之states的更多相关文章
- SaltStack配置管理-jinja模板
上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...
- SaltStack配置管理-状态间关系
上一篇:SaltStack配置管理-LAMP状态设计 include包含 上篇安装LAMP环境是一个个环境安装,可以通过include模块全部安装 lamp.sls include: - apache ...
- SaltStack配置管理-LAMP状态设计
上一篇:SaltStack之Salt-ssh 配置文件模板 apache: pkg.installed: - name: httpd service.running: - name: httpd /e ...
- SaltStack配置管理之状态模块和jinja2(五)
官方文档 https://docs.saltstack.com/en/latest/topics/states/index.html 配置管理之SLS Salt State SLS描述文件(YAM ...
- Saltstack配置管理(2)
1.SaltStack批量安装zabbix_agent端. vim /etc/salt/states/init/zabbix_agnet.sls zabbix_install.conf: pkg.in ...
- Saltstack配置管理
制作简单初始化模块(在minion主机安装软件): 1.定义master配置文件file_roots [root@localhost~]# cat /etc/salt/master file_root ...
- SaltStack配置管理--状态间的关系(六)
一.include的引用 需求场景:用于含有多个SLS的状态,使用include可以进行多个状态的组合,将安装apache,php,mysql集合在一个sls中 [root@7mini-node1 p ...
- saltStack 配置管理(也就是替换文件)
目录 /srv/salt/base下面新建一个文件dns.sls /opt/resolv.conf_bak: #这个是文件替换的位置,也就说替换到远程文件的/opt/resolv.conf_ ...
- 自动化运维工具saltstack02 -- 之SaltStack的配置管理
SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...
随机推荐
- sessionStorage记录返回前端的数据,用于解决登录拦截器刷新页面的问题
1.问题出现的场景与解决 实现一个登录拦截器,重写doFilter方法,判断用户的登录状态,在用户长时间未操作或者异地登录时前端进行提示,完整代码如下 public class LoginValida ...
- PDF格式的“在线阅读”和“下载”
产生背景: 一个需求,用户可在线阅读PDF,也可下载到本地.听需求来源说人家的网站上的可以做,问我们能做吗,需要这个功能,就要来了网址,看看页面. 问题:上传PDF文件后,发现访问地址在浏览器上打开, ...
- 【代码笔记】Web--使用Chrome来查看网页源代码
一,用Chrome打开百度页面,如图所示. 二,鼠标右键--->显示网页源代码--->如图所示. 三,鼠标右键--->检查---->如图所示.此时可以通过Device来看不同设 ...
- CSS3圆圈动画放大缩小循环动画效果
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- JS性能优化 之 事件委托
面试中2次被问到过这个知识点,实际开发中,应用事件委托也比较常见.JS中事件委托的实现主要依赖于 事件冒泡 .那什么是事件冒泡?就是事件从最深的节点开始,然后逐步向上传播事件,举个例子:页面上有这么一 ...
- WebLogic登录管理控制台、以及相关问题解决
1.控制台的登录 登录地址是: http://管理实例IP:端口号/console 其中,管理实例的IP或者是管理实例所在主机的主机名 端口号默认7001 因此通过http://localhost:7 ...
- js判断当前浏览器语言类型
console.log(window.navigator.language.slice(0, 2)); 得到的是zh
- Android系统启动流程(三)解析SystemServer进程启动过程
1.Zygote启动SystemServer进程 在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示. fra ...
- python 定时修改数据库
当需要定时修改数据库时,一般我们都选择起一个定时进程去改库.如果将这种定时任务写入业务中,写成一个接口呢,定时进程显得有些不太合适?如果需要定时修改100次数据库,常规做法会启动100个进程,虽然这种 ...
- C# JObject和JArray 的分享
最近在调用别人的搜索引擎接口时遇到了一种返回类型为数组的情况,如 { "result": [ //根据用户输入搜索匹配到的标题数组 "我是一条新 ...