Shell模块中的Ansible转义

Shell模块中的Ansible转义,ansible,Ansible,我试图将一个应用程序配置为连接到ldap,并注意到它的身份验证失败,所以我想我应该检查执行的两个命令来设置它,看看ansible执行的shell命令是什么样子的。 因此,我在服务器上禁用了mqsichangeproperties和mqsisetdbparms命令,并创建了下面的小测试剧本,以查看命令字符串的外观。。。我运行playbook时预期出现错误mqsisetdbparms:command not found 但这将允许我在使用详细输出运行时查看cmd和\u raw\u params键 我

我试图将一个应用程序配置为连接到ldap,并注意到它的身份验证失败,所以我想我应该检查执行的两个命令来设置它,看看ansible执行的shell命令是什么样子的。 因此,我在服务器上禁用了
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"