ANSI-对问题的回答是“否”

时间:2018-07-13 13:09:12

标签: ansible prompt

我正在研究将升级我拥有的应用程序的剧本。升级的一部分意味着我被问到一个问题。

理想情况下,我希望能够对这些问题回答“是/否”,而不必进行任何形式的暂停或提示用户输入。

从我在网上阅读的内容来看,这绝对有可能,但是我似乎无法使它对我有用。

这是我的代码:

$post= Post::Query();
…
elseif($range == "week") {
    $post= $post->where('date', <', Carbon::now()->addDays(7));
}
elseif($range == "day") {
    $post= $post->where('date', '=', Carbon::today());
}
....

3 个答案:

答案 0 :(得分:1)

您正在混合您的响应类型。如果提供列表,则不需要/不需要该问题。如果您想使问题与答案特别匹配,请使用正则表达式将问题匹配为字典的关键字。

所以,版本1:

- name: Upgrade
  expect:
    command: /tmp/bin/update_script.sh 
    environment:
      JAVA_HOME: /opt/java/
    responses:
      Question:
        - n

或版本2(检查我的正则表达式*):

- name: Upgrade
  expect:
    command: /tmp/bin/update_script.sh 
    environment:
      JAVA_HOME: /opt/java/
    responses:
      Question:
        cipher: n

我使用了Expect,但是没有使用ansible模块,那是几年前的事,我从没使用过。希望这两种方法都可以按原样工作,但请准备好进行一下调整。 ;)

祝你好运!

答案 1 :(得分:0)

您应该只使用extra_variables将问题的答案作为变量传递。这样可以避免出现提示,并允许您将变量也设置为一些默认值。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#passing-variables-on-the-command-line

ansible-playbook playbooks/release.yml --extra-vars 'updateciphers=True updatedcipherslist=["cipher1","cipher2","cipher3"]'

->您可能需要转义双引号。     vars:      更新密码:错误

tasks:
  - name: Upgrade
    command: /tmp/bin/update_script.sh 
    environment:
      JAVA_HOME: /opt/java/
    when: updateciphers
    with_items: "{{ updatedcipherslist }}"

答案 2 :(得分:0)

这完成了我所需要的..不幸的是,它不允许您回答“是/否”,但现在可以完成工作。

拥有更多控制权将是不错的选择,但是目前它仍是暂时的解决方法。.当我有了永久解决方案时,我会再次发布。

  - name: Upgrade Starting
    shell: |
      yes | /tmp/bin/update_script.sh