天天看點

《Puppet實戰手冊》——1.8 利用Rake部署變更

本節書摘來自異步社群《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的初次安裝和倉庫檢出以及所有的配置變更呢?”

當然可以,下一節将講解如何去實作這一目标。

繼續閱讀