2016-10-09 5 views
2

Я пытаюсь автоматизировать конфигурацию распределения Amazon Cloudfront с Ansible. В настоящее время мне нужно найти менеджера сертификатов Amazon для ARN (имя ресурса Amazon) моего сертификата и сохранить ARN в качестве переменной, которая будет использоваться позже в моей конфигурации дистрибутива Cloudfront.Как зарегистрировать переменную в Ansible, вытащил из JSON Output?

Мой поиск для этого заключается в следующем:

- 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" 
      } 
     ] 
    } 
} 

У меня есть две цели:

  1. Вытащите значение CertificateArn от JSON вернулось туда;
  2. Сделайте это устойчивым, посмотрев специально для 'foo.com' в результатах (у меня есть домен как Ansible var, готовый для сравнения) и сохраняющий только ARN для сертификата этого домена, если есть более одного сертификата, возвращенного по list-certificates.

Есть ли какой-нибудь способ, чтобы записать мой set_fact с траверсой выхода JSON из cert_list.stdout и возвращает значение ARN, где значение DomainName содержит foo.com?

Спасибо!

ответ

3

Вы должны with_items на проанализированных данных цикла по конспектам сертификатов, то вы можете фильтровать с помощью when для того, чтобы выборочно set_fact:

- 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