web-dev-qa-db-ja.com

プロビジョナーからVagrantゲストを再起動するにはどうすればよいですか?

ここでは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

これは主に仕事をします-VMパッケージの更新としての出力を見ることができます-しかし、再起動してvagrant sshその中に、私のファイルは/vagrant。共有フォルダーが何らかの理由で再マウントされていないことを想定しています。

私の最初の質問は次のとおりだと思います:シェルプロビジョニングの一部としてこのようにシステムを更新することは理にかなっていますか?もしそうなら、どうすればゲストを再起動してもまだ/vagrant共有をマウントしましたか?

5
DarkMorford

これがまさに vagrant-reload プラグインの目的です。インストールしたら、再読み込みするプロビジョニングのポイントにconfig.vm.provision :reloadを追加するだけです。

4
l0b0

プロビジョニングが完了した後でのみ(プロビジョニングのステップ間ではなく)再起動する場合は、トリガーを使用してこれを実現できます。

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

これには、プラグインをインストールする必要がないという利点があります。

トリガーに関する詳細情報 ここ

6
AlexT