Vagrantで、ansible_localを使ってみる

Pocket

VagrantでゲストOSをセットアップするには、次の3通りがあります。

  1. Vagrantfileの中ではプロビジョニングを使わず、ゲストOSを立ち上げるだけにして、ansible単独でゲストOSを操作する方法
  2. Vagrantfileの中でconfig.vm.provision 'ansible_local'として、Vagrantのansible_localというプロビジョニングを使う方法
  3. Vagrantfileの中でconfig.vm.provision 'ansible'として、Vagrantのプロビジョニングを使う方法

このうち、今回はansible_localを使う方法を試してみます。

Vagrantのプロビジョニングでansible_localを使う場合には、ホストOSにはansibleをインストールしてある必要はありません。

ゲストOSにansibleが自動的にインストールされ、そこでansible-playbookが実行されます。

ポイントは2つあります。1つは、Vagrantfileでprovisionにansible_localを設定します。2つめは、Playbookでconnection: localを使うことです。

ansible_localを指定すると、ゲストOSにansibleが自動的にインストールされます。

実際の例は以下の通りです。

Vagrantfileは次の通りです。プライベートアドレスに192.168.33.10を指定して、provisionにansible_localを指定します。Playbookにsite.ymlを指定し、インベントリファイルにhostsを指定しています。

Vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/xenial64"

  config.vm.network "private_network", ip: "192.168.33.10"
  
  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "site.yml"
    ansible.inventory_path = "hosts"
    ansible.limit = 'all'
  end
end

インベントリファイルは次の通りです。vagrantsというグループにubuntu01というホスト名のサーバーがあり、アドレスは192.168.33.10としています。

hosts

[vagrants]
ubuntu01 ansible_host=192.168.33.10

Playbookは次の通りです。vagrantsというグループに、connection: localという設定で、ubuntuというユーザーにログインします。そこで、Apache2をインストールしています。

site.yml

---
- hosts: vagrants
  connection: local
  user: ubuntu
  tasks:
    - name: install packages Apache2
      apt: name=apache2 update_cache=yes
      become: yes

connection: localがないと、次のようなエラーになります。

TASK [Gathering Facts] *********************************************************
fatal: [ubuntu01]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Host key verification failed.\r\n", "unreachable": true}
        to retry, use: --limit @/vagrant/site.retry

connection: localを使わないと、ゲストOSにansibleをインストールしてあるのに、わざわざ自分自身にsshでログインしてplaybookを実行しようとします。そのとき、SSHのエラーになります。

ansible_localを使うと、ansibleは自動的にインストールしてくれますので簡単ですね。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください