Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 当不使用include语句计算条件时_Variables_Include_Ansible_Prompt - Fatal编程技术网

Variables 当不使用include语句计算条件时

Variables 当不使用include语句计算条件时,variables,include,ansible,prompt,Variables,Include,Ansible,Prompt,我有一个tikitaka3.yml(主yml文件)和一个tikitaka3a.yml(包括剧本) 我会提示用户输入一个变量,然后在tasks部分中调用它,如下所示: --- - hosts: all vars: khan: # contents: "{{ lookup('file', '/home/imran/Desktop/tobefetched/file1.txt') }}" vars_prompt: - name: targetenv prompt: 1.)EPC 2.)C

我有一个
tikitaka3.yml
(主yml文件)和一个
tikitaka3a.yml
(包括剧本)

我会提示用户输入一个变量,然后在tasks部分中调用它,如下所示:

---
- hosts: all

vars:
  khan:
# contents: "{{ lookup('file', '/home/imran/Desktop/tobefetched/file1.txt') }}"

vars_prompt:
 - name: targetenv
   prompt: 1.)EPC 2.)CLIENTS 3)TESTERS
   private: False
   default: "1"

gather_facts: no
tasks:

- name: Inlude playbook tikitaka3a
include: /home/khan/Desktop/playbooks/tikitaka3a.yml target=umar
when: targetenv.stdout|int < 2  #this statement has no effect
#when: targetenv == 1  #Neither does this statement
#when: targetenc == "1"  #and neither does this statement have affect


#- name: stuff n stuff # This task will give an error if not commented 
#  debug: var=targetenv.stdout
---
-主持人:全部
变量:
可汗:
#内容:“{lookup('file','/home/imran/Desktop/tobefetched/file1.txt')}”
变量提示:
-姓名:targetenv
提示:1.)EPC 2.)客户3)测试人员
二等兵:错
默认值:“1”
收集事实:不
任务:
-名称:Inlude剧本tikitaka3a
包括:/home/khan/Desktop/playbooks/tikitaka3a.yml target=umar
当:targetenv.stdout | int<2#此语句无效
#when:targetenv==1#此语句也不适用
#when:targetenc==“1”#并且此语句都没有影响
#-名称:stuff n stuff#如果未对该任务进行注释,则会出现错误
#调试:var=targetenv.stdout
include语句始终生效,而不计算when条件


为什么会发生这种情况?

当您包含一个Ansible任务文件时,它会将
When:
条件附加到所有包含的任务。这意味着您将看到显示的任务,即使
when:
条件为false,但所有任务都将被跳过

上面代码的一个问题是
targetenv.stdout
,下面是一个格式正确的工作版本:

- hosts: all
  gather_facts: no
  vars_prompt:
    - name: targetenv
      prompt: 1.)EPC 2.)CLIENTS 3)TESTERS
      private: False
      default: "1"

  tasks:
    - name: Inlude playbook tikitaka3a
      include: roles/test/tasks/tikitaka3a.yml target=umar
      when: targetenv|int < 2
-主机:所有
收集事实:不
变量提示:
-姓名:targetenv
提示:1.)EPC 2.)客户3)测试人员
二等兵:错
默认值:“1”
任务:
-名称:Inlude剧本tikitaka3a
包括:角色/测试/任务/tikitaka3a.yml目标=umar
时间:targetenv | int<2

首先,您应该格式化代码。正确的语句是:
when:targetenv==“1”
(您的语句中有一个输入错误,“targetenc”),我只是在运行时输入的。我尝试了我展示的所有方法。即使在playbook执行时输入2或3,我也会将playbook包括在内。更新后会提到将包括您的任务文件,但会跳过所有任务。