内容
vagrant initコマンドで用意したvagrantファイルから、作成した仮想環境にplaybookを実行したところ「unreachanle」のエラーが出たので、その時に取った対応を書きます。
工程
1.Vagrantfile内でIPアドレスを指定する。
指定しなくても作成時にIPアドレスは仮想環境に付与されていますが、このIPだとping通らなかったので必須。
[Vagrantfile]
config.vm.network :private_network, ip: "IPアドレス"
2.Vagrantfile内でユーザー名とパスワードを指定しておく
vagrant ssh
だと無くても接続出来ますが、playbook実行には必要みたいです。
1と同じようにVagrantfaileに追記してください。
[Vagrantfile]
config.ssh.username = 'vagrant'
config.ssh.password = 'vagrant'
ユーザ名、パスワードはvagrant
で無くても良いのでお好みで。
3.公開鍵を作成した仮想環境に渡す
vagrant up
で仮想環境を起動させたら、ssh-copy-id
コマンドで仮想環境に公開鍵を渡します。
# ssh-copy-id "ユーザー名"@"IP"
<例>
# ssh-copy-id vagrant@192.168.11.10
3.ユーザー名を指定してplaybook実行
インベントリファイルとplaybookを作成して実行します。
今回実験で作ったインベントリファイルとplaybookを下記に載せます。
[インベントリファイル]
[test]
"IPアドレス" ansible_ssh_user="ユーザー名"
ansible_ssh_user
は記載しなくても、playbook実行時に「-u」オプションでユーザー名を指定すれば動きます。ただ、一々入れるのが面倒なのでインベントリファイルに記載しておきます。
[playbook.yml]
- hosts: test
tasks:
- shell: uptime
register: result
- debug:
msg: "{{ result.stdout }}"
playbookの中身をざっくり説明すると、testグループに対して、uptime
コマンドを実行、結果をdebugモジュールを使って出力すると言った感じです。
終わりに
vagrantで作成した仮想環境にplaybookが実行出来ず、調べた情報だけだと上手く行かなかったので書きました。
もうちょっとスマートな方法もあるかも知れませんが、確認取れた方法をとりあえず備忘録で。