使用 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 官方的圖片來展示

ARA UI reporting

使用 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/