2016-08-23 2 views
-1

作成する必要があるansibleモジュールでは苦労しています。すべてが行われ、モジュールはjsonファイルを第三者からfsに配信します。このjsonファイルは、jsonファイルを登録してそのコンテンツにアクセスするためにアクセスできる(または、出力に何らかの形で正しくアクセスできるようにする)ための出力となることが期待されます。fs/diskに保存されたjsonファイルをAnsibleモジュールの出力として使用します。

出力ファイルは、適切なjsonファイルで構成されており、私は目標を達成するためにさまざまなものを試しました。

含む:

  • マニュアルに従って、ansibleは、単にstdoutがかかるため、単純に、printまたはos.stdout.writeを使用してjsonファイルをプリントアウトします。

  • jsonとダンプjson.dumps(data)を使用するか、またはこのようなものですインポート:

    with open('path-to-file', 'r') as tmpfile: 
        data = json.load(tmpfile) 
        module.exit_json(changed=True, message="API call to %s successfull" % endpoint, meta=data) 
    
    • これは出力でJSONを持つことになったが、エスケープバリアントとansibleでエスケープ一部にアクセスすることを拒否します。

は何他の用途のためのjsonデータにアクセスできるようにするための正しい方法でしょうか?

編集:jsonはこの(まあ、それは巨大なjsonだ、これは単にそれの一部である)のように見えます

register

{ 
    "total_results": 51, 
    "total_pages": 2, 
    "prev_url": null, 
    "next_url": "/v2/apps?order-direction=asc&page=2&results-per-page=50", 

debug出力は次のようになりますし、I例えばoutput.meta.total_resultsにアクセスすることはできません。

ok: [localhost] => { 
    "output": { 
     "changed": true, 
     "message": "API call filtering /v2/apps with name and yes-no was successfull", 
     "meta": "{\"total_results\": 51, \"next_url\": \"/v2/apps?order-direction=asc&page=2&results-per-page=50\", \"total_pages\": 2, \"prev_url\": null, (...) 

VARにアクセスしようとしansible出力:

ok: [localhost] => { 
    "output.meta.total_results": "VARIABLE IS NOT DEFINED!" 
} 
+0

jsonファイルの例と、あなたが提供するエラーメッセージを入力してください。一般的なケースでは、コードは正常に動作するはずです。 –

+0

@ ConstantinSuvorov:確かに、私はメインポスト – Jan

答えて

0

興味深いです。 os.stdout.writeを使った私のテストは何とか失敗しましたが、print json.dumps(data)を使っています。

これが解決されました。

+0

"puts'"に添付しますか? "' os.stdout' "?これを書いていた言語は何ですか? – jwodder

+0

まあ、私はおそらくルビーとPythonの間の切り替えを停止する必要があります。頭の中。もちろんそれは 'print'です。 – Jan

関連する問題