介紹
YAML 語言(發(fā)音 /?j?m?l/ )的設(shè)計目標(biāo)仲义,就是方便人類讀寫婶熬。它實質(zhì)上是一種通用的數(shù)據(jù)串行化格式。
它的基本語法規(guī)則如下埃撵。
? 大小寫敏感
? 使用縮進(jìn)表示層級關(guān)系
? 縮進(jìn)時不允許使用Tab鍵赵颅,只允許使用空格。
? 縮進(jìn)的空格數(shù)目不重要暂刘,只要相同層級的元素左側(cè)對齊即可
? yaml文件以"---"作為文檔的開始饺谬,"..."作為文檔的結(jié)束
#
表示注釋,從這個字符一直到行尾谣拣,都會被解析器忽略募寨。
YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種。
? 對象:鍵值對的集合芝发,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
? 數(shù)組:一組按次序排列的值绪商,又稱為序列(sequence) / 列表(list)
? 純量(scalars):單個的、不可再分的值
對象
對象的一組鍵值對辅鲸,使用冒號結(jié)構(gòu)表示格郁。
job: Developer
列表
---
fruits:
- Apple
- Orange
- Strawberry
- Mango
轉(zhuǎn)換為python格式
{'fruits': ['Apple', 'Orange', 'Strawberry', 'Mango']}
可以使用行內(nèi)表示法
---
fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
字典
---
martin:
name: Martin D'vloper
job: Developer
skill: Elite
轉(zhuǎn)換為python格式
{'martin': {'job': 'Developer', 'name': "Martin D'vloper", 'skill': 'Elite'}}
可以使用行業(yè)內(nèi)表示法
---
martin: {name: Martin D'vloper, job: Developer, skill: Elite}
復(fù)合結(jié)構(gòu)
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
轉(zhuǎn)換為python格式
[{'martin': {'job': 'Developer','name': "Martin D'vloper",'skills': ['python', 'perl', 'pascal']}},{'tabitha': {'job': 'Developer', 'name': 'Tabitha Bitumen','skills': ['lisp', 'fortran', 'erlang']}}]
純量
** 數(shù)值**
number: 12
float:12.30
轉(zhuǎn)換為python格式
{'float': 12.300000000000001, 'number': 12}
** 布爾值**
表示true的值
true, True, TRUE, yes, Yes, YES, on, On, ON, y, Y
表示false的值
false, False, FALSE, no, No, NO, off, Off, OFF, n, N
** 轉(zhuǎn)換數(shù)據(jù)類型**
e: !!str 123
f: !!str true
轉(zhuǎn)換為python格式
{'e': '123', 'f': 'true'}
** 字符串**
字符串默認(rèn)不使用引號表示。
str: 這是一行字符串
轉(zhuǎn)換為python格式
{'str': '這是一行字符串'}
如果字符串之中包含空格或特殊字符独悴,需要放在引號之中例书。
str: '內(nèi)容: 字符串'
轉(zhuǎn)換為python格式
{'str': '內(nèi)容: 字符串'}
單引號和雙引號都可以使用,雙引號不會對特殊字符轉(zhuǎn)義刻炒。
str: 'labor''s day'
轉(zhuǎn)換為python格式
{'str': "labor's day"}
單引號之中如果還有單引號决采,必須連續(xù)使用兩個單引號轉(zhuǎn)義。
s1: '內(nèi)容\n字符串'
s2: "內(nèi)容\n字符串"
轉(zhuǎn)換為python格式
{'s1': '內(nèi)容\\n字符串','s2': '內(nèi)容\n字符串'}
字符串可以寫成多行坟奥,從第二行開始树瞭,必須有一個單空格縮進(jìn)。換行符會被轉(zhuǎn)為空格爱谁。
str: 這是一段
多行
字符串
轉(zhuǎn)換為python格式
{'str': '這是一段 多行 字符串'}
多行字符串可以使用
|
保留換行符晒喷,也可以使用>
折疊換行。
this: |
Foo
Bar
that: >
Foo
Bar
轉(zhuǎn)換為python格式
{'that': 'Foo Bar', 'this': 'Foo\nBar\n'}
+
表示保留文字塊末尾的換行访敌,-
表示刪除字符串末尾的換行凉敲。
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
轉(zhuǎn)換為python格式
{'s1': 'Foo\n', 's2': 'Foo\n\n\n', 's3': 'Foo'}
字符串之中可以插入 HTML 標(biāo)記。
message: |
<p style="color: red">
段落
</p>
轉(zhuǎn)換為python格式
{'message': '\n<p style="color: red">\n 段落\n</p>'}
引用
錨點
&
和別名*
,可以用來引用爷抓。
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
等同于下面的代碼势决。
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
轉(zhuǎn)換為python格式
{'defaults': {'adapter': 'postgres', 'host': 'localhost'},
'development': {'adapter': 'postgres',
'database': 'myapp_development',
'host': 'localhost'},
'test': {'adapter': 'postgres',
'database': 'myapp_test',
'host': 'localhost'}}
&
用來建立錨點(defaults),<<
表示合并到當(dāng)前數(shù)據(jù)蓝撇,*
用來引用錨點果复。
下面是另一個例子。
- &showell Steve
- Clark
- Brian
- Oren
- *showell
轉(zhuǎn)換為python格式
['Steve', 'Clark', 'Brian', 'Oren', 'Steve']
yaml中引用變量
foo: "{{ variable }}"
高級YAML語法
!unsafe使用
變量值中保存的數(shù)據(jù)應(yīng)被視為不安全的唉地,防止不安全的字符子集和信息披露据悔。
---
hosts: all
vars:
my_unsafe_variable: !unsafe 'unsafe value'
tasks:
...
資料
Playbooks 采用YMAL 語法結(jié)構(gòu)传透,基本的YMAL 語法請參考
http://docs.ansible.com/YAMLSyntax.html
python利用pyyaml模塊進(jìn)行解析yaml語言
http://pyyaml.org/wiki/PyYAMLDocumentation
yaml格式在線檢查
http://yaml-online-parser.appspot.com/
更多文章請看 Ansible 專題文章總覽