YAML 語言(發音 /ˈjæməl/ )的設計目標,就是方便人類讀寫。它實質上是一種通用的數據串行化格式。python
它的基本語法規則以下。數組
• 大小寫敏感
• 使用縮進表示層級關係
• 縮進時不容許使用Tab鍵,只容許使用空格。
• 縮進的空格數目不重要,只要相同層級的元素左側對齊便可
• yaml文件以"---"做爲文檔的開始,"..."做爲文檔的結束安全
#
表示註釋,從這個字符一直到行尾,都會被解析器忽略。bash
YAML 支持的數據結構有三種。數據結構
• 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)
• 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)
• 純量(scalars):單個的、不可再分的值app
對象的一組鍵值對,使用冒號結構表示。post
job: Developer
--- fruits: - Apple - Orange - Strawberry - Mango
轉換爲python格式ui
{'fruits': ['Apple', 'Orange', 'Strawberry', 'Mango']}
能夠使用行內表示法this
--- fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
--- martin: name: Martin D'vloper job: Developer skill: Elite
轉換爲python格式scala
{'martin': {'job': 'Developer', 'name': "Martin D'vloper", 'skill': 'Elite'}}
能夠使用行業內表示法
--- martin: {name: Martin D'vloper, job: Developer, skill: Elite}
轉換爲python格式
[{'martin': {'job': 'Developer','name': "Martin D'vloper",'skills': ['python', 'perl', 'pascal']}},{'tabitha': {'job': 'Developer', 'name': 'Tabitha Bitumen','skills': ['lisp', 'fortran', 'erlang']}}]
數值
number: 12 float:12.30
轉換爲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
轉換數據類型
e: !!str 123 f: !!str true
轉換爲python格式
{'e': '123', 'f': 'true'}
字符串
# 字符串默認不使用引號表示。 str: 這是一行字符串 # 轉換爲python格式 {'str': '這是一行字符串'} # 單引號和雙引號均可以使用,雙引號不會對特殊字符轉義。 # 若是字符串之中包含空格或特殊字符,須要放在引號之中。 str: '內容: 字符串' # 轉換爲python格式 {'str': '內容: 字符串'} s1: '內容\n字符串' s2: "內容\n字符串" # 轉換爲python格式 {'s1': '內容\\n字符串','s2': '內容\n字符串'} # 單引號之中若是還有單引號,必須連續使用兩個單引號轉義。 str: 'labor''s day' # 轉換爲python格式 {'str': "labor's day"} # 字符串能夠寫成多行,從第二行開始,必須有一個單空格縮進。換行符會被轉爲空格。 str: 這是一段 多行 字符串 # 轉換爲python格式 {'str': '這是一段 多行 字符串'} # 多行字符串能夠使用|保留換行符,也能夠使用>摺疊換行。 this: | Foo Bar that: > Foo Bar # 轉換爲python格式 {'that': 'Foo Bar', 'this': 'Foo\nBar\n'} # +表示保留文字塊末尾的換行,-表示刪除字符串末尾的換行。 s1: | Foo s2: |+ Foo s3: |- Foo # 轉換爲python格式 {'s1': 'Foo\n', 's2': 'Foo\n\n\n', 's3': 'Foo'} # 字符串之中能夠插入 HTML 標記。 message: | <p style="color: red"> 段落 </p> # 轉換爲python格式 {'message': '\n<p style="color: red">\n 段落\n</p>'}
# 錨點&和別名*,能夠用來引用。 # &用來創建錨點(defaults),<<表示合併到當前數據,*用來引用錨點。 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 # 轉換爲python格式 {'defaults': {'adapter': 'postgres', 'host': 'localhost'}, 'development': {'adapter': 'postgres', 'database': 'myapp_development', 'host': 'localhost'}, 'test': {'adapter': 'postgres', 'database': 'myapp_test', 'host': 'localhost'}} # 下面是另外一個例子。 - &showell Steve - Clark - Brian - Oren - *showell # 轉換爲python格式 ['Steve', 'Clark', 'Brian', 'Oren', 'Steve']
yaml中引用變量
foo: "{{ variable }}"
!unsafe使用
# 變量值中保存的數據應被視爲不安全的,防止不安全的字符子集和信息披露。 --- hosts: all vars: my_unsafe_variable: !unsafe 'unsafe value' tasks: ...