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步骤并跳过它(这是预期的)。
谢谢。