使用 ara 來側錄 Ansible Playbook
在 Reddit 上看到有趣的標題:Recording Ansible playbooks from AWX with ara
覺得有趣是因為居然可以側錄 Playbook ,而且從文章看起來,可以不需要使用 Ansible Tower / AWX 就可以很方便的去查閱執行結果,這種好東西要找時間來試試看。
前面的那篇,其實講 awx 比較多,所以下面的操作我是參考 ara 的網站來做的:https://ara.recordsansible.org/
安裝
安裝的方法相當簡單,首先得要有 pip,在 RHEL8 可以用以下指令安裝
sudo yum install -y python3-pip
接著安裝 ara
python3 -m pip install --user "ara[server]"
使用
使用的方法很簡單,設置 ANSIBLE_CALLBACK_PLUGINS 這個環境變數就可以。
export ANSIBLE_CALLBACK_PLUGINS="$(python3 -m ara.setup.callback_plugins)"
然後執行 playbook
ansible-playbook -i inventory your_playbook.yml
第一次的時候,會出現初始化的訊息,第二次就不會了。
Playbook 執行完以後,就可以使用 ara
指令來察看結果。
例如要察看執行過的 playbook 列表
ara playbook list
想知道其他的子指令,可以用 ara --help
取得,目前有提供這些子指令
Commands:
complete print bash completion command (cliff)
expire Expires objects that have been in the running state for too long
help print detailed help for another command (cliff)
host delete Deletes the specified host and associated resources
host list Returns a list of hosts based on search queries
host metrics Provides metrics about hosts
host show Returns a detailed view of a specified host
play delete Deletes the specified play and associated resources
play list Returns a list of plays based on search queries
play show Returns a detailed view of a specified play
playbook delete Deletes the specified playbook and associated resources
playbook list Returns a list of playbooks based on search queries
playbook metrics Provides metrics about playbooks
playbook prune Deletes playbooks beyond a specified age in days
playbook show Returns a detailed view of a specified playbook
record delete Deletes the specified record and associated resources
record list Returns a list of records based on search queries
record show Returns a detailed view of a specified record
result delete Deletes the specified result and associated resources
result list Returns a list of results based on search queries
result show Returns a detailed view of a specified result
task delete Deletes the specified task and associated resources
task list Returns a list of tasks based on search queries
task metrics Provides metrics about actions in tasks
task show Returns a detailed view of a specified task
Web UI
嫌打指令太麻煩,也可以啟動 Web Server,ara 本來是用 Django 開發的,所以很容易就可以啟動。
ara-manage runserver 0.0.0.0:8000
這邊借一下 ara 官方的圖片來展示
使用 Container
前面用的方式是把整個 ARA API server 裝到本機,ara 有提供另外一種安裝方式,可以讓 ARA API server 以 Container 方式啟動。
# 建立資料夾作為 volume ,用來存放設定跟 sqlite 資料庫。
mkdir -p ~/.ara/server
# 以 podman 啟動 API server,ara API server 的 container image 是放在 dockerhub 上。
podman run --name api-server --detach --tty \
--volume ~/.ara/server:/opt/ara:z -p 8000:8000 \
docker.io/recordsansible/ara-api:latest
# 安裝 ARA client
python3 -m pip install --user ara
# 設定 ANSIBLE_CALLBACK_PLUGINS 來捕捉執行 Playbook 的運行結果。
export ANSIBLE_CALLBACK_PLUGINS="$(python3 -m ara.setup.callback_plugins)"
# 設定環境變數,讓 ARA callback 知道 API server 在哪裡。
export ARA_API_CLIENT="http"
export ARA_API_SERVER="http://127.0.0.1:8000"
# 執行 playbook
ansible-playbook playbook.yaml
結論
ara 這個專案補足了一部份 AWX / Ansible Tower(現改名為 Ansible automation controller) 在呈現結果上的的缺陷, 即使不使用 AWX / Ansible Tower,也可以透過 ara 來察看執行的歷史, 所以大家可以安裝來試試看。
若想要參與這個專案的開發,可以到 GitHub 這邊來參與:https://github.com/ansible-community/ara-collection/