4.8 yaml语法
4.8 yaml语法
playbook的语法:YAML
ansible的playbook采用yaml语法,它以非常简洁的方式实现了json格式的事件描述。
yaml之于json就像markdown之于html一样,极度简化了json的书写。
YAML文件后缀通常为.yaml或.yml。
YAML在不少工具里都使用,学习它是"一次学习、终生受益"的,所以很有必要把yaml的语法格式做个梳理,系统性地去学一学。
YAML的基本语法规则如下:
(1).使用缩进表示层级关系
(2).缩进时不允许使用Tab键,只允许使用空格
(3).缩进的空格数目不重要,只要相同层级的元素左对齐即可
(4).yaml文件以"---"作为文档的开始,以表明这是一个yaml文件
即使没有使用
---
开头,也不会有什么影响
(5).# 表示注释,从这个字符一直到行尾,都会被解析器忽略
(6).字符串不用加引号,但在可能产生歧义时,需加引号(单双引号皆可),比如引用变量时
(7).布尔值非常灵活,不分区大小写的true/false、yes/no、on/off、y/n、0和1都允许
YAML支持三种数据结构:
(1).对象:key/value格式,也称为哈希结构、字典结构或关联数组
(2).数组:也称为列表
(3).标量(scalars):单个值
可以去找一些在线YAML转换JSON网站,比如 http://yaml-online-parser.appspot.com 通过在线转换可以验证或查看自己所写的YAML是否出错以及哪里出错。
对象
一组键值对,使用冒号隔开key和value。注意,冒号后必须至少一个空格。
name: clay
等价于json:
{
"name": "clay"
}
数组
---
- Shell
- Perl
- Python
等价于json:
["Shell","Perl","Python"]
也可以使用行内数组(内联语法)的写法:
---
["Shell","Perl","Python"]
再例如:
---
- lang1: Shell
- lang2: Perl
- lang3: Python
等价于json:
[
{"lang1": "Shell"},
{"lang2": "Perl"},
{"lang3": "Python"}
]
将对象和数组混合:
---
languages:
- Shell
- Perl
- Python
等价于json:
{
"languages": ["Shell","Perl","Python"]
}
字典
---
person1:
name: clay
age: 18
gender: male
person2:
name: wangchi
age: 19
gender: female
等价于json:
{
"person2": {
"gender": "female",
"age": 19,
"name": "clay"
},
"person1": {
"gender": "male",
"age": 18,
"name": "wangchi"
}
}
也可以使用行内对象的写法:
---
person1: {name: clay, age: 18, gender: male}
复合结构
---
- person1:
name: clay
age: 18
langs:
- Perl
- Ruby
- Shell
- person2:
name: xiaofanggao
age: 19
langs:
- Python
- Javascript
等价于json:
[
{
"langs": [
"Perl",
"Ruby",
"Shell"
],
"person1": null,
"age": 18,
"name": "clay"
},
{
"person2": null,
"age": 19,
"langs": [
"Python",
"Javascript"
],
"name": "xiaofanggao"
}
]
字符串续行
字符串可以写成多行,从第二行开始,必须至少有一个单空格缩进。换行符会被转为空格。
str: hello
world
hello world
等价于json:
{
"str": "hello world hello world"
}
也可以使用 > 换行,它类似于上面的多层缩进写法。此外,还可以使用|在换行时保留换行符。
that: >
Foo
Bar
this: |
Foo
Bar
等价于json:
{'that': 'Foo Bar', 'this': 'Foo\nBar\n'}
参考链接:
https://blog.51cto.com/cloumn/blog/1543