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