Ansible AWX 提供網頁介面和 API,簡化 Ansible Playbook 的執行和管理。相較於命令列操作,AWX 更適合需要從其他任務觸發 Ansible 作業或限制人員操作許可權的場景。本文將逐步說明如何安裝 AWX,並建立專案、庫存、作業範本以及設定許可權,讓讀者能快速上手使用 AWX 進行自動化管理。同時,本文也涵蓋了 AWX 中組織的概念,以及如何根據不同團隊的需求分配許可權,讓 AWX 成為企業自動化管理的利器。
開始使用Ansible AWX
Ansible功能強大,但需要使用命令列介面(CLI)。在某些情況下,這並不是最佳選擇,例如當需要從另一個任務觸發Ansible作業時(此時API會更合適),或者當應該觸發作業的人員只能觸發特定作業時。對於這些情況,AWX或Ansible Tower是更好的選擇。
AWX和Ansible Tower之間的唯一區別是,AWX是上游開源版本,而Ansible Tower是Red Hat的下游產品,得到官方支援,但需要付費。AWX可作為Docker容器執行,而Ansible Tower則安裝在系統上,需要特定版本的Linux。
本章節將介紹以下主題:
- 安裝AWX
- 從AWX執行第一個Playbook
- 建立AWX專案
- 建立庫存清單
- 建立作業範本
- 執行作業
- 控制對AWX的存取許可權
- 建立使用者
- 建立團隊
- 建立組織
- 在AWX中分配許可權
技術需求
雖然有多種方法可以安裝AWX,但我們將使用建議的根據容器的安裝方法。因此,需要在機器上安裝以下軟體:
- Ansible 2.4+
- Docker
- docker Python模組
- docker-compose Python模組
- 如果系統使用Security-Enhanced Linux(SELinux),還需要libselinux Python模組
本章假設您已經按照第1章的說明設定了Ansible控制主機,並且正在使用最新版本。
安裝AWX
首先,需要克隆AWX Git儲存函式庫,可以透過執行以下命令完成:
$ git clone https://github.com/ansible/awx.git
接下來,修改installer/inventory檔案,設定密碼和金鑰的合理值。
現在已經下載了Ansible AWX程式碼和安裝程式,可以進入安裝程式資料夾並執行安裝:
$ cd awx/installer
$ ansible-playbook -i inventory install.yml
install.yml Playbook將執行整個安裝過程。它首先檢查環境中可能存在的錯誤組態或缺失的依賴項。如果一切正常,它將下載多個Docker映像並執行它們。
安裝完成後,可以透過執行docker ps命令檢查安裝結果。
從AWX執行第一個Playbook
在AWX中,目標是執行Ansible Playbook,每個執行的Playbook都稱為一個作業。由於AWX提供了比Ansible更多的靈活性和自動化,因此在執行第一個作業之前需要進行一些組態。
建立AWX專案
AWX使用術語“專案”來標識Ansible Playbook的倉函式庫。AWX專案支援將Playbook放置在所有主要原始碼控制管理(SCM)系統中,例如Git、Mercurial和SVN,也支援檔案系統上的Playbook或由Red Hat Insights提供的Playbook。
要建立專案,請按照以下步驟進行:
- 轉到左側選單欄上的“專案”,然後點選右上角的綠色按鈕。
- 填寫專案名稱(例如“Samples Repo”),並選擇Git作為SCM型別。
內容解密:
此步驟涉及使用AWX的網頁介面建立一個新的專案。選擇Git作為SCM型別意味著AWX將從Git儲存函式庫中取得Playbook。這樣做的好處是可以版本控制Playbook,並與團隊成員協作。
詳細步驟與解析
安裝AWX:首先,我們需要克隆AWX的Git儲存函式庫到本地機器。然後,修改安裝程式的組態檔案以設定必要的密碼和金鑰。接著,執行安裝程式的Playbook來安裝AWX。
建立專案:在AWX中,專案代表了一個包含Ansible Playbook的倉函式庫。透過網頁介面,我們可以建立一個新的專案,並指定其來源,例如Git儲存函式庫。這使得我們可以利用版本控制系統來管理我們的Playbook。
執行Playbook:一旦專案設定完成,我們就可以建立一個作業範本來執行我們的Playbook。這涉及指定要使用的Playbook、庫存清單以及其他必要的引數。
控制存取許可權:AWX允許我們透過建立使用者、團隊和組織來控制對其資源的存取許可權。我們可以為這些實體分配不同的許可權,以確保只有授權的人員才能執行特定的操作。
程式碼範例與解析
---
- name: Install AWX
hosts: localhost
become: yes
tasks:
- name: Clone AWX repository
git:
repo: https://github.com/ansible/awx.git
dest: /path/to/awx
- name: Modify inventory file
template:
src: templates/inventory.j2
dest: /path/to/awx/installer/inventory
- name: Run AWX installer
command: ansible-playbook -i inventory install.yml
args:
chdir: /path/to/awx/installer
內容解密:
此Playbook自動執行AWX的安裝過程。它首先克隆AWX的Git儲存函式庫,然後修改安裝程式的組態檔案,最後執行安裝程式的Playbook來安裝AWX。這樣可以簡化安裝過程,並確保一致性。
在AWX中建立專案與資源
建立AWX專案
在AWX(Ansible Web eXecutable)中,專案是用於儲存和管理Playbook的系統。建立專案的第一步是定義SCM(Source Control Management)URL,例如 https://github.com/ansible/ansible-tower-samples,並儲存變更。
更新版本控制的重要性
啟用「更新版本控制」(Update revision on launch)選項非常重要,因為它確保在執行Playbook之前,AWX總是會更新至最新的版本。這避免了因執行舊版本Playbook而導致的問題。
建立資源清單(Inventory)
資源清單是用於定義AWX可以管理的機器。在AWX中建立資源清單的步驟如下:
- 點選左側選單欄中的「資源清單」選項。
- 點選右上角帶有白色加號的綠色按鈕,以建立新的資源清單。
- 選擇「資源清單」選項,並設定名稱後儲存。
儲存後,您可以設定許可權、群組、主機、來源和已完成的工作。
新增主機至資源清單
在「主機」標籤中,您可以新增主機至資源清單。例如,新增localhost作為主機,並在「變數」框中新增以下程式碼:
---
ansible_connection: local
ansible_python_interpreter: '{{ ansible_playbook_python }}'
這組態了Ansible使用本地連線並指定Python直譯器。
資源清單來源
AWX支援動態資源清單來源,例如公有雲供應商(AWS、Azure、GCP)、私有雲(VMware、OpenStack)和其他系統(Red Hat Satellite)。您可以在資源清單的「來源」標籤中設定這些來源。
自訂動態資源清單指令碼
「來源自專案」(Sourced from a Project)選項允許您使用自訂的動態資源清單指令碼,該指令碼儲存在Git儲存函式庫中。啟用「啟動時更新」(Update on launch)選項可確保在執行作業時,資源清單始終保持最新狀態。
智慧型資源清單(Smart Inventories)
智慧型資源清單是根據特定篩選條件自動填入主機的資源清單。這對於根據特定條件動態建立資源清單非常有用。
建立作業範本(Job Template)
作業範本是一組用於執行作業的組態,類別似於ansible-playbook命令列選項。建立作業範本的步驟如下:
- 點選左側選單欄中的「範本」選項。
- 點選右上角帶有白色加號的綠色按鈕,並選擇「作業範本」。
- 在出現的視窗中設定必要的組態。
設定作業範本的重要性
作業範本允許以最小的使用者輸入執行Playbook,使其可以被委派給不熟悉Playbook運作細節的團隊,或在無人值守的情況下排程執行。
在AWX中建立和管理作業範本與使用者
建立作業範本
在AWX(Ansible Web eXecutable)中,作業範本是用於執行Ansible Playbook的藍圖。建立作業範本需要提供必要的資訊,例如名稱、清單、專案和Playbook。以下是一個建立作業範本的例子:
- 名稱:Hello World
- 清單:Test Inventory(在前面的章節中建立)
- 專案:Samples Repo(在本章的前面部分建立)
- Playbook:hello_world.yml(唯一的Playbook選項)
在建立作業範本時,需要注意「Prompt on launch」選項,該選項允許在執行作業時輸入或覆寫某些值。這對於需要在每次執行時更改的值非常有用,但也可能影響排程的作業執行。
執行作業
作業是作業範本的例項。要執行作業,需要按照以下步驟進行:
- 導航到左側頁面選單中的「Templates」。
- 找到要執行的作業範本(在本例中為「Hello World」)。
- 點選相應作業範本右側的小火箭圖示。
當作業正在執行時,AWX允許在作業儀錶板中跟蹤作業的執行。作業的輸出會在螢幕右側載入,而左側則提供有關作業的資訊。AWX會將作業執行輸出儲存在後端資料函式庫中,以便於未來查詢和稽核。
控制對AWX的存取
AWX的一大優勢是支援多使用者連線和控制/執行操作。這使得公司可以為不同的團隊、整個組織甚至多個組織安裝單一的AWX。
建立使用者
要建立使用者,請按照以下步驟進行:
- 在左側選單欄中選擇「Users」。
- 點選右上角帶有白色加號的綠色按鈕。
- 填寫電子郵件地址、使用者名稱和密碼(並確認密碼)。
使用者可以分為三種型別:
- 普通使用者:沒有繼承許可權,需要被授予特定許可權才能執行任何操作。
- 系統稽核員:對整個AWX安裝具有唯讀許可權。
- 系統管理員:對整個AWX安裝具有完整許可權。
建立團隊
雖然個別使用者帳戶是一個非常強大的工具,但為每個物件(例如作業範本或清單)設定許可權將非常不便。團隊的建立可以簡化這一過程。
重點回顧
- 在AWX中建立和管理作業範本是自動化和簡化Ansible Playbook執行的關鍵步驟。
- 執行作業需要建立作業範本的例項,並可以透過AWX的儀錶板進行跟蹤。
- AWX支援多使用者連線和根據角色的存取控制(RBAC),使得多個團隊和使用者可以安全地分享資源。
程式碼範例與解析
---
- name: Hello World
hosts: localhost
tasks:
- name: Print Hello World
debug:
msg: "Hello World"
內容解密:
- `
:表示YAML檔案的開始。 2. - name: Hello World:定義Playbook的名稱為「Hello World」。 3. hosts: localhost:指定該Playbook將在本地主機上執行。 4. tasks::定義要執行的任務列表。 5. - name: Print Hello World:定義第一個任務的名稱。 6. debug::使用debug模組來輸出訊息。 7. msg: “Hello World”`:指定要輸出的訊息為「Hello World」。
這個Playbook簡單地在本地主機上輸出「Hello World」。透過在AWX中建立一個指向這個Playbook的作業範本,使用者可以輕鬆地執行這個任務。
使用Ansible Tower開始自動化之旅:第12章
AWX和Ansible Tower在使用者分組的概念上與大多數其他RBAC(角色存取控制)系統相同。唯一的差異在於,在使用者介面中,它們被稱為「團隊」而非「群組」。然而,您可以簡單且輕鬆地建立團隊,然後根據需要新增和移除使用者。透過使用者介面執行此操作非常直接,您會發現此過程與大多數RBAC系統處理使用者群組的方式相似,因此我們在此不再贅述。
一旦您設定好團隊,我建議您將許可權分配給團隊,而不是透過個別使用者進行分配,因為這將使您在組織成長時更容易管理AWX物件的許可權。說到組織,讓我們在下一節中看看AWX中組織的概念。
建立組織
有時候,您有多個獨立的群體需要管理獨立的機器。在這種情況下,使用組織可以幫助您。組織基本上是AWX的租戶,具有其自己的使用者帳戶、團隊、專案、庫存和作業範本——這幾乎就像擁有一個獨立的AWX例項!
要建立組織,您需要執行以下步驟:
- 到螢幕左側的「組織」選項。
- 然後,您可以看到現有的組織,並透過點選螢幕左上角綠色背景上的白色加號按鈕來建立新的組織。
- 將出現一個視窗,如下所示: 由於唯一的必填欄位是「名稱」,因此您可以直接填寫並點選「儲存」。
內容解密:
- 建立組織的第一步是導航到AWX介面中的「組織」選項。
- 「名稱」欄位是必填的,這意味著您至少需要為新組織提供一個名稱。
- 點選「儲存」後,新的組織就會被建立,並可以在AWX中使用。
分配許可權於AWX
在組態第一個專案、庫存和作業範本的過程中,您會注意到大多數螢幕上都有一個名為「許可權」的按鈕。當我們以管理員帳戶瀏覽使用者介面時,我們可以看到所有選項——但當然,您不會想給每位使用者管理員許可權。
個別使用者(或他們所屬的團隊)可以根據每個物件授予許可權。例如,您可以讓一組資料函式倉管理員只擁有執行與他們角色相關的作業範本的許可權,而Linux系統管理員則可以存取與他們角色相關的庫存、專案和作業範本。AWX隱藏了使用者沒有許可權的物件,這意味著資料函式倉管理員永遠看不到Linux系統管理員的物件,反之亦然。
有多種不同的許可權級別可以授予使用者(或團隊),包括以下內容:
- 管理員:這是組織層級的管理員,相當於系統管理員。
- 執行:這種使用者只能執行屬於組織的範本。
- 專案管理員:這種使用者可以更改屬於組織的任何專案。
- 庫存管理員:這種使用者可以更改屬於組織的任何庫存。
- 憑證管理員:這種使用者可以更改屬於組織的任何憑證。
- 工作流程管理員:這種使用者可以更改屬於組織的任何工作流程。
- 通知管理員:這種使用者可以更改屬於組織的任何通知。
- 作業範本管理員:這種使用者可以更改屬於組織的任何作業範本。
- 稽核員:這是組織層級的稽核員,相當於系統稽核員。
- 成員:這是組織層級的普通使用者。
- 讀取:這種使用者能夠檢視屬於組織的非敏感物件。
問題與評估
您可以在Ansible Tower中建立哪些物件?
- A) 使用者
- B) 作業
- C) 作業範本
- D) 模組
- E) 專案
答案:A、B、C、E
AWX是Red Hat Ansible Tower的上游和開源版本。真或假?
- A) 真
- B) 假
答案:A) 真
內容解密:
本章節提供了對AWX和Ansible Tower功能的全面瞭解,包括建立組織、分配許可權等,並對相關概念進行了解說。透過閱讀本章,您應該能夠理解如何在企業環境中使用AWX和Ansible Tower來管理和自動化任務。
Ansible 自動化技術
Ansible 是一種流行的開源自動化工具,用於簡化 IT 基礎設施的管理和組態。透過 Ansible,系統管理員可以輕鬆地自動化重複性任務、佈署應用程式以及管理複雜的 IT 環境。
Ansible 的安裝與設定
要在不同的作業系統上安裝 Ansible,可以參考以下步驟:
在 Linux 上安裝 Ansible
- Debian/Ubuntu:使用
apt套件管理器進行安裝。sudo apt update sudo apt install ansible - Fedora/CentOS/RHEL:使用
dnf或yum套件管理器進行安裝。sudo dnf install ansible # 或 sudo yum install ansible - FreeBSD:使用
pkg套件管理器進行安裝。sudo pkg install ansible - macOS:使用
pip或Homebrew進行安裝。# 使用 pip pip install --user ansible # 使用 Homebrew brew install ansible
設定 Ansible 環境
設定 Ansible 需要建立一個 inventory 檔案,用於定義要管理的目標主機。
[webservers]
web1 ansible_host=192.168.1.100
web2 ansible_host=192.168.1.101
[dbservers]
db1 ansible_host=192.168.1.200
執行 Ad-Hoc 命令
使用 Ansible 的 ad-hoc 命令,可以快速執行單一任務。
ansible webservers -m ping
編寫 Playbook
Playbook 是 Ansible 的核心,用於定義一系列任務以自動化流程。
---
- name: Install and start Apache
hosts: webservers
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache
service:
name: apache2
state: started
enabled: yes
Ansible Playbook 的進階應用
使用 Roles 簡化 Playbook
Roles 允許將 Playbook 分解為可重用的單元,簡化管理和共用。
ansible-galaxy init my_role
管理變數和範本
變數和範本的使用使得 Playbook 更具靈活性和可重用性。
---
- name: Configure web server
hosts: webservers
vars:
http_port: 80
tasks:
- name: Template configuration file
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: Restart Apache
網路自動化與容器管理
網路裝置管理
Ansible 可以管理網路裝置,自動化網路組態。
---
- name: Configure network device
hosts: routers
tasks:
- name: Set interface IP
ios_config:
lines:
- ip address 192.168.1.1 255.255.255.0
parents: interface GigabitEthernet0/0
容器管理與 Kubernetes 整合
---
- name: Deploy Kubernetes pod
hosts: kubernetes_nodes
tasks:
- name: Apply pod configuration
k8s:
state: present
definition:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx:latest
最佳實踐與除錯
除錯 Playbook
使用 -vvv 選項執行 Playbook 以取得詳細輸出,便於除錯。
ansible-playbook -vvv myplaybook.yml
管理 Secrets
使用 Ansible Vault 管理敏感資訊。
ansible-vault create secrets.yml