Ansible剧本的外部参数已转换为Unicode

时间:2018-09-19 11:21:35

标签: ansible

我正在尝试使用很少的外部参数来运行剧本。其中之一是Windows服务器中的路径。当目录名称以字母“ a”开头时,它将转换为“ \ u0007”字符。

我的样本如下,

---

- hosts: windows
  gather_facts: no
  tasks:
  - debug: var=test_var

当我按以下方式运行时,

ansible-playbook -i hosts_many samples/commandlinevars.yaml -e "test_var=D:\appli"

输出如下,

PLAY [windows] **********************************************************************************************************************************************************

TASK [debug] ************************************************************************************************************************************************************
ok: [ABD665.testserver.com] => {
    "port_offset": "D:\u0007ppli"
}

如果我不带“”运行它,则输出如下所示,

TASK [debug] ************************************************************************************************************************************************************
ok: [ABD665.testserver.com] => {
    "port_offset": "D:appli"
}

对于以任何其他字母开头的文件夹名称,我都不会出错。奇怪的是,它仅适用于字母“ a”或“ A”。知道如何克服这个问题吗?

我经历了Ansible not escaping windows path first argument的答案,这与我的问题非常相似。但是,当我进入确切的位置时,我的问题在这里还没有得到回答。

实际上,我想要的是将路径D:\ appli传递给剧本。

为了测试所有26个小写字符的行为,我循环运行了同一本剧本,并得到了如下结果(我只走了必填的行),

d:\atest
    "test_path": "d:\u0007test"
d:\btest
    "test_path": "d:\btest"
d:\ctest
    "test_path": "d:\\ctest"
d:\dtest
    "test_path": "d:\\dtest"
d:\etest
    "test_path": "d:\\etest"
d:\ftest
    "test_path": "d:\ftest"
d:\gtest
    "test_path": "d:\\gtest"
d:\htest
    "test_path": "d:\\htest"
d:\itest
    "test_path": "d:\\itest"
d:\jtest
    "test_path": "d:\\jtest"
d:\ktest
    "test_path": "d:\\ktest"
d:\ltest
    "test_path": "d:\\ltest"
d:\mtest
    "test_path": "d:\\mtest"
d:\ntest
    "test_path": "d:\ntest"
d:\otest
    "test_path": "d:\\otest"
d:\ptest
    "test_path": "d:\\ptest"
d:\qtest
    "test_path": "d:\\qtest"
d:\rtest
    "test_path": "d:\rtest"
d:\stest
    "test_path": "d:\\stest"
d:\ttest
    "test_path": "d:\ttest"
d:\utest
    "test_path": "d:\\utest"
d:\vtest
    "test_path": "d:\u000btest"
d:\wtest
    "test_path": "d:\\wtest"
d:\xtest
    "test_path": "d:\\xtest"
d:\ytest
    "test_path": "d:\\ytest"
d:\ztest
    "test_path": "d:\\ztest"

此后,我意识到甚至“ v”也具有相同的行为。

最后,我运行了具有以下不同组合的同一本剧本,以作为验证,但仍未找到答案。

ansible-playbook -i hosts_many samples/commandlinevars.yaml -e "test_var=D:\\appli"

ansible-playbook -i hosts_many samples/commandlinevars.yaml -e 'test_var=D:\\appli'

ansible-playbook -i hosts_many samples/commandlinevars.yaml -e 'test_var=D:\appli'

ansible-playbook -i hosts_many samples/commandlinevars.yaml -e "test_var=D:\\\appli"

0 个答案:

没有答案