Как обновить аргументы роли, используя значения host vars в Ansible?

Я использую Ansible роль Datadog и пытаюсь установить и настроить агенты datadog на целевых серверах, однако я я застрял в точке, где мне нужно использовать переменные хоста и обновить раздел playbook, используя эти переменные. Переменная имеет несколько значений, разделенных пробелом. Я хочу убедиться, что эти значения добавлены в playbook на основе значений переменных. Следующий пример поможет понять требование.

Практика:

- hosts: servers
  roles:
    - { role: datadog.datadog, become: yes }
  vars:
    datadog_api_key: "{{ DD_API_KEY }}"
    datadog_config:
      tags:
        - "AID:"{{ AID }}"

Здесь значение тега AID использует переменную хоста с тем же именем, т. е. AID, и в некоторых случаях эта переменная хоста может иметь следующие значения:

AID: 100 101 102 103

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

  tags:
    - AID: 100
    - AID: 101
    - AID: 102
    - AID: 103

Я считаю, что не могу использовать шаблоны для таких требований, поскольку конфигурации используются в переменных роли. Любые предложения будут оценены.


person Ankit Vashistha    schedule 19.04.2021    source источник
comment
Является ли переменная хоста AID строкой или списком строк? В обоих случаях вам нужно разделить значение в AID, чтобы получить список строк, а затем перебрать элементы списка и добавить их в словарь datadog_config.tags с тегами: {{ ['AID: '] | продукт(помощь) | карта ('присоединиться') | list }} — см. itix.fr/blog/ansible- добавить-префикс-суффикс-в-список   -  person TRW    schedule 19.04.2021
comment
Значения AID обновляются как строковые значения.   -  person Ankit Vashistha    schedule 19.04.2021
comment
Итак, вам нужно разбить части строки в AID: 100 101 .. на список [100,101,...] и затем добавить префикс (если он вам действительно нужен). Я бы добавил его во время выполнения) вместо product()...   -  person TRW    schedule 19.04.2021


Ответы (1)


Как сказал @TRW в комментариях, использование этого должно помочь:

- hosts: servers
  roles:
    - { role: datadog.datadog, become: yes }
  vars:
    datadog_api_key: "{{ DD_API_KEY }}"
    datadog_config:
      tags: "{{ ['AID: ']|product(AID.split())|map('join')|list }}"
person Sebcworks    schedule 20.04.2021