iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
自我挑戰組

我只是想自動執行 Ansible ,一定要用 Jenkins 嗎系列 第 22

如何設定 Ansible AWX Templates 續

  • 分享至 

  • xImage
  •  

今天要來說一個昨天 Tempaltes 沒講到的小重點,
還蠻實用的功能,感覺是必講就來講一下
有注意到昨天我們在填 Templates 的時候,
下方這一塊空白沒填的 Variables 嗎?
img

這塊就是讓你填入 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 的頁面做如下修改
img

也就是說,AWX 此處的設定,等於於我們透過 adhoc 指令下的
--extra-vars "var_demobackend_version=v0.2"

在 Templates 頁面按下 [Save],然後按下小火箭讓它執行
可以從 Jobs 的監控看到版號被確實 assign 進去了
img

我們再透過 ssh login ubuntu-staging-env 這台機器,
確認一下執行的 backend API container 版本是否為 v0.2
img

一切如預期,
感謝飛天小女警的幫忙,
IT 肥宅又度過平安的一天


上一篇
如何設定 Ansible AWX Templates
下一篇
如何設定 Ansible AWX 被 webhook 觸發自動部署 Container
系列文
我只是想自動執行 Ansible ,一定要用 Jenkins 嗎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言