1、YAML介绍

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言包括XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言另外Ingy dtNet与Oren Ben-Kiki也是这语言的共同设计者。 

YAML Ain't Markup Language即YAML不是XML。不过在开发的这种语言时YAML的意思其实是"Yet Another Markup Language"仍是一种标记语言。其特性 

YAML的可读性好 

YAML和脚本语言的交互性好 

YAML使用实现语言的数据类型 

YAML有一个一致的信息模型 

YAML易于实现 

YAML可以基于流来处理 

YAML表达能力强扩展性好 

更多的内容及规范参见http://www.yaml.org。 

  

2、YAML语法 

YAML的语法和其他高阶语言类似并且可以简单表达清单、散列表、标量等数据结构。其结构Structure通过空格来展示序列Sequence里的项用"-"来代表 

Map里的键值对用":"分隔。YAML文件扩展名通常为.yaml或者.yml。下面是一个示例。 

  

name: John Smith 

age: 41gender: Male 

spouse: 

name: Jane Smith 

age: 37 

gender: Female 

children: 

- name: Jimmy Smith 

age: 17 

gender: Male 

- name: Jenny Smith 

age 13 

gender: Female 

  

YAML 2 个重要的结构组成部分list和directory 

################################# list 

  

列表的所有元素均使用“-”打头例如 

# A list of tasty fruits 

- Apple 

- Orange 

- Strawberry 

- Mango 

  

##############################dictionary 

  

字典通过key与valuef进行标识例如 

--- 

# An employee record 

name: Example Developer 

job: Developer 

skill: Elite 

  

也可以将key:value放置于{}中进行表示例如 

--- 

# An employee record 

{name: Example Developer, job: Developer, skill: Elite} 

  

多个映射关系组成一个字典一个列表可以包含多个字典。

3、ymal中的变量

##变量命名################################  

变量名仅能由字母、数字和下划线组成且只能以字母开头。 

##facts################################  

facts是由正在通信的远程目标主机发回的信息这些信息被保存在ansible变量中。要获取指定的远程主机所支持的所有facts可使用如下命令进行 

# ansible hostname -m setup 这个命令可以获得被监控端主机的各种信息将这些信息得到后保存到变量中。 

  

##自定义变量##############################  

在 yaml 中可以使用vars关键字来定义变量 

vars: 

var_name: value 

 

##变量的引用###########################  

` var_name `

 

##特殊的变量迭代#########################  

当有需要重复性执行的任务时可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用并通过with_items语句来指明迭代的元素列表即可。 

  

##示例##################################### 

例如在被控端添加 2 个用户 

  

方式1一般做法 

- name: add user testuser1 

user: name=testuser1 state=present groups=wheel

- name: add user testuser2 

user: name=testuser2 state=present groups=wheel

  

方式2使用变量方式 

- name: add several users 

vars: 

user1: testuser1 

user2: testuser2 

user: name=` user1 ` state=present groups=wheel

user: name=` user2 ` state=present groups=wheel

  

方式3使用迭代方式 

- name: add several users 

user: name=` item ` state=present groups=wheel

with_items:  

- testuser1  

- testuser2 

事实上with_items中可以使用元素还可为hashes例如 

- name: add several users 

user: name=` item`.`name ` state=present groups=` item`.`groups ` 

with_items: 

- { name: 'testuser1', groups: 'wheel' } 

- { name: 'testuser2', groups: 'root' }