【问题标题】:Displaying output of a remote command with Ansible使用 Ansible 显示远程命令的输出
【发布时间】:2018-05-02 18:43:45
【问题描述】:

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

【问题讨论】:

    标签: command-line ssh configuration-management ansible


    【解决方案1】:

    我不确定您的特定命令的语法(例如 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
    

    【讨论】:

    • 由于某种原因我仍然没有输出,我什至在 ansible 上使用了-vvvv,但我根本没有输出。尝试command: ls
    • @sorin 我也没有看到任何输出,我的问题是我在剧本中的hosts 参数设置不正确。这样的配置很难调试,因为 Ansible 不提供尝试的主机的指示。也许这是你的问题?
    • 很好的解决方案。谢谢!为什么要添加 "var=" ?对我来说直观的方法是 {{vagrant}}.function() 。这是有原因的吗?
    【解决方案2】:

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

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

    【讨论】:

    • 我不认为我想在详细模式下运行整个剧本来获得这个输出。如果我可以让剧本暂停并显示本地文件的内容,那么 Fetch 可能有助于避免“已更改”状态。我需要告诉操作员将公共 SSH 密钥添加到 GitHub 的帐户授权中。我想我可以提供更多说明并告诉他们打开获取的文件。
    • @DamianMoore 您可以使用“暂停”模块让剧本暂停,您可以使用“调试”模块和“查找”插件将文件打印到屏幕上。
    【解决方案3】:

    打印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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2015-04-13
      • 2019-03-19
      相关资源
      最近更新 更多