AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1092817
Accepted
Lasse Michael Mølgaard
Lasse Michael Mølgaard
Asked: 2022-02-06 21:38:28 +0800 CST2022-02-06 21:38:28 +0800 CST 2022-02-06 21:38:28 +0800 CST

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

  • 772

我正在构建一个 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}\"
"}
ansible jinja
  • 1 1 个回答
  • 1691 Views

1 个回答

  • Voted
  1. Best Answer
    Vladimir Botka
    2022-02-07T00:54:55+08:002022-02-07T00:54:55+08: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}"
    
    • 2

相关问题

  • Ansible:将字符串转换为字典

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve