Получить значения с помощью модуля отладки в ansible ..! - PullRequest
0 голосов
/ 04 декабря 2018
register: dnsfact 
- debug: var=dnsfact.ansible_facts.azure_dnszones[0].name

Если я отлаживаю как выше, я получаю следующий вывод:

ok: [openshift-infra01.example.net] => {
    "dnsfact.ansible_facts.azure_dnszones[0].name": "226********"
  • debug: var=dnsfact.ansible_facts.azure_dnszones[1].name> это даст мне два значения.

  • debug: var=dnsfact.ansible_facts.azure_dnszones[2].name> это даст мне три значения.

Если я хочу напечатать все значения, какое значение мне нужно передать?Я пробовал с dnszones[:] и dnszones[':'].Но я не могу получить значения.

, пожалуйста, найдите фактический вывод ниже.

 "dnsfact.ansible_facts.azure_dnszones": [
         {
             "etag": "00000002-0000-0000-9ed1-be810a8bd401",
             "id": "/subscription*****/dnszones/226.10.in-addr.arpa",
             "location": "global",
             "name": "226.10.in-addr.arpa",

Из этого вывода мы пытаемся отфильтровать «имя».

1 Ответ

0 голосов
/ 04 декабря 2018

Вам понадобится фильтр map jinja2 :

- debug:
    msg: "{{ dnsfact.ansible_facts.azure_dnszones | map(attribute="name") | list }}"

Его работа заключается в том, чтобы делать почти то же самое, что и map в Python, но более нацеленным на атрибутизвлечение, чем просто произвольное вычисление по списку.Вам (обычно) понадобится | list в конце, потому что map() ленив и возвращает генератор, который необходимо оценить, если вы просто хотите увидеть результат

...