Ansible 角色以及如何在劇本中使用它們


在創建 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 的時間和精力。卷通常使工作更容易。