J'ai écrit un playbook qui installe et configure Google Authenticator par utilisateur.
Je veux que la dernière étape du playbook soit vers cat
le fichier de configuration google_authenticator.
En utilisant le module "debug", je peux obtenir les données à afficher à l'écran mais uniquement sous forme de message de débogage:
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"
]
}
J'ai lu en ligne que je peux faire quelque chose comme ça:
- 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 }}"
Mais je reçois une erreur lorsque je l'exécute:
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 ********************************************************************
L'erreur indique: "Pas de devis de clôture" bien qu'il soit cité. A également essayé:
- debug: msg= "{{ details.stdout_lines }}"
Une idée quel pourrait être le problème?
la source
J'ai regardé en profondeur sur Internet et vérifié auprès de certains professionnels d'Ansible.
Pour autant que je comprends, il n'y a pas une telle option dans Ansible 1.8 pour rediriger la sortie de la commande vers l'écran en tant que sortie normale plutôt que sortie de débogage.
la source
J'ai effectué quelques tests sur le bloc de texte que vous aviez ci-dessus - je l'ai déposé et nettoyé les citations json ajoutées en utilisant details.stdout_lines.
Si le `` mauvais '' texte de votre fichier d'authentification est toujours un début
\"
, alors cela (testé) se produit simplement, produisant à peu près la même sortie mais avec deux points à la place de cette seule chaîne.Maintenant, c'est un cas d'utilisation extrêmement limité, mais si la sortie d'authentification Google est strictement définie ici (et il est tout à fait possible que ce soit le cas), alors cela devrait faire ce que vous voulez.
Cependant, il serait toujours plus facile et préférable d'utiliser
var=details.stdout_lines
simplement le contenu ici.la source