我正在尝试使用很少的外部参数来运行剧本。其中之一是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"