Ich habe ein Playbook geschrieben, in dem Google Authenticator pro Nutzer installiert und konfiguriert wird.
Ich möchte den letzten Schritt des Playbooks in cat
der Konfigurationsdatei google_authenticator sehen.
Mit dem "Debug" -Modul kann ich die Daten auf dem Bildschirm anzeigen lassen, aber nur als Debug-Meldung:
TASK: [debug var=details.stdout_lines] ****************************************
ok: [localhost] => {
"details.stdout_lines": [
"ZKMFTE2ADYA2OYCH",
"\"RATE_LIMIT 3 30",
"\" DISALLOW_REUSE",
"\" TOTP_AUTH",
"12920994",
"88224784",
"69464205",
"38144121",
"45634120"
]
}
Ich habe online gelesen, dass ich so etwas machen kann:
- name: Print to screen google authenticator details
command: /bin/cat {{ google_authenticator_secret_file_location }}
register: details
tags: google_2fa_user
- debug: msg="{{ details.stdout_lines }}"
Aber ich bekomme eine Fehlermeldung, wenn ich es ausführe:
TASK: [Print to screen google authenticator details] **************************
changed: [localhost]
TASK: [debug msg="{{details.stdout_lines}}"] **********************************
fatal: [localhost] => Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 532, in _executor
exec_rc = self._executor_internal(host, new_stdin)
File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 629, in _executor_internal
return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port, complex_args=complex_args)
File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 815, in _executor_internal_inner
result = handler.run(conn, tmp, module_name, module_args, inject, complex_args)
File "/usr/lib/python2.7/dist-packages/ansible/runner/action_plugins/debug.py", line 41, in run
kv = utils.parse_kv(module_args)
File "/usr/lib/python2.7/dist-packages/ansible/utils/__init__.py", line 526, in parse_kv
vargs = [x.decode('utf-8') for x in shlex.split(args, posix=True)]
File "/usr/lib/python2.7/shlex.py", line 279, in split
return list(lex)
File "/usr/lib/python2.7/shlex.py", line 269, in next
token = self.get_token()
File "/usr/lib/python2.7/shlex.py", line 96, in get_token
raw = self.read_token()
File "/usr/lib/python2.7/shlex.py", line 172, in read_token
raise ValueError, "No closing quotation"
ValueError: No closing quotation
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
Der Fehler besagt: "Kein schließendes Zitat" obwohl es zitiert wird. Auch versucht:
- debug: msg= "{{ details.stdout_lines }}"
Irgendeine Idee, woran das liegen könnte?
quelle
Ich habe mich intensiv im Internet umgesehen und mich bei einigen Ansible-Profis erkundigt.
Soweit ich weiß, gibt es in Ansible 1.8 keine solche Option, um die Ausgabe des Befehls als normale Ausgabe auf den Bildschirm umzuleiten, anstatt die Ausgabe zu debuggen.
quelle
Ich habe einige Tests an dem Textblock durchgeführt, den Sie oben angegeben hatten - und ihn an Ort und Stelle abgelegt und die mit details.stdout_lines hinzugefügten JSON-Anführungszeichen entfernt.
Wenn der 'schlechte' Text in Ihrer Auth-Datei immer ein führender Text ist
\"
, dann funktioniert dies (getestet) einfach und erzeugt fast die gleiche Ausgabe, jedoch mit einem Doppelpunkt anstelle dieser einen Zeichenfolge.Dies ist ein äußerst eingeschränkter Anwendungsfall. Wenn die Google Auth-Ausgabe hier jedoch genau definiert ist (und dies durchaus möglich ist), sollte dies tun, was Sie möchten.
Es wäre jedoch immer noch einfacher und vorzuziehen
var=details.stdout_lines
, nur den Inhalt hier abzurufen.quelle