一:介绍:
YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl等。
YAML不是XML,不过,在开发的这种语言时,YAML的意思其实是:“Yet Another Makup Language”(仍是一种标记语言)
特点:
- 可读性好
- 和脚本的交互性好
- 使用实现怨言的数据类型
- 有一个一致的信息模型
- 易于实现。
- 可以基于流来处理。
- 表达能力强,扩展性好。
二:YAML语法:
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(structure)通过空格来展示。
- 序列(sequence):里的项用“-”来代表,来代表不同元素。
- MAP里的键值对,用":"分隔,比如:
1 name:tom 2 age:22 3 gender:Male 4 spouse: 5 name:lili 6 age:18 7 gender:Female 8 children: 9 - name:tom1 10 age:5 11 gender:Male 12 - name:tom2 13 age:5 14 gender:Female
- 一个键值对,可以一个键值对应一个value,也可以一个键值对应另一个键值对。
- 序列,相同的数据类型,元素间用"-"表示一个序列内,元素是键值对。
- 用空格来表示结构关系,不是tab。
- YAML扩展文件以yaml结尾:比如:example.yaml
三:ansible中YAML。
list:
在ansible中叫序列为列表,列表为序列都可以。他们之间元素用"-"开头例如:
1 # a list of colors 2 - red 3 - blue 4 - black
dictionary:
字典:通过key:value 进行标识。例如:
1 # tom information 2 name:tom 3 age:22 4 job:it
如上3个键值对表示一个实体,也可以用{}来表示一个实体,也就是说将上面3个键值对放在一个{}中来表示一个实体。
1 #tom information 2 1 {name:tom,age:22,job:it}
基本的 YAML
对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典.
YAML 还有一个小的怪癖. 所有的 YAML 文件(无论和 Ansible 有没有关系)开始行都应该是 ---
. 这是 YAML 格式的一部分, 表明一个文件的开始.
列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- "
作为开头(一个横杠和一个空格):
1 --- 2 # 一个美味水果的列表 3 - Apple 4 - Orange 5 - Strawberry 6 - Mango
一个字典是由一个简单的 键: 值
的形式组成(这个冒号后面必须是一个空格):
1 --- 2 # 一位职工的记录 3 name: Example Developer 4 job: Developer 5 skill: Elite
字典也可以使用缩进形式来表示, 如果你喜欢这样的话:
1 --- 2 # 一位职工的记录 3 {name: Example Developer, job: Developer, skill: Elite}
Ansible并不是太多的使用这种格式, 但是你可以通过以下格式来指定一个布尔值(true/fase):
1 --- 2 create_key: yes 3 needs_agent: no 4 knows_oop: True 5 likes_emacs: TRUE 6 uses_cvs: false
让我们把目前所学到的 YAML 例子组合在一起. 这些在 Ansible 中什么也干不了, 但这些格式将会给你感觉:
1 --- 2 # 一位职工记录 3 name: Example Developer 4 job: Developer 5 skill: Elite 6 employed: True 7 foods: 8 - Apple 9 - Orange 10 - Strawberry 11 - Mango 12 languages: 13 ruby: Elite 14 python: Elite 15 dotnet: Lame
这就是你开始编写 Ansible playbooks 所需要知道的所有 YAML 语法.
NOTICE:
尽管 YAML 通常是友好的, 但是下面将会导致一个 YAML 语法错误:
1 foo: somebody said I should put a colon here: so I did
你需要使用引号来包裹任何包含冒号的哈希值, 像这样:
1 foo: "somebody said I should put a colon here: so I did"
然后这个冒号将会被结尾.
此外, Ansible 使用 “{{ var }}” 来引用变量. 如果一个值以 “{” 开头, YAML 将认为它是一个字典, 所以我们必须引用它, 像这样:
1 foo: "{{ variable }}"