初學者的 Ansible 函數教程

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目錄,您將有不同的目錄來組織您的劇本。

函數目錄結構

讓我們瀏覽每個目錄以了解其用途。

  1. 預定值– 你可以安排默認變量在這個目錄下。
  2. 文件– 要復製到被管節點以存儲在文件目錄中的任何文件。
  3. 處理程序處理程序任務應該在控制器目錄中分組。
  4. – 存儲有關角色的元數據。 它包含作者、版本、平台、標籤、依賴項等元數據。
  5. 任務– 劇本任務必須在任務目錄中創建。 這是角色所需的目錄。
  6. 模板– 用於模板的文件必須存儲在模板目錄中。 文件必須使用 jinga2 (.j2) 擴展名。
  7. 證據– 測試用例應該放在測試目錄下。
  8. 變量– 與此角色關聯的變量。 如果在默認目錄中使用相同的變量,則優先級更高。

如果您查看上圖,某些目錄中的公共文件是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檔案。

Contenido del archivo main.ymlmain.yml 文件的內容

在主劇本中,您需要告訴 ansible 使用角色來執行任務。 有幾種方法可以實現這一點。

1.遊戲關卡中的角色

你可以使用roles關鍵字並提供角色名稱作為輸入。

---
- name: Role testing
  hosts: localhost
  gather_facts: false
  become: true

  roles:
    - tools

遊戲關卡中定義的角色將被 Ansible 視為靜態導入,並在解析劇本時進行解析。

您可以詳細運行 playbook 以查看自動從何處選擇任務。

$ ansible-playbook -K playbook.yml -vvvv
Ejecutar Playbook con Verbose使用 Verbose 運行 Playbook

您可以在功能部分添加多個規則。

roles:
 - roleA
 - roleB
 - roleC

您還可以應用其他 ansible 指令,例如varstags. 例如,如果您在角色級別應用標籤,則該角色下的所有任務都將繼承它們。

 roles:
   - role: tools
     tags: terminal

2.使用Imports和includes在任務級別導入函數

您可以使用import_rolesInclude_roles指令。

兩個都import_roleinclude_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 的目錄自動添加第一個和最後一個目錄路徑。

  1. 首先是下的角色roles/目錄。 roles 目錄應該與您的主劇本位於同一目錄中。
  2. 在主目錄下~/.ansible/roles.
  3. 在默認系統目錄中/usr/share/ansible/roles,/etc/ansible/roles.
  4. 在項目目錄中。

如果您已將角色存儲在不同的位置,則可以使用roles_pathansible.cfg檔案。

#ansible.cfg

[defaults]
roles_path = <path-to-roles>:

結論

在這篇文章中我們看到了什麼是ansible角色?使用ansible角色的優勢關於標準劇本。 然後我們討論如何創建 ansible 函數和不同的方式將ansible角色導入劇本. 最後,我們看到了 ansible 如何使用roles_path以及如何將自定義路由添加到roles_path指示。

相關文章