1

私はansibleに非常に慣れていないので、いくつかテストしたいと思います。いくつかの Amazon EC2 インスタンスがあり、それらにさまざまなソフトウェア コンポーネントをインストールしたいと考えています。ansible スクリプトまたは構成ファイル内にテクニカル ユーザーの (プレーンテキストの) 資格情報を保持したくありません。これらのファイルを暗号化できることはわかっていますが、中央パスワード管理ツールとして keepass を試してみたいと思っています。したがって、インストール スクリプトは、実際のインストールを開始する前に、.kdbx (Keepass 2) データベース ファイルから資格情報を読み取る必要があります。

これまで、.kdbx ファイルを読み取るための基本的な Python スクリプトを作成しました。このスクリプトは、次の方法で json オブジェクトを出力します。

print json.dumps(inventory, sort_keys=False)

出力は次のようになります。

{"cdc": 
    {"cdc_test_server": 
        {"cdc_test_user": 
            {"username": "cdc_test_user", 
             "password": "password"}
        }
    }
}

ここで、pythonスクリプトがansibleによって実行され、出力のキーと値のペアがansible変数として含まれ/登録されることを達成したいと考えています。これまでのところ、私のプレイブックは次のようになります。

- hosts: 127.0.0.1
  connection: local
  tasks:
  - name: "Test Playboook Functionality"
    command: python /usr/local/test.py
    register: pass

  - debug: var=pass.stdout

  - name: "Include json user output"
    set_fact: passwords="{{pass.stdout | from_json}}"

  - debug: " {{passwords.cdc.cdc_test_server.cdc_test_user.password}} "

最初のデバッグでは正しい json 出力が生成されますが、変数を ansible に含めることができないため、それらを jinja2 表記で使用できます。set_fact は例外をスローしませんが、最後のデバッグは "Hello world" メッセージを返すだけですか? だから私の質問は次のとおりです:タスクを介して、jsonキーと値のペアをansible変数として適切に含めるにはどうすればよいですか?

4

3 に答える 3

1

fact.dを使用し、そこに Python スクリプトを配置して、事実として利用できるようにすることもできます。
または、json オブジェクトを返す単純なアクション プラグインを作成して、stdout->from_json 変換の必要性をなくします。

于 2016-08-15T15:51:35.683 に答える
0

パーティーに遅れましたが、あなたのユースケースは主にkeepass-inventoryでカバーされているようです。また、プレイブックの「魔法」は必要ありません。免責事項: 私はこの非営利団体に貢献しています。

export KDB_PATH=example.kdbx
export KDB_PASS=example

ansible all --list-hosts -i keepass-inventory.py
于 2018-11-08T16:35:58.273 に答える