Vagrant的配置文件Vagrantfile详解-2

1、定义vm的configure配置节点(一个节点就是一个虚拟机)

config.vm.define :mysql do |mysql_config|

# ...

end

表示在config配置中,定义一个名为mysql的vm配置,该节点下的配置信息命名为mysql_config; 如果该Vagrantfile配置文件只定义了一个vm,这个配置节点层次可忽略。

还可以在一个Vagrantfile文件里建立多个虚拟机,一般情况下,你可以用多主机功能完成以下任务:

▲ 分布式的服务,例如网站服务器和数据库服务器

▲ 分发系统

▲ 测试接口

▲ 灾难测试 

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

当定义了多主机之后,在使用vagrant命令的时候,就需要加上主机名,例如vagrant ssh web;也有一些命令,如果你不指定特定的主机,那么将会对所有的主机起作用,比如vagrant up;你也可以使用表达式指定特定的主机名,例如vagrant up /follower[0-9]/。

2、通用数据 设置一些基础数据,供配置信息中调用。

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的语言环境,缺省地,会继承host的locale配置

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

    # ...

end

参数2,表示的是当前配置文件使用的vagrant configure版本号为Vagrant 1.1+,如果取值为1,表示为Vagrant 1.0.x Vagrantfiles,旧版本暂不考虑,记住就写2即可。

do … end 为配置的开始结束符,所有配置信息都写在这两段代码之间。 config是为当前配置命名,你可以指定任意名称,如myvmconfig,在后面引用的时候,改为自己的名字即可。

4、vm提供者配置

config.vm.provider :virtualbox do |vb|

    # ...

end

▲vm provider通用配置

虚机容器提供者配置,对于不同的provider,特有的一些配置,此处配置信息是针对virtualbox定义一个提供者,命名为vb,跟前面一样,这个名字随意取,只要节点内部调用一致即可。

配置信息又分为通用配置和个性化配置,通用配置对于不同provider是通用的,常用的通用配置如下:

#指定vm-name,也就是virtualbox管理控制台中的虚机名称。如果不指定该选项会生成一个随机的名字,不容易区分。

vb.name = "centos7"

# vagrant up启动时,是否自动打开virtual box的窗口,缺省为false

vb.gui = true

#指定vm内存,单位为MB

vb.memory = "1024"

#设置CPU个数

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"]

#调整虚拟机的内存

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

#指定虚拟CPU个数

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

#增加光驱:

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

#注:meduim参数不可以为空,如果只挂载驱动器不挂在iso,指定为“emptydrive”。如果要卸载光驱,medium传入none即可。

#从这个指令可以看出,customize方法传入一个json数组,按照顺序传入参数即可。

#json数组传入多个参数

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

5、一组相同配置的vm

前面配置了一组vm的hash map,定义一组vm时,使用如下节点遍历。

#遍历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配置节点,命名为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任务

你可以编写一些命令,让vagrant在启动虚拟机的时候自动执行,这样你就可以省去手动配置环境的时间了。

▲ 脚本何时会被执行

● 第一次执行vagrant up命令

● 执行vagrant provision命令

● 执行vagrant reload --provision或者vagrant up --provision命令

● 你也可以在启动虚拟机的时候添加--no-provision参数以阻止脚本被执行

▲ provision任务是什么?

provision任务是预先设置的一些操作指令,格式:

config.vm.provision 命令字 json格式参数

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

    s.参数名 = 参数值

end

每一个 config.vm.provision 命令字 代码段,我们称之为一个provisioner。

根据任务操作的对象,provisioner可以分为:

● Shell

● File

● Ansible

● CFEngine

● Chef

● Docker

● Puppet

● Salt

根据vagrantfile的层次,分为:

configure级:它定义在 Vagrant.configure("2") 的下一层次,形如: config.vm.provision ...

vm级:它定义在 config.vm.define "web" do |web| 的下一层次,web.vm.provision ...

执行的顺序是先执行configure级任务,再执行vm级任务,即便configure级任务在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

输出结果:

==> default: "1"

==> default: "2"

==> default: "3"

▲ 如何使用

● 单行脚本

helloword只是一个开始,对于inline模式,命令只能在写在一行中。

单行脚本使用的基本格式:

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

shell命令的参数还可以写入do ... end代码块中,如下:

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

  s.inline = "echo hello provision."

end

● 内联脚本

如果要执行脚本较多,可以在Vagrantfile中指定内联脚本,在Vagrant.configure节点外面,写入命名内联脚本:

$script = <<SCRIPT

echo I am provisioning...

echo hello provision.

SCRIPT

然后,inline调用如下:

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

● 外部脚本

也可以把代码写入代码文件,并保存在一个shell里,进行调用:

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

script.sh的内容:

echo hello provision.


修改完Vagrantfile的配置后,记得要重启虚拟机,才能使用虚拟机更新后的配置。

vagrant reload

Vagrant的配置文件Vagrantfile详解-1 点击查看

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 立即上手 上一节中,我们介绍了怎样安装 Vagrant,安装本身并不困难。本章节中我们首先要快速上手,以便获得一个...
    jy_675a阅读 4,952评论 0 3
  • 一、Vagrant 介绍 Vagrant 是一个软件,可以自动化虚拟机的安装和配置流程,用来管理虚拟机,如 Vir...
    zpei0411阅读 3,896评论 0 7
  • 最近服务器老是宕机,学习的时候很多环境有需要集群,忍无可忍的情况下终于决定自己装一波虚拟机宫学习使用。本人系统为D...
    行书以鉴阅读 1,907评论 0 1
  • 1. Vagrant 的介绍 虚拟开发环境 平常我们经常会遇到这样的问题:在开发机上面开发完毕程序,放到正式环境之...
    斐波那契额阅读 1,809评论 1 12
  • Vagrant是什么 Vagrant是一个软件,可以自动化虚拟机的安装和配置流程。目前市面上个人PC的主流操作系统...
    北魏企鹅阅读 29,927评论 3 40