I wrote a playbook which installs and configures Google Authenticator per user.
I want the last step of the playbook to cat
the google_authenticator configuration file.
Using the "debug" module I am able to get the data to be displayed on screen but only as debug message:
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"
]
}
I read online that I can do something like that:
- 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 }}"
But I get an error when I run it:
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 ********************************************************************
The error says: "No closing quotation" although it is quoted.
Also tried:
- debug: msg= "{{ details.stdout_lines }}"
Any idea what could be the problem?
Best Answer
The quote Jinja filter should solve the quoting problem. Use it like this:
For the other question, I am not aware of a module to print statements other than the
debug
module. You might want to check if Save registered variable to file is an option. If you want to store Ansible variables on the controller host it is possible to do something like this:EDIT I need to correct myself a bit. Take a look at this serverfault question. You can tweak the Ansible output by using the
callback.display
function. I recommend reading the linked blog post.