今天要來說一個昨天 Tempaltes 沒講到的小重點,
還蠻實用的功能,感覺是必講就來講一下
有注意到昨天我們在填 Templates 的時候,
下方這一塊空白沒填的 Variables 嗎?
這塊就是讓你填入 runtime 要使用的參數,
熟悉 Ansible 撰寫的同學可能就會立刻想到 ansible-playbook 有個 -e EXTRA_VARS
的 command options
-e EXTRA_VARS, --extra-vars EXTRA_VARS
set additional variables as key=value or YAML/JSON, if filename prepend with @
沒錯,就是它
常用的場景可能是你在執行這支 script ,runtime 想要替換的變數,e.g.
版本號、這支 jobs 需要通知的 email 收件者、執行的 test items 編號...etc,
舉凡你不想進 code 改變,但又常常需要 runtime 變動的參數,
都可以寫在這
這邊舉個例子,
假設我們 backend api 不再每次都部署 latest 版本,
我們需要一個 rollback 的功能,
可以指定部署的版號,
那我們該怎麼設定 AWX Templates?
為了實驗,
我們先將 project 根目錄的 main.yml 作如下調整
diff --git a/main.yml b/main.yml
index 92eb31e..a0bd635 100644
--- a/main.yml
+++ b/main.yml
@@ -3,7 +3,7 @@
hosts: staging
vars:
build_root_abspath: "/home/ubuntu/build/{{ ansible_date_time.iso8601_basic_short }}"
- demobackend_version: "latest"
+ demobackend_version: "{{ var_demobackend_version | default('latest') }}"
ansible_python_interpreter: "/usr/bin/python3"
roles:
簡單來說,就是 demobackend_version
參數還是代表我們要部署的 API 版號,
如果沒有額外指定,default 值是 latest
,
如果 var_demobackend_version
值有定義,例如 runtime 時指定參數值,那麼
將 var_demobackend_version
賦值給 demobackend_version
為了檢查這個設定是否生效,
我們加一個 debug 的 task 在部署 API 的 playbook
diff --git a/roles/build_fastapi/tasks/main.yml b/roles/build_fastapi/tasks/main.yml
index bce9ff2..8d797db 100644
--- a/roles/build_fastapi/tasks/main.yml
+++ b/roles/build_fastapi/tasks/main.yml
@@ -2,6 +2,9 @@
- name: show remote host
debug:
msg: "the remote server is {{ ansible_host }}"
+- name: show api version
+ debug:
+ msg: "{{ demobackend_version }}"
- name: create build dir if not exists
file:
path: "{{ build_root_abspath }}"
改好之後,重新 push 到我們的 repo,
再到 AWX 重新 sync 我們的 project 確保 latest commit id 是 align 的,
做完這些,
切換到我驟 Templates 的頁面做如下修改
也就是說,AWX 此處的設定,等於於我們透過 adhoc 指令下的--extra-vars "var_demobackend_version=v0.2"
在 Templates 頁面按下 [Save],然後按下小火箭讓它執行
可以從 Jobs 的監控看到版號被確實 assign 進去了
我們再透過 ssh login ubuntu-staging-env 這台機器,
確認一下執行的 backend API container 版本是否為 v0.2
一切如預期,
感謝飛天小女警的幫忙,
IT 肥宅又度過平安的一天