- A+
目录:
1. YAML语法
SaltStack配置文件是由YAML语言编写的,YAML是“另一种标记语言”的外语缩写,但为了强调这种语言以数据作为中心,而不是以置标语言为重点,而用返璞词重新命名,它是一种直观的能够被电脑识别的数据序列化格式,是一种可读性高,并且容易被人类阅读,容易喝脚本语言交互,用来表达资料序列的编程语言。类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
YAML使用一个固定的缩进风格表示数据层结构关系,Salt需要每个锁进级别又两个空格组成(1个空格会报错,3个空格启动不起来),不能使用tabs。
1.1 YAML格式
多行缩进:
数据结构可以用类似大纲的缩排方式呈现,结构通过缩进表示,连续的项目通过“-”来表示,map结构里面的key/value对用冒号“:”来分割,样例如下:
house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 12345
注意:
1.字串不一定要用双引号标识;
2.在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);
3.允许在文件中加入选择性的空行,以增加可读性;
4.在一个档案中,可同时包含多个文件,并用“——”分隔;
5.选择性的符号“...”可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)。
6.“-”代表列表(所以可以有多个)
单行缩写:
YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash用'{}'来包括。因此,上面的这个YAML能够缩写成这样:
house: family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
2. SaltStack状态管理
2.1 SaltStack模块存放位置
我们要写一个状态模块,我们要写在哪儿?
SaltStack的状态模块路径在那里配置?
/etc/salt/master
配置该配置文件(我们在这里配置告诉salt去哪里去找状态模块…):
file_roots: base: - /srv/salt/base dev: - /srv/salt/dev test: - /srv/salt/test prod: - /srv/salt/prod
注意:这里的base目录是默认必须存在的,改完配置需要重启,配置错误是启动不起来的
创建我们配置的目录:
mkdir -p /srv/salt/{base,dev,test,prod}
重启salt
systemctl restart salt-master.service
报错可以使用这个查看:systemctl status salt-master.service
salt报错总结:
1.主机名错误
2.minion端指向master错误
3.id错误,如果id变了需要变得东西
4.配置文件的模块配置路径是否错误
2.2 编写SaltStack状态模块
这里以安装apache为例
说明:在编写状态文件的时候文件名必须以sls(SaltStack的缩写)结尾命名。
[root@linux-node1 ~]# cd /srv/salt/base/ [root@linux-node1 base]# cat apache.sls apache-install: # salt全局唯一ID声明(可自己定义,建议易读) pkg.installed: # pkg是一个状态模块.installed状态模块的方法(用点引用) - name: httpd # name是状态模块方法的参数 ##这里的installed是状态,而非是安装,salt检测到没有httpd就去安装一个 apache-service: # id service.running: # service是状态模块.running是状态模块的方法(保证该服务处于运行状态) - name: httpd # 状态模块方法的参数 - enable: True # 状态模块的参数
在node2执行该模块(state是个执行模块,它会在默认的base目录下会找apache这个文件,不过sls是被省略的)
[root@linux-node1 base]# salt "linux-node2*" state.sls apache #执行单个状态 linux-node2.example.com: #minion id ---------- ID: apache-install #状态id Function: pkg.installed # 状态模块和方法 Name: httpd #参数 Result: True #成功 Comment: The following packages were installed/updated: httpd #描述信息 Started: 22:51:17.450220 #启动时间 Duration: 26470.913 ms #使用的时间(秒) Changes: #如下安装的东西 ---------- apr: ---------- new: 1.4.8-3.el7 old: apr-util: ---------- new: 1.5.2-6.el7 old: httpd: ---------- new: 2.4.6-67.el7.centos.6 old: httpd-tools: ---------- new: 2.4.6-67.el7.centos.6 old: mailcap: ---------- new: 2.1.41-2.el7 old: ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: Service httpd has been enabled, and is running Started: 22:51:44.390769 Duration: 297.177 ms Changes: ---------- httpd: True Summary for linux-node2.example.com ------------ Succeeded: 2 (changed=2) Failed: 0 ------------ Total states run: 2 Total run time: 26.768 s
执行成功!
2.3 SaltStack高级状态
2.3.1 多级目录引用模块
[root@linux-node1 base]# pwd /srv/salt/base [root@linux-node1 base]# mkdir -p web [root@linux-node1 base]# mv apache.sls web/ [root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache
2.3.2 编排执行高级状态
这里的top.sls其实就是将所有的模块编排在一个文件里然后在默认的路径下找top.sls这个模块,然后去执行它
编写top.sls(这是默认的命名方式,在配置文件master配置)
[root@linux-node1 base]# vim top.sls base: 'linux-node1.example.com': - web.apache 'linux-node2.example.com': - web.apache
执行top.sls
[root@linux-node1 base]# salt '*' state.highstate
说明:state.highstate是salt的一个高级状态执行模块,当执行此状态模块时,谈会去base目录下读取top.sls这个文件执行它;top.sls可以进行minion的编排,对monion进行分类执行状态模块,适合在生产环境中使用。