Ansible как получить значение из словаря, используя сочетание переменной и строки в качестве ключа - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь достичь чего-то подобного, проще сказать, чем реализовать, в основном я хочу получить значение из словаря, используя сочетание переменной и строки в качестве ключа в import_task, поэтому код должен быть примерно таким:

- import_tasks: "somefile_{{ somedic[ansible_distribution'_'ansible_distribution_major_version ] }}.yml"

di c должно выглядеть примерно так:

somedic: { "RedHat_7": "endoffilename" } 

И при запуске на сервере RedHat 7 он должен закончить загрузку файла с именем

somefile_endoffilename.yml

1 Ответ

0 голосов
/ 26 мая 2020

Вы не можете сделать это с той структурой словаря, потому что она требует разыменования вложенных переменных, что Jinja2 не поддерживает. Итак, ваш словарь должен выглядеть так:

vars:
  somedic:
    "RedHat":
       "7": "endoffilename"

В JSON это выглядит так:

vars:
  somedic: { "RedHat": { "7": "endoffilename" } }

Тогда вы можете получить то, что вам нужно:

---
- hosts: localhost
  gather_facts: no
  vars:
    somedic: { "RedHat": { "7": "endoffilename" } }

    OS: RedHat
    MajorVersion: "7"

  tasks:
   - debug:
      msg: "somefile_{{ somedic[OS][MajorVersion] }}.yml"

Результат задания debug:

TASK [debug] *************************************************************************
Tuesday 26 May 2020  11:14:30 -0400 (0:00:00.027)       0:00:00.146 *********** 
ok: [localhost] => {
    "msg": "somefile_endoffilename.yml"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...