2013-10-23 53 views
4

我正在嘗試使用Bento,Veewee和Vagrant來自動配置虛擬機。這種方法對於簡化開發,開發測試和質量保證過程有很大的前景。 (對於那些沒有遇到這些問題的人--Vagrant可以很容易地在Virtual Box,VMWare,EC2等中快速設置/拆除虛擬機; Veewee簡化了爲Veewee構建基礎盒的過程; Bento簡化了定義基本框然後自動操作Veewee的過程)。如何組織Bento - Veewee - Vagrant項目

問題是,Bento,Veewee和Vagrant的相互關係令人困惑。許多定義文件和一些操作在各個圖層之間重複,並且不清楚哪個圖層應該獲取針對我的項目特定的更新。 Ruby環境也使這一點變得複雜 - 似乎Bento命令都需要從Bento目錄運行,所以其他文件最終會在不合邏輯的地方出現。

任何人都可以建議一個文件格式&使用這種工具組合的工作流程?

回答

4

我回應我自己的問題,以捕捉我發現的東西。


有一種方法,使盒飯,Veewee,流浪和Ruby在半明智的方式一起工作,但它是複雜的。最好使用最新版本的Bento來代替Veewee和Packer工具。

帕克確實或多或少什麼Veewee做,但做了一些很大的改進,包括:

  1. 每個封隔器盒的定義是,指的腳本文件的簡單列表一個JSON文件 - 不再三層文件與符號鏈接;更容易理解和更好的源代碼控制。

  2. Packer二進制文件是OS本機可執行文件(不再在Ruby中)。你可以將它們放在你的路徑上的某個地方(比如Linux上的/ usr/local/bin)來部署它們。 Packer避免了Ruby的瘋狂。


下面是一個簡單的工作流程:

  1. 安裝VirtualBox。安裝Bento。 Bento也將安裝Vagrant作爲Ruby寶石;但我們不會使用這種流浪者的例子。使用適用於您的操作系統的本機安裝程序分別安裝Vagrant。

  2. 爲您的項目選擇一個名稱,用於目錄&文件名。 (在這個例子中,我使用「CUSTOM」)。在bento/packer/scripts目錄中創建一個空的子目錄。我做了mkdir CUSTOM

  3. 查看.../bento/packer中的.JSON文件。你可以在原地修改一個,或者可以更改一個&。我做了cp centos-6.4-x86_64.json centos-6.4-x86_64-CUSTOM.json

  4. 編輯該文件的「構建器」部分以更改VM的磁盤大小,RAM大小,ssh端口等。

  5. 編輯「供應方」部分,「輸出」行提供要創建的文件盒一個有意義的名字。 (在這個例子中,我使用「BOXFILE」)。請注意,您可以嵌入{{timestamp}}以將Unix時間戳添加到文件名 - 有助於使文件名具有唯一性。

  6. 編輯該文件的「供應方」部分是指任何腳本(按順序)要在帕克運行構建序列。這通常是Packer已經提供的腳本的組合,以及您爲自定義目的而構建的任何其他腳本的組合。

我使用的方法是這樣的:

"provisioners": [ 
{ 
    "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'", 
    "scripts": [ 
    "scripts/common/sshd.sh", 
    "scripts/common/vagrant.sh", 
    "scripts/common/vmtools.sh", 
    "scripts/CUSTOM/reso_1024x768.sh", 
    "scripts/CUSTOM/prompt_cwd.sh", 
    "scripts/CUSTOM/standard_dirs.sh", 
    "scripts/CUSTOM/standard_utils.sh", 
    "scripts/CUSTOM/python27.sh", 
    "scripts/CUSTOM/supervisord.sh", 
    "scripts/CUSTOM/ruby.sh", 
    "scripts/centos/cleanup.sh", 
    "scripts/common/minimize.sh" 
    ], 
    "type": "shell" 
} 

注意我的自定義腳本都出現在清理之前,儘量減少步驟 - 這是很重要的。

  1. 從bento/packer目錄運行packer build -only=virtualbox centos-6.4-x86_64-CUSTOM.json。如果之前尚未下載VirtualBox客戶端加載項和基礎操作系統的磁盤映像(ISO),則會立即生效;這些文件很大,所以這一步可能需要一段時間。

  2. 包裝機使用VirtualBox的創建一個臨時VM,並運行在你的全部指定的腳本。完成此過程後,會使用上面指定的BOXFILE名稱在bento/builds/visualbox目錄中捕獲VM的副本,並且Packer會丟棄VirtualBox VM。

  3. 註冊剛剛用Vagrant構建的框。使用單獨安裝的Vagrant版本(例如,您可能需要指定/ usr/local/bin/vagrant或任何適合您的操作系統的版本),請執行vagrant box add CUSTOM path/to/BOXFILE。這會在〜/ .vagrant.d/boxes/CUSTOM/VirtualBox中創建一個新的子目錄,其中Vagrant需要通過這個盒子定義創建虛擬機。

  4. 創建一個Vagrant項目目錄並將其放入光盤中。我做了mkdir ~/test; cd ~/testvagrant init CUSTOM

  5. 啓動VM:vagrant up

  6. 連接到VM:

  7. 使用此框初始化流浪項目vagrant ssh

在這一點上,你使用通常,流浪者和Bento/Packer不再參與其中 - 他們的合併工作就是創建基地箱,一旦註冊了Vagrant,Vagrant stand一個人。


有很多其他有趣的事情來看待重:流浪,喜歡流浪的特殊-AWS插件,以及如何與廚師,木偶或Ansible使用它......但我就講到這裏,因爲我原來的問題被回答。

+0

你碰巧有任何代碼在GitHub上看看? –