Ansible

將 Jinja 變數插入帶引號的字元串中

  • February 6, 2022

我正在建構一個 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}"

引用自:https://serverfault.com/questions/1092817