現在、Ansibleを使用して、IPv6リンクローカルアドレスを使用してベアメタルをプロビジョニングしています。サーバーがプロビジョニングされると、ansibleは1つのシェルコマンドとしてサーバーで一連のテストを実行し、プロビジョニングが成功したことを確認します。これらのテストの実行には約10分かかります。
私が直面している問題は、コマンドが完了する前に接続がタイムアウトしたように見えることです。
Ansibleからのエラーは次のとおりです。
fatal: [fe80::5054:ff:XXXX:XXXX%eth0]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the Host via ssh: Shared connection to fe80::5054:ff:XXXX:XXXX%eth0 closed.\r\n",
"unreachable": true
}
このエラーを見ると、SSH接続に問題があると思うかもしれません。このタスクの前に同じホストで他のいくつかのタスクが正常に実行されるため、SSH接続自体は良好です。
Ansibleがコマンドの終了を待つようにタイムアウトを増やすにはどうすればよいですか? Ansible構成内でこのタイムアウトを増やすことはできますか、またはタイムアウトを増やすためにコマンド自体を変更する必要がありますか?
タスクを非同期で実行したいと思うでしょう。大まかな手順は次のとおりです。
official docs のこの動作の例を次に示します
- name: 'YUM - fire and forget task'
yum:
name: docker-io
state: installed
async: 1000
poll: 0
register: yum_sleeper
- name: 'YUM - check on fire and forget task'
async_status:
jid: "{{ yum_sleeper.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 30
私はほぼ同様の問題を抱えていましたが、-vvvではあまり情報がありませんでした。しかし、ゲストのsyslogを確認すると、ansibleスクリプトを実行しているときにメモリが不足していることがわかりました。 syslogエントリを参照して、ansibleスクリプトを実行するときにゲストに問題があるかどうかを確認できれば便利です。