Ansible = 使用事实作为库存文件中的变量

Ansible = 使用事实作为库存文件中的变量

我正在使用 Ansible 安装和配置 Red Hat OpenShift。我目前面临的挑战之一是使用剧本设置 LDAP 身份验证。我需要将以下变量添加到 Ansible 清单文件中 -

LDAP 认证

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://<...>.<...>-<...>-<...>.<...>.<...>.com:<...>/ou=users,dc=example,dc=com?uid"'}]*

由于这个剧本将在不同的环境中使用,我非常希望能够在剧本运行时使用 ansible 主机的当前主机名事实作为变量来替代的值url': '"ldaps://etc"

这可能吗?我搜索了很多,但找不到任何方法可以做到这一点?

答案1

您可以使用 jinja2 在变量字符串内插入变量,就像在剧本和任务文件中执行的操作一样(在双引号内使用双花括号):

INI:

myvar="{{ ansible_fqdn }}"

山毛榉:

---
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 来构建更复杂的字典。

相关内容