将 Jinja 变量插入到带引号的字符串中

将 Jinja 变量插入到带引号的字符串中

我正在使用 Ansible 构建一个运行带有 Bind9 和 Freeradius 支持的 Samba Active Directory 的 Podman 容器,但遇到了一些障碍。

在我的容器中,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 尝试模板化文件时,它基本上会让 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}\"
"}

答案1

该组合{%打开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}"

相关内容