Подтвердить что ты не робот

Укажите разницу в пути Vagrantfile, если не плагин

Есть ли способ объяснения пути Vagrantfile? Моя компания хочет сделать что-то вроде этого: для тестирования на машине слияния введите команду типа vagrant spinup confluence, а затем укажите, что в Vagrantfile в другом каталоге, который содержит среду конфлюэнса, а затем отображает все эти машины.

Однако, похоже, что есть какой-либо способ явно указать, что использовать Vagrantfile, и я немного (очень) новичок в ruby, поэтому мне сложно писать собственный плагин для него. Кто-нибудь есть рекомендации о том, что делать? Или кто-нибудь сделал что-то подобное этому?

4b9b3361

Ответ 1

Нет необходимости иметь отдельный Vagrantfile, вы можете просто определить несколько виртуальных машин в одном файле. Смотрите документацию здесь: http://docs.vagrantup.com/v2/multi-machine/index.html

Если вы просто используете одну виртуальную машину в своей "нормальной" среде и одну виртуальную машину для вашей среды "слияния", то это просто случай, когда нужно просто определить каждую виртуальную машину и vagrant up -в конкретной VM.

Если у вас есть несколько машин, которые составляют каждую из ваших сред, тогда у вас есть два варианта, вы можете использовать регулярные выражения и убедитесь, что вы правильно написали и правильно набрали команды, или вы можете поместить немного логики в свой 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 вызывает ваш обычный vm и vagrant up confluence вызывает ваше слияние vm!

Ответ 2

В дополнение к ответу Эндрю Лоренте вы также можете использовать VAGRANT_VAGRANTFILE среды VAGRANT_VAGRANTFILE чтобы указать имя файла Vagrantfile. Это имеет преимущество перед VAGRANT_CWD в том, что он не меняет текущий рабочий каталог, что может быть полезно при использовании относительных путей.

Например, следующий будет работать vagrant up на Vagrantfile.other:

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

Заметки

Ответ 3

В то время как другие ответчики верны, что этому конкретному случаю не нужны отдельные Vagrantfiles, я думаю, что есть законные способы использования пути Vagrantfile - например, чтение vagrant ssh-config информации в script.

К счастью, вы можете сделать это, установив переменную среды VAGRANT_CWD:

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

Это нигде не документируется, но вы можете увидеть его в источнике.

Ответ 4

У вас может быть столько разных Vagrantfile, сколько вам нужно. Просто создайте новый каталог для своего проекта (который может состоять только из одной или нескольких виртуальных машин), затем cd в этот каталог и запустите vagrant init, чтобы заставить Vagrant создать новый Vagrantfile, который затем может быть настроен под ваши нужды, Чтобы запустить вашу виртуальную машину с помощью этого нового Vagrantfile, просто запустите vagrant up изнутри содержащего его каталога.

Ответ 5

Ввод команд оболочки в скобки создает под-оболочку, поэтому из Git для Windows (или bash в Linux/OS X) вы можете сделать:

(cd test/ruby; vagrant up)