Ansible Execution Environment (EE) 是提升自動化效率的關鍵,它提供獨立與一致的執行環境,讓 Ansible Playbook 更可靠、更易於移植。我將在這篇文章中,深入淺出地講解如何建構、客製化和運用 Ansible EE,並分享我在實戰中的一些心得與技巧。
建立基礎 Ansible EE
我們先從一個最精簡的 Ansible EE 開始。這個 EE 只包含 Ansible 以及 Ansible Runner,足以應付大多數基本的自動化任務。以下是如何使用 ansible-builder
建立這個 EE 的步驟:
- 建立一個名為
minimal
的目錄,並在其中建立execution-environment.yml
檔案。 - 在
execution-environment.yml
中加入以下內容:
version: 3
images:
base_image:
name: quay.io/centos/centos:stream9
dependencies:
python_interpreter:
package_system: python3.11
python_path: /usr/bin/python3.11
ansible_core:
package_pip: ansible-core==2.15.1
ansible_runner:
package_pip: ansible-runner==2.3.3
這段 YAML 定義了一個 Ansible EE,它根據 CentOS Stream 9 映像檔,並安裝了 Python 3.11、Ansible Core 2.15.1 和 Ansible Runner 2.3.3。version: 3
指定了 EE 的定義版本。images
區塊定義了基礎映像檔,而 dependencies
區塊則列出了需要安裝的 Ansible 相關套件和 Python 直譯器。
graph LR A[CentOS Stream 9] --> B(Python 3.11) B --> C(Ansible Core 2.15.1) B --> D(Ansible Runner 2.3.3) C & D --> E{Ansible Execution Environment}
圖表說明: 以上圖表展示了 Ansible EE 的組成,包含基礎作業系統、Python 直譯器,以及 Ansible Core 和 Runner。
客製化 Ansible EE
精簡的 EE 適用於基本任務,但實際應用中,我們常常需要額外的 Ansible Collections 或其他系統工具。客製化 EE 很簡單,只需修改 execution-environment.yml
檔案即可。
例如,若要加入 community.general
collection,我們可以這樣修改 dependencies
區塊:
dependencies:
# ... (其他相依性)
ansible.posix:
package_pip: ansible.posix
community.general:
package_pip: community.general
在 dependencies
區塊中加入新的專案,指定要安裝的 Collection 名稱和版本。這裡我們使用了 community.general
,你也可以根據需求加入其他 Collection。
EE 的設定與應用
使用 ansible-builder
設定 EE:
ansible-builder build --tag my-custom-ee:latest .
這個指令會根據 execution-environment.yml
的定義,建立一個名為 my-custom-ee:latest
的容器映像檔。
設定完成後,你可以將這個映像檔上傳到容器儲存函式庫,例如 Docker Hub 或 Quay.io,然後在 Ansible Automation Controller 中使用它。
在 Ansible Automation Controller 中,建立新的 Execution Environment,並設定其映像檔名稱為 my-custom-ee:latest
。之後,在建立作業範本時,選擇這個 EE 作為執行環境。
Ansible EE 提供了更強大的自動化能力,讓你的 Playbook 更可靠、更易於管理。透過本文的介紹,相信你已經掌握了建構和運用 Ansible EE 的基本技巧。在未來的文章中,我將會分享更多進階的 EE 應用技巧,例如何最佳化 EE 效能、管理 EE 的生命週期,以及如何在不同的環境中佈署 EE。
在現代軟體開發和維運中,自動化扮演著至關重要的角色。Ansible 作為一款功能強大的自動化工具,廣泛應用於組態管理、應用程式佈署和任務自動化等領域。而 Ansible 執行環境(Execution Environment,EE)的出現,更進一步提升了 Ansible 的靈活性和可移植性。本文將探討 Ansible EE 的建構、佈署和最佳實務,並分享玄貓在實際應用中的一些心得體會。
設定 Ansible 執行環境
首先,我們需要使用 ansible-builder
設定 EE。以下是一個包含 Ansible Core、Runner 和一些額外 dependencies 的 EE 設定範例:
---
version: 3
images:
base_image:
name: quay.io/centos/centos:stream9
dependencies:
ansible_core:
package_pip: ansible-core==2.15.1
ansible_runner:
package_pip: ansible-runner==2.3.3
python:
- pywinrm
system:
- iputils [platform:rpm]
galaxy:
collections:
- community.windows
- ansible.utils
使用以下指令設定映像檔:
cd python
ansible-builder build --tag python-ee
這個 YAML 檔案定義了 EE 的基礎映像、Ansible 版本以及所需的 Python、系統和 Galaxy dependencies。ansible-builder
會根據這些設定設定一個包含所有必要元件的容器映像。
我個人偏好將所有 dependencies 直接定義在 EE 設定檔中,這樣更便於管理和維護。
在 EE 中執行 Playbook
設定完成後,可以使用 ansible-navigator
在 EE 中執行 Playbook。
- 安裝
ansible-navigator
:
pip install ansible-navigator
- 執行 Playbook:
ansible-navigator run ping.yml -i inventory --eei minimal-ee -m stdout
graph LR A[設定 EE 映像] --> B(使用 ansible-navigator 執行 Playbook);
ansible-navigator
提供了便捷的指令列介面,可以輕鬆地在指定的 EE 中執行 Playbook。 --eei
引數指定了要使用的 EE 映像名稱。
在實務中,我發現 EE 對於管理不同版本的 Ansible 和 dependencies 非常有效,可以避免版本衝突,並確保 Playbook 在不同環境中都能一致地執行。
將執行環境上傳到容器儲存函式庫
EE 以容器映像格式封裝,可以上傳到任何容器儲存函式庫,例如 Quay.io 或 Ansible Automation Hub。
以下是如何將映像推播到 Quay.io 的步驟:
- 確保 Podman 已登入 Quay.io:
podman login quay.io
- 找到映像 ID:
podman images | grep python-ee
- 推播映像:
podman push <映像 ID> quay.io/$USERNAME/python-ee
graph LR A[設定 EE 映像] --> B(推播至容器儲存函式庫);
將 EE 映像推播到容器儲存函式庫可以方便地分享和佈署 EE,特別是在團隊協作和 CI/CD 流程中。
在 Ansible Automation Controller 中使用執行環境
在 Ansible Automation Controller 中使用 EE 非常簡單。只需在建立或修改作業範本時,選擇您建立的 EE 即可。
graph LR A[建立作業範本] --> B{設定執行環境};
Ansible Automation Controller 會自動使用指定的 EE 執行 Playbook,確保一致的執行環境。
玄貓的 EE 最佳實務建議
- 始終使用 EE 管理 Ansible 和 dependencies 版本,避免版本衝突。
- 將 EE 映像推播到容器儲存函式庫,方便分享和佈署。
- 在 EE 設定檔中清晰地定義所有 dependencies。
- 使用
ansible-navigator
進行本地測試和驗證。 - 定期更新 EE 映像,確保使用最新版本的 Ansible 和 dependencies。
透過這篇文章,我們深入瞭解了 Ansible EE 的建構、佈署和最佳實務。希望這些資訊能幫助您更好地利用 Ansible EE,提升自動化流程的效率和可靠性。
在探索 Ansible 執行環境的過程中,我們學習瞭如何建構、佈署和管理 EE,並瞭解了其在現代自動化流程中的重要性。希望這些知識和技巧能幫助您更好地應用 Ansible,提升工作效率。