四、Salt State
来源:互联网 发布:js页面初始化方法 编辑:程序博客网 时间:2024/05/17 12:07
Salt state的核心是SLS,或者叫Salt State文件。SLS文件采用的数据格式是YAML。SLS描述了系统的目标状态(所谓目标状态就是期待的一个结果,想要达到的一个状态),而且是以一种简单的方式来包含这些数据——这种就是我们常说的配置管理。
简单来说,SLS实际上就是一个数据结构(对于Salt系统来说):词典、列表、字符串和数字等。通过使用这些方法,使得Salt更加灵活. 多写state 文件,将更加明白需要写什么。 其结果就是系统更加容易理解,即使系统管理员和开发人员的需求不断增加。
States存储在master端的文本文件中,通过master的文件服务(Salt File Server)按需传输到minion端。 这些state文件组成了 State树。在Salt中启动一个中心state系统,首先需要确保已经建立了Salt文件服务(Salt文件服务器应用于Salt State系统,提供文件传输功能)。Salt State的配置是在master端完成,state文件的编辑也是在master端。
这里我们需要知道的是,所用SLS文件采用的都是YAML格式语言来编写的;基本上YAML贯穿了整个SaltStack。
相关文档
- Salt State System概览
Salt State System Reference
命令行查看State System所支持的列表
salt ‘*’ sys.list_state_modules
查看特定states支持的functions
salt ‘*’ sys.list_state_functions
查看指定states的详细用法
salt ‘*’ sys.state_doc iptables
获取minion上可用的服务列表
salt ‘*’ service.get_all salt
一、启用 Salt State(启用Salt文件服务器)
修改master的配置问价,打开file_roots环境
file_roots: base: - /srv/salt/
这里表示开启Salt File Server。Salt State的SLS文件也是写在file_roots所定义的目录下。
二、编辑SLS文件
SLS文件位于/srv/salt/目录下.
以安装httpd为例
1.准备TOP文件:/srv/salt/top.sls
base: '*': - httpd
文件内容分析:
- top.sls负责minion和SLS文件的绑定——即哪些minion执行什么样的SLS文件。top.sls默认从base标签开始解析,下一级是要操作的目标(即minion),miniom可以通过正则去匹配、也可以通过grain模块、分组名等进行匹配。再下一级是要执行的state文件
- ‘*’表示匹配所有的minion
- httpd表示要执行httpd.sls文件。因此我们还要在/srv/salt/目录下编辑httpd.sls文件
- 使用grains匹配minion。如匹配CentOS系统:
base: 'os:CentOS': - match: grain - httpd
这里的os是grains的属性,CentOS是os属性值。通过命令: salt ‘*’ grains.items 可以查看grains搜集了哪些属性. 必须要定义match: grain,因为这里是通过grains去匹配minion的
不管是top.sls文件还是其他的state文件的语法必须要正确(比如state modules;modules funtion等要正确),否则会报错
2.编辑 /srv/salt/httpd.sls文件
httpd: pkg: - installed service: - running - require: - pkg: httpd
另一种写法:
httpd: pkg.installed: [] service.running: - require: - pkg: httpd
文件内容分析(以第一种写法为例)
- httpd.sls中的数据是YAML格式
- 第一行:ID申明:该组数据的ID。这个ID设置了需要被维护的东西的名字。如:命令、软件或者包名(如httpd)、将要操作的文件或者其他。**
- 第二行:state声明,即定义使用哪个state modules,如这里的使用的是state pkg,用来确保给定的包被安装。
- 第三行:函数声明;定义pkg state 的哪一个函数被使用state。其实二、三行可以写为pkg.installed(格式为 .function>)——即上面的第二种写法
- 第四行是一个名为service的state module
- 第五行:service的函数
- 第六、七行:require函数,执行这个操作需要require函数后的条件达成。如这里表示要运行httpd服务,则需要确保httpd包已经安装
- 以上数据作用:确保名为httpd软件包被安装并且服务处于运行状态。如果httpd软件没有安装,则安装httpd软件包
- 更多state modules查阅
- * 备注:这个ID可以是任意的。如果是任意的,那么就需要在state modules下明确指定需要维护或管理的事物(一般都是name参数指定),否则会直接使用这个ID作为要安装的包或者要处理的文件等。* 个人建议使用name参数指定较好,这样新手更加容易看懂。。。。
上面的SLS文件就可以这样改:
install_httpd: pkg.installed: - name: httpd
一开始写这种SLS文件的时候我很困惑,实际上,这些所谓的“state modules”,函数声明下参数的又是什么。其实,这些对应的是一个类或者函数;函数声明实际上就是在调用函数,函数声明之后的值其实就是函数里面的参数,以pkg模块为例,我们看下他的定义:
salt.states.pkg.installed(name, version=None, refresh=None, fromrepo=None, skip_verify=False, skip_suggestions=False, pkgs=None, sources=None, allow_updates=False, pkg_verify=False, normalize=True, ignore_epoch=False, reinstall=False, update_holds=False, **kwargs)
我们在写SLS文件时,就是这样写的。installed为一个函数。再看一个service模块的定义,如下:
salt.states.service.running(name, enable=None, sig=None, init_delay=None, **kwargs)
如果有Python基础的话,这样看起来就简单多了,不至于一团浆糊,只知道用却不知道到底是怎么传参数的了
3.执行SLS文件
SLS文件写完后,就可以对相应的minion执行SLS文件了,执行方法分两种
- 执行所有State SLS文件
salt ‘*’ state.highstate
当minion执行 state.highstate命令后,minion将会下载top.sls文件并且去匹配文件中的表达式,表达式匹配后,列出的模块将会被下载、编译和执行
- 执行特定的State SLS文件
salt ‘*’ state.sls
如本例:
salt ‘*’ state.sls httpd
备注: 在State SLS文件中,可以引用Grains和Pillar的数据
三、多个SLS文件
在更有扩展性的部署Salt时,可能会用到多个SLS文件,对于2个或更多的SLS文件,可以结合形成SLS文件树。
举例:安装并启动httpd服务后,并将index.html文件下载到minion端的/var/www/html下以便访问。
/srv/salt/top.sls
base: '*': - httpd
/srv/salt/httpd/init.sls
httpd: pkg: - installed service: - running - require: - pkg: httpd/var/www/html/index.html: file.managed: - source: salt://httpd/index.html - require: - pkg: httpd
在声明ID的时候,实际上就是指定了minion下载文件后的存放路径——/var/www/html/index.html
/srv/salt/httpd/index.html
this is test
- 最后执行SLS
salt ‘*’ state.sls httpd
四、Jinja模板格式的SLS文件
示例
五、state的常用模块
在Salt State System的SLS文件中,state的各种模块是有特定语法的(我一开始还以为就是命令行中的state的用法,看了官方文档发现其实并不是逃~~)
SLS文件中的Salt State所有模块及其使用方法
SLS文件中的变量引用语法
1. 常用模块
- pkg : 软件安装
- file : 文件管理
- iptables : iptables规则
2. 使用案例
- openssh-server服务安装以及防火墙配置
/srv/salt/top.sls
base: '*': - sshd
/srv/salt/sshd/init.sls
sshd: pkg: - installed - name: openssh-server service: - running - require: - pkg: openssh-serverfirewall: iptables.append: - table: filter #指定filter表 - chain: INPUT #指定INPUT链 - jump: ACCEPT #指定动作:ACCEPT/REJECT - match: state #状态匹配 - connstate: NEW - dport: 22 #指定目标端口 - proto: TCP #指定协议 - sport: 1025:65535 #指定源端口 - save: True #service iptables save。规则写入/etc/sysconfig/iptables
iptables最后的命令如下:
#/sbin/iptables -t filter -A INPUT -p TCP -m state --state NEW --dport 22 --sport 1025:65535 --jump ACCEPT#service iptables save
Salt State系统的是Salt的核心之一了,熟练写SLS,可以十分方便的管理多个目标主机。更多的State Modules请参考官网
- 四、Salt State
- 如何使用Salt State
- salt state sls cmd 推送脚本
- saltstack/salt的state.sls的使用
- salt 使用state文件来配置zabbix客户端文件
- salt
- salt
- salt
- 步步为营UML建模系列四、状态图(State)
- NetworkInfo和NetworkInfo.State(四)
- State
- state
- State
- state
- State
- state
- STATE
- State
- 版本管理—Git之使用GitHub搭建远程仓库
- Html5的Reset 和Base样式的结合
- Docker存储驱动之OverlayFS简介
- GitHub用jupyter Notebook查看代码
- Invalid default value for 'create_date' timestamp field
- 四、Salt State
- 对象数组
- 第三篇:第一章的完结篇
- JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)
- curl命令
- Java基础之冒泡排序算法
- java分布式事务处理--最终事务一致性
- VitualBox增强功能安装
- 五、Salt Pillar