Ansible中毒中....
前言
本來是想振作起來寫一些shell script
的說…結果中間有些動作想說用ansible
寫看看可能會比較簡單
結果一寫下去…就..不 可 挽 回的沉迷進去了….
Ansibleとは?
Ansible是RedHat開發的一個自動化工具,透過python跟ssh,實現了一台control machine
rules them all
之前我也不是沒有試著用過,但是當時的我只覺得ansible是個又慢又複雜又難懂的東西….所以就稍微弄了點入門的就放棄了
結果這次我不知道哪裡忽然開竅了,寫著寫著就越來越包山包海
相關的教學
補充一些想使用ansible的入門者參考的文獻與影片
Documents
Youtube教學影片
Jay from Learn Linux TV會提供很多有用的Linux教學影片(不過基本上都是比較基本的教學)除了Ansible也可以翻翻其他的主題影片
先前的卡關點
我之前使用ansible主要卡在以下兩點
變數/迴圈使用
ansible的迴圈功能基本上都會伴隨變數一起,若是不會定義"{{ }}"
的Jinja2變數格式基本上就用不了迴圈
不用迴圈的ansible playbook就是一個肥大,機器與重複性動作越多就跑得越囉唆與緩慢的東西
條件
這個也是一個很大的重點,如同shell script
不會使用if ..else ..fi
來判斷狀態的話shell script
也會寫不下去的….
其他上癮的地方
inculde_task, inculde_roles
之前我就針對ansible
的roles
機能很有好感,畢竟這是可以將一個很大的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的筆記在等著我寫….(懶癌要犯了…)
所以可見的未來一段時間,我應該會有不少事情可以做了…好高興唷~~(ㄟ!?)
坑也挖了…就看後面有沒有辦法填上囉