57

Some of tasks I wrote start and never end. Ansible does not provide any errors or logs that would explain this, even with -vvvv option. Playbook just hangs and passing hours doesn't change anything.

When I try to run my tasks manually (by entering commands via SSH) everything is fine.

Example task that hangs:

- name: apt upgrade
  shell: apt-get upgrade

Is there any way to see stdout and stderr ? I tried:

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

but nothing changed.

I do have required permissions and I pass correct sudo password - other tasks that require sudo execute correctly.

4

6 に答える 6

18

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

[ssh_connection]

ssh_args = -o ServerAliveInterval=n

nSSH 経由でサーバーに接続するときに使用する ServerAliveInterval (秒) はどこにありますか。1 ~ 255 の間で設定します。nこれにより、接続タイムアウトを回避するために、ssh クライアントがサーバーに毎秒 null パケットを送信するようになります。

于 2015-07-15T22:13:30.657 に答える
14

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

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

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

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

それが役に立てば幸い

于 2015-04-10T14:05:41.813 に答える
7

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

Playbook でファクト収集を無効にします。

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

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

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

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

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

于 2016-02-09T10:14:13.067 に答える
3

私にとってはまったく異なる回避策です。これは、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 パフォーマンスの向上を失ったため、これは実行が遅くなる可能性がありますが、これとそれが問題を引き起こしている間に何らかの相互作用があるようです。ssh_argsControlMaster=noapt-get

実行ansible.cfg元のディレクトリansibleまたは にある可能性があります/etc/ansible。後者の場合は、変更を開始する前にローカル ディレクトリにコピーを作成することをお勧めします。

于 2016-09-08T04:57:54.393 に答える