Vagrant的配置文件Vagrantfile詳解-2

1胳施、定義vm的configure配置節(jié)點(diǎn)(一個(gè)節(jié)點(diǎn)就是一個(gè)虛擬機(jī))

config.vm.define :mysql do |mysql_config|

# ...

end

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

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

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

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

▲ 測(cè)試接口

▲ 災(zāi)難測(cè)試?

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)定義了多主機(jī)之后访圃,在使用vagrant命令的時(shí)候厨幻,就需要加上主機(jī)名,例如vagrant ssh web;也有一些命令况脆,如果你不指定特定的主機(jī)饭宾,那么將會(huì)對(duì)所有的主機(jī)起作用,比如vagrant up漠另;你也可以使用表達(dá)式指定特定的主機(jī)名捏雌,例如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'

}

這里是定義一個(gè)hashmap满败,以key-value方式來(lái)存儲(chǔ)vm主機(jī)名和ip地址肤频。

3、配置信息

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

#指定vm的語(yǔ)言環(huán)境算墨,缺省地宵荒,會(huì)繼承host的locale配置

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

? ? # ...

end

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

do … end 為配置的開(kāi)始結(jié)束符暑刃,所有配置信息都寫(xiě)在這兩段代碼之間。 config是為當(dāng)前配置命名膜眠,你可以指定任意名稱(chēng)岩臣,如myvmconfig,在后面引用的時(shí)候宵膨,改為自己的名字即可架谎。

4、vm提供者配置

config.vm.provider :virtualbox do |vb|

? ? # ...

end

▲vm provider通用配置

虛機(jī)容器提供者配置辟躏,對(duì)于不同的provider谷扣,特有的一些配置,此處配置信息是針對(duì)virtualbox定義一個(gè)提供者鸿脓,命名為vb抑钟,跟前面一樣,這個(gè)名字隨意取野哭,只要節(jié)點(diǎn)內(nèi)部調(diào)用一致即可在塔。

配置信息又分為通用配置和個(gè)性化配置,通用配置對(duì)于不同provider是通用的拨黔,常用的通用配置如下:

#指定vm-name蛔溃,也就是virtualbox管理控制臺(tái)中的虛機(jī)名稱(chēng)。如果不指定該選項(xiàng)會(huì)生成一個(gè)隨機(jī)的名字,不容易區(qū)分贺待。

vb.name = "centos7"

# vagrant up啟動(dòng)時(shí)徽曲,是否自動(dòng)打開(kāi)virtual box的窗口,缺省為false

vb.gui = true

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

vb.memory = "1024"

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

vb.cpus = 2

▲vm provider個(gè)性化配置(virtualbox)

上面的provider配置是通用的配置秃臣,針對(duì)不同的虛擬機(jī),還有一些的個(gè)性的配置哪工,通過(guò)vb.customize配置來(lái)定制奥此。

對(duì)virtual box的個(gè)性化配置,可以參考:VBoxManage modifyvm 命令的使用方法雁比。詳細(xì)的功能接口和使用說(shuō)明稚虎,可以參考virtualbox官方文檔

#修改vb.name的值

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

#如修改顯存偎捎,缺省為8M蠢终,如果啟動(dòng)桌面,至少需要10M茴她,如下修改為16M:

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

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

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

#指定虛擬CPU個(gè)數(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ū)動(dòng)器不掛在iso,指定為“emptydrive”丈牢。如果要卸載光驅(qū)兜喻,medium傳入none即可。

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

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

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

5泛粹、一組相同配置的vm

前面配置了一組vm的hash map,定義一組vm時(shí)肮疗,使用如下節(jié)點(diǎn)遍歷晶姊。

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

app_servers.each do |app_server_name, app_server_ip|

? ? #針對(duì)每一個(gè)app_server_name伪货,來(lái)配置config.vm.define配置節(jié)點(diǎn)们衙,命名為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ù)

你可以編寫(xiě)一些命令,讓vagrant在啟動(dòng)虛擬機(jī)的時(shí)候自動(dòng)執(zhí)行愚臀,這樣你就可以省去手動(dòng)配置環(huán)境的時(shí)間了忆蚀。

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

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

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

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

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

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

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

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

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

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

end

每一個(gè) config.vm.provision 命令字 代碼段馋袜,我們稱(chēng)之為一個(gè)provisioner男旗。

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

● Shell

●?File

