本節書摘來自異步社群《puppet實戰手冊》一書中的第1章,第1.8節,作者:【英】john arundel著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
rake是一個基于ruby語言編寫的實用工具,它可以幫助自動化完成puppet的工作流程。雖然有很多其他方法支援在遠端伺服器上運作指令,但是rake碰巧是本書使用的方法,它很容易擴充,可以非常友善地使用它做任何事。
此處要讓rake為做的第一件事情是:登入到遠端伺服器上,運作pull-updates腳本,将新修改的puppet配置清單應用到該伺服器上。做起來非常簡單,下面來看看它是如何實作的。
準備工作
你可能已經安裝了rake(嘗試運作rake指令進行檢查),如果還沒有,下面将介紹如何安裝rake。
運作下面的指令安裝rake:
<code>sudo apt-get install rake</code>
操作步驟
具體步驟如下。
1. 在puppet倉庫中,建立内容如下的rakefile檔案。使用正确的ssh指令替換ssh...,登入到伺服器。
2. 在git中添加這個檔案,并将這些變更送出和推送到git倉庫。
3. 如果讀者自己的計算機中還沒有puppet倉庫副本,從github檢出一份下來(将git url替換為git倉庫位址)。
4. 運作下面的指令,用伺服器位址替換其中的cookbook:
工作原理
通常手動更新配置的方式是:使用ssh登入到伺服器,然後運作pull-updates腳本。這個rakefile檔案就是把這幾步簡單地自動化。首先,需要調整ssh指令行配置。
<code>ssh = 'ssh -a -i ~/git/bitfield/bitfield.pem -l ubuntu'</code>
ssh的參數如下所示。
-a:将ssh密鑰轉發至遠端伺服器,這樣将來就可以使用它來進行驗證。
-i keyfile:設定要使用的ssh私鑰檔案(在本例中,使用的是amazon aws的私鑰檔案,如果已經設定了使用預設密鑰來通路該伺服器,就無須配置此參數)。
-l ubuntu:使用ubuntu使用者登入(這裡是使用标準的ec2伺服器,如果是本地機器與伺服器上使用相同的使用者,就不需要使用此參數)。
然後,定義一個叫apply的rake任務:
desc隻是一個有用的描述資訊,如果運作rake–t指令,将會列出可用的任務。
運作rake apply指令時,會運作task和end之間的代碼,内容如下:
<code>client = env['client']</code>
這裡将會捕獲環境變量client的值,告訴腳本需要連接配接的遠端伺服器的位址。
下一行指令如下所示:
<code>sh "git push"</code>
sh隻是運作本地shell中的指令。在這個例子中,該指令是為了確定本地puppet倉庫中的任何變更都被推送到github中的。如果這些變更沒有被推送到github,将不會在遠端伺服器中應用。
<code>sh "#{ssh} #{client} pull-updates"</code>
這一行代碼使用腳本開始時定義的ssh指令行以及用戶端位址,連接配接到那個用戶端。登入成功後,以遠端使用者身份運作pull-updates指令。
目前,已經配置好pull-updates腳本。通過腳本從github擷取最新配置清單并在puppet中應用,這些就是全部要做的。
更多參考
現在可以做出變更,并且無須登入到這些遠端伺服器就能将puppet變更應用至遠端伺服器上。隻要在機器上安裝了puppet,檢出一份配置清單倉庫,并第一次運作了puppet,以後就可以遠端為這台機器做任何管理操作。
怕麻煩的讀者肯定早就會問:“能不能使用rake完成puppet的初次安裝和倉庫檢出以及所有的配置變更呢?”
當然可以,下一節将講解如何去實作這一目标。