结束 playbook yaml 文件中定义的所有 play 的 Ansible 任务

问题描述 投票:0回答:1

首先我正在使用:

ansible --version
ansible [core 2.16.3]
  config file = None
  configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ansible/.local/lib/python3.11/site-packages/ansible
  ansible collection location = /home/ansible/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/ansible/.local/bin/ansible
  python version = 3.11.6 (main, Feb  7 2024, 22:18:53) [GCC 7.3.1 20180712 (Red Hat 7.3.1-17)] (/usr/local/bin/python3.11)
  jinja version = 3.1.3
  libyaml = True

我有一个 Ansible 角色,我在一本剧本中的 2 个不同剧本中使用它

transfer-files.yml
,如下所示:

- name: CMS - Transfer CSV files 1
  become: true
  hosts: host1
  roles:
    - { role: transfer_files, TRANSFER_FILES_MODE: "cms" }

- name: COMMERCE - Transfer CSV files 2
  become: true
  hosts: host2
  roles:
    - { role: transfer_files, TRANSFER_FILES_MODE: "commerce" }

在我的角色中,我使用 TRANSFER_FILES_MODE 来决定执行哪些任务

cms.yml
commerce.yml
。在
cms.yml
我有以下任务:

...

- name: If directory is empty end the play silently
  ansible.builtin.meta: end_play
  when: files_found.matched < 1

...

因此,当我的游戏在

cms.yml
中完成此任务并且目录为空时,它很好地结束了第一个游戏,但它仍然执行第二个游戏。

我可以做些什么来结束一项任务中剧本中列出的所有剧本的所有执行吗?

ansible ansible-2.x ansible-facts ansible-template
1个回答
0
投票

通常不会,因为 Ansible 按顺序运行戏剧,而下一个戏剧对前一个戏剧一无所知。

但是您可以在该元任务之前设置一些事实,将其委托给

localhost
,并使用
include_role
和相应的
when
条件来检查所有后续播放中的
hostvars.localhost.<your_fact>

© www.soinside.com 2019 - 2024. All rights reserved.