Vagrant的配置文件Vagrantfile詳解-2

1、定義vm的configure配置節(jié)點(一個節(jié)點就是一個虛擬機)

config.vm.define :mysql do |mysql_config|

# ...

end

表示在config配置中,定義一個名為mysql的vm配置,該節(jié)點下的配置信息命名為mysql_config; 如果該Vagrantfile配置文件只定義了一個vm,這個配置節(jié)點層次可忽略。

還可以在一個Vagrantfile文件里建立多個虛擬機,一般情況下,你可以用多主機功能完成以下任務(wù):

▲ 分布式的服務(wù),例如網(wǎng)站服務(wù)器和數(shù)據(jù)庫服務(wù)器

▲ 分發(fā)系統(tǒng)

▲ 測試接口

▲ 災(zāi)難測試?

Vagrant.configure("2") do |config|

? config.vm.define "web" do |web|

? ? web.vm.box = "apache"

? end

? config.vm.define "db" do |db|

? ? db.vm.box = "mysql"

? end

end

當(dāng)定義了多主機之后,在使用vagrant命令的時候,就需要加上主機名,例如vagrant ssh web;也有一些命令,如果你不指定特定的主機,那么將會對所有的主機起作用,比如vagrant up;你也可以使用表達式指定特定的主機名,例如vagrant up /follower[0-9]/。

2、通用數(shù)據(jù) 設(shè)置一些基礎(chǔ)數(shù)據(jù),供配置信息中調(diào)用。

app_servers = {

? ? :service1 => '192.168.10.10',

? ? :service2 => '192.168.10.11'

}

這里是定義一個hashmap,以key-value方式來存儲vm主機名和ip地址。

3、配置信息

ENV["LC_ALL"] = "en_US.UTF-8"

#指定vm的語言環(huán)境,缺省地,會繼承host的locale配置

Vagrant.configure("2") do |config|

? ? # ...

end

參數(shù)2,表示的是當(dāng)前配置文件使用的vagrant configure版本號為Vagrant 1.1+,如果取值為1,表示為Vagrant 1.0.x Vagrantfiles,舊版本暫不考慮,記住就寫2即可。

do … end 為配置的開始結(jié)束符,所有配置信息都寫在這兩段代碼之間。 config是為當(dāng)前配置命名,你可以指定任意名稱,如myvmconfig,在后面引用的時候,改為自己的名字即可。

4、vm提供者配置

config.vm.provider :virtualbox do |vb|

? ? # ...

end

▲vm provider通用配置

虛機容器提供者配置,對于不同的provider,特有的一些配置,此處配置信息是針對virtualbox定義一個提供者,命名為vb,跟前面一樣,這個名字隨意取,只要節(jié)點內(nèi)部調(diào)用一致即可。

配置信息又分為通用配置和個性化配置,通用配置對于不同provider是通用的,常用的通用配置如下:

#指定vm-name,也就是virtualbox管理控制臺中的虛機名稱。如果不指定該選項會生成一個隨機的名字,不容易區(qū)分。

vb.name = "centos7"

# vagrant up啟動時,是否自動打開virtual box的窗口,缺省為false

vb.gui = true

#指定vm內(nèi)存,單位為MB

vb.memory = "1024"

#設(shè)置CPU個數(shù)

vb.cpus = 2

▲vm provider個性化配置(virtualbox)

上面的provider配置是通用的配置,針對不同的虛擬機,還有一些的個性的配置,通過vb.customize配置來定制。

對virtual box的個性化配置,可以參考:VBoxManage modifyvm 命令的使用方法。詳細的功能接口和使用說明,可以參考virtualbox官方文檔

#修改vb.name的值

v.customize ["modifyvm", :id, "--name", "mfsmaster2"]

#如修改顯存,缺省為8M,如果啟動桌面,至少需要10M,如下修改為16M:

vb.customize ["modifyvm", :id, "--vram", "16"]

#調(diào)整虛擬機的內(nèi)存

vb.customize ["modifyvm", :id, "--memory", "1024"]

#指定虛擬CPU個數(shù)

vb.customize ["modifyvm", :id, "--cpus", "2"]

#增加光驅(qū):

vb.customize ["storageattach",:id,"--storagectl", "IDE Controller","--port","0","--device","0","--type","dvddrive","--medium","/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"]

#注:meduim參數(shù)不可以為空,如果只掛載驅(qū)動器不掛在iso,指定為“emptydrive”。如果要卸載光驅(qū),medium傳入none即可。

#從這個指令可以看出,customize方法傳入一個json數(shù)組,按照順序傳入?yún)?shù)即可。

#json數(shù)組傳入多個參數(shù)

v.customize ["modifyvm", :id, "--name", “mfsserver3", "--memory", “2048"]

5、一組相同配置的vm

前面配置了一組vm的hash map,定義一組vm時,使用如下節(jié)點遍歷。

#遍歷app_servers map,將key和value分別賦值給app_server_name和app_server_ip

app_servers.each do |app_server_name, app_server_ip|

? ? #針對每一個app_server_name,來配置config.vm.define配置節(jié)點,命名為app_config

