Отображение вывода удаленной команды с помощью Ansible

В роли Ansible я генерирую SSH-ключ пользователя. После этого я хочу распечатать его на экране и сделать паузу, чтобы пользователь мог скопировать и вставить его в другое место. Пока у меня что-то вроде этого:

- name: Generate SSH keys for vagrant user
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048
- name: Show SSH public key
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
- name: Wait for user to copy SSH public key
  pause: prompt="Please add the SSH public key above to your GitHub account"

Задача «Показать открытый ключ SSH» завершается, но вывод не отображается.

TASK: [Show SSH public key] *************************************************** 
changed: [default]

Может быть, есть лучший способ сделать это. Мне не очень нравится, что он всегда показывает статус «изменен». Я нашел этот пул-реквест для ansible - https://github.com/ansible/ansible/pull/2673 - но не уверен, смогу ли я использовать его без написания собственного модуля.


person Damian Moore    schedule 13.09.2013    source источник


Ответы (3)


Я не уверен в синтаксисе ваших конкретных команд (например, vagrant и т. Д.), Но в целом ...

Просто зарегистрируйте JSON-вывод Ansible (обычно не показываемый) в переменной, а затем отобразите атрибут stdout_lines каждой переменной:

- name: Generate SSH keys for vagrant user
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048
  register: vagrant
- debug: var=vagrant.stdout_lines

- name: Show SSH public key
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
  register: cat
- debug: var=cat.stdout_lines

- name: Wait for user to copy SSH public key
  pause: prompt="Please add the SSH public key above to your GitHub account"
  register: pause
- debug: var=pause.stdout_lines
person elimisteve    schedule 07.01.2014
comment
По какой-то причине я до сих пор не получаю вывода, я даже использовал -vvvv на ansible, и у меня вообще нет вывода. Пробует с command: ls - person sorin; 07.02.2015
comment
@sorin Я также не видел вывода, проблема в моем случае заключалась в том, что мой параметр hosts в playbook был установлен неправильно. Такую конфигурацию сложно отлаживать, поскольку Ansible не указывает узлы, которые выполняются. Возможно, это была твоя проблема? - person blong; 29.03.2017
comment
отличное решение. Благодарность! Зачем нам добавлять var =? интуитивно понятным для меня способом будет {{vagrant}}. function (). есть ли для этого причина? - person ALUFTW; 26.12.2018

Если вы передадите флаг -v команде ansible-playbook, тогда ansible покажет вывод на вашем терминале.

В вашем случае вы можете попробовать использовать модуль fetch, чтобы скопировать открытый ключ с сервера. на ваш локальный компьютер. Таким образом, статус "изменен" будет отображаться только при изменении файла.

person Lorin Hochstein    schedule 15.09.2013
comment
Я не думаю, что хотел бы запускать всю книгу в подробном режиме, чтобы получить результат. Fetch может быть полезен для предотвращения изменения статуса, если я могу заставить playbook приостановить и отобразить содержимое локального файла. Мне нужно сказать оператору, чтобы он добавил открытый SSH-ключ для авторизации учетной записи GitHub. Думаю, я мог бы просто дать больше инструкций и сказать им, чтобы они открыли полученный файл. - person Damian Moore; 15.09.2013
comment
@DamianMoore Вы можете использовать модуль паузы, чтобы приостановить воспроизведение, и вы можете использовать модуль отладки с плагином поиска для вывода файла на экран. - person Lorin Hochstein; 16.09.2013

Печатает pubkey и избегает изменения статуса, добавляя changed_when: False в cat задачу:

- name: Generate SSH keys for vagrant user   
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048

- name: Check SSH public key   
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
  register: cat
  changed_when: False

- name: Print SSH public key
  debug: var=cat.stdout

- name: Wait for user to copy SSH public key   
  pause: prompt="Please add the SSH public key above to your GitHub account"
person luissquall    schedule 12.09.2015