DevOps課程-Configuration Management with Ansible 16
目前進度對應當初建置的指令整理:
當初建置nexus時,為了rootless,有特地建立新的User — nexus
並將下載解壓縮的目錄權限掛給nexus這個User
#在Linux介面下執行以下指令,會同時建立user,group:
adduser nexus
但是在Ansible則需要分為兩步驟
1.先建group(module link):
- (在目標機Linux環境用"group" module,windows用"win_group")
2. 再建user(module link):
- (在目標機Linux環境用"user" module,windows用"win_user")
接著後面才接目錄權限轉換
這邊偶爾會有疑問,哪些module才能對應到Linux 指令
我發現可以這樣查到:
寫好後大概長這樣:
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
然後跑一跑錯了...
調整一下:
再跑一次:
然後發現這邊建立user名子打錯naxue X,nexus O:
再重新執行:
進到目標機內確認:
接著第四個Play:
先進去目標機上看看那個檔案nexus.rc:
裡面內容只有:
基本上我們要靠Ansible變成這樣:
而專門處理這類文字檔的insert/update/remove的module是:
— blockinfile
多行像這樣:
接著執行
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
進目標機檢查看看:
這邊先手動還原留原始的第一行:
這邊示範用update的方式:
使用的module是 — lineinfile:
- 確保特定行存在,或透過regex改寫特定行
- 專門拿來改檔案中的single line
- (多行修改請洽 — "replace" module)
執行
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
成功:
一樣進到目標機內確認:
然後此時注意到解壓縮動作每次都重複做:
調整為:
這邊就執行驗證看有沒有問題:
接著繼續完成4th Play,剩餘的啟動Nexus部分
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
實際上:
所以每次都應該再多寫個檢核啟動步驟(如之前一樣):
然後這邊其實講師也提到,還有一個啟動問題是機台太小(Resource不夠!)
可以直接進到目標機手動看到這個問題:
#透過另一個指令看到啟動異常(不是start那個):
/opt/nexus/bin/nexus run
所以當下這台就需要移除重建:
重建:
其餘設置相同
這邊講師就順便重新強調了兩件事
1.
假若我們手動辛辛苦苦做了一連串建置前置動作
最後發現悲劇的卡再Resource不足,結果全部重來
但是透過Ansible!! 我們是完成了一連串的腳本Script!!!
而這個Script可以直接套用給新的機台!
假設來十台要建置也不用怕了!!
2.
然後這邊要開始調整新的機台IP位置:
各個Play上的hosts也要調:
所以這邊改hosts檔用IP群組的寫法,才是相對較好的做法:
(可參考第5篇筆記,記得hosts檔內不吃desh符號,需要的話用下底線)
所以hosts檔內容改為:
而deploy-nexus.yaml內容上hosts位置都用名稱:
一樣上到主控機上執行(記得hosts檔也有改,也要放上去):
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
新機台重跑要久一點
講師的是有啟動成功,但是我的不行:
看起來還是需要改成:
重跑:
看起來還是失敗:
但是確認手動可以:
我驚人的發現過一陣子連手動起的也會掛:
之前查找log的位置沒有看到錯誤log了:
最後我發現(注意以下的process id:22587)
然後看到/var/log/syslog裡面最後出現:
果然還是機台配置不夠大...
我大概又換一台,反正上完這部分就要關目標機了
新機IP:
所以hosts檔又要小調一下:
忘了看舊的那台memory有多少,這台新的是:
重跑:
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
有順利跑完Ansible Playbook:
進到新的目標機一看job也還在:
順便看一下剛剛看到的/var/log/syslog
看起來沒有掛掉的log出現!!
我這邊嘗試一下用講師的設法
先關掉nexus:
改成(沒有async,poll=0,sh -c"cmd"):
依樣順利跑完Playbook:
在看看目標機上的job有沒有出現:
阿不過這邊想到,這個/opt/nexus/bin/nexus start
本身就是背景執行了!...
所以我剛剛command module就不會卡住
接著
接著第五個Play:
這邊一樣要先移除目前的nexus的job:
撰寫新的Play如下:
執行:
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
其原因是,啟動還沒完全完成,所以PORT還沒咬上8081...
這時候進到目標機去看:
要完成稍微延遲,或等待的module則要找 — pause
另外也有另一個module也可以做到 — wait_for
後面還有等待file建立...etc
這邊簡單實作:
基本就教到這邊
我自己順便優化:
就是判斷說是否目標機上已經有運行nexus的process
沒有才做start動作
在有運行的狀態下,真的會skip:
最後重跑完整的,有無process都可以執行:
重跑(有process)會skip:
紀錄目前Code:
當前deploy-nexus.yaml內容:
當前hosts:
ansible.cfg沒變:
該部分開另一個git branch存放 — nexus_startup
最後我就把這個Droplet移除了(省錢!)