Ansible
將 Jinja 變數插入帶引號的字元串中
我正在建構一個 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}\" "}
該組合
{%
打開了Jinja 語句。為了避免這種解釋,將大括號放入變數中,例如BR: '{{ "{" }}'
並在模板中使用
shell> cat mschap.j2 ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --username={mschap:User-Name} --domain={{ ad_info.netbios_domain }} --challenge=%{{ BR }}%{mschap:Challenge}:-00} --nt-response=%{{ BR }}%{mschap:NT-Response}:-00}"
下面的任務應該完成這項工作
- template: src: mschap.j2 dest: mschap vars: ad_info: netbios_domain: EXAMPLE
給
shell> cat mschap ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --username={mschap:User-Name} --domain=EXAMPLE --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"