Запуск Vagrant VM при загрузке хоста

Я новичок в бродяге и установил пару бродячих виртуальных машин, которые я использую для целей разработки и тестирования. Моя проблема в том, что я не могу заставить эти ящики автоматически запускаться на моей машине (Ubuntu). Очень раздражает заходить в папку и vagrant up каждую машину каждый раз, когда запускается моя хост-машина.

Я попытался добавить задание cron, похожее на cd path/to/vm/folder && vagrant up, но, похоже, это не работает.

Я также попробовал cronjob для VBoxManage, но vagrant меняет имя виртуальной машины (скорее номер / версию «vmname_version») каждый раз, когда виртуальная машина загружается.


person Shrikant Patnaik    schedule 07.08.2013    source источник


Ответы (4)


Задание Cron не вписывается в этот вариант использования, оно предназначено для запланированных заданий.

Поскольку вы используете Ubuntu в качестве хоста, я бы рекомендовал использовать /etc/rc.local, поместив команды в сценарий rc.local, который выполняется в конце процесса инициализации.

Это будет выглядеть так

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.    
cd /path/to/vagrant_vm1 && vagrant up
cd /path/to/vagrant_vm2 && vagrant up
exit 0

ПРИМЕЧАНИЕ: на хосте будут конфликты портов, если вы запустите более 1 Vagrant-боксов с одним и тем же сетевым режимом — NAT (по умолчанию), которые по умолчанию используют одно и то же правило переадресации портов => гость 22 на хозяин 2222.

Если вам нужно запустить более 1 блока (NAT), рассмотрите возможность использования общедоступной сети (мост) или используйте VBoxManage controlvm для запуска виртуальных машин, см. ответ в Две отдельные машины Vagrant, хост Windows, PuTTY - как?

person Terry Wang    schedule 07.08.2013
comment
Теоретически это то, что я хотел, однако у Vagrant, похоже, есть некоторые проблемы с этим. Он достигает ожидания загрузки виртуальной машины, но не загружает ее успешно, в результате появляется сообщение об ошибке «Не удалось подключиться к виртуальной машине через SSH». Убедитесь, что виртуальная машина успешно загружена, взглянув на графический интерфейс VirtualBox. В любом случае спасибо! - person Shrikant Patnaik; 08.08.2013
comment
@ShrikantPatnaik Смотрите обновленный ответ. Я думаю, что вы столкнулись с проблемой конфликта портов, запустив несколько бродячих ящиков. - person Terry Wang; 09.08.2013
comment
Наа, порты и все остальное настроено правильно, потому что у меня все они работают одновременно без проблем, controlvm работал, но мне пришлось их клонировать, как я ответил в своем собственном ответе на вопрос. - person Shrikant Patnaik; 12.08.2013
comment
Что ж, если вы используете режим NAT по умолчанию и начнете использовать vagrant up, он все равно попытается выполнить переадресацию портов (гость 22 => хост 2222) для всех виртуальных машин, будут конфликты, но я понял, что это может быть НЕ достаточно плохо, чтобы предотвратить виртуальные машины от запуска. - person Terry Wang; 14.08.2013
comment
Но не будет ли это также проблемой, если я вручную вызову vagrant на своих виртуальных машинах один за другим? - person Shrikant Patnaik; 20.08.2013
comment
Это сработало для меня в Ubuntu 16.04 после указания полного пути к команде vagrant и запуска vagrant от пользователя, с которым изначально использовался этот vagrant. Команда выглядит так: cd /path/to/vagrant_vm1 && su -c /usr/bin/vagrant up myuser - person Oleksii Zymovets; 08.02.2017

Вот сценарий запуска, найденный по адресу http://uhowto.urbylog.info/post/54097294891/an-upstart-script-to-launch-vagrant-box-automatically

Сценарий выскочки для автоматического запуска vagrant box Иногда может потребоваться автоматический запуск vagrant виртуальных машин при загрузке хоста. Аналогичным образом можно обеспечить корректное отключение гостя при выключении или перезапуске хоста. Ниже приведен пример скрипта upstart для запуска/остановки vagrant box от имени пользователя randomjoe. Измените имя пользователя и каталог Vagrantfile в приведенном ниже сценарии. Назовите свой файл конфигурации выскочки описательно. Создайте один файл /etc/init/*.conf для каждого Vagrantfile, который вам нужен и работает при загрузке системы. /etc/init/vagrant-precise32.conf:

description "Start vagrant precise32 box on system startup"
author "uHOWTO"
env VAGRANTUSR=randomjoe
env VAGRANTBOXPATH=/home/randomjoe/vagrantboxes/precise32
start on stopped rc
stop on runlevel [016]

pre-start script
    cd ${VAGRANTBOXPATH}
    su -c "/usr/bin/vagrant up" ${VAGRANTUSR}
end script

post-stop script
    cd ${VAGRANTBOXPATH}
    su -c "/usr/bin/vagrant halt" ${VAGRANTUSR}
end script
person Damian Dennis    schedule 06.07.2014

В итоге я клонировал виртуальные машины с помощью VboxManage и просто использовал VBoxManage startvm $vm --type headless в сценарии init.d.

person Shrikant Patnaik    schedule 08.08.2013
comment
Теперь, когда вы довольны VBoxManage или VBoxHeadless, vagrant в любом случае выпадает из поля зрения. - person Terry Wang; 14.08.2013
comment
Довольно много, но я думаю, что это немного взломано. - person Shrikant Patnaik; 20.08.2013

Я закончил с простой работой cron. Пришлось поставить в сон, а то Virtualbox жаловался, что неправильно инициализировался.

@reboot cd /home/myuser/VMs/VagrantBox && sleep 20; /bin/su -c "/usr/bin/vagrant up" myuser
person Laoneo    schedule 25.04.2016