3個
我們已經涵蓋了所有必需品Ansible 主題在我們的網站上。現在,在這篇文章中,讓我們學習什麼是ansible角色?以及如何使用 Ansible 角色創建結構化項目並分發它們。 接下來我們將討論使用ansible角色的優勢關於標準劇本。 最後,我們將看看如何創建 ansible 函數以及將角色導入劇本的不同方法。
什麼是 Ansible 角色?
Ansible 函數提供了一個目錄結構,您可以在其中將復雜的劇本分解成小的、可管理的塊。 使用 ansible 角色的主要優點如下所示:
- 您可以實現高水平的模塊化。
- 使用 ansible 集合輕鬆重新分配角色。
- 容易調試任何錯誤。
- 基於證據的方法。
在接下來的幾節中,我將向您展示如何創建一個簡單的 ansible 角色以及在 playbook 中使用角色的不同方式。
創建一個 Ansible 角色
使用ansible-galaxy
啟動角色的命令。 在這裡,我將我的角色命名為示範作用.
$ ansible-galaxy init sample-role - Role sample-role was created successfully
在下面sample-role
目錄,您將有不同的目錄來組織您的劇本。
讓我們瀏覽每個目錄以了解其用途。
- 預定值– 你可以安排默認變量在這個目錄下。
- 文件– 要復製到被管節點以存儲在文件目錄中的任何文件。
- 處理程序–處理程序任務應該在控制器目錄中分組。
- 元– 存儲有關角色的元數據。 它包含作者、版本、平台、標籤、依賴項等元數據。
- 任務– 劇本任務必須在任務目錄中創建。 這是角色所需的目錄。
- 模板– 用於模板的文件必須存儲在模板目錄中。 文件必須使用 jinga2 (.j2) 擴展名。
- 證據– 測試用例應該放在測試目錄下。
- 變量– 與此角色關聯的變量。 如果在默認目錄中使用相同的變量,則優先級更高。
如果您查看上圖,某些目錄中的公共文件是main.yml
. 你不應該嘗試重命名這個文件,因為 ansible 會在main.yml
檔案。
作為其作用的一部分,只有任務目錄是必需的,所有其他目錄都可以省略。
創建您的第一個 Ansible 角色
我將創建一個項目,它將在我的 Ubuntu 桌面上安裝幾個工具。 首先,我要創建ansible.cfg
文件和存貨檔案。
$ vim ansible.cfg [defaults] [defaults] inventory = hosts host_key_checking = False nocows = 1 actions_warnings = False interpreter_python = auto_legacy_silent
$ vim hosts localhost ansible_connection=local
他用安裝終端工具的單一任務構建了劇本。
--- - name: Role testing hosts: localhost gather_facts: false become: true tasks: # Tools for terminal - name: TERMINAL - Kitty, Tmux, Fish ansible.builtin.apt: pkg: - kitty - tmux - fish state: present
下面是上一個任務的結果。 這是在 ansible 中創建劇本的標準方法。
現在我們要創建一個角色並在角色內組織任務。 我沒有使用ansible-galaxy
命令來初始化角色,而不是我手動創建任務目錄,這是我的角色所需的唯一目錄。
這裡命名為我的角色“tools
“和任務目錄以及main.yml
文件已創建。
$ mkdir -p roles/tools/tasks/ $ touch roles/tools/tasks/main.yml $ tree roles/ roles/ `-- tools `-- tasks `-- main.yml 2 directories, 1 file
現在把任務移到tasks/main.yml
檔案。

在主劇本中,您需要告訴 ansible 使用角色來執行任務。 有幾種方法可以實現這一點。
1.遊戲關卡中的角色
你可以使用roles
關鍵字並提供角色名稱作為輸入。
--- - name: Role testing hosts: localhost gather_facts: false become: true roles: - tools
遊戲關卡中定義的角色將被 Ansible 視為靜態導入,並在解析劇本時進行解析。
您可以詳細運行 playbook 以查看自動從何處選擇任務。
$ ansible-playbook -K playbook.yml -vvvv

您可以在功能部分添加多個規則。
roles: - roleA - roleB - roleC
您還可以應用其他 ansible 指令,例如vars
是tags
. 例如,如果您在角色級別應用標籤,則該角色下的所有任務都將繼承它們。
roles: - role: tools tags: terminal
2.使用Imports和includes在任務級別導入函數
您可以使用import_roles
是Include_roles
指令。
兩個都import_role
是include_role
有相似的語法。 主要區別是import*
指令在劇本分析期間處理,並且include*
該指令僅按照它們定義的順序進行處理,並且任務是動態執行的。
tasks: - name: Import tools tasks import_role: name: tools tasks: - name: Include tools tasks include_role: name: tools
您現在應該對如何構建角色有一個清晰的了解。 當您創建涉及變量、控制器和文件的劇本時,您應該創建一個適當的目錄並對任務進行分組。
Ansible角色定位
Ansible 有其查找角色位置和執行任務的方法。 如果ansible找不到角色,會拋出如下錯誤。
ERROR! the role 'tools' was not found in /ansible/dockerlab/playbooks/roles_testing/project1/roles:/home/ansuser/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/ansible/dockerlab/playbooks/roles_testing/project1
看看上面的錯誤信息。 顯示 ansible 將在其中查找角色的幾個目錄。
Ansible 會根據您運行 playbook 的目錄自動添加第一個和最後一個目錄路徑。
- 首先是下的角色
roles/
目錄。 roles 目錄應該與您的主劇本位於同一目錄中。 - 在主目錄下
~/.ansible/roles
. - 在默認系統目錄中
/usr/share/ansible/roles
,/etc/ansible/roles
. - 在項目目錄中。
如果您已將角色存儲在不同的位置,則可以使用“roles_path
“在ansible.cfg
檔案。
#ansible.cfg [defaults] roles_path = <path-to-roles>:
結論
在這篇文章中我們看到了什麼是ansible角色?和使用ansible角色的優勢關於標準劇本。 然後我們討論如何創建 ansible 函數和不同的方式將ansible角色導入劇本. 最後,我們看到了 ansible 如何使用roles_path
以及如何將自定義路由添加到roles_path
指示。