Получение значения из ключа переменной в словаре

#amazon-web-services #ansible

#amazon-web-services #ansible

Вопрос:

У меня есть переменная env: prod, и я пытаюсь получить значение из prod списка для определенной зоны.

свойства, как показано ниже

    prod:
      us-west-2a:  xxxxxxxx
      us-west-2b:  xxxxxxxx
      us-east-1a:  xxxxxxxx
      us-east-1b:  xxxxxxxx

- set_fact:
    reg: "{{ ansible_ec2_placement_availability_zone }}"

- set_fact:
     detach_volumeid: '{{ vars[env].'reg' }}'
  

Я пытаюсь получить значение prod идентификатора тома региона, где prod является переменной и reg является переменной.

Ответ №1:

Конкретный ключ словаря может быть адресован с помощью обозначения точки ( . ), но также может быть адресован с помощью обозначения скобок [] .

Если вы хотите обратиться к ключу как к переменной, вы будете использовать более позднюю форму.

Итак, учитывая учебник:

 - hosts: all
  gather_facts: no
  
  tasks:
    - debug:
        msg: '{{ vars[env][reg] }}'
      vars:
        env: prod
        reg: us-east-1a
        prod:
          us-west-2a:  xxxxxxxx-w-2a
          us-west-2b:  xxxxxxxx-w-2b
          us-east-1a:  xxxxxxxx-e-1a
          us-east-1b:  xxxxxxxx-e-1b
  

Это приводит к повторению:

 PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
ok: [localhost] => {
    "msg": "xxxxxxxx-e-1a"
}

PLAY RECAP ********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0