AnsibleとVagrantで疎通確認

今更だがAnsibleを触り始めた。手始めにVagrantで作成した仮想マシンとの疎通確認(ping)までの手順。

Vagrant

仮想マシン作成

特筆すべき部分はないので詳細の記載は行わないがホストオンリーネットワークの設定だけした。
その際のIPは192.168.33.10を使用する。設定完了後仮想マシンの起動を行っておくこと。

Ansible

インストール
  • 環境: Mac OS X 10.11.5

http://docs.ansible.com/ansible/intro_installation.html#latest-releases-on-mac-osx
公式ドキュメントに則りpipでのインストールを行ったが残念ながらうまく行かなかった(ansibleコマンド実行時にエラーが出た)。
その為、今回はHomebrewでのインストールを行った。

$ brew install ansible
$ ansible --version
ansible 2.1.0.0
設定ファイル類

Ansibleは主に2つのファイルを用いる。
1つは接続先ホストを管理するインベントリファイル。
Ansibleはインベントリファイルに記載されたホストにしかアクセスできない。

インベントリファイルを作成せずにAnsibleを実行した際に下記のようなWarningが表示されたので、デフォルトの配置場所は下記なのだろう。
この通りファイルを作成することにする。

 [WARNING]: Host file not found: /usr/local/etc/ansible/hosts

なお、記載する際はグループ毎に記載する事もできるようだ。
今回は単にIPだけ記載しておいた。

$ cat /usr/local/etc/ansible/hosts 
192.168.33.10

もう1つは設定ファイル。ansible.cfgというファイル名を使用している様子。
現状設定したい項目が特に無いので作成しない。作成しない場合はデフォルトの設定が適応される。
なお、読み込む優先順位の記載があったのでメモ。

ちなみに ansible.cfg は次の順で探します

1.カレントディレクトリ
2.環境変数の ANSIBLE_CONFIG or ~/ansible.cfg
3./etc/ansible/ansible.cfg

Ansible チュートリアル | Ansible Tutorial in Japanese
pingモジュールで疎通確認

これで準備とは整ったので疎通確認をしていきたい。
ansibleコマンドは-mオプションでモジュールを指定することができる。

-m MODULE_NAME, --module-name=MODULE_NAME
module name to execute (default=command)

コマンドを叩いてみるとsshに失敗と表示された。

$ ansible 192.168.33.10 -m ping
192.168.33.10 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh.", 
    "unreachable": true
}

sshユーザ名もパスワードも秘密鍵も設定していないのでそうなることは理解できる。

パスワードでの認証方法と公開鍵認証での方法を記載する。

まず、どちらにしてもユーザ名の設定が必要になる。これは-uオプションで設定することができる。

-u REMOTE_USER, --user=REMOTE_USER
connect as this user (default=None)

パスワードでの認証方法は-kオプションを指定すれば可能。

-k, --ask-pass ask for connection password

$ ansible 192.168.33.10 -m ping -u vagrant -k        
SSH password: 
192.168.33.10 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

成功した。

次に、公開鍵認証について。vagrantで利用している秘密鍵はssh-configで確認できる。

$ vagrant ssh-config                                                                                                     
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/arcright/Workspace/ansible/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

秘密鍵は--private-keyオプションを指定すれば設定できる。

--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE
use this file to authenticate the connection

$ ansible 192.168.33.10 -m ping -u vagrant --private-key=/Users/arcright/Workspace/ansible/.vagrant/machines/default/virtualbox/private_key
192.168.33.10 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

成功した。


次回は、Ansibleを用いたプロビジョニングについて書きたい。
なお、今回は疎通確認が目的だったのでコマンドラインのオプションにずらずら書いていたが本来はこういったオプションなどを設定ファイルなどに書くのが筋だろう。