2017-03-29 5 views
0

Ich habe versucht, eine Anwendung für die Verbindung zu LDAP zu konfigurieren und bemerkte, dass die Authentifizierung fehlgeschlagen ist, also dachte ich, ich würde die beiden Befehle überprüfen, die ausgeführt werden, um zu sehen, was der Shell-Befehl ansible Ausführen sieht so aus. So deaktiviert ich die mqsichangeproperties und mqsisetdbparms Befehle auf dem Server und erstellt den folgenden kleinen Test-Textbuch, um zu sehen, was die Befehlsfolge sieht aus wie ... ich das Textbuch führen einen Fehler von mqsisetdbparms: command not found aber dies würde erlauben erwartet mich cmd und _raw_params zu sehen Schlüssel beim Ausführen mit ausführlicher Ausgabe.Ansible Escaping im Shell-Modul

bemerkte ich, dass der Befehl für die erste Aufgabe in der Form ist, dass ich erwarten:

"cmd": "mqsichangeproperties QM -b webadmin -o server -n ldapAuthenticationUri –v \"ldap://abc.company.com:389/OU=Users,OU=City,OU=Country,DC=company,DC=com\""

jedoch der Befehl für die zweite Aufgabe enthält weiteren blackslashes, in dem falschen Benutzername und Passwort Wesen resultierenden set für die Anwendung ...

Falsche Befehlsform:

"cmd": "mqsisetdbparms QM -n ldap::company.com -u \"DOMAIN\\username\" -p \"[email protected]\""

Expected Befehlsform:

"cmd": "mqsisetdbparms QM -n ldap::company.com -u "DOMAIN\username" -p "[email protected]""

Ich fühle mich, als ob alle möglichen Optionen versucht haben, wie

  • doppelte Anführungszeichen für die Variablen

  • Flucht mit in die Variablen

  • Kombination von einfachen und doppelten Anführungszeichen mit den Variablen und der Shell-Befehl Zeichenfolge

  • den umgekehrten Schrägstrich in der unten ldap_usr Variable

Der Test ist Textbuch Ich bin mit Escaping ...

--- 
# 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: '[email protected]' 
    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}}\"" 

Verwendung der Ansible-Version 2.2.0.0

+0

Ihr Befehl ist OK. Sie sehen in der anisible-Ausgabe eine maskierte Ausgabe. http://Stackoverflow.com/a/38957727/2795592 –

+0

Danke dafür! Yup mein Problem war die Verwendung des falschen Mechanismus, um das ursprüngliche Problem zu diagnostizieren :) Ich war nie bewusst über die Ansible Protokolldruck _escaped_ JSON, ich nahm an, dass es roh für die Werte war .. Ich werde jetzt mein komplettes Skript ändern und testen, dass die Anwendung kann Verbinden Sie sich mit dem LDAP-Server, aber sieht gut aus für mich! – Niall

Antwort

0

Sieht für mich wie die folgenden funktionieren sollte:

ldap_usr: 'DOMAIN\\username' 
shell: mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\" 

Wenn ich die resultierende Zeichenfolge in eine Datei Echo mit:

shell: echo mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\" > ./check.txt 

oder

shell: printf "mqsisetdbparms QM -n ldap::company.com -u \"{{ldap_usr}}\" -p \"{{ldap_pwd}}\"" > ./check.txt 

ich:

mqsisetdbparms QM -n ldap::company.com -u "DOMAIN\username" -p "[email protected]" 

das ist, was Sie angefordert haben.


By the way, sollten Sie nicht auf dem ansible Protokoll verlassen, um zu bestimmen, was der eigentliche Befehl ist, wie es JSON entkam druckt.

+0

Danke! Das hat funktioniert! Ich hatte darüber nachgedacht, die Zeichenkette in eine Datei zu schreiben, aber aus irgendeinem Grund wurde ich nie ... Ich war mir nie bewusst über das Ansible-Protokolldrucken _escaped_ JSON, ich nahm an, dass es für die Werte roh war Skript und testen, dass die Anwendung eine Verbindung mit dem LDAP-Server herstellen kann, aber für mich gut aussieht! – Niall