linux中进程状态为SLs,Saltstack的SLS⽂件解读Salt State树
跟系统⽂件树⼀样,salt state⽂件也有⾃⼰的树系统,这通过配置⽂件中的file_roots配置
#在/etc/salt/master 中配置下⾯选项,指定salt state的根⽬录在/srv/salt
file_roots:
base:
- /srv/salt
修改master配置⽂件后需要重启,使得配置⽂件⽣效
service salt-master restart
或是
pkill salt-master
salt-master -d
Salt State 的top⽂件
top.sls ⽂件是SaltState的默认sls⽂件,再未作特别特别指定时候,salt 会默认调⽤top.sls来执⾏。
例⼊ salt * state.highstate。
top.sls ⽂件需要⼿⼯创建,位置则是上⾯Salt State 树定义的⽬录/srv/salt下
#创建⼀个top.sls
touch /srv/salt/top.sls
# 添加如下内容,注意sls⽂件是⽤2个空格来作为缩进
# base 匹配状态树的base⽬录配置
# '*' 表⽰匹配所有的minions
# - webserver 表⽰执⾏base⽬录下webserver.sls状态⽂件 或是 webserver/init.sls⽂件
base:
'*':
- webserver
创建⼀个简单的Salt State⽂件
上⾯在top.sls⽂件中定义了⼀个webserber⽂件下⾯来添加⼀个webserver⽂件
在⽂件/srv/salt/webserver.sls⽂件中添加下⾯内容
# apache :ID 声明,跟yum install apache 指定的名称⼀样
# pkg : 状态声明,说明下⾯的操作是什么状态操作
# - installed : 函数声明,说明该sls⽂件要指定的执⾏操作函数
apache:
pkg:
- installed
执⾏我们定义的Salt State
# 更新所有的minion的状态
salt '*' state.highstate
备注:根据上⾯top.sls以及webserver.sls的内容,所有的minions都会给安装apache服务,如果在top.sls中修改minion的匹配,则仅会对匹配到的minion进⾏操作
当然也可以特别指定sls⽂件来执⾏ salt-call '192.168.0.100' state.sls webserver
调试Salt
#开启debug⽇志 salt-minion -l debug
#设置默认超时 salt '*' state.highstate -t 60
1. sls⽂件本质上是python嵌套字典(键值对),由salt-master以⼴播的形式传递给salt-minion,通过sls⽂件告知使⽤哪个模块的哪个函数,参数有哪些,在salt-minion⼀侧进⾏函数调⽤
2. 冒号':' ⽤来分隔键和值, 冒号:与后⾯的单词如果在⼀⾏,⼀定要有⼀个空格, ⼀个单词后⾯是否
有冒号:取决于这个单词是否是key,后⾯是否有值或者是嵌套的内容
3. 短横杠 - 表⽰这项是个列表项, 短横杠与后⾯的单词有⼀个空格
4. 缩进: 本层与下⼀层要有缩进, 缩进不能⽤tab, ⼀般是两个空格. 相同⼀缩进表⽰相同的层级
⼀个sls⽂件⽰例:httpd.sls
httpd: -------> httpd: sls⽂件的id,在此sls⽂件中不能重复,同时也是yum安装的包名和服务名,作为参数name传递给
pkg.installed函数和service.running函数
pkg: -------> pkg是包管理模块,对应/usr/lib/python2.6/site-packages/salt/states下的模块pkg.py
- installed -------> installed是pkg模块下的函数,id(httpd)作为installed的参数进⾏调⽤
service: ------->service是服务模块,对应/usr/lib/python2.6/site-packages/salt/states下的模块service.py, 由于service是⼀个key,其下的running, require, watch是列表形式的值,因此service之后有冒号
- running -------> running是service.py模块下的函数,id(httpd)作为running的参数进⾏调⽤
- require: ------->require关键字在 /usr/lib/python2.6/site-packages/salt/state.py⾥定义的,由于require是key,其下还有⼦层,因此require后⾯要有冒号: 且与后⾯的单词有⼀个空格
- pkg: httpd
- watch: ------->require关键字在 /usr/lib/python2.6/site-packages/salt/state.py⾥定义的,由于watch是key,其下还有⼦层,因此require后⾯要有冒号:且与后⾯的单词有⼀个空格
- file: /etc/httpd/f
/etc/httpd/f:
file: ------->file是salt的⽂件管理模块,对应/usr/lib/python2.6/site-packages/salt/states下的模块file.py
- managed -------> managed是file.py模块⾥的⼀个函数
- source: salt://f -------> source是managed函数的参数之⼀
-
require:
- pkg: httpd
sls⽂件的执⾏:salt '*' state.sls httpd (注意:是httpd,不是httpd.sls)
另⼀个sls⽂件⽰例:mysql.sls
mysql-server: -------> 这是要安装的包名,也是sls⽂件的id,不能重复
pkg:
- installed -------> installed的下⼀⾏应该是,- name: mysql-server指明要安装的包名,但是由于包名与id(mysql-server)相同,因此, ⽆须再单独指明installed函数的参数,-name: mysql-server省略
service.running:
- name: mysqld -------> - name 这是service.running函数的参数,如果包名与服务名相同,则- name这项可以省略,但本案例中包名是mysql-server,服务名是mysqld,因此必须有-name 指明running函数的参数是mysqld
-
require: -------> require是依赖的含义:要运⾏服务mysqld, 必须安装mysql-server的包
- pkg: mysql-server
- watch: -------> watch: 表⽰对⽂件/etc/myf的监控,当master 向minion传递myf时,新的myf与minion上原有⽂件不⼀致时,会重启mysqld服务
- file: /etc/myf
/etc/myf: -------> 这⼀⾏同样是id不能重复:表⽰传递到minion时所处的位置,同时也作为file.managed函数的参数,对应name形参
file.managed: -------> 同上⼀个⽰例,file.py模块的managed函数,下⾯的source,user, group, mode都是managed函数的参数
- source: salt://myf -------> source 是managed函数的参数,指定要传递到minion端的源⽂件. salt://myf 表⽰myf
在/srv/salt之下,/srv/salt是saltstack的根⽬录
- user: root -------> 表⽰⽂件的属主
- group: root -------> 表⽰⽂件的属组
- mode: 644 -------> 表⽰⽂件的权限
- require: -------> ⽂件从master传递到minion, 需要依赖mysql-server包的安装
- pkg: mysql-server
sls⽂件的执⾏: salt '*' state.sls mysql (注意:是mysql,不是mysql.sls)
linux安装redis服务[root@salt-master salt]# vim httpd.sls
httpd:
pkg:
- installed
service.running: #注意: 这种写法时running后⾯有冒号, 与上⾯的写法略有不同,但效果相同
- require:
-
pkg: httpd
- watch:
- file: /etc/httpd/f
/etc/httpd/f:
file.managed: #注意: 这种写法时managed后⾯有冒号, 与上⾯的写法略有不同,但效果相同
- source: salt://f
- require:
- pkg: httpd
[root@salt-master salt]# vim mysql.sls
mysql-server:
pkg:
-
installed
service.running:
- name: mysqld
- require:
- pkg: mysql-server
- watch:
- file: /etc/myf
/etc/myf:
file.managed:
- source: salt://myf
- user: root
-
group: root
- mode: 644
- require:
- pkg: mysql-server
安装zabbix-agent的⽰例
[root@salt-master salt]# vim zabbix-agent.sls zabbix-agent:
pkg:
- installed
service.running:
- require:
- pkg: zabbix-agent
-
watch:
- file: /etc/zabbix/f
/etc/zabbix/f:
file.managed:
- source: salt://f
- user: root
- group: root
- mode: 644
top.sls
top.sls 是配置管理的⼊⼝⽂件,⼀切都是从这⾥开始,在master 主机上,默认存放在/srv/salt/⽬录. top.sls 默认从 base 标签开始解析执⾏,下⼀级是操作的⽬标,可以通过正则,grain模块,或分组名,来进⾏匹配,再下⼀级是要执⾏的state⽂件,不包括扩展名。
创建 /srv/salt/top.sls
通过正则进⾏匹配的⽰例,
base:
'*':
- webserver
通过分组名进⾏匹配的⽰例,必须要有 - match: nodegroup
base:
group1:
- match: nodegroup
- webserver
通过grain模块匹配的⽰例,必须要有- match: grain
base:
'os:Fedora':
- match: grain
- webserver
准备好top.sls⽂件后,编写⼀个state⽂件
/srv/salt/webserver.sls
apache: # 标签定义
pkg: # state declaration
- installed # function declaration
· 第⼀⾏被称为(ID declaration)标签定义,在这⾥被定义为安装包的名。注意:在不同发⾏版软件包命名不同,⽐如 fedora 中叫httpd的包 Debian/Ubuntu中叫apache2
· 第⼆⾏被称为(state declaration)状态定义,在这⾥定义使⽤(pkg state module)
· 第三⾏被称为(function declaration)函数定义,在这⾥定义使⽤(pkg state module)调⽤ installed 函数
最后可以在终端中执⾏命令来查看结果:
salt'*' state.highstate或附件 test=True参数测试执⾏
salt'*' state.highstate -v test=True
主控端对⽬标主机(targeted minions)发出指令运⾏state.highstatem模块,⽬标主机⾸先会对top.sls下载,解析,然后按照top.sls内匹配规则内的定义的模块将被下载,解析,执⾏,然后结果反馈给 master.
SLS⽂件命名空间
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论