一:介紹:
YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl等。
YAML不是XML,不過,在開發的這種語言時,YAML的意思其實是:“Yet Another Makup Language”(仍是一種標記語言)
特點:
- 可讀性好
- 和腳本的交互性好
- 使用實現怨言的數據類型
- 有一個一致的信息模型
- 易於實現。
- 可以基於流來處理。
- 表達能力強,擴展性好。
二:YAML語法:
YAML的語法和其他高階語言類似,並且可以簡單表達清單、散列表、標量等數據結構。其結構(structure)通過空格來展示。
- 序列(sequence):里的項用“-”來代表,來代表不同元素。
- MAP里的鍵值對,用":"分隔,比如:
1 name:tom 2 age:22 3 gender:Male 4 spouse: 5 name:lili 6 age:18 7 gender:Female 8 children: 9 - name:tom1 10 age:5 11 gender:Male 12 - name:tom2 13 age:5 14 gender:Female
- 一個鍵值對,可以一個鍵值對應一個value,也可以一個鍵值對應另一個鍵值對。
- 序列,相同的數據類型,元素間用"-"表示一個序列內,元素是鍵值對。
- 用空格來表示結構關系,不是tab。
- YAML擴展文件以yaml結尾:比如:example.yaml
三:ansible中YAML。
list:
在ansible中叫序列為列表,列表為序列都可以。他們之間元素用"-"開頭例如:
1 # a list of colors 2 - red 3 - blue 4 - black
dictionary:
字典:通過key:value 進行標識。例如:
1 # tom information 2 name:tom 3 age:22 4 job:it
如上3個鍵值對表示一個實體,也可以用{}來表示一個實體,也就是說將上面3個鍵值對放在一個{}中來表示一個實體。
1 #tom information 2 1 {name:tom,age:22,job:it}
基本的 YAML
對於 Ansible, 每一個 YAML 文件都是從一個列表開始. 列表中的每一項都是一個鍵值對, 通常它們被稱為一個 “哈希” 或 “字典”. 所以, 我們需要知道如何在 YAML 中編寫列表和字典.
YAML 還有一個小的怪癖. 所有的 YAML 文件(無論和 Ansible 有沒有關系)開始行都應該是 ---
. 這是 YAML 格式的一部分, 表明一個文件的開始.
列表中的所有成員都開始於相同的縮進級別, 並且使用一個 "- "
作為開頭(一個橫杠和一個空格):
1 --- 2 # 一個美味水果的列表 3 - Apple 4 - Orange 5 - Strawberry 6 - Mango
一個字典是由一個簡單的 鍵: 值
的形式組成(這個冒號后面必須是一個空格):
1 --- 2 # 一位職工的記錄 3 name: Example Developer 4 job: Developer 5 skill: Elite
字典也可以使用縮進形式來表示, 如果你喜歡這樣的話:
1 --- 2 # 一位職工的記錄 3 {name: Example Developer, job: Developer, skill: Elite}
Ansible並不是太多的使用這種格式, 但是你可以通過以下格式來指定一個布爾值(true/fase):
1 --- 2 create_key: yes 3 needs_agent: no 4 knows_oop: True 5 likes_emacs: TRUE 6 uses_cvs: false
讓我們把目前所學到的 YAML 例子組合在一起. 這些在 Ansible 中什么也干不了, 但這些格式將會給你感覺:
1 --- 2 # 一位職工記錄 3 name: Example Developer 4 job: Developer 5 skill: Elite 6 employed: True 7 foods: 8 - Apple 9 - Orange 10 - Strawberry 11 - Mango 12 languages: 13 ruby: Elite 14 python: Elite 15 dotnet: Lame
這就是你開始編寫 Ansible playbooks 所需要知道的所有 YAML 語法.
NOTICE:
盡管 YAML 通常是友好的, 但是下面將會導致一個 YAML 語法錯誤:
1 foo: somebody said I should put a colon here: so I did
你需要使用引號來包裹任何包含冒號的哈希值, 像這樣:
1 foo: "somebody said I should put a colon here: so I did"
然后這個冒號將會被結尾.
此外, Ansible 使用 “{{ var }}” 來引用變量. 如果一個值以 “{” 開頭, YAML 將認為它是一個字典, 所以我們必須引用它, 像這樣:
1 foo: "{{ variable }}"