在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。saltstack
,k8s
,ansible
都用的yaml格式配置文件。
YAML 的配置文件后缀为 .yml
,如:test.yml
。
语法规则
yaml支持的数据结构
key: value
key冒号后必须有- list1
YAML数据结构——对象有点像Python中的字典是简单的键值对,对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
key在YAML中表现形式是一个冒号结果的字符串
my_key: my_value
转化到python语法中,上述命令为
{'my_key':'my_value'}
也可以使用 key:{key1: value1, key2: value2, ...}
。
value还可以通过缩进和key关联,四个空格!!
my_key:
my_value
转化为python语法同样的
{'my_key':'my_value'}
YAML语法中字典是可以嵌套的
one_dict_key:
two_dict_key:value_dict
转化为python语法
{
'one_dict_key':{
'two_dict_key':'value_dict'
}
}
较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
YAML语法表示数组,使用一个横杠加一个空格
多个项使用同样的缩进级别作为同一个数组的部分
- list_value_one
- list_value_two
- list_value_three
列表可以作为一个键值对的value,例如一次性要安装多个软件:
my_dict:
- l1
- l2
- l3
转化为python代码理解就是
{
'my_dict':['l1','l2',;l3]
}
数组和对象可以构成复合结构,例:
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。
数组也可以使用流式(flow)的方式表示:
{
languages: [ 'Ruby', 'Perl', 'Python'],
websites: {
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org'
}
}
纯量是最基本的,不可再分的值,包括:
使用一个例子来快速了解纯量的基本使用:
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区