2016-10-09 9 views
2

私はAmazon Cloudfrontディストリビューションの設定をAnsibleと自動化しようとしています。現在、自分の証明書のARN(Amazonリソース名)のAmazon証明書マネージャーを検索し、後で自分のCloudfrontディストリビューション設定で使用する変数としてARNを保存する必要があります。JSON出力から変数を取得するにはどうすればよいですか?

次のように、このための私のルックアップは次のとおりです。

- name: Check for existence of a certificate for this project in Amazon Certificate Manager 
    command: > 
    aws acm list-certificates 
     --profile "{{ project_name }}"-deploy 
     --region us-east-1 
    register: cert_list 
    ignore_errors: True 

- name: Record list-certificates output to Json 
    set_fact: 
    this_project_arn: # I want to set this from the output of list-certficates 

- debug: msg="{{ cert_list.stdout | from_json }}" 

次のようにそのデバッグの出力は、現在、次のとおりです。

TASK [configure-cloudfront : debug] ******************************************** 
ok: [localhost] => { 
    "msg": { 
     "CertificateSummaryList": [ 
      { 
       "CertificateArn": "arn:aws:acm:us-east-1:123456789101:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", 
       "DomainName": "*.foo.com" 
      } 
     ] 
    } 
} 

私は2つの目的があります。

  1. 引き出しをJSONから返されたCertificateArnの値がそこに返されました。
  2. 結果に「foo.com」を具体的に探して(私は比較のためにAnipal var readyとしてドメインを持っています)、複数の証明書が返ってきた場合にそのドメインの証明書のARNのみを保存するby list-certificates

cert_list.stdoutからJSON出力のトラバースから私のset_factを記録し、唯一DomainName値がfoo.comが含まれているARN値を返すために、いくつかの方法はありますか?

ありがとうございます!

答えて

3

あなたは、あなたが順番に選択set_factwhenを使用してフィルタリングすることができ、証明書の要約をループに解析されたデータにwith_itemsが必要になります。

- name: Set ARN for passed in domain 
    set_fact: 
    project_arn: "{{ item.CertificateArn }}" 
    when: item.DomainName == "*.foo.com" 
    with_items: "{{ (cert_list.stdout|from_json).CertificateSummaryList }}" 
+0

これは、中括弧内Jinja2のフィルタを使用しての良い例ですテンプレート化。 –

+0

これは完璧です。私は将来的に疑いの余地のない本当に便利なパターンです。どうもありがとう! – Ben

関連する問題