YAML 語法¶
這個頁面提供一個正確的 YAML 語法的基本概述, 它被用來描述一個 playbooks(我們的配置管理語言).
我們使用 YAML 是因為它像 XML 或 JSON 是一種利於人們讀寫的資料格式. 此外在大多數變成語言中有使用 YAML 的庫.
你可能希望讀 Playbooks 實踐中如何使用的.
基本的 YAML¶
對於 Ansible, 每一個 YAML 檔案都是從一個列表開始. 列表中的每一項都是一個鍵值對, 通常它們被稱為一個 “雜湊” 或 “字典”. 所以, 我們需要知道如何在 YAML 中編寫列表和字典.
YAML 還有一個小的怪癖. 所有的 YAML 檔案(無論和 Ansible 有沒有關係)開始行都應該是 ---
. 這是 YAML 格式的一部分, 表明一個檔案的開始.
列表中的所有成員都開始於相同的縮排級別, 並且使用一個 "- "
作為開頭(一個橫槓和一個空格):
---
# 一個美味水果的列表
- Apple
- Orange
- Strawberry
- Mango
一個字典是由一個簡單的 鍵: 值
的形式組成(這個冒號後面必須是一個空格):
---
# 一位職工的記錄
name: Example Developer
job: Developer
skill: Elite
字典也可以使用縮排形式來表示, 如果你喜歡這樣的話:
---
# 一位職工的記錄
{name: Example Developer, job: Developer, skill: Elite}
Ansible並不是太多的使用這種格式, 但是你可以通過以下格式來指定一個布爾值(true/fase):
---
create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false
讓我們把目前所學到的 YAML 例子組合在一起. 這些在 Ansible 中什麼也幹不了, 但這些格式將會給你感覺:
---
# 一位職工記錄
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
- Apple
- Orange
- Strawberry
- Mango
languages:
ruby: Elite
python: Elite
dotnet: Lame
這就是你開始編寫 Ansible playbooks 所需要知道的所有 YAML 語法.
Gotchas¶
儘管 YAML 通常是友好的, 但是下面將會導致一個 YAML 語法錯誤:
foo: somebody said I should put a colon here: so I did
你需要使用引號來包裹任何包含冒號的雜湊值, 像這樣:
foo: "somebody said I should put a colon here: so I did"
然後這個冒號將會被結尾.
此外, Ansible 使用 “{{ var }}” 來引用變數. 如果一個值以 “{” 開頭, YAML 將認為它是一個字典, 所以我們必須引用它, 像這樣:
foo: "{{ variable }}"
See also
- Playbooks
- Learn what playbooks can do and how to write/run them.
- YAMLLint
- YAML Lint (online) helps you debug YAML syntax if you are having problems
- Github examples directory
- Complete playbook files from the github project source
- Mailing List
- Questions? Help? Ideas? Stop by the list on Google Groups
- irc.freenode.net
- #ansible IRC chat channel