我正在构建一个 Podman 容器,该容器使用 Ansible 运行具有 Bind9 和 Freeradius 支持的 Samba Active Directory,但遇到了一些障碍。
Samba 在我的容器中使用 DLZ_BIND 作为后端运行良好,但我需要将 Freeradius 集成到容器中,这样我才能支持通过 VPN 登录。
我正在尝试在以下行中模板化/etc/freeradius/3.0/mods-available/mschap
:
ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2
--request-nt-key
--username={mschap:User-Name}
--domain={{ ad_info.netbios_domain }}
--challenge=%{%{mschap:Challenge}:-00}
--nt-response=%{%{mschap:NT-Response}:-00}"
为了练习,您可以假设 的{{ ad_info.netbios_domain }}
值为EXAMPLE
。
它是文件中唯一使用 Jinja 变量的地方。
然而,运行 ansible-playbook 让 Ansible 在尝试对文件进行模板化时基本上会在我面前炸毁。
我想这是因为 Jinja 变量被插入到一个带引号的字符串中?因为包含以下行的 BASH shell 脚本不会在 ansible 中崩溃:
SAMBA_ADMIN_PASSWORD="{{ ad_info.admin_password }}"
那么当你有一个带引号的字符串时,使用 Jinja 的正确方法是什么?
编辑
我制作了一个只包含有问题的行的模板,并从 ansible 得到了以下错误:
failed: [myhost.example.com] (item=etc/freeradius/3.0/mods-available/mschap) =>
{
"ansible_loop_var": "item",
"changed": false, "item":
"etc/freeradius/3.0/mods-available/mschap-jinja",
"msg": "AnsibleError: template error while templating string: tag name expected.
String: ntlm_auth = \"/usr/bin/ntlm_auth
--allow-mschapv2
--request-nt-key
--username={mschap:User-Name}
--domain={{ ad_info.netbios_domain }}
--challenge=%{%{mschap:Challenge}:-00}
--nt-response=%{%{mschap:NT-Response}:-00}\"
"}