iT邦幫忙

2021 iThome 鐵人賽

DAY 30
1
DevOps

這個 site 就是遜啦 - SRE 30 天登大人之旅系列 第 30

Day 30:Ansible Role

在昨天的文章中我整理了一些重用 Ansible 內容的方法,但有時候,我們要完成一項任務可能不單單只需要 task,還需要一些其他的設定、檔案之類的。在這種情況下,Ansible 提供了另外一個機制,稱為 role,來幫助我們可以把各種內容打包成一個 role 來使用。

Role 的組成

根據目前的官方文件,role 是透過資料夾來定義的,底下預設會有這八個資料夾,但只要有至少一個就行。

<role_name>/
  tasks/
  handlers/
  library/
  files/
  templates/
  vars/
  defaults/
  meta/

預設情況下,Ansible 會在每個資料夾底下搜尋 main.yml(或是 mainmain.yaml)來決定這個 role 的內容。

如何安裝 Role

Ansible 除了可以把東西打包成 Role 以外,還可以把它發布到網路上,供其他需要的人下載。在 Python 的世界,我們可以透過 pip 來安裝套件,而在 Ansible,這就要透過 Ansible Galaxy 來達成了。

舉例來說,若我要安裝 geerlingguy.docker 這個在 host 上安裝 docker 的 role 的話,只要透過以下命令,就能在我的 managed node 上面安裝了。

ansible-galaxy install geerlingguy.docker

話說在 galaxy 上面搜尋的話,應該還會看到另一個名詞 --- collection。若我的理解沒錯,這是在比較新一些的版本新增的一種發布 Ansible 內容的方式,底下可以包含 plugin、module、playbook 或是 role 等資源。

如何使用 Role

安裝好 role 之後,我們該如何使用它呢?總共有三種方法:

  • roles:在 play 底下有個 roles 的參數,只要給他一個 array 包含這份 play 需要使用的 role,就可以執行他們了。
  • import_role / include_role:在 task 底下我們也可以透過這兩個 module 來靜態或是動態的引入 role。

小結

今天就是最後一天了,老實說沒有什麼結束的感覺。這三十天下來都是過得戰戰兢兢,每天都在嘗試學習新的東西,不過還是有很多東西要學呀...本來還想說可以多談談有關可觀測性或是 log 的部分(這些也是我認為長期以來 NOJ 中存在的問題),無奈於時間與經驗不足,希望這一年能夠有時間好好把他們補完。


上一篇
Day 29:Playbook 的模組化
系列文
這個 site 就是遜啦 - SRE 30 天登大人之旅30

尚未有邦友留言

立即登入留言