Ansible - 当条件不适用于剧本级别的 vars_prompt 时

Aru*_*gal 6 variables prompt ansible ansible-2.x

安塞布尔2.1.2.0

vars_prompt我遇到了一种情况,我想与大家核实一下,看看 Ansible功能和条件是否可以解决该问题when

Ansible 有一个名为: vars_prompt的功能,我想将其与when条件结合起来(when: ...我们通常在任务或剧本级别操作的任务中使用)

PS:我的问题与这篇文章不同Ansible to Conditionally Prompt for a Variable? 即我的vars:变量不依赖于任何机器的操作系统 ENV 变量,在我的例子中,我只有一个简单的硬编码变量值vars:。我还在主剧本级别(而不是任务级别)运行when 条件。

我想做的是提示用户输入变量值,只有在命令行中用户调用了ansible-playbook install_tool.yml ... ...with--extra-vars "install_tool=true"

workspace/ansible /install_tool.yml中我有:

- hosts: all
  become: true
  gather_facts: false

  vars:
    instance: test
    #install_tool: false
    company_api_url: DUMMY_INVALID_URL

  vars_prompt:
    - name: "company_api_url"
      prompt: "Enter Company API URL: "
      default: "https://{{ instance }}.company.com"
      private: no
      when: install_tool == "true" and company_api_url == "DUMMY_INVALID_URL"
      # or
      #when: ( "{{ install_tool }}" == "true" and "{{ company_api_url }}" == "DUMMY_INVALID_URL" )

  pre_tasks:
    - debug: msg="install_tool = {{ install_tool }} and instance = {{ instance }}" 
      when: install_tool == "true"
Run Code Online (Sandbox Code Playgroud)

我的问题:
如何使上述条件提示正常工作(使用default提示变量的有效替换值)根据变量的值跳过提示用户install_tool

我的理解: 在顶级剧本文件(install_tool.yml)中,我定义了一个instance值为 的变量test。为什么vars_prompt 部分的值在剧本级别定义时default没有选择并替换其值(或者如果用户在命令行传递变量ex:会怎么样?在这种情况下,我希望默认值为, 我怎样才能做到这一点)?对于任何语法运行它时我没有看到任何错误。testinstance --extra-vars "instance=qa"[https://qa.company.com]

我得到以下输出(但我期望一个替换的 URL 值,例如:),[https://test.company.com]即使命令行中install_tool设置或传递为false

跑步:

$ ansible-playbook -i "localhost," --connection=local install_tool.yml --extra-vars "install_tool=false instance=qa"
Run Code Online (Sandbox Code Playgroud)

或者

$ ansible-playbook -i inventory -l localhost install_tool.yml --extra-vars "install_tool=false"
...
.....some lines here
...
PLAYBOOK: install_tool.yml *******************************************
1 plays in install_tool.yml
Enter Company API URL:  [https://{{ instance }}.company.com]: 
Run Code Online (Sandbox Code Playgroud)

由于在section、under/for变量when: ( "{{ install_tool }}" == "true" and ...)中使用条件 ,它没有因任何语法问题等而出错(这意味着Ansible不认为这是错误的),那么为什么,Ansible仍然提示我输入上面的变量,即使我通过了——或者——如果我取消注释该行:在部分?vars_prompt- name: company_api_urlvars_prompts--extra-vars "install_tool=false" install_tool: falsevars:

PS: when: ...条件成功适用于该pre_tasks部分,即当 install_tool 为 true 时,它​​显示这两个变量的值,当 install_tool 设置为 false 时,它​​不会运行该- debug步骤并跳过它(这是预期的)。

谢谢。