プロビジョナー 仮想マシンを起動するときにワークフローを自動化できるツールです。 Vagrant ファイル、シェル、ansible、puppet、saltstackなどのプロビジョナーをサポートします。これらのツールのいずれかを使用して、仮想マシンの展開ワークフローを自動化できます。
[あなたも好きかもしれません:VagrantとVirtualBox入門]
この記事では、新しい仮想マシンをデプロイするときに定期的に使用できる2つのプロビジョナーのファイルとシェルについて説明します。
Vagrantでシェルプロビジョナーを使用する方法
シェル プロビジョナーを使用すると、シェルを実行できます Vagrantマシンのコマンド。 シェルを使用するには プロビジョナーvm.provisionへの引数としてシェルを渡す必要があります メソッド。
config.vm.provision "shell"
シェルを実行する方法は2つあります vagrantのコマンド。
- インラインスクリプト
- 外部スクリプト
Vagrantでインラインスクリプトを操作する方法
インライン スクリプト、シェルを渡します Vagrantfile内のコマンド 。インラインスクリプトを使用する方法はたくさんあります。次の例は、インラインスクリプトの使用方法を示しています。シェルプロビジョナーを定義した後、インラインとコマンドをキーと値のペアとして渡す必要があります。先に進み、Vagrantfileを変更して、上記の行を追加します。
config.vm.provision "shell", inline: "echo Welcome to linuxshelltips"
プロビジョナーを実行する前 注意すべき重要な点があります。プロビジョナーは通常、「 vagrant up」を実行した場合にのみ実行されます 」が初めて。
以下の画像を見てください。Vagrantfileにシェルプロビジョナーを追加して仮想マシンを起動すると、--provision
を使用するように指示されます。 このVMを起動するのはこれが初めてではないため、フラグを立てます。

$ vagrant up --provision # Starting the VM $ vagrant reload --provision # Restarting the VM
ブロックを使用することもできます より読みやすい構文。これは、前の1行の定義と同じです。
config.vm.provision "shell" do |cmd| cmd.inline = "echo Welcome to Linuxshelltips" end
bashを使用したことがある場合は、ヒアドキュメントを使用した可能性があります。 。そのルビーに似ています また、vagrantファイルで使用して一連のbashコマンドをリダイレクトできるヒアドキュメントもサポートしています。ここでepel-repositoryをインストールしようとしています wgetをインストールします コマンド。
$COMMANDS = <<-'BLOCK' yum install epel-release -y yum install wget -y BLOCK config.vm.provision "shell", inline: $COMMANDS
上記のコードが何をするのか説明させてください。 $COMMANDS
という変数を作成しています ヒアドキュメントを保存します 変数内。 $COMMANDS
を渡します 一連のyumを実行するインラインの値としての変数 コードブロック内で渡したコマンド。


上のスクリーンショットから、両方の epel-repoを見ることができます。 およびwget 正常にインストールされます。また、vagrantマシンですでに利用可能なスクリプトを呼び出すこともできます。 welcome.shという名前のテストスクリプトがあります vagrant hostで実行するには、構成ファイルに次の構文を追加します。
config.vm.provision "shell", inline: "/usr/bin/bash /home/vagrant/welcome.sh"

仮想マシンを起動/再起動するたびにプロビジョナーを実行する場合は、ブロックスタイル定義を使用して、「常に」を渡すことができます。 」から「実行 」。 Runは、「常に」という2つの値を受け入れます 」と「決して 」。 「決して」に設定されている場合 」プロビジョナーは実行されません。
Vagrant.configure("2") do |config| config.vm.provision "shell", inline: "/usr/bin/bash ~/welcome.sh", run: "always" end
--no-provision
を渡すこともできます start / restartコマンドでフラグを立てて、実行パラメーターの動作を抑制します。
$ vagrant up --no-provision $ vagrant reload --no-provision
Vagrantで外部スクリプトを操作する方法
インラインスクリプトの代替オプションは、外部スクリプトです。これは非常に簡単です。外部でシェルスクリプトを作成し、以下のようにシェルプロビジョナーでスクリプトのパスを指定します。
config.vm.provision "shell", path: "/home/karthick/welcome.sh"
Vagrantはスクリプトを/tmp /にコピーします 仮想マシン内の場所であり、スクリプトをトリガーします。

Vagrantでファイルプロビジョナーを使用する方法
ファイルプロビジョナーを使用すると、ファイルをホストマシンからvagrantマシンにディレクトリとしてアップロードできます。ファイルプロビジョナは、2つのパラメータソースパスと宛先パスを受け入れます。
ファイルをコピーするには、ソースパスと宛先パスを使用してVagrantfileに次のプロパティを追加します。場所に応じて送信元パスと宛先パスを置き換えます。
config.vm.provision "file", source: "/home/karthick/vagrant/centos7/script.sh" , destination: "~/script.sh"
仮想マシンを起動/再起動すると、ログファイルに表示されるプロビジョナーが呼び出され、ファイルが仮想マシンにコピーされます。

ディレクトリをコピーするには、ソースと宛先のディレクトリパスを渡す必要があります。ディレクトリにソースと同じ名前が必要な場合は、同じ宛先名を指定する必要があります。
config.vm.provision "file", source: "/home/karthick/vagrant/centos7" , destination: "~/centos7"
次の記事では、Playbookを使用してワークフローを自動化するためのAnsibleプロビジョナーの方法を見ていきます。