Я написал пьесу, которая устанавливает и настраивает Google Authenticator для каждого пользователя.
Я хочу, чтобы последний шаг playbook cat
в файл конфигурации google_authenticator.
Используя модуль «отладка», я могу получить данные для отображения на экране, но только в виде сообщения отладки:
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"
]
}
Я читал в Интернете, что я могу сделать что-то подобное:
- 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 }}"
Но я получаю сообщение об ошибке:
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 ********************************************************************
Ошибка говорит: «Нет закрывающей цитаты», хотя она цитируется. Также попробовал:
- debug: msg= "{{ details.stdout_lines }}"
Есть идеи, в чем может быть проблема?
источник
Я посмотрел в Интернете и проверил с некоторыми специалистами Ansible.
Насколько я понимаю, в Ansible 1.8 нет такой опции, чтобы перенаправлять вывод команды на экран как обычный вывод, а не как отладочный вывод.
источник
Я выполнил несколько тестов над блоком текста, который вы описали выше, уронил его на место и удалил цитаты json, добавленные с помощью details.stdout_lines.
Если «плохой» текст в вашем файле аутентификации всегда является лидирующим
\"
, то это (проверено) просто срабатывает, производя почти такой же вывод, но с двоеточием вместо этой одной строки.Теперь это крайне ограниченный вариант использования, но если вывод Google Auth здесь строго определен (и вполне возможно, что это так), то это должно делать то, что вы хотите.
Тем не менее, все равно было бы проще и предпочтительнее использовать его,
var=details.stdout_lines
чтобы просто получить содержимое здесь.источник