我创建了一个剧本来根据测试用例运行任务,因此我如下创建
在这里,当我通过 ansible-playbook playbook.yml -e stage = 1 时,它将跳过所有任务,并且当我调试test_case *值时,我可以看到它们都处于错误状态,所以可以帮助我处理这段代码。
---
- 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 ~]#
应该是预期的结果,它应该执行播放中的所有任务。
答案 0 :(得分:0)
您的问题是您正在执行整数比较(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] }}
这使事情简化了。