-
什么是
YAML
?
YAML
是一种存储数据的文件格式。类似json
和xml
。
Ansible playbooks
或者配置文件,以称为YAML
的特定格式编写。如果您使用过其他数据结构格式(如XML
或JSON
),则应该能够轻松地使用它。
上图中就是以3
种格式表示的一个server
的定义 -
简单的数据格式
- 键值对: 键和值由冒号分隔, 冒号后面必须有空格。
- 数组: 数组名
key
后面加冒号,然后换行,每个数组元素前面加-,表示这是数组中的一个元素 - 字典(
Map
):字典是在一个项目下组合在一起的一组属性。字典名字后面加冒号;每个单一项目的属性前有相等数目的空格,每一项都对齐在一起。单一项目是key: value
的形式。
YAML
中的空格很关键,例如下面的例子,想将Fat
和Carbs
设置为Calories
的值,就会报错。因为Calories
已经有一个值105
了。
数组(lists
)可以包含字典。例如下面的例子,有个数组名字为Fruits
,包含两个元素Banana
和Grape
,这两个元素分别又是一个字典,字典里面包含了详细的信息。
-
什么时候用数组?什么时候用字典?
以汽车为例子。汽车是一个单一的对象, 它具有颜色、型号、 变速箱和价格等属性。为了存储单个对象的不同信息或属性,我们使用字典。
在这个简单的字典中,我以键值对定义了car
的属性。可能不像这样简单, 例如, 如果我们需要将模型进一步拆分为model name
和make year
, 则可以将其表示为另一个字典中的字典。
在本例中,model
的单个值现在被一个小字典替换,该字典包含两个属性:name
和year
。假设我们要存储六辆汽车的名称。名字是由汽车的颜色和型号来命名的。为了存储它, 我们将使用一个数组,因为它是同一类型对象的多个项。因为我们只存储名称, 所以我们有一个简单的字符串列表。如果我们想存储每辆车的所有信息。
我们之前列出的所有信息,如颜色、 型号、 变速器和价格, 该怎么办?我们将把数组从字符串列表修改为字典列表。因此, 我们展开数组中的每一项,并将名称替换为前面构建的字典。这样, 我们就可以使用字典列表在单个YAML文件中表示多辆汽车的所有信息。
-
字典是无序集合, 而列表是有序集合
您在这里看到的两个字典具有相同的banana属性。但是, 您可以看到, 脂肪和碳水化合物属性的顺序并不匹配。在第一本词典中, 脂肪的定义在碳水化合物之前,在第二本词典中, 碳水化合物排在脂肪之后, 但这并不重要。属性可以按任意顺序定义,但只要每个属性的值匹配,两个字典将仍然相同。
这对于数组是不同的。数组是有序集合,因此项的顺序很重要。所示的两个数组并不相同, 因为apple
和banana
位于不同的位置。这是在使用数据结构时要记住的一点。
还请记住, 任何以#
开头的行都将被自动忽略,并被视为注释。YAML
例子:payslips
是数组,包含三个对象,每个对象包含month
和amount
两个键值对。employee: name: john gender: male age: 24 address: city: 'edison' state: 'new jersey' country: 'united states' payslips: - month: june amount: 1400 - month: july amount: 2400 - month: august amount: 3400
更多关于
Ansible
的文章,请参考我的Ansible
专栏:https://blog.csdn.net/u011069294/category_12331290.html