我有这个用户名
DOMAIN\adm123456789
作为我的剧本中的 --extra-vars
称为 SPSiteOwnerAlias
:
- name: Display username
debug:
msg: '{{ SPSiteOwnerAlias }}'
当我执行剧本时,它显示:
"msg": "DOMAIN\u0007dm123456789"
我似乎出于某种原因 Ansible 正在将
\a
更改为 \u0007
。正如 Ansible 问题跟踪器中的其中一条评论所指出的,使用
key=value
语法可能会导致出现此类问题。当然,您将无法使用 YAML 语法,正如评论中所建议的那样,因为您正在使用命令行 --extra-vars
参数,但即使在那里,也有两种可能的语法:
key=value
,当你正在使用它时,很可能{'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
这里的问题是,
\a
在Python中有特殊的含义。您需要使用
\
来转义 \\
。
如果您自己没有设置变量(例如在库存中),则可以在使用变量时使用替换过滤器:
'{{ SPSiteOwnerAlias | replace("\a", "\\a") }}'
仅造成此问题还是其他角色也可能发生?