Ansible 或者条件不符合我剧本中的既定事实

Ansible 或者条件不符合我剧本中的既定事实,ansible,yaml,ansible-2.x,ansible-facts,Ansible,Yaml,Ansible 2.x,Ansible Facts,我创建了一个剧本来运行基于测试用例的任务,所以我创建了如下内容 在这里,当我通过ansible playbook playbook.yml-e stage=1时,它将跳过所有任务,当我调试测试用例*时,我可以看到两个值都处于错误状态,因此可以帮助我编写此代码 --- - name: test hosts: localhost tasks: - name: setting the level set_fact: test_case_1: &qu

我创建了一个剧本来运行基于测试用例的任务,所以我创建了如下内容

在这里,当我通过ansible playbook playbook.yml-e stage=1时,它将跳过所有任务,当我调试测试用例*时,我可以看到两个值都处于错误状态,因此可以帮助我编写此代码

---
 - name: test
   hosts: localhost
   tasks:
     - name: setting the level
       set_fact:
        test_case_1: "{{ stage == 1 }}"
        test_case_2: "{{ stage == 1 or stage == 2 }}"
  
     - name: "running ls command"
       shell: "ls -l"
       register: testing
       when:
          - test_case_1 == true

     - debug:
           msg: "{{ testing.stdout_lines }}"
       when:
          - test_case_1 == true

     - name: "kickoff"
       shell: "df -Th"
       register: kick
       when:
          - test_case_2 == true

     - name: "printing kickoff"
       debug:
          msg: "{{ kick.stdout_lines }}"
       when:
          - test_case_2 == true

下面是我得到的错误结果

[root@server ~]# ansible-playbook playbook.yml -e stage=1


PLAY [test] ***********************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************
ok: [localhost]

TASK [setting the level] **********************************************************************************************
ok: [localhost]

TASK [running ls command] *********************************************************************************************
skipping: [localhost]

TASK [debug] **********************************************************************************************************
skipping: [localhost]

TASK [kickoff] ********************************************************************************************************
skipping: [localhost]

TASK [printing kickoff] ***********************************************************************************************
skipping: [localhost]

PLAY RECAP ************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=4    rescued=0    ignored=0

[root@server ~]#

预期结果应该是,它应该执行游戏中的所有任务。

您的问题是您正在执行整数比较(
stage==1
),但当您通过
-e stage=1
在命令行上提供值时,您正在设置字符串值

您可能希望使用
int
过滤器将stage的值大小写为整数

---
- name: test
  hosts: localhost
  tasks:
    - name: setting the level
      set_fact:
        test_case_1: "{{ stage|int == 1 }}"
        test_case_2: "{{ stage|int == 1 or stage|int == 2 }}"
随着这一变化,事情似乎如预期的那样进行


与你的问题无关,但你可以这样重写第二个测试:

{{ stage|int in [1, 2] }}
这简化了一些事情