it-swarm.com.ru

Укажите расшифровку пути Vagrantfile, если не плагин

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

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

26
addicted2unix

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

Если вы просто используете один VM в своей «нормальной» среде и один VM для своей среды «слияния», то это просто случай определения каждого VM и 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 вызывает ваши сточные виртуальные машины!

22
Matt Cooper

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

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

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

Заметки

  • Раньше это казалось недокументированной функцией, которая была видна только в исходном коде
  • В более поздних выпусках это теперь задокументировано в документах Hashicorp здесь: Переменные среды .
51
Mark Hobson

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

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

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

Это нигде не задокументировано, но вы можете увидеть это в источнике

19
Erin Call

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

2
avhilchen

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

(cd test/Ruby; vagrant up)

1
danizen