2017-09-18 11 views
1

evidenced hereとして、私はAnsibleで奇妙な新しい振る舞いに気付きました。メソッドを使用した失敗。 'module'オブジェクトに属性 'ダンプ'がありません

an Ansible role named "degoss"私はシステムにいくつかのテストファイルと共にGossをインストールし、テストを実行してからそれらのすべての痕跡を削除します。出力をフォーマットするのにa callback plugin、Gossを呼び出すのにa custom moduleを使用しています。

テストが失敗した、というよりも賢明な出力を得て、(私の知る限り2.3程度)Ansibleの新しいバージョンでは、私は以下の直感的エラーメッセージと私のプラグインから一切の出力を得る:

[WARNING]: Failure using method (v2_runner_on_failed) in callback plugin 
(<ansible.plugins.callback.default.CallbackModule object at 0x7fb5e92efd50>): 
'module' object has no attribute 'dumps' 

ansible.plugins.callback.default.CallbackModuleで検索すると、dumpsという呼び出しはありません。 ansible.plugins.callback.CallbackBaseで検索すると、3つのダンプが表示されます。私自身のコールバック・プラグインとカスタムモジュールでは、/exceptブロックがすべて私の呼び出しをjson.dumpsにラップしています。

さらに悪いことに、問題を一貫して再現できないようだということです。私はそれをローカルに複製することはできず、タスクが失敗した場合にのみ表示されます。私の成功/失敗ロジックは以下の通りです:

succeed(module, **result) if rc == 0 else fail(
    module, "Goss Tests Failed.", **result 
) 

マイsucceed/fail方法は、次のような定義されています。

def succeed(module, **kwargs): 
    module.exit_json(changed=False, failed=False, goss_failed=False, **kwargs) 

def fail(module, message, **kwargs): 
    module.fail_json(msg=message, failed=True, goss_failed=True, **kwargs) 

任意のアイデア?ここで

答えて

4

は推測です: ansibleのcallback plugin loaderjson moduleを含むように起こるansible.plugins.callbackでモジュールを作成します。あなたのコールバックプラグインimports jsonは、ansible.plugins.callback.jsonとなります。dumpsは含まれていません。これはプラグインにfrom __future__ import absolute_importを追加することで修正できます。

あなたがそれを再現できない理由は、Python 3をローカルで使用している可能性があります。そのデフォルトは絶対インポートです。

+0

優れたキャッチ、私は私のモジュールを更新しました、今、機能を再現しようとします。 –

+0

確認済み:これが問題でした。 'absolute_import'を追加すると修正されました!どうもありがとうございます! –

関連する問題