Я использую Ansible для установки и настройки Red Hat OpenShift. Одна из проблем, с которыми я сейчас сталкиваюсь, - это настройка аутентификации LDAP с помощью playbook. Мне нужно добавить следующую переменную в файл инвентаризации Ansible -
LDAP аутентификация
openshift_master_identity_providers = [{'name': 'idm-ldap', 'challenge': 'true', 'login': 'true', 'kind': 'LDAPPasswordIdentityProvider', 'attributes': {'id': ['dn '],' электронная почта ': [' почта '],' имя ': [' cn '],' предпочтительное имя пользователя ': [' uid ']},' bindDN ':' "uid = <...> - привязать, 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: // <...>. <...> - <.. .> - <...>. <...>. <...>. com: <...> / ou = users, dc = example, dc = com? uid "'}] *
Поскольку этот playbook будет использоваться в разных средах, я бы действительно хотел иметь возможность использовать текущий факт имени хоста доступного хоста во время выполнения playbook в качестве переменной для замены значения url': '"ldaps://etc"
.
Это возможно? Я много искал, но не могу найти способ сделать это?
Вы можете вставить переменную внутри строки переменной, используя 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 для создания более сложного словаря.