YAML入门教程

来自CloudWiki
跳转至: 导航搜索

简介

https://www.runoob.com/w3cnote/yaml-intro.html

yml文件是yaml语法格式的文件,

我们使用YAML是因为它像XML或JSON那样是一种利于读写的数据格式。

另外,在大多数编程语言中有使用YAML的库。

所有的YAML文件(无论与Ansible有没有关系)开始行都应该是---,这是YAML格式的一部分,表明一个文件的开始。

YAML一般有下列两种数据结构:

  • 列表:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 字典:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

列表中的所有成员都开始于相同的缩进级别,并且使用一个"-"作为开头(一个横杠和一个空格)

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

注意:只能使用空格缩进,不能使用 tab,如果使用 vi 编辑器,可以通过编辑 $HOME/.vimrc 将 Tab 转化为2个空格

autocmd FileType yaml setlocal ai ts=2 sw=2 et

YAML 字典

简单字典

一个字典是由一个简单的键:值的形式组成

 key: value

这个冒号后面必须是一个空格)。。

示例如下:

---
# 一位职工的信息
name: Example Developer


复合字典

字典的值也可以包含子键值对:

key: 
    child-key: value
    child-key2: value2

示例:

# 一位职工的信息
worker:
 name: Example Developer
 job: Developer
 skill: Elite

也可以使用 key:{key1: value1, key2: value2, ...}。

字段也可以使用缩进方式来表示:

# 一位职工的记录
worker: {name: Example Developer, job: Developer, skill: Elite}

复杂字典

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

 
?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2


意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

YAML列表

以 - 开头的行表示构成一个列表

一维列表

列表中的所有成员都开始于相同的缩进级别,并且使用一个"-"作为开头(一个横杠和一个空格)

---
#一个美味水果的列表
- Apple
- Orange
- Strawberry
- Mango

多维列表

YAML 支持多维列表,可以使用行内表示:

 key: [value1, value2, ...]

数据结构的子成员是一个列表,则可以在该项下面缩进一个空格。


一个相对复杂的例子:

companies:

   -
       id: 1
       name: company1
       price: 200W
   -
       id: 2
       name: company2
       price: 500W

意思是 companies这个键的属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。

列表的成员仍是列表

-
 - A
 - B
 - C
-
 - D
 - E
 - F

YAML复合结构

数组和对象可以构成复合结构,例:

languages:
  - Ruby
  - Perl
  - Python 


- YAML: yaml.org 
  Ruby: ruby-lang.org

- Python: python.org 
  Perl: use.perl.org



我们把目前所学到的YAML例子组合在一起。

---
# 一位职工的记录
name: Example Developer
job: Developer
skill: Elite
employed:True

languages:
   ruby: Elite
   python: Elite
   dotnet: Lame

foods:
   - Apple
   - Orange
   - Strawberry
   - Mango



以上就是编写Ansible playbooks需要知道的所有YAML语法。