使用角色

Ansible 使用角色的概念來更好地允許模組化程式碼並避免重複自己。

角色只是一個資料夾結構,Ansible 知道從哪裡載入 vars 檔案,任務和處理程式。示例可能如下所示:

apache/
├── defaults
│   └── main.yml
├── files
│   ├── mod-pagespeed-stable_current_i386.deb
│   ├── mod-pagespeed-stable_current_i386.rpm
│   ├── mod-pagespeed-stable_current_amd64.deb
|   └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│   ├── debian.yml
│   ├── main.yml
│   └── redhat.yml
├── templates
│   ├── httpd.conf.j2
│   └── sites-available
│       └── virthualhost.conf.j2
└── vars
    ├── debian
    └── redhat

然後,你可以將角色與基本的劇本一起使用,如下所示:

- hosts: webservers
  roles:
     - apache

當你針對這個劇本執行 Ansible 時,它將針對 webservers 組中的所有主機並執行上面定義的 apache 角色,自動載入角色的任何預設變數並執行 tasks/main.yml 中包含的所有任務。Ansible 還知道在角色友好位置尋找某些型別的檔案:

  • 如果存在 roles / x / tasks / main.yml,則其中列出的任務將新增到遊戲中

  • 如果存在 roles / x / handlers / main.yml,則其中列出的處理程式將新增到遊戲中

  • 如果存在 roles / x / vars / main.yml,則其中列出的變數將新增到播放中

  • 如果存在 roles / x / meta / main.yml,則其中列出的任何角色依賴項將新增到角色列表中(1.3 及更高版本)

  • 任何副本,指令碼,模板或包含任務(在角色中)都可以引用 roles / x / {files,templates,tasks} /(dir 取決於任務)中的檔案,而無需相對或絕對地路徑它們