前边文章写了一个《Saltstack配置管理学习笔记:配置管理概述》基本上对Saltstack的强大配置管理功能做了一个系统了解,后期笔记将重要写一些配置管理细节。今天再写一个state基础和编写技巧的笔记,先写一些基础,后边设置一个批量修改/etc/resolv.conf案例说明补充。
1,首先设置启用入口文件。file_roots 我们这里就不操作了,之前已经启用并根据上线流程,我们预设了开发环境、测试环境以及预生产环境,都是/srv/salt下创建。
state_top: top.sls
vi /etc/salt/master 找到top.sls并取消注释。设置以后需重启master生效。
329 state_top: top.sls
2,sls文件编写,sls是配置管理核心state模块的核心,这个需要大量的练习。
2.1 YAML是什么。 sls文件采用的是YAML写法,这里简单对YAML做个小说明:
YAML 的意思其实是:”Yet Another Markup Language”(仍是一种置标语言) ,这里建议去百度搜索YAML了解更为具体内容。这里简单说一点:
功能
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。
它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料。
由于YAML使用空白字符和分行来分隔资料,使的他特别适合用grep、Python、Perl、Ruby操作。
其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。
格式
house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 12345
多行缩进
数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。样例如下:
注意:
- 字串不一定要用双引号标识;
- 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);
- 允许在文件中加入选择性的空行,以增加可读性;
- 在一个档案中,可同时包含多个文件,并用“——”分隔;
- 选择性的符号“…”可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)。
单行缩写
YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]’包括起来,hash用'{}’来包括。因此,上面的这个YAML能够缩写成这样:
house:
family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
2.2 编写技巧。 上边从百度copy了一些YAML的说明以及写法介绍,看资料等总结了无非就是三个技巧
(1)缩进 YAML使用一个固定的缩进风格表示数据层级关系,每个缩进需要有两个空格,一级没有,二级两个,三级四个,四级六个。。。
比如:
/etc/resolv.conf: file.managed: - source: salt://init/resolv.conf - user: root - group: root - mode: 644
(2)冒号 map结构里面的key/value键值对用冒号“:”来分隔。 比如上边的案例代码。
(3)短横线 连续的项目通过短横线“-”来表示,每个短横线右边都有一个空格。比如上边的案例代码。
3,实际案例。我们写一个批量同步所有minion端的dns,进行一个简单初始化配置。
(1)首先,我们top.sls入口文件的环境、操作对象以及要sls文件指定:
base: '*' - init.dns
如上代码我们设置了环境:base(/serv/salt) 操作对象target* 所有客户端,sls文件,init目录下的dns.sls文件
(2)init目录我们需要在/srv/salt创建一个init,然后进入这个目录以后vim dns.sls 写入如下内容:
/etc/resolv.conf: 要操作的目标对象 file.managed: 采用的组件state.file和方法managed,核实文件存在对应状态 ,不一致就修改。 - source: salt://init/resolv.conf 指定对比文件source路径,和谁对比。salt:// 是以当前base为根,如果有其他目录,需要加上对应路径。 - user: root - group: root - mode: 644
我们需要在init目录下在copy一个resolv.conf过来,cp /etc/resolv.conf ./ 然后编辑,我们设置namesever 为223.5.5.5 以及180.76.76.76
nameserver 223.5.5.5
nameserver 180.76.76.76
可以我们之前dns设置的是:
[root@Master ~]# cat /etc/resolv.conf nameserver 1.2.3.4 nameserver 8.8.8.8
(3)执行结果。 我们执行下salt ‘*’ state.highstate
[root@Master init]# salt '*' state.highstate Master: ---------- ID: /etc/resolv.conf Function: file.managed Result: True Comment: File /etc/resolv.conf updated Started: 17:04:25.392629 Duration: 24.466 ms Changes: ---------- diff: --- +++ @@ -1,2 +1,2 @@ -nameserver 1.2.3.4 -nameserver 8.8.8.8 +nameserver 223.5.5.5 +nameserver 180.76.76.76 省略一万行。。。。。
可以看到已经成功执行,下边我们看下所有服务器的dns设置结果,执行 salt ‘*’ cmd.run ‘cat /etc/resolv.conf’
[root@Master init]# salt '*' cmd.run 'cat /etc/resolv.conf' Master: nameserver 223.5.5.5 nameserver 180.76.76.76 aliserver: nameserver 223.5.5.5 nameserver 180.76.76.76 HK-VPN: Minion did not return. [Not connected] 香港这个服务器机房网络蹦了,可以不管这结果。
转载请注明:西数超哥博客www.ysidc.top» [原创]SaltStack配置管理学习笔记-States基础和编写技巧
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top