34

有没有办法明确指定 Vagrantfile 的路径?我的公司想做这样的事情:为了在 confluence 机器上进行测试,输入类似的命令vagrant spinup confluence,然后将其指向包含 confluence 环境的不同目录中的 Vagrantfile,然后启动所有这些机器。

但是,看起来没有任何方法可以明确说明要使用什么 Vagrantfile,而且我对 ruby​​ 有点(非常)新,所以我很难为它编写自己的插件。有人对该怎么做有建议吗?或者有没有人做过类似的事情?

4

6 回答 6

72

根据 Andrew Lorente 的回答,您还可以使用VAGRANT_VAGRANTFILE环境变量来指定Vagrantfile. 与不更改当前工作目录相比,这具有优势,VAGRANT_CWD这在依赖相对路径时很有用。

例如,以下将在vagrant up上运行Vagrantfile.other

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

笔记

于 2015-03-25T12:39:01.357 回答
27

不需要单独的 Vagrantfile,你可以在同一个文件中定义多个 VM。请参阅此处的文档:http: //docs.vagrantup.com/v2/multi-machine/index.html

如果您只是在“正常”环境中使用一个虚拟机,而在“融合”环境中使用一个虚拟机,那么只需定义每个虚拟机并vagrant up使用特定的虚拟机即可。

如果您有多个机器组成每个环境,那么您有两个选择,您可以使用正则表达式并确保正确命名和键入命令,或者您可以在 Vagrantfile 中添加一些逻辑以使人们更容易.

例如,在您的 Vagrantfile 中进行一些修改,您可以执行以下操作:

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

    if ARGV[1] == 'confluence'
        ARGV.delete_at(1)
        confluence = true
    else
        confluence = false
    end

    config.vm.provider :virtualbox do |virtualbox, override|

        #virtualbox.gui = true

        virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
        virtualbox.customize ["modifyvm", :id, "--memory", 512]

        override.vm.box = 'Ubuntu 12.10 x64 Server'
        override.vm.box_url = 'http://goo.gl/wxdwM'

    end

    if confluence == false

        config.vm.define :normal1 do |normal1|

            normal1.vm.hostname = 'normal1'
            normal1.vm.network :private_network, ip: "192.168.1.1"

        end

        config.vm.define :normal2 do |normal2|

            normal2.vm.hostname = 'normal2'
            normal2.vm.network :private_network, ip: "192.168.1.2"

        end

    end

    if confluence == true

        config.vm.define :confluence1 do |confluence1|

            confluence1.vm.hostname = 'confluence1'
            confluence1.vm.network :private_network, ip: "192.168.1.3"

        end

        config.vm.define :confluence2 do |confluence2|

            confluence2.vm.hostname = 'confluence2'
            confluence2.vm.network :private_network, ip: "192.168.1.4"

        end

    end

end

现在vagrant up调出你的普通虚拟机并vagrant up confluence调出你的汇合虚拟机!

于 2013-06-26T05:49:59.887 回答
21

虽然其他回答者认为这种特殊情况不需要单独的 Vagrantfile 是正确的,但我认为指定 Vagrantfile 路径有合法用途——vagrant ssh-config例如,在脚本中读取信息。

令人高兴的是,您可以通过设置VAGRANT_CWD环境变量来做到这一点:

VAGRANT_CWD=~/some/path/ vagrant ssh-config

这似乎没有在任何地方记录,但您可以在源代码中看到它。

于 2014-03-11T21:14:29.993 回答
2

您可以根据需要/需要拥有尽可能多的不同Vagrantfiles。只需为您的项目创建一个新目录(然后可以只包含一个或多个 VM),然后cd进入该目录并运行vagrant init以使 Vagrant 创建一个新目录Vagrantfile,然后可以根据您的需要对其进行自定义。要使用该新虚拟机启动您的虚拟机,Vagrantfile只需vagrant up从包含它的目录中运行即可。

于 2013-07-15T12:33:22.037 回答
2

将 shell 命令放在括号中会创建一个子 shell,因此从 Git for Windows(或 bash 在 Linux/OS X)中,您可以执行以下操作:

(cd test/ruby; vagrant up)

于 2017-03-14T20:52:34.310 回答
0

使用 VAGRANT_CWD 变量

VAGRANT_CWD 是 vagrant 查找 Vagrantfile 的目录

引用官方文档:

可以设置 VAGRANT_CWD 来改变 Vagrant 的工作目录。默认情况下,Vagrant 使用您所在的当前目录。工作目录很重要,因为它是 Vagrant 查找 Vagrantfile 的地方。

于 2022-01-06T12:10:24.287 回答