●?Ansible

●?CFEngine

●?Chef

●?Docker

●?Puppet

●?Salt

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

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

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

執(zhí)行的順序是先執(zhí)行configure級(jí)任務(wù)泽台,再執(zhí)行vm級(jí)任務(wù)什荣,即便configure級(jí)任務(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只是一個(gè)開(kāi)始师痕,對(duì)于inline模式溃睹,命令只能在寫(xiě)在一行中。

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

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

shell命令的參數(shù)還可以寫(xiě)入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é)點(diǎn)外面笔横,寫(xiě)入命名內(nèi)聯(lián)腳本:

$script = <<SCRIPT

echo I am provisioning...

echo hello provision.

SCRIPT

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

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

● 外部腳本

也可以把代碼寫(xiě)入代碼文件,并保存在一個(gè)shell里吹缔,進(jìn)行調(diào)用:

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

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

echo hello provision.


修改完Vagrantfile的配置后商佑,記得要重啟虛擬機(jī),才能使用虛擬機(jī)更新后的配置厢塘。

vagrant reload

Vagrant的配置文件Vagrantfile詳解-1 點(diǎn)擊查看

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茶没,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晚碾,更是在濱河造成了極大的恐慌抓半,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件格嘁,死亡現(xiàn)場(chǎng)離奇詭異笛求,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)糕簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)探入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人懂诗,你說(shuō)我怎么就攤上這事蜂嗽。” “怎么了殃恒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵徒爹,是天一觀的道長(zhǎng)荚醒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)隆嗅,這世上最難降的妖魔是什么界阁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮胖喳,結(jié)果婚禮上泡躯,老公的妹妹穿的比我還像新娘。我一直安慰自己丽焊,他們只是感情好较剃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著技健,像睡著了一般写穴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雌贱,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天啊送,我揣著相機(jī)與錄音,去河邊找鬼欣孤。 笑死馋没,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的降传。 我是一名探鬼主播篷朵,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婆排!你這毒婦竟也來(lái)了声旺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤段只,失蹤者是張志新(化名)和其女友劉穎艾少,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翼悴,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年幔妨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹦赎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡误堡,死狀恐怖古话,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锁施,我是刑警寧澤陪踩,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布杖们,位于F島的核電站,受9級(jí)特大地震影響肩狂,放射性物質(zhì)發(fā)生泄漏摘完。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一傻谁、第九天 我趴在偏房一處隱蔽的房頂上張望孝治。 院中可真熱鬧,春花似錦审磁、人聲如沸谈飒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杭措。三九已至,卻和暖如春钾恢,著一層夾襖步出監(jiān)牢的瞬間手素,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工赘那, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刑桑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓募舟,卻偏偏與公主長(zhǎng)得像祠斧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拱礁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 立即上手 上一節(jié)中琢锋,我們介紹了怎樣安裝 Vagrant,安裝本身并不困難呢灶。本章節(jié)中我們首先要快速上手吴超,以便獲得一個(gè)...
    jy_675a閱讀 4,957評(píng)論 0 3
  • 一、Vagrant 介紹 Vagrant 是一個(gè)軟件鸯乃,可以自動(dòng)化虛擬機(jī)的安裝和配置流程鲸阻,用來(lái)管理虛擬機(jī),如 Vir...
    zpei0411閱讀 3,908評(píng)論 0 7
  • 最近服務(wù)器老是宕機(jī)缨睡,學(xué)習(xí)的時(shí)候很多環(huán)境有需要集群鸟悴,忍無(wú)可忍的情況下終于決定自己裝一波虛擬機(jī)宮學(xué)習(xí)使用。本人系統(tǒng)為D...
    行書(shū)以鑒閱讀 1,919評(píng)論 0 1
  • 1. Vagrant 的介紹 虛擬開(kāi)發(fā)環(huán)境 平常我們經(jīng)常會(huì)遇到這樣的問(wèn)題:在開(kāi)發(fā)機(jī)上面開(kāi)發(fā)完畢程序奖年,放到正式環(huán)境之...
    斐波那契額閱讀 1,819評(píng)論 1 12
  • Vagrant是什么 Vagrant是一個(gè)軟件细诸,可以自動(dòng)化虛擬機(jī)的安裝和配置流程。目前市面上個(gè)人PC的主流操作系統(tǒng)...
    北魏企鵝閱讀 29,952評(píng)論 3 40