loops - 带有循环的 Ansible include_tasks 无法检查条件

标签 loops ansible

我想根据任务中设置的条件来包含任务。

tasks:
- name: SET INIT STATUS
  set_facts:
    passed: true

- name: INCLUDE TASKS WITH LOOP
  include_tasks: update_status.yml
  loop: [1, 2, 3]
  when: passed

更新状态.yml:

- name: OUTPUT THE STATUS
  debug: msg="ITEM: {{item}} has status {{passed}}"
- name: UPDATE the Status
  set_fact:
    passed: false

我预计它只会为项目 1 运行一次,因为在它运行后,它会将状态更改为 false,然后无法通过条件检查。但它实际上运行了 3 次,所以看起来它不会在循环期间再次检查状态。

这是输出

TASK: [SET INIT STATUS]
ok: [localhost]

TASK: [INCLUDE TASKS WITH LOOP]
included: simple.yml for localhost
included: simple.yml for localhost
included: simple.yml for localhost

TASK: [OUTPUT THE STATUS]
ok: [localhost] => {
    "msg": ITEM 1 has status True
}

TASK: [UPDATE the Status]
ok: [localhost]

TASK: [OUTPUT THE STATUS]
ok: [localhost] => {
    "msg": ITEM 2 has status False
}

TASK: [UPDATE the Status]
ok: [localhost]

TASK: [OUTPUT THE STATUS]
ok: [localhost] => {
    "msg": ITEM 3 has status False
}

TASK: [UPDATE the Status]
ok: [localhost]

最佳答案

在尝试了不同的方法之后,我能够通过将循环放在一个 block 中来实现我想要的。

- name: LOOP WITH INCLUDE_TASK INSIDE BLOCK
  block:
    - name: LOOP WITH INCLUDE_TASK
      include_tasks: simple.yml
      loop: [1, 2, 3]
  when: passed

这是结果

TASK [SET passed] ******************************************************************************************
ok: [localhost]

TASK [LOOP WITH INCLUDE_TASK] ******************************************************************************************
included: /home/richard/samples/simple.yml for localhost
included: /home/richard/samples/simple.yml for localhost
included: /home/richard/samples/simple.yml for localhost

TASK [SHOW THE STATUS] ******************************************************************************************
ok: [localhost] => {
    "msg": "Item 1 has status True"
}

TASK [CHANGE THE STATUS] ******************************************************************************************
ok: [localhost]

TASK [SHOW THE STATUS] ******************************************************************************************
skipping: [localhost]

TASK [CHANGE THE STATUS] ******************************************************************************************
skipping: [localhost]

TASK [SHOW THE STATUS] ******************************************************************************************
skipping: [localhost]

TASK [CHANGE THE STATUS] ******************************************************************************************
skipping: [localhost]

关于loops - 带有循环的 Ansible include_tasks 无法检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61846925/

相关文章:

r - R 中的双 For 循环

r - 如何使循环在 R 中更高效?

c++ - 这个c/c++循环能优化到什么程度?

java - 使用 Java 交替打印 2 个具有多个变量的字符串

centos - 如何在 Centos 7 上使用 ansible firewalld 任务打开防火墙端口

java - 使用 Java 中的用户输入创建 X 模式?

python - 尽管安装了 Ansible,但找不到 boto3 和 botocore

regex - 解析ansible中的字符串列表

docker - 使用 docker 和 ansible iptables 拒绝传入流量

ansible:以不同的用户身份运行角色