Ansible以交互方式响应非预设远程shell输出

Ansible以交互方式响应非预设远程shell输出,shell,ansible,prompt,Shell,Ansible,Prompt,提前感谢您在这方面提供的任何建议/帮助 我尝试过“expect”和shell/command模块的多次迭代,但都没有提供我(我想象其他人)在这种情况下想要做的事情。与更广泛的群体接触,希望有一个我还没有找到的解决方案 我们的软件有一个shell命令,它打印出它将修改的文件列表,并提示用户继续使用标准的[y/n]提示。与百胜在升级软件时所做的类似,它会输出大量输出并等待用户输入 The following changes need to be made: Create /

提前感谢您在这方面提供的任何建议/帮助

我尝试过“expect”和shell/command模块的多次迭代,但都没有提供我(我想象其他人)在这种情况下想要做的事情。与更广泛的群体接触,希望有一个我还没有找到的解决方案

我们的软件有一个shell命令,它打印出它将修改的文件列表,并提示用户继续使用标准的[y/n]提示。与百胜在升级软件时所做的类似,它会输出大量输出并等待用户输入

    The following changes need to be made:

        Create /home/XYZ-file
        Enable and start the ABC service
        Enable and start the DEF service

    Allow? [y/N] n
有时,根据它列出的文件,我们不想继续。。。有时候,我们会。因此,我希望能够提示我的ansible用户,并根据列表为他们提供选择。我知道这是令人恼火的人工干预,并不是出于自动化的精神,但就这一步而言,我们愿意放弃一切,让一个人实际查看这些文件并做出决定

当前“expect”仅将预设输出与预设用户响应相匹配。我不想这样做,因为我不知道哪些文件将呈现给用户,所以我不能使用任何预设

我希望显示shell命令的所有输出,并提示ansible用户根据输出做出决定

发出命令并注册输出的简单任务:

- name: Issue XYZ command
  shell: xyz
  register: xyz_output
- debug: var=xyz_output.stdout
问题是,在这种情况下,shell命令挂起,因为ansible无法:

显示输出 & 提示ansible用户是否继续


非常感谢您的帮助

您可以参考的yaml样本,并根据您的要求进行改进

---
- hosts: all
  gather_facts: False
  tasks:
    - name: print
      shell: cat inventory
      register: fileout

    - debug: var=fileout.stdout

    - name: pause
      pause: prompt='Confirm action by giving - yes/no:'
      register: pause

    - name: Ansible create file.
      file:
         path: "/home/ansible/vops.txt"
         state: touch
         mode: 0777
      when: pause.user_input == 'yes'

    - name: Ansible start service
      service:
         name: httpd
         state: started
      when: pause.user_input == 'yes'

我已使用“”模块暂停播放并提示输入,并使用“”条件比较输入结果并处理操作。

基础软件是否允许运行多次?我这样问是因为如果是这样,您可以在第一次运行它,对每个提示给出
n
答案,然后您将有下一次要再次询问的问题,因为它们在第一次都是
n
-ed的(使系统保持其启动时的状态,只要“n”采取“否”操作)