Ansible中毒中....

前言

本來是想振作起來寫一些shell script的說…結果中間有些動作想說用ansible寫看看可能會比較簡單
結果一寫下去…就..不 可 挽 回的沉迷進去了….

Ansibleとは?

Ansible是RedHat開發的一個自動化工具,透過python跟ssh,實現了一台control machine rules them all
之前我也不是沒有試著用過,但是當時的我只覺得ansible是個又慢又複雜又難懂的東西….所以就稍微弄了點入門的就放棄了
結果這次我不知道哪裡忽然開竅了,寫著寫著就越來越包山包海

相關的教學

補充一些想使用ansible的入門者參考的文獻與影片

Documents

Youtube教學影片

Getting Started with Ansible - Learn Linux TV

Jay from Learn Linux TV會提供很多有用的Linux教學影片(不過基本上都是比較基本的教學)除了Ansible也可以翻翻其他的主題影片

先前的卡關點

我之前使用ansible主要卡在以下兩點

變數/迴圈使用

ansible的迴圈功能基本上都會伴隨變數一起,若是不會定義"{{ }}"的Jinja2變數格式基本上就用不了迴圈
不用迴圈的ansible playbook就是一個肥大,機器與重複性動作越多就跑得越囉唆與緩慢的東西

條件

這個也是一個很大的重點,如同shell script不會使用if ..else ..fi來判斷狀態的話shell script也會寫不下去的….

其他上癮的地方

inculde_task, inculde_roles

之前我就針對ansibleroles機能很有好感,畢竟這是可以將一個很大的playbook.yml支解成多個小型好寫的roles來減輕編寫的負擔以及再利用等特徵
但是roles是靜態的寫上的就是一定會被呼叫並且執行,但是搭配上inculde_task與變數判定,就可以做成依照node特性(例如os_family自動判別作業系統的類型)
動態的載入對應的task.yml使一個playbook.yml的覆蓋範圍擴大到幾乎所有的機器(尤其是像我這種喜歡用不同distrobution來做不同類型server/workstation的人)

殘存的問題點

高級用法還搞不清楚

ansible是一個不停在改版而且有一大堆人在鑽研的工具,所以有蠻多複雜條件判斷與迴圈寫法我還不是很懂(對..就是那種看人家的範例也看不懂的那種…不懂)
所以目前寫起來的playbook.yml還是看起來很粗糙,效率也沒最佳化到最好不過最起碼能動了….不過話說回來我shell script的寫作水準也就那樣…算是兩個半斤八兩吧…

Output美化

這個單純就是有點沒苦硬吃的味道了…雖然可以靠定義ansible.cfg裡的參數display.skipped.host=false把skipped的item都不顯示來讓顯示好看點甚至更過份的把display.ok.host=false也定義上,這樣除了changed的item以外都不顯示….
或是我有看到一個利用callback參數變化讓除了定義的顯示以外都不顯示(有點像shell script內有echo的文字才顯示的感覺)
不過講穿了這個就算沒有花心力在上面也可以,畢竟我沒打算把我的ansible專案放到外面去….橫豎都只有我自己用,所以不好看也沒關係,堪用就好了

結語

首先,因為ansible的進度比以前增加許多,所以我多了不少該update進wiki的筆記在等著我寫….(懶癌要犯了…)
所以可見的未來一段時間,我應該會有不少事情可以做了…好高興唷~~(ㄟ!?)
坑也挖了…就看後面有沒有辦法填上囉