Ansible 小手冊系列 八(Yaml 語法格式)

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 }}"

高級YAML語法

!unsafe使用

# 變量值中保存的數據應被視爲不安全的,防止不安全的字符子集和信息披露。
---
hosts: all
vars:
    my_unsafe_variable: !unsafe 'unsafe value'
tasks:
    ...
相關文章
相關標籤/搜索