Vagrant+Ansibleのデバッグ方法

Pocket

VagrantとAnsibleを使っていると、たびたびエラーになります。

そのデバッグに役立ったことを紹介します。

Vagrantの場合

Vagrantでプロビジョニングをしてエラーになったときは、次のようにします。

VAGRANT_LOG=info vagrant provision

を実行する。

エラーになると次のような表示が確認できる。

ERROR vagrant: The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

調べてみるとログの上の方にこんな情報がありました。

 INFO interface: info: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
 INFO interface: info: ==> default: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

apt-getのエラーのようで、vagrant sshでゲストOSにログインしてapt-getしてみても原因はつかめず。もう1度vagrant provisionしてみると成功しました。一時的にエラーになっただけのようでした。

Ansible単独の場合

AnsibleはSSHで接続できていないと動きません。そのためSSHのチェックが重要になります。
まず、次のコマンドで接続を確かめます。

ansible -vvvv all -m ping

を実行してみる。

表示色が濃い青色で読めないときは、ANSIBLE_NOCOLOR=1をつけます。

ANSIBLE_NOCOLOR=1 ansible -vvvv all -m ping

ログのポイントは次のところです。ESTABLISH SSH CONNECTION FOR USERでssh接続のユーザー名が間違っていないか。

SSH:EXEC sshのところで、この場合sshから192.168.33.10までがsshのコマンドラインになります。とりあえずこのIPアドレスまでをコピーしてペーストして単独で接続できるか見てみます。

<192.168.33.10> ESTABLISH SSH CONNECTION FOR USER: ubuntu
<192.168.33.10> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/default/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/tmp 192.168.33.10 '/bin/sh -c '"'"'chmod u+x /home/ubuntu/.ansible/tmp/ansible-tmp-1496030041.85-156969875839371/ /home/ubuntu/.ansible/tmp/ansible-tmp-1496030041.85-156969875839371/ping.py && sleep 0'"'"''

sshからIPアドレスまでの部分だけをコピーペーストで新しく張り付けて実行してみます。

ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile=".vagrant/machines/default/virtualbox/private_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/tmp 192.168.33.10

これで接続できているかまず確認しましょう。

sshで接続できていれば、問題の切り分けができます。あとはpythonのスクリプトが実行できているかどうかです。

Pocket

コメントを残す

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

*

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