Shell模块中的Ansible转义
我试图将一个应用程序配置为连接到ldap,并注意到它的身份验证失败,所以我想我应该检查执行的两个命令来设置它,看看ansible执行的shell命令是什么样子的。 因此,我在服务器上禁用了Shell模块中的Ansible转义,ansible,Ansible,我试图将一个应用程序配置为连接到ldap,并注意到它的身份验证失败,所以我想我应该检查执行的两个命令来设置它,看看ansible执行的shell命令是什么样子的。 因此,我在服务器上禁用了mqsichangeproperties和mqsisetdbparms命令,并创建了下面的小测试剧本,以查看命令字符串的外观。。。我运行playbook时预期出现错误mqsisetdbparms:command not found 但这将允许我在使用详细输出运行时查看cmd和\u raw\u params键 我
mqsichangeproperties
和mqsisetdbparms
命令,并创建了下面的小测试剧本,以查看命令字符串的外观。。。我运行playbook时预期出现错误mqsisetdbparms:command not found
但这将允许我在使用详细输出运行时查看cmd
和\u raw\u params
键
我注意到第一个任务的命令采用了我期望的形式:
“cmd”:“mqsichangeproperties QM-b webadmin-o server-n ldapaauthenticationuri-v\”ldap://abc.company.com:389/OU=Users,OU=城市,OU=国家,DC=公司,DC=com\“”
但是,第二个任务的命令包含额外的黑斜杠,导致为应用程序设置了不正确的用户名和密码
命令格式不正确:
“cmd”:“mqsisetdbparms QM-n ldap::company.com-u\”DOMAIN\\username\“-p\”pwd@pwd\“”
预期的命令形式:
“cmd”:“mqsisetdbparms QM-n ldap::company.com-u”域\用户名“-p”pwd@pwd“”
我觉得好像已经尝试了所有可能的选择,比如
- 对变量使用双引号
- 在变量中转义
- 单引号和双引号与变量和shell命令字符串的组合
- 转义
变量中的反斜杠ldap_usr
---
# file: test.yml
# desc: Test playbook
#
- hosts: target
gather_facts: no
vars:
ldap_server: "ldap://abc.company.com"
ldap_port: 389
ldap_baseDN: "OU=Users,OU=City,OU=Country,DC=company,DC=com"
ldap_usr: 'DOMAIN\username'
ldap_pwd: 'pwd@pwd'
ldap_auth_uri: "\"{{ldap_server}}:{{ldap_port}}/{{ldap_baseDN}}\""
tasks:
# - name: test setting URI
# shell: "mqsichangeproperties QM -b webadmin -o server -n ldapAuthenticationUri -v {{ldap_auth_uri}}"
- name: test setting user
shell: "mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\""
在我看来,使用Ansible版本2.2.0.0应该可以做到以下几点:
ldap_usr: 'DOMAIN\\username'
当我使用以下命令将结果字符串回显到文件时:
shell: echo mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\" > ./check.txt
或
我得到:
mqsisetdbparms QM -n ldap::company.com -u "DOMAIN\username" -p "pwd@pwd"
这是你要求的
顺便说一句,您不应该依赖Ansible日志来确定什么是真正的命令,因为它会打印转义的JSON。您的命令没有问题。您可以在ansible输出中看到转义输出。谢谢你!是的,我的问题是使用了错误的机制来诊断原始问题:)我从来没有意识到Ansible日志打印转义JSON,我假设它是原始的值。。现在,我将修改我的完整脚本,并测试应用程序是否可以连接到ldap服务器,但对我来说似乎很好!谢谢成功了!我曾想过将字符串写入一个文件,但由于某些大脑衰退的原因,我从未这样做过。。。我从来没有意识到Ansible日志打印转义JSON,我假设它是原始值。。现在,我将修改我的完整脚本,并测试应用程序是否可以连接到ldap服务器,但对我来说似乎很好!
shell: printf "mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\"" > ./check.txt
mqsisetdbparms QM -n ldap::company.com -u "DOMAIN\username" -p "pwd@pwd"