web-dev-qa-db-ja.com

ansible:到達不能なホストをサイレントにスキップします

Ansibleを使用して、IP構成を含む一部のホストを構成します。 DHCPサーバーは使いたくない。ネットワークに新しいホストを追加することもあります。これらの新しいホストは1つのIPアドレス範囲にあり、既存の実稼働ホストは別のIPアドレス範囲にあります。新しいホストを最初のネットワークに配置してから、ansibleに構成させ、テストして、IPを本番範囲に変更します。 Ansibleはcronを介して定期的に実行されます。

ただし、新しいホストがない場合、ansibleは到達不能エラーを報告します。新しいホストは通常​​の状況ではありません。どうすればそれを抑制したり、目立たなくしたりできますか?

基本的に、私たちのプレイブックは次のようになります。

---
#  configure existing hosts
- hosts: production
  tasks:
    - name: do regular maintenance
      # ...

- hosts: new
  # Does not seem to do anything
  ignore_errors: True 
  tasks: 
    - name: configure freshly discovered Host
        # ...
    - name: test freshly discovered Host
        # ...
    - name: change ip config to production network
        # ...

/ etc/ansible/hostsは次のようになります。

[production]
192.168.2.[11:255]

[new]
# those are firewalled
192.168.2.[1:10]

これを実行すると、大きな赤が表示されます

PLAY RECAP   ****************************************************
192.168.2.1              : ok=0    changed=0    unreachable=1    failed=0   
[...]

最後に、それは私の同僚にとって混乱しています。

この質問 を見てきました。ignore_errorsを使用してもフラグを設定しないと、到達不能なホストをサイレントにスキップする必要があると思いましたが、効果がないようです。

4
icehawk

この回答を追加しようとしています:Ansible 2.7で修正が追加されました: https://github.com/ansible/ansible/blob/stable-2.7/changelogs/CHANGELOG-v2.7.rst#major-changes

プレイとブロックの新しいキーワードignore_unreachable。到達不能なホストが原因で失敗したタスクを無視できるようにし、到達不能テストで結果を確認します。

編集:個人的な経験から、プレイブックを実際に続行するには、ignore_errorsを一緒に追加する必要があります。

2
KdgDev

Ansibleが出力を生成する方法を変更するには、 コールバックプラグイン を作成する必要があります。

Ansibleの例として提供されている default.py から始めることができます。 unreachable文字列を検索し、必要に応じてスクリプトを変更します。

たとえば、目立たなくするために、たとえばCOLOR_UNREACHABLE変数の値をオーバーライドできます。

変更したコードをプロジェクトディレクトリのcallback_pluginsに保存し、 ディレクトリを指す 、および プラグインを有効にするansible.cfg構成ファイルに保存します。

0
techraf

私が見つけた1つの方法は、最初にホストファイルに対して このスクリプト を実行し、次にそれに応じてリストを編集することでした。次に、Ansibleスクリプトを実行します。

これは回避策ですが、Ansibleが再び停止するのを常に監視するよりも優れています。

0
warhansen