You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible技术问询:如何转义LAPS密码Fact中的双大括号?

解决Ansible中LAPS密码含{{/}}导致的执行失败问题

我们的Ansible剧本通过LAPS获取系统密码并赋值给fact,用于连接远程服务器执行角色,多数情况正常。但偶然出现LAPS生成的密码包含{{字符导致执行失败,因LAPS特性无法复现该场景。当前使用的代码如下:

- name: Get password using gssapi auth
  set_fact:
    lapsPass: "{{ lookup('laps_password', host, domain=kdc) }}"
  delegate_to: 127.0.0.1


- name: Run role
  include_role:
    name: my_role
  vars:
    ansible_user: adminuser
    ansible_password: "{{ lapsPass }}"
    ansible_become: yes
    ansible_become_method: runas
    ansible_become_user: adminuser
    ansible_become_pass: "{{ lapsPass }}"

我们试过用{% raw %}...{% endraw %}标签,但无效,现给出转义密码中{{或}}字符的可行方案:

可行解决方案

1. 用string过滤器强制转为纯字符串

在获取密码时,通过string过滤器将lookup结果转为纯字符串,阻止Ansible模板引擎解析其中的模板标记。修改后的set_fact任务如下:

- name: Get password using gssapi auth
  set_fact:
    lapsPass: "{{ lookup('laps_password', host, domain=kdc) | string }}"
  delegate_to: 127.0.0.1

2. 直接在角色调用中使用带过滤器的lookup结果

如果担心set_fact环节仍会触发模板解析,可以跳过fact中转,直接在include_role的变量里调用带string过滤器的lookup:

- name: Run role
  include_role:
    name: my_role
  vars:
    ansible_user: adminuser
    ansible_password: "{{ lookup('laps_password', host, domain=kdc) | string }}"
    ansible_become: yes
    ansible_become_method: runas
    ansible_become_user: adminuser
    ansible_become_pass: "{{ lookup('laps_password', host, domain=kdc) | string }}"
  delegate_to: 127.0.0.1

注意:如果担心两次lookup获取的密码不一致,优先用第一种方案先把密码存为fact。

3. 结合cacheable参数确保字符串缓存

如果需要跨任务复用密码,可以给set_fact加上cacheable参数,确保fact被当作纯字符串缓存,避免后续环节的意外解析:

- name: Get password using gssapi auth
  ansible.builtin.set_fact:
    lapsPass: "{{ lookup('laps_password', host, domain=kdc) | string }}"
  delegate_to: 127.0.0.1
  cacheable: yes

原理说明

Ansible的模板引擎会自动识别变量中的{{和}},将其当作模板表达式解析。而string过滤器会强制把lookup返回的结果转为纯字符串类型,彻底阻断模板引擎对这些特殊字符的解析逻辑,从而避免因密码包含模板标记导致的语法错误。

内容的提问来源于stack exchange,提问作者Lagamorph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:35:25