2022 的第一篇部落格,就從整理一則舊筆記開始吧!這次整理的舊筆記是關於在 Ansible 的 Varaible 中使用 boolean 的一些個人經驗。(本文使用的 Ansible 版本為 2.10。)
內文 在撰寫 Ansible Playbook 的時候,我們為了讓它能夠運用在多種情境,我們經常會使用到 when: 來控制各個 task 是否需要執行,例如:
# 當目標 Host 的 Linux 為 Ubuntu 時,才執行此 Task - name: "Create nginx sites-enabled link | (Ubuntu)" file: src: "/etc/nginx/sites-available/{{ APP_NAME }}" dest: "/etc/nginx/sites-enabled/{{ APP_NAME }}" state: link when: ansible_distribution == "Ubuntu" 而在剛開始學習 Ansible,對於 Ansible、Python 及 Jinja2 還不夠熟悉時,我們可能會寫出下面這種 when:。
# 希望做到當 Variable is_laravel 為 true 時,就執行 task - name: Create ....
Drill 是一個以程式語言 Rust 撰寫的輕量級 HTTP Load testing 工具,Load testing 工具百百款,之所以會特別想認識 Drill 則是因為該工具的一段簡介「You can write benchmark files, in YAML format, describing all the stuff you want to test. It was inspired by Ansible syntax because it is really easy to use and extend.」
看到上面那段簡介,身為 Ansible 的使用者,怎麼可以不來驗證一下,是不是真的如它所言!
(本文撰寫時,使用的 Drill 版本為 0.7.1。)
(本文同步發表於 Medium。)
操作步驟 我們知道試用任何工作的第一步是先看官方文件!
錯!當然是先看有沒有已經包好立即可用的 Container image!(咦)
可惜在撰文的當下,尚未看見官方有自己包好 Container image,在 Docker Hub 只有找到 Drill 版本 0.5.0 的 Docker image。
https://hub.docker.com/r/xridge/drill 由於沒有最新版的 Container image,只好自己 build 一個,這邊就偷懶不追求 Container Size 的最小化,先搶快做出 Drill 0....
因為一些緣故,要再次嘗試透過 Ansible 建立 Azure 的一些資源,於是重新踏入這個坑進行了一番研究。Azure 和其他雲端供應商一樣,提供的服務越來越多樣,同時也支援越來越多服務都能以 Infrastructure as Code 的方式創建與管理,不過既然是重新入坑,還是先從簡單的動作開始著手,首先嘗試以 Ansible 來建立一個 Azure Virtual machines。 (本文同步發表於 Medium) (本文內容已經過期,還請詳閱 Ansible 與 Azure 的最新文件。)
為 Ansible 取得必要的權限 不管是使用哪一種 Infrastructure as Code 或 Configuration Management 工具,如要透過工具直接管理或操作雲端服務,首先都要為工具取得必要的授權及權限。而目前在 Azure 和 Ansible 的官網上,皆已經有文件在教學如何透過 Ansible 來管理 Azure,但在查閱了數篇之後發現,Azure 能夠提供授權給 Ansible 使用的方式主要有兩種:
Active Directory Username/Password Service Principal Credentials 而本文將會採用第二種「Service Principal Credentials」。 如果你打算按著文件,逐一步驟建立「Service Principal Credentials」,我可以預告你很有可能會遇見一個坑,那就是明明是按著文件圖文一步步地操作,但最終就是無法輕易找到下面這四個所需參數。
subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
secret=xxxxxxxxxxxxxxxxx
tenant=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 在嘗試幾種操作之後,個人發現目前最簡單的做法應該是這份文件提到的指令。
使用 Azure CLI 來建立 Azure 服務主體(英文版) 只要按著文件中說明的 Azure CLI 指令 az ad sp create-for-rbac,即可順利透過它取得上述四個參數中的後三項。而最簡單執行 Azure CLI 的方式,則是透過 Azure portal 的 Cloud Shell。 只要登入 Azure portal,在點擊上方工具列 Cloud Shell 的 Icon 即可操作它。...
延續上一篇文章,針對公開放上 Ansible Galaxy 的 Roles,我們能夠完全比照 geerlingguy 大神的測試方式,直接使用 Travis Ci。但如果是一些不打算公開的 Roles,那就只好使用自己的 CI Server 來測試,在這篇文章中就讓我們用 GitLab CI 來進行測試。
(本文同步發表於 Medium 道場)
在文章開始之前要先打預防針,其實轉換並不難,特別是如果你早已看懂 geerlingguy 的測試方法,那還請忽略本文,因為對於高手而言這篇文章很可能只是在說廢話啦 XD。
GitLab CI 的詳細使用方式就不多說了,請參閱官方文件。GitLab 依然有提供免費註冊,並且也有提供有限免費的 CI Runner 可以使用,因此想要試用又不想自行架設者,可以先註冊免費帳號來試用。
使用 GitLab CI 的方式與 Travis CI 類似,同樣都是在專案內新增一個 yaml 檔案,並在其中定義 CI Pipeline 與 CI Job,而 GitLab CI 預設使用的檔名為 .gitlab-ci.yml。因此其實我們只要仿造在前一篇文章中說明過的 geerlingguy 大神之測試方法,在 .gitlab-ci.yml 中,將其轉換成 GitLab CI 可以接受的方式即可。
預備多種測試環境 與 Travis CI 相同,GitLab CI 也支援使用 docker 來建立不同的測試環境,因此在 .gitlab-ci.yml 中,需要特別註明要使用支援 Docker 的 Runner,並且替每個 CI Job 指定所使用的 Docker Image。...
如同程式需要測試,Ansible Playbook 或 Roles 其實也是某種 Code,因此最好也能為其撰寫適當的測試。本文就讓我們向 Ansible 圈內的大神 geerlingguy 求教,學習 geerlingguy 大神測試 Roles 的方式。
(本文同步發表於 Medium)
本文的內容也正是我在 DevOps Taiwan Meetup #13 - Ansible User 小聚所分享的閃電秀,當時的簡報在此:
「跟著 geerlingguy 大神一起測試 Ansible Roles」 建立你的 Roles 並透過 Travis CI 測試 要學習 geerlingguy 大神的測試方式之前,當然請先準備好你的 Roles,將其推上 GitHub。關於 Roles、Ansible Galaxy 及 GitHub 三者的關係,這邊就不再重複說明了,請直接參閱凍仁翔的文章「怎麼在 Ansible Galaxy 分享 Roles?」(上、下)。
推上 GitHub 之後,接著要將 Repository 與 Travis CI 建立串連,這部分也同樣可以參閱凍仁翔的文章「怎麼用 Travis CI 測試 Roles?」。
接下來就讓我們一窺 geerlingguy 大神是如何測試的。
geerlingguy 大神的測試妙招 Ansible 的使用者們應該或多或少都曾使用或參考過 geerlingguy 大神所撰寫的 Roles,如此大量高品質的 Roles,全部都有通過 Travis CI 測試,到底是如何做到的?關鍵在於 geerlingguy 充分利用了 Travis CI 的特性,並且撰寫一支專門協助測試的 shell script。...
(本文內容已過期,請參閱最新的 ansible-container 官方文件。)
自從上次(2016年)試用 ansible-container 遭遇慘痛的踩雷經驗之後,如今 ansible-container 的版本號已進入 0.9.2,據說文件及穩定度皆已有所改善,因此決定趁著放假撥一點空檔再次試用它,希望這次的試用過程不會像上次一樣地慘痛。
(本文同步發表於 Medium)

以乾淨的 Ubuntu 16.04 環境試用 根據官方文件,ansible-container 的 Prerequisites 為
Python 2.7 or Python 3.5 pip setuptools 20.0.0+ 因此決定直接以乾淨的 ubuntu 16.04 環境挑戰,避免遇到 python 版本或相依套件的問題。首先透過 Vagrant 建立乾淨的 ubuntu 16.04,並在 VM 內安裝 Docker。接著以下面指令安裝 pip。 apt-get update
apt-get install python-pip
pip install --upgrade pip 接著按官方文件安裝 ansible-container。
pip install ansible-container[docker] ([] 內除了可以填 docker 之外,也可填寫另外兩種 engines,分別是 k8s 及 openshift。) 順利安裝後即可執行 ansible-container -h,查看 help。
試用 ansible-container 開始簡易地試用 ansible-container...
延續小技巧(1),本文繼續分享兩個與 Ansible playbook 有關的小技巧,希望大家都能安安心心地執行自己所的撰寫 playbook。
(本文同步發表於 Medium)
 (Photo by John Schnobrich on Unsplash)
在 playbook 內適當的設立檢查點與中斷點 在小技巧(1)中,主要提及的都是執行指令 ansible-playbook 時可以添加的 options,而在本文則分享兩個常用的 modules。
善用 debug 檢查 相信有在使用 Ansible 的使用者們都知道,在撰寫 playbook 過程中,經常有一些 Modules 是我們會重複使用的,其中一個即是 debug。
在 playbook 當中,有時為了讓各個 tasks 能夠順利串連,我們會將部分 tasks 的結果透過 register 註冊為新的 variables,提供後續的 tasks 能以此進行邏輯判斷。
而為了確認這些 variables 取得的值或結果是否合乎自己的預期,一般在撰寫 playbook 的過程中,便會直接透過 debug 將其印出,方便自己能夠直接進行除錯與檢查。
# 舉例:
command: whoami
register: check_user
debug: msg="{{ check_user }}" debug 非常單純,即是幫你將 msg 中的資訊印出,因此非常適合適時地安插在 playbook 當中作為檢查點,讓你可以在執行 playbook 之後快速檢查執行成果是否都如你預期。...