YAML的設計目標是提供一種易讀且容易寫的數據格式,同時具有清晰的結構。它通常用于配置文件、數據交換、配置管理和其他需要人類可讀性的應用場景,本文通過介紹常見部分語法,對該文件有更多的認識。
1,連字符 -
在YAML中,連字符 - 有幾種不同的用途,這取決于它的上下文。在您的示例中,它主要被用作列表項的前綴。以下是幾種可能的用法:
- 
列表項: 當 -出現在一個新行的開頭時,它通常表示一個列表的開始。列表可以包含多個項,每個項都從新的一行開始,并且以-開頭。litems:
 - item1
 - item2
 - item3在這個例子中, items是一個鍵,其值是一個包含三個項的列表。
- 
字典的鍵值對: 如果 -后面跟著一個空格,并且該行還包含冒號:,那么它表示一個字典(或稱為映射、哈希表)的鍵值對。people:
 - name: Alice
 age: 30
 - name: Bob
 age: 25在這個更常見的例子中, people是一個鍵,其值是一個列表,列表中的每個項都是一個包含name和age鍵值對的字典。
- 
縮進和層次結構: 在YAML中,層次和結構是通過縮進來表示的。 -通常不會用于表示縮進,但它是列表項的一部分,而列表項可能需要縮進以表示它們屬于某個更高級別的鍵。config:
 servers:
 - name: Server A
 host: hostA
 port: 8080
 - name: Server B
 host: hostB
 port: 8081在這個例子中, config是一個鍵,它有一個名為servers的子鍵。servers的值是一個列表,列表中的每個項都是一個字典,表示一個服務器的配置。
2,--- 分割符
在YAML文件中,--- 通常用于表示文檔的開始。在YAML中,一個文件可以包含多個文檔,而--- 是用來分隔這些文檔的。每個文檔都是獨立的,可以包含鍵值對、數組等結構。
3,inventory和playbook 
在YAML(YAML Ain't Markup Language)文件中,inventory 和 playbooks 是 Ansible 工具中的關鍵組件。
- 
Inventory(清單): - 作用:Inventory 是 Ansible 用來知道哪些主機可用于執行任務的配置文件。它定義了哪些主機或主機組將參與 Ansible 的執行過程。
- 內容:Inventory 文件可以包含主機的 IP 地址、主機名、主機組以及其它相關參數,如端口號、用戶身份驗證信息等。
- 示例:
[webservers]
 webserver1.example.com
 webserver2.example.com
 [databases]
 dbserver1.example.com
 
在這個例子中,Playbook 定義了一個名為“安裝 Nginx”的任務,該任務將在 webservers 主機組上執行。任務包括安裝 Nginx 軟件包和啟動 Nginx 服務。inventory 用于定義 Ansible 將操作哪些主機,而 playbooks 用于定義在這些主機上要執行哪些任務。通過組合使用 inventory 和 playbooks,Ansible 可以實現復雜的自動化工作流程。
2.Playbooks(劇本):
- 作用:Playbooks 是 Ansible 用于定義自動化任務的配置文件,類似于其他編程語言中的腳本或程序。Playbooks 描述了要執行的一系列任務(tasks),這些任務按照定義的順序在目標主機上執行。
- 內容:Playbooks 包含了一個或多個 play,每個 play 定義了一組在特定主機或主機組上執行的任務。每個任務(task)是一個獨立的操作,例如安裝軟件包、復制文件、運行命令等。
- 示例:
```yaml
name: 安裝 Nginx
hosts: webservers
become: yes
tasks:
name: 安裝 Nginx 包
apt:
name: nginx
state: present
name: 啟動 Nginx 服務
service:
name: nginx
state: started
enabled: yes
在這個例子中,Playbook 定義了一個名為“安裝 Nginx”的任務,該任務將在 webservers 主機組上執行。任務包括安裝 Nginx 軟件包和啟動 Nginx 服務。
inventory 用于定義 Ansible 將操作哪些主機,而 playbooks 用于定義在這些主機上要執行哪些任務。通過組合使用 inventory 和 playbooks,Ansible 可以實現復雜的自動化工作流程。
4,roles角色
在Ansible中,roles 是一種組織和管理Playbooks的方式。Roles允許用戶將相關的代碼、文件、配置和任務等分組到一個單獨的目錄中,使得Playbooks更加模塊化、可重用和易于維護。每個role通常代表一個特定的功能或任務集合,例如安裝一個軟件包、配置一個服務或管理一個應用。
Roles的常見語法結構如下:
roles/
├── myrole/              # Role的名稱,通常與目錄名相同
│   ├── tasks/           # 包含role的主要任務文件
│   │   └── main.yml     # tasks的主文件,定義了role要執行的任務列表
│   ├── files/           # 包含role需要的任何文件
│   ├── templates/       # 包含role需要的任何模板文件
│   ├── handlers/        # 包含role的觸發器
│   │   └── main.yml     # handlers的主文件
│   ├── vars/            # 包含role的變量
│   │   └── main.yml     # vars的主文件
│   ├── defaults/        # 包含role的默認變量設置
│   │   └── main.yml     # defaults的主文件
│   ├── meta/            # 包含role的元數據
│   │   └── main.yml     # meta的主文件
│   └── README.md        # Role的文檔說明在Playbook中使用role的語法如下:
---
- name: Example Playbook using roles
  hosts: all
  become: yes
  roles:
    - role: myrole       # 指定role的名稱
      tags: "myrole"     # 可選的,為role指定標簽
    - role: anotherrole  # 可以指定多個role
      some_variable: "value" # 傳遞變量給role在上面的例子中,myrole 和 anotherrole 是已經定義好的roles,它們會在指定的主機上執行。還可以向role傳遞變量,這些變量可以在role的vars文件中定義,也可以在Playbook中直接指定。
Roles提供了一種清晰的方式來組織復雜的自動化任務,使得Playbooks更加易于閱讀、理解和維護。通過創建可重用的roles,用戶可以輕松地在不同的Playbooks和項目之間共享和重用代碼和配置。