web-dev-qa-db-ja.com

Ansible Playbookが実行中にハングする理由を検出する方法

私が書いたタスクの一部は開始し、終了することはありません。 Ansibleは、-vvvvオプションを使用しても、これを説明するエラーやログを提供しません。プレイブックはハングアップするだけで、時間が経過しても何も変わりません。

(SSH経由でコマンドを入力して)手動でタスクを実行しようとすると、すべてがうまくいきます。

ハングするタスクの例:

- name: apt upgrade
  Shell: apt-get upgrade

Stdoutとstderrを見る方法はありますか?私は試した:

- name: apt upgrade
  Shell: apt-get upgrade
  register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"

しかし、何も変わっていません。

必要な権限があり、正しいSudoパスワードを渡します-Sudoを必要とする他のタスクは正しく実行されます。

40
dev9

私はプレイブックでも同じ問題を抱えていました。

ある時点まで完全に動作してから停止したため、この動作を回避するためにasyncおよびpollパラメーターを追加しました

- name: update packages full into each server
  apt: upgrade=full
  ignore_errors: True
  async: 60
  poll: 60

そしてそれは魅力のように働いた!何が起こったのか本当に分かりませんが、今はAnsibleが何が起こっているかを念頭に置き、もうフリーズしないようです!

それが役に立てば幸い

8
Rubendob

問題の最も可能性の高い原因はSSH接続です。タスクに長い実行時間が必要な場合、SSHタイムアウト。このような問題に一度直面しました。SSHタイムアウトの問題を克服するために、Ansibleを実行している現在のディレクトリにansible.cfgを作成し、以下を追加します。

[ssh_connection]

ssh_args = -o ServerAliveInterval=n

ここで、nは、SSHを介してサーバーに接続するときに使用するServerAliveInterval(秒)です。 1〜255の間に設定します。これにより、sshクライアントはn秒ごとにヌルパケットをサーバーに送信して、接続タイムアウトを回避します。

7
Abhijit

私は同じ問題を抱えていたので、少しいじくり回した後、事実を収集する段階にあることがわかりました。同様の問題を解決するためのヒントをいくつか紹介します。

プレイブックでファクトギャザリングを無効にします。

_---
- hosts: myservers
  gather_facts: no
..
_

プレイブックを再実行します。それが機能する場合、原因はSSH自体ではなく、事実を収集するスクリプトにあることを意味します。この問題は非常に簡単にデバッグできます。

  1. リモートボックスへのSSH
  2. _.ansible_フォルダーのどこかにあるsetupファイルを見つけます。
  3. _./setup_または_python -B setup_で実行します

ハングした場合、問題は確実にここにあることがわかります。ハングする原因を正確に見つけるには、エディターでファイルを開き、主にprintpopulate()メソッドにFactsステートメントを追加します。スクリプトを再実行して、それがどれだけ長くなるかを確認します。

私にとっては、問題はself.facts['fqdn'] = socket.getfqdn()行のホスト名を解決しようとしているようで、少しグーグルで リモートホスト名の解決 の問題であることが判明しました。

7
Pithikos

私にとってまったく異なる回避策。これをDebian Jessie(Linux PwC-Deb64 3.16.0-4-AMD64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux)からAWSでビルドしようとした別のDebianイメージまで持っていました。

ここでの提案の多くが役に立たなかった後、SSH「共有」接続に疑念を抱きました。 ansible.cfgに行き、ssh_args行を見つけてControlMaster=noを設定しました。これにより、SSHパフォーマンスの向上が失われるため、パフォーマンスが低下する可能性がありますが、この問題とapt-getの間に何らかの相互作用があるようです。

ansible.cfgは、ansibleを実行するディレクトリまたは/etc/ansibleにあります。後者の場合、変更を開始する前に、そのコピーをローカルディレクトリに保存することができます。

3
dsz

SSHキーのパスワードを削除すると、次のように修正されました。

ssh-keygen -p
1
Dorian