使用Ansible显示远程命令的输出


69

在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-但不确定是否可以在不编写自己的模块的情况下使用它。

Answers:


82

我不确定您的特定命令(例如,流浪汉等)的语法,但总的来说...

只需将Ansible(未正常显示)的JSON输出注册到变量中,然后显示每个变量的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

3
由于某种原因,我仍然没有输出,甚至-vvvv在ansible上使用了,也没有任何输出。尝试command: ls
sorin 2015年

1
@sorin我也没有看到输出,我的问题是我hosts在剧本中的参数设置不正确。这样的配置很难调试,因为Ansible不会提供有关尝试的主机的指示。也许那是你的问题?

很好的解决方案。谢谢!为什么要添加“ var =“?对我而言,直观的方法是{{vagrant}}。function()。有什么理由吗?
ALUFTW

22

如果将-v标志传递给ansible-playbook命令,则ansible将在终端上显示输出。

对于您的用例,您可能想尝试使用获取模块将公用密钥从服务器复制到本地计算机。这样,它仅在文件更改时显示“已更改”状态。


1
我不希望我以冗长的模式运行整个剧本以获取此输出。如果我可以使剧本暂停并显示本地文件的内容,则提取对于避免“更改”状态很有用。我需要告诉操作员将SSH公钥添加到GitHub的帐户授权中。我想我可以提供更多说明,并告诉他们打开获取的文件。
Damian Moore

2
@DamianMoore可以使用“暂停”模块使剧本暂停,也可以使用带有“ lookup”插件的“ debug”模块将文件打印到屏幕上。
罗琳·霍希斯坦

7

pubkey通过添加changed_when: Falsecat任务来打印并避免更改状态:

- 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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.