71

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

4

3 回答 3

83

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

只需将 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
于 2014-01-07T20:27:17.093 回答
27

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

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

于 2013-09-15T00:56:03.783 回答
8

通过添加到任务打印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"
于 2015-09-12T17:09:21.130 回答