防止 Ansible 在变量中更改为 \u0007

问题描述 投票:0回答:3

我有这个用户名

DOMAIN\adm123456789
作为我的剧本中的
--extra-vars
称为
SPSiteOwnerAlias

- name: Display username
  debug:
    msg: '{{ SPSiteOwnerAlias }}'

当我执行剧本时,它显示:

"msg": "DOMAIN\u0007dm123456789"

我似乎出于某种原因 Ansible 正在将

\a
更改为
\u0007

我怎样才能防止这种情况发生?

ansible
3个回答
2
投票

正如 Ansible 问题跟踪器中的其中一条评论所指出的,使用

key=value
语法可能会导致出现此类问题。当然,您将无法使用 YAML 语法,正如评论中所建议的那样,因为您正在使用命令行
--extra-vars
参数,但即使在那里,也有两种可能的语法:

  1. key=value
    ,当你正在使用它时,很可能
  2. {'key':'value'}
    ,采用 JSON 字符串格式

如果您碰巧使用了后者,那么您的问题就不再是了!

鉴于剧本play.yml

- hosts: all
  gather_facts: no
      
  tasks:
    - debug: 
        msg: "{{ SPSiteOwnerAlias }}"

以下是重现您的问题的回顾:

$ ansible-playbook play.yml --extra-vars "SPSiteOwnerAlias=DOMAIN\adm123456789"

PLAY [all] ***********************************************************************************************************

TASK [debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": "DOMAIN\u0007dm123456789"
}

PLAY RECAP ***********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

这里是使用 JSON 格式的回顾:

--extra-vars "{'SPSiteOwnerAlias':'DOMAIN\adm123456789'}"

这个工作正常:

$ ansible-playbook play.yml --extra-vars "{'SPSiteOwnerAlias':'DOMAIN\adm123456789'}"

PLAY [all] ***********************************************************************************************************

TASK [debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": "DOMAIN\\adm123456789"
}

PLAY RECAP ***********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

0
投票

这里的问题是,

\a
在Python中有特殊的含义。
请参阅这篇文章

您需要使用

\
来转义
\\

如果您自己没有设置变量(例如在库存中),则可以在使用变量时使用替换过滤器:

'{{ SPSiteOwnerAlias | replace("\a", "\\a") }}'


0
投票

仅造成此问题还是其他角色也可能发生?

© www.soinside.com 2019 - 2024. All rights reserved.