Ansible 或者条件不符合我剧本中的既定事实
我创建了一个剧本来运行基于测试用例的任务,所以我创建了如下内容 在这里,当我通过ansible playbook playbook.yml-e stage=1时,它将跳过所有任务,当我调试测试用例*时,我可以看到两个值都处于错误状态,因此可以帮助我编写此代码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
---
- 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] }}
这简化了一些事情