SaltStack使用现有的序列化系统来渲染sls数据。而这个现有的序列化系统就是YAML,而严格的YAML格式往往使现在正在学习SaltStack的同学屡屡掉坑。下面就结合官网文档说一说这个YAML格式:
Spaces vs Tabs
YAML使用spaces(空格),因此不要在你的sls文件中使用Tabs!如果你又奇妙的遇到了类似于”rendering sls files errors“等错误,请检查你的sls文件,确保没有Tabs出现。
缩进
YAML文件的语法建议使用两个空格进行缩进,但是YAML会遵循个人文件中所使用的缩进长度,当然我个人还是比较喜欢使用两个空格进行缩进,这样不会导致嵌套比较多的时候,要啪啪啪敲一堆的空格。
今天群里一朋友遇到一个问题,定义nodegroups时报错了,内容如下:
Key nodegroups with value None has an invalid type of <type ‘nonetype’=”">, a dict is required for this value
具体定义的内容如下:
nodegroups:
webgroup1: 'L@cn-gd-gz-0002,cn-gd-gz-0003'
mysqlgroup2: 'L@cn-gd-gz-0007'
从报错内容可以明显看出,nodegroups这个key没有取到value,YAML实际上是将定义的数据进行序列化成一个字典。key下面的缩进内容则会被序列化给改key的对应value,因此这个错误,大家应该知道是哪的问题了。
嵌套的字典
当嵌套字典时,他们不再遵循相同的缩进逻辑,下面是一个file.manager的state管理所定义的数据格式:
/etc/http/conf/http.conf:
file:
- managed
- source: salt://apache/http.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
custom_var: "override"
- defaults:
custom_var: "default value"
other_var: 123
注意:这里默认缩进都是用了两个空格,只有定义context,defaults选项的时候才使用了四个空格作为缩进。如果只使用2个空格作为缩进,那么数据将不会被正确渲染。如果使用双倍的行距,那么深层的嵌套字典,可以使用大括号括起来:
/etc/http/conf/http.conf:
file:
- managed
- source: salt://apache/http.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context: {
custom_var: "override"}
- defaults: {
custom_var: "default value",
other_var: 123 }
布尔值的声明,使用
对于布尔值的声明使用,YAML将会载入True/False 而对于Un-capitalized将会载入true/false,yes/no,on/off,所以在构建pillar数据时,如果出现了以上字符则很可能会出现问题。因此在你使用这些值的时候请务必将其用引号引起来,请其构建为一个字符串。
YAML不喜欢两个连续的缩写形式
乍一看也学并不太明白什么叫做连续的缩写形式,别着急,看下面
比如我们要安装一个httpd的包,我们可以这样写
httpd:
pkg.installed
又比如,我们要新建一个用户,名为httpd,我们还可以这样写
httpd:
user.present
细心观察一下,两个state是不能写入到一个state的sls文件中的,因为他们两个的ID冲突了。因此我们被迫这样写:
httpd:
pkg:
- installed
user:
- present
这样算下来,这样的写法,我们至少多敲了10次键盘。
那么我们这样写是否可以:
httpd:
pkg.installed
user.present
重点来了,上面的这种写法就是刚刚前面所提到的“两个连续的缩写形式”,坏消息是,这种写法是不被支持的;
而好消息是我们可以这样写:
httpd:
pkg.installed: []
user.present: []
这样写既省去了多余的键盘敲击,整体看上去也比较好看。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com