在創建 Ansible playbook 文件的過程中,您可能已經註意到您可以重用現有 playbook 中定義的一些代碼。例如,您可以重用代碼在一個託管主機上安裝 MariaDB 數據庫服務器,並為另一台遠程主機使用不同的主機名、用戶和密碼。這樣可以節省大量時間和精力,這些時間和精力可以用於從頭開始創建新的劇本文件。這就是 Ansible 角色概念發揮作用的地方。
Ansible 角色是將任務重新分配到易於管理和操作的單個文件中的概念。每個角色都提供了其實現所需的一組任務、變量和處理程序(僅舉幾例)。角色允許用戶將長而復雜的劇本結構重新組織成更簡單、更短、更清晰的劇本文件。如前所述,角色是可重用的,在劇本文件中調用它們可以簡化代碼並消除重複。應用程序安裝和配置等重複性任務可以打包到單獨的文件中,並在不同的託管主機上重複使用。
在本指南中,您將學習如何在劇本中創建和使用 Ansible 角色。出於說明目的,創建一個角色來安裝 Apache Web 服務器並將防火牆配置為打開端口 80。
如何創建 Ansible 角色
首先創建一個簡單的 Ansible 角色。要創建角色,請使用以下命令語法。 我的角色 是角色的名字。
$ ansible-galaxy init myrole
例如, 測試的作用 調用命令。
$ ansible-galaxy init test-role
從輸出中可以看到生成的命令 測試的作用 目錄。默認情況下,包含一些默認目錄。你可以使用它 木頭 使用命令列出它們,如圖所示。
$ tree test-role
下面簡單介紹一下各個目錄的內容
這個’默認‘ 文件夾 – 此目錄包含角色所需的默認變量。這些變量的優先級最低,很容易被覆蓋。
這個’文檔‘ 文件夾 – 此文件夾包含要復製到託管或遠程主機的文件。
這個’處理程序‘ 文件夾 – 此目錄包含通常由 ‘notify’ 指令調用的處理程序。 您可以了解有關 Ansible 處理程序的更多信息。
這個’元‘ 文件夾 – 包含角色元數據,例如實例創建者、依賴項等。
這個’工作‘ 文件夾 – 包含定義角色本身要執行的任務列表的 YAML 文件。包含 主要的.yml 文檔。
這個’模板‘ 文件夾 – 此目錄包含模板文件,您可以根據需要對其進行修改以配置您的角色。
這個’測試‘ 文件夾 – 將測試與 Ansible playbook 文件集成。
這個’誰‘ 文件夾 – 包含角色稍後將使用的變量。角色。這些變量是’默認‘ 目錄。
我們將為演示創建兩個角色。
這個 該死 角色 – 安裝最新版本的 Git。
這個 阿帕奇 角色 – 安裝 Apache Web 服務器
像這樣創建它:
$ sudo ansible-galaxy init git
$ sudo ansible-galaxy init apache
在此之後你應該編輯 主要的.yml 在文件中 ‘工作‘ 每個角色中的文件夾。讓我們從定義開始 該死 角色。
$ sudo vim git/tasks/main.yml
如圖所示,為 git 角色定義一個任務。
保存這個 主要的.yml 歸檔並退出。
接下來,定義一個任務 Apache 角色。
$ sudo vim apache/tasks/main.yml
指定安裝 Apache Web 服務器。
也保存 主要的.yml 歸檔並退出。
創建一個劇本文件來調用角色
當每個角色的任務開始時, 主要的.yml 為每個角色創建一個文件,創建一個劇本文件並引用該角色,如圖所示。
$ sudo vim roles_demo.yml
筆記:
您必須在劇本中指定角色的完整路徑。
角色:
- /路徑/目標/角色
在此示例中,角色與 playbook 文件位於同一目錄中,我們按名稱調用它。
最後,運行劇本文件。
$ sudo ansible-playbook /etc/ansible/roles_demo.yml
參考劇本文件中定義的角色來執行各自的任務。在這裡,Ansible 將安裝 git 和 Apache Web 服務器。
您可以通過運行顯示的命令來驗證安裝。
$ git --version
$ apachectl -v
正如您所指出的,劇本文件簡短易懂,因為任務由劇本文件中指定的字母引用。
添加
Ansible 角色有助於組織劇本文件並避免代碼重複。它可以在其他 playbook 文件中重複使用和引用,以在不同節點上執行類似的任務,從而節省可用於創建新 playbook 的時間和精力。卷通常使工作更容易。