Escribí un libro de jugadas que instala y configura Google Authenticator por usuario.
Quiero el último paso del libro de jugadas al cat
archivo de configuración google_authenticator.
Utilizando el módulo "depurar" puedo obtener los datos que se mostrarán en la pantalla, pero solo como mensaje de depuración:
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"
]
}
Leí en línea que puedo hacer algo así:
- 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 }}"
Pero recibo un error cuando lo ejecuto:
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 ********************************************************************
El error dice: "Sin presupuesto de cierre" aunque se cita. También probé:
- debug: msg= "{{ details.stdout_lines }}"
¿Alguna idea de cuál podría ser el problema?
fuente
He buscado profundamente en Internet y he consultado con algunos profesionales de Ansible.
Según tengo entendido, no hay tal opción en Ansible 1.8 para redirigir la salida del comando a la pantalla como salida normal en lugar de salida de depuración.
fuente
Ejecuté algunas pruebas en el bloque de texto que tenía arriba: lo coloqué en su lugar y limpié las comillas json agregadas mediante el uso de details.stdout_lines.
Si el texto 'incorrecto' en su archivo de autenticación es siempre un comienzo
\"
, entonces esto (probado) simplemente funciona, produciendo casi la misma salida pero con dos puntos en lugar de esta cadena.Ahora, este es un caso de uso extremadamente limitado, pero si la salida de autenticación de Google está estrictamente definida aquí (y es totalmente posible que sea así), entonces esto debería hacer lo que desee.
Sin embargo, aún sería más fácil y preferible usarlo
var=details.stdout_lines
para obtener el contenido aquí.fuente