? ? config.vm.define app_server_name do |app_config|

? ? ? ? ? # 此處配置,參考config.vm.define

? ? end

end

如果不想定義app_servers,下面也是一種方案:

(1..3).each do |i|

? ? ? ? config.vm.define "app-#{i}" do |node|

? ? ? ? app_config.vm.hostname = "app-#{i}.vagrant.internal"

? ? ? ? app_config.vm.provider "virtualbox" do |vb|

? ? ? ? ? ? vb.name = app-#{i}

? ? ? ? end

? end

end

6、provision任務(wù)

你可以編寫一些命令,讓vagrant在啟動虛擬機的時候自動執(zhí)行,這樣你就可以省去手動配置環(huán)境的時間了。

▲ 腳本何時會被執(zhí)行

●?第一次執(zhí)行vagrant up命令

●?執(zhí)行vagrant provision命令

●?執(zhí)行vagrant reload --provision或者vagrant up --provision命令

●?你也可以在啟動虛擬機的時候添加--no-provision參數(shù)以阻止腳本被執(zhí)行

▲?provision任務(wù)是什么?

provision任務(wù)是預(yù)先設(shè)置的一些操作指令,格式:

config.vm.provision 命令字 json格式參數(shù)

config.vm.provion 命令字 do |s|

? ? s.參數(shù)名 = 參數(shù)值

end

每一個 config.vm.provision 命令字 代碼段,我們稱之為一個provisioner。

根據(jù)任務(wù)操作的對象,provisioner可以分為:

● Shell

●?File

●?Ansible

●?CFEngine

●?Chef

●?Docker

●?Puppet

●?Salt

根據(jù)vagrantfile的層次,分為:

configure級:它定義在 Vagrant.configure("2") 的下一層次,形如: config.vm.provision ...

vm級:它定義在 config.vm.define "web" do |web| 的下一層次,web.vm.provision ...

執(zhí)行的順序是先執(zhí)行configure級任務(wù),再執(zhí)行vm級任務(wù),即便configure級任務(wù)在vm定義的下面才定義。例如:

Vagrant.configure("2") do |config|

? config.vm.provision "shell", inline: "echo 1"

? config.vm.define "web" do |web|

? ? web.vm.provision "shell", inline: "echo 2"

? end

? config.vm.provision "shell", inline: "echo 3"

end

輸出結(jié)果:

==> default: "1"

==> default: "2"

==> default: "3"

▲?如何使用

● 單行腳本

helloword只是一個開始,對于inline模式,命令只能在寫在一行中。

單行腳本使用的基本格式:

config.vm.provision "shell", inline: "echo fendo"

shell命令的參數(shù)還可以寫入do ... end代碼塊中,如下:

config.vm.provision "shell" do |s|

? s.inline = "echo hello provision."

end

●?內(nèi)聯(lián)腳本

如果要執(zhí)行腳本較多,可以在Vagrantfile中指定內(nèi)聯(lián)腳本,在Vagrant.configure節(jié)點外面,寫入命名內(nèi)聯(lián)腳本:

$script = <<SCRIPT

echo I am provisioning...

echo hello provision.

SCRIPT

然后,inline調(diào)用如下:

config.vm.provision "shell", inline: $script

● 外部腳本

也可以把代碼寫入代碼文件,并保存在一個shell里,進行調(diào)用:

config.vm.provision "shell", path: "script.sh"

script.sh的內(nèi)容:

echo hello provision.


修改完Vagrantfile的配置后,記得要重啟虛擬機,才能使用虛擬機更新后的配置。

vagrant reload

Vagrant的配置文件Vagrantfile詳解-1 點擊查看

參考文章:https://blog.csdn.net/u011781521/article/details/80291765

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 立即上手 上一節(jié)中,我們介紹了怎樣安裝 Vagrant,安裝本身并不困難。本章節(jié)中我們首先要快速上手,以便獲得一個...
    jy_675a閱讀 5,045評論 0 3
  • 一、Vagrant 介紹 Vagrant 是一個軟件,可以自動化虛擬機的安裝和配置流程,用來管理虛擬機,如 Vir...
    zpei0411閱讀 4,222評論 0 7
  • 最近服務(wù)器老是宕機,學(xué)習(xí)的時候很多環(huán)境有需要集群,忍無可忍的情況下終于決定自己裝一波虛擬機宮學(xué)習(xí)使用。本人系統(tǒng)為D...
    行書以鑒閱讀 2,088評論 0 1
  • 1. Vagrant 的介紹 虛擬開發(fā)環(huán)境 平常我們經(jīng)常會遇到這樣的問題:在開發(fā)機上面開發(fā)完畢程序,放到正式環(huán)境之...
    斐波那契額閱讀 1,977評論 1 12
  • Vagrant是什么 Vagrant是一個軟件,可以自動化虛擬機的安裝和配置流程。目前市面上個人PC的主流操作系統(tǒng)...
    北魏企鵝閱讀 30,484評論 3 40

友情鏈接更多精彩內(nèi)容