1

Относительный новичок в Vagrant, пытающийся избежать процесса установки вручную каждый раз, когда я хочу раскрутить новую Ubuntu VM.

Мой обычный процесс после завершения установки состоит в том, чтобы обновить все программное обеспечение машины с помощью apt-get update и apt-get dist-upgrade -y , а затем перезагрузить его, чтобы все обновления вступили в силу. Для этого я сделал Vagrantfile примерно так:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get dist-upgrade -y
    shutdown -r now
  SHELL
end

Это в основном делает работу - я вижу выходные данные виртуальной машины при обновлении пакетов, но после того, как она перезагружается и я в нее vagrant ssh , ни один из моих файлов не появляется в /vagrant . Я предполагаю, что общая папка не перемонтируется по какой-то причине.

Наверное, мой первый вопрос: имеет ли смысл обновлять систему таким образом, как часть поставщика оболочки? И если да, то как я могу перезагрузить гостя и при этом смонтировать общий ресурс /vagrant ?

2 ответа2

1

Это именно то, для чего нужен плагин vagrant-reload . После установки просто добавьте config.vm.provision :reload в точке, в которой вы хотите перезагрузить.

0

Если вы хотите перезагрузить компьютер только после завершения инициализации (не между этапами инициализации), вы можете использовать триггер для достижения этой цели:

config.trigger.after [:provision] do |t|
  t.name = "Reboot after provisioning"
  t.run = { :inline => "vagrant reload" }
end

Это имеет то преимущество, что не требует установки плагина.

Больше информации о триггерах здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .