【问题标题】:Ansible interactively respond to non preset remote shell outputAnsible 以交互方式响应非预设远程 shell 输出
【发布时间】:2019-11-01 20:29:57
【问题描述】:

在此先感谢您提供任何建议/帮助。

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

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

    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 用户并根据列表为他们提供选择。我知道这很烦人的人工干预,而不是自动化的精神,但是为了这一步,我们愿意放弃一些事情,让一个人真正查看这些文件并做出决定。

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

我想要的是显示 shell 命令的所有输出,并提示 ansible 用户根据输出做出决定。

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

- name: Issue XYZ command
  shell: xyz
  register: xyz_output
- debug: var=xyz_output.stdout

问题是在这种情况下 shell 命令挂起,因为 ansible 无法:

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

非常感谢任何帮助!

【问题讨论】:

  • 底层软件是否允许多次运行?我问是因为如果是这样,您可以在第一次运行它时为每个提示提供 n 答案,然后您将有下次再次被问到的问题,因为它们都是 n-ed 第一次(只要“n”采取“no”动作,系统就保持在它开始时的相同状态)

标签: shell ansible prompt


【解决方案1】:

您可以参考的示例 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'

我使用'pause'模块暂停播放并提示输入,并使用'when'条件比较输入结果并进行操作。

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2013-03-28
    • 2013-05-06
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多