Как извлечь значение имени ключа Dynami c из результатов команды регистра в ansible - PullRequest
0 голосов
/ 04 февраля 2020

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

Простая репликация того, чего я пытаюсь достичь, заключается в следующем: следующим образом: у меня есть переменная -

secure_name: "ALIAS_HTTPD_HOSTNAME1'

Затем я запускаю задачу:

- name: retrieve param name
  shell:
    cmd: "echo {{ secure_name }} | cut -'_' -f2-"
  register secure_param_name

У меня есть третий модуль, который принимает выше {{secure_param_name.stdout | upper }} в качестве параметра для извлечения пары имя-значение из стороннего программного обеспечения для хранения пар ключей безопасности.

Вывод стороннего модуля сохраняется в регистре var, который называется: secure_results

Вывод вызова стороннего модуля:

{
    "changed": false,
    "_ansible_no_log: false,
    "HTTPD_HOSTNAME1": "SERVERNAME1"
}

если я выдаю:

-debug: msg="{{ secure_results.HTTPD_HOSTNAME1 }}"

я получаю требуемый вывод SERVERNAME1

Однако я не хочу жестко кодировать каждый параметр, который я sh получу. Я sh смогу использовать значение secure_param_name.stdout для создания имени переменной

Я пытался:

-debug: msg="{{'secure_results.'+secure_param_name.stdout }}

, но это только возвращает: secure_results.HTTPD_HOSTNAME1

Как мне разрешить вышеуказанное имя переменной Dynami c? использование 2 наборов {{{{}}}} не работает.

Я также пробовал:

- debug: msg="{{ vars['secure_results.' ~ secure_param_name.stdout] }}"

эта ошибка с 'объектом dict' не имеет значения u'secure_results .HTTPD_HOSTNAME1 '

Меня немного смущает, почему не удается найти объект словаря' secure_results.HTTPD_HOSTNAME1 'при размещении этой же строки в {{}} получает значение, как показано в первой отладке выше.

Любая помощь высоко ценится

1 Ответ

0 голосов
/ 04 февраля 2020

Я думаю, что теперь у меня это работает, используя следующее:

- debug: msg="{{ hostvars[inventory_hostname]['secure_results'][secure_param_name.stdout] }}"

это будет лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...