Ansible = использовать факты в качестве переменных в файле инвентаризации

Я использую Ansible для установки и настройки Red Hat OpenShift. Одна из проблем, с которыми я сейчас сталкиваюсь, заключается в настройке аутентификации LDAP с использованием playbook. Мне нужно добавить следующую переменную в файл инвентаризации Ansible -

Аутентификация LDAP

openshift_master_identity_providers=[{'name': 'idm-ldap', 'challenge': 'true', 'login': 'true', 'kind': 'LDAPPasswordIdentityProvider', 'attribute': {'id': ['dn'], 'email': ['mail'], 'name': ['cn'], ' предпочитаемое имя пользователя:: ['uid']}, 'bindDN': '' uid =<...>- bind, cn = пользователи, cn = учетные записи, dc =<...>- 01 -<...>, dc = svcs, dc =<...>, dc = com "',' bindPassword ': {' file ': '/etc/origin/master/artifacts/<...>.encrypted', 'keyFile': '/etc/origin/master/artifacts/<...>.key'}, 'ca': '/ etc / origin / master / artifacts /<...>. crt ',' insecure ':' false ',' url ':' 'ldaps: //<...>.<...>-<......>-<...><...><...>ком:<...>/ OU = пользователи, dc = пример, DC = ком UID "}]*?

Поскольку эта книга воспроизведения будет использоваться в разных средах, мне бы очень хотелось иметь возможность использовать текущий факт имени хоста ansible host во время выполнения playbook в качестве переменной для замены значения url': '"ldaps://etc",

Это возможно? Я много искал, но не могу найти способ сделать это?

1 ответ

Вы можете вставить переменную внутри переменной строки, используя jinja2, так же, как вы делаете это внутри playbooks и файлов задач (используя двойные фигурные скобки внутри двойных кавычек):

INI:

myvar="{{ ansible_fqdn }}"

YAML:

---
myvar: "{{ ansible_fqdn }}"

Применимо специально к вашему примеру:

openshift_master_identity_providers="[{'name': 'idm-ldap', 'challenge': 'true', 'login': 'true', 'kind': 'LDAPPasswordIdentityProvider', 'attributes': {'id': ['dn'], 'email': ['mail'], 'name': ['cn'], 'preferredUsername': ['uid']}, 'bindDN': '"uid=-bind,cn=users,cn=accounts,dc=-01-,dc=svcs,dc=,dc=com"', 'bindPassword': {'file': '/etc/origin/master/artifacts/.encrypted', 'keyFile': '/etc/origin/master/artifacts/.key'}, 'ca': '/etc/origin/master/artifacts/.crt', 'insecure': 'false', 'url': 'ldaps://{{ ansible_fqdn }}:/ou=users,dc=example,dc=com?uid'}]"

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

Другие вопросы по тегам