2017-12-19 8 views
1

Ich versuche, das äquivalent zu tun:ansible URI-Modul mit cacert Option

curl -X POST --data <json> --key <path to key> --cert <path to cert> --cacert <path to cacert> --header "Content-Type: application/json" <url>

in einem ansible Spiel. Nach der Dokumentation von http://docs.ansible.com/ansible/latest/uri_module.html gibt es Äquivalente für Schlüssel, Cert, X, Header und Daten, aber ich habe keine Möglichkeit gefunden, eine Certificate Authority-Datei zu übergeben.

Ich habe versucht:

environment: 
    CURL_CA_BUNDLE: <path to cacert> 
uri: 
    url: <url> 
    client_cert: <path to cert> 
    client_key: <path to key> 
    body: <json> 
    method: POST 
    body_format: json 

Da der Mensch curl gibt an, dass es die Umgebungsvariable CURL_CA_BUNDLE zu lesen. Ich habe auch versucht:

uri: 
    url: <url> 
    client_cert: <path to cert> 
    client_key: <path to key> 
    body: <json> 
    method: POST 
    body_format: json 
    others: --cacert <path to cacert> 

Keine Methode hat funktioniert. Ohne den cacert erhalte ich den Fehler: "Das SSL-Zertifikat konnte nicht für <url> überprüft werden. Stellen Sie sicher, dass auf Ihren verwalteten Systemen ein gültiges CA-Zertifikat installiert ist ...". Ich weiß, wenn ich in gebe, dann wird die Methode funktionieren, und ich weiß, dass es über die Befehlszeile mit curl funktioniert.

Gibt es eine andere Option, die ich in das URI-Modul übergeben kann, um dieses Problem zu umgehen?

Antwort

1

Die uri module ist nicht cURL, es ist vollständige Python-Implementierung. Also keine Chance, dass cURL Env-Vars oder Optionen funktionieren können.
Die others Option wird dokumentiert, wie „alle von der Datei-Modul akzeptiert Argumente auch hier arbeiten“, so bedeutet es einfach, dass Sie owner verwenden können, group, mode usw. Attribute auf die dest einzustellen.

client_cert und client_key wurden gerade in den letzten 2.4 hinzugefügt issue #18141 zu beheben und sie hätte nicht gedacht, über den Server TLS Auth ...

I 3 Lösungen sehen:

  • Fügen Sie Ihre CA Zertifikat in Ihre Systemzertifikate (auf dem Zielhost der Task uri)
  • Verwenden Sie die Option validate_certs: no, um die Serverzertifikatsprüfung zu deaktivieren (also kein zu verwendendes CA-Zertifikat)
  • ein Problem Raise (und vielleicht ein PR) Unterstützung einer
  • cacert Option hinzufügen
+0

einfach ein paar Notizen hinzuzufügen, ich hatte CA certs in/etc installiert/pki/tls/certs und ansible in der Tat, sie wurde verwarnt . Mein wirkliches Problem stellte sich heraus, dass ich Python 2.7.5 ausführte und die Unterstützung für CAs in Python 2.7.9 hinzugefügt wurde (siehe https://docs.python.org/2/library/urllib2.html). Ich denke, dass ich die Option habe, ein cacert file/-Verzeichnis für das URI-Modul hinzuzufügen, wäre eine gute Ergänzung, also werde ich versuchen, ein Problem zu einem bestimmten Zeitpunkt einzureichen. –