yaml格式的字符串linux,82.学习Ansible[5]:YAML文件格式浅析,ansibleyaml

82.学习Ansible[5]:YAML文件格式浅析,ansibleyaml

文章目录关于YAML

Ansible中的YAML列表

字典

复杂格式

Ansible中不常用的YAML特性布尔型值

跨行

特殊字符处理

Ansible的变量替换

掌握Ansible的ad-hoc command、inventory管理后,可以继续深入了解playbook的编写。在学习playbook之前,我们先了解一下playbook使用的YAML的语法格式。

关于YAML

Ansible的Playbook之所以采用YAML,是因为YAML可读性强,比XML、JSON易编写。另外,大多数语言有成熟的YAML解析工具。

YAML档案以---开头,…结尾(可选,如果多个YAML档案保存在一个文件,建议用…结尾,这样在流式传输中不用关闭流就知道遇到了档案结尾)。

使用#(井号加一个空格)作为单行注释的开头,YAML没有多行注释。

只能使用空格缩进,不能使用tab。

字符串不必用引号括起。如果用双引号括起来,支持特殊字符的转义。

Ansible中的YAML

Ansible几乎所有的YAML档案的最顶层都是列表,列表中的每个元素是key/value对(字典)。

列表

YAML中,列表的所有元素,都是同样缩进、以-(短横线和空格,或者短横线和换行符)开头的一行,例如:

---

# A list of fruits

fruits:

- Apple

- Orange

- Mango

无所谓缩进的空格数量,只要保证同样层级的元素缩进量一样就可以。

字典

字典按照key: value(冒号后面跟一个空格,或者冒号后跟一个换行符)的格式定义:

# An employee record

mars:

name: mars loo

job: qa

skill: ansible

复杂格式

列表和字典可以互相嵌套,比如字典的列表、字典的值是列表或者两种情况的混合:

# Employee records

- mars:

name: mars loo

job: qa

skill:

- ansible

- python

- loo:

name: loo mars

job: rd

skill:

- java

- C++

字典和列表可以简写:

---

mars: {name: mars loo, job: qa, skill: ansible}

fruits: ['Apple', 'Orange', 'Mango']

Ansible中不常用的YAML特性

布尔型值

表示布尔型的true/false有多种形式:

create_key: yes

need_agent: no

knows_oop: True

like_vim: TRUE

use_cvs: false

跨行

一行文字长度过长可以跨行:|会包含换行符和尾随空格,>会把换行符替换为空格,并去掉多余的尾随空格。两种情况下,缩进的空格都会被忽略。例如:

include_newlines: |

exactly as you see

will appear these three

lines of poetry

fold_newlines: >

this is really a

single line of text

despite appearances

特殊字符处理

YAML中字符串不需要用引号扩起来,内容可以是任意值。某些场景下为了保留特殊字符可能需要用引号括起来,例如:

---

windows_drive: "C:"

否则C:后面跟了一个换行符,会被认为是一个字典。或者需要转义:

---

windows_drive: "C:\\a\\b"

Ansible的变量替换

Ansible使用{{ var }}表示变量,但是在YAML中,冒号后面跟着花括号会被认为是一个字典,所以需要用双引号括起来。如果一个值以{{ var }}的形式开头,则整个值都需要用双引号括起来,而不仅仅是{{ var }}的部分:

---

foo: "{{ variable }}/additional/string/literal"

foo2: "{{ variable }}\\backslashes\\are\\also\\special\\characters"

foo3: "even if it's just a string literal it must all be quoted"

如下字符都不能用于未被引号括起来的标量的开头:[] {} > | * & ! % # @ , ' "。虽然YAML规定? : -后面如果跟的不是空白字符,可以作为未被引号括起来的标量的开头,但是不同YAML解析器的实现不同,最好也都用引号括起来。

其他明确需要字符串的场景,也可以把标量中引号括起来,例如:

version : "1.0"

避免版本号1.0被解析成浮点数。

YAMLLint网站可以检查YAML文件的格式,并给出优化后的YAML定义。

至此,我们掌握的内容对于编写playbook已经足够,建议继续阅读下一篇博客:学习Ansible[6]:playbook。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值