Vagrantの仮想マシンをAnsibleでプロビジョニングする

プロビジョニング(Provisioning)とは、英語で「準備すること」「用意すること」を意味します。Vagrantでプロビジョニングと言ったら、「仮想マシンを使用できるように準備する」と言う意味で使われます。

仮想マシンがどのようなときに「使用できる」状態であるかは、それぞれの要件によって異なります。例えば、仮想マシンをWebサーバーとして使用したい場合なら、Apacheをインストールしてその設定ファイルを修正したり、ファイヤーウォールを設定したりする必要があります。このようなWebサーバーを使用できるようにするまでの一連の準備作業がプロビジョニングと呼ばれます。

Vagrantでプロビジョニングは、仮想マシンを起動した後に、SSHでログインしてパッケージのインストールや設定の変更などを手動で行うこともできますが、ツールを使ってこれらのプロビジョニング作業を自動化することもできます。

Vagrantでプロビジョニングを自動化するツールとしては、シェルスクリプトや構成管理ツールであるAnsible、Chef、Puppetなどを利用できます。プロビジョニングを行うこれらのツールはプロビジョナーと呼ばれます。

この記事ではこのうちのAnsibleを使ったプロビジョニングの方法を解説します。

目次

プロビジョニングの実行タイミング

プロビジョニングは次のタイミングで実行されます。これはAnsibleのプロビジョニングだけでなく、すべてのプロビジョニングを行うときに共通です。

  • 最初にvagrant upを実行して、仮想マシンが作成されたとき。
  • 既に仮想マシンが作成されている場合は「vagrant up --provision」とすればプロビジョニンが実行される。
  • 仮想マシンが起動されている場合は、「vagrant provision」を実行したとき
  • 「vagrant reload --provision」を実行したとき

プロビジョニングが実行されるケースで、プロビジョニングを実行したくない場合は、--no-provisionを指定します。

Ansibleでのプロビジョニング

VagrantでAnsibleのプロビジョニングを行う場合に利用できる2つのプロビジョナーがあります。

Ansibleプロビジョナーの種類説明
ansibleAnsibleはVagrantのホスト上で実行される。
ansible_localAnsibleはVagrantのゲスト上で実行される。

ansibleプロビジョナー

っf

Vagrant.configure("2") do |config|

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

end

ansibleとansible_localのプロビジョナーの両方で、プロビジョニングを実行するには、playbookオプションが必要です。

ansibleプロビジョナーを使用する最も基本的なVagrantfileの記述は次のとおりです。

Vagrant.configure("2") do |config|
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

インベントリファイル

Vagrant にインベントリファイルを提供しないと、Vagrant は、管理するすべての仮想マシンを含むインベントリ ファイルを生成し、それをマシンのプロビジョニングに使用します。

生成されたインベントリ ファイルは、ローカル Vagrant 環境の一部として に保存されることに注意してください .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory。

ansible_localプロビジョナー

Vagrant.configure("2") do |config|
  # Run Ansible from the Vagrant VM
  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

tmp_path生成されたインベントリ ファイルは、たとえばのサブディレクトリ内のゲスト VM にアップロードされることに注意してください/tmp/vagrant-ansible/inventory/vagrant_ansible_local_inventory。

よかったらシェアしてね!
  • URLをコピーしました!
目次