Ansible:如何根据条件 运行 整个剧本?

Ansible: How do I run an entire playbook based on a condition?

上下文: 配置全新的服务器。

我只想提供一次,尤其是更新部分。 启动第一个剧本 bootstrap.yml 后,我让它在文件夹中留下一个文件,让我知道剧本 运行 很好。

因此,在同一个剧本中,我必须在每个任务(我所做的)之上添加一个条件,以检查该文件是否存在。 如果文件存在,则跳过 运行针对所有拥有该文件的机器执行 playbook。

问题: 如何仅在未找到文件时将条件添加到 运行 剧本?我不想为我自己的每个任务添加“when:”语句我觉得这很愚蠢。

问题:有没有人有更好的解决方案,可以用我没有想到的单行或清单文件中的参数来解决这个问题?

编辑:

这是我检查文件的方式

- name: Bootstrap check
    find:
      path: /home/bot/bootstrapped-ok
    register: bootstrap

然后条件为:

when: bootstrap.matched == 0

所以如果找不到文件 运行 整个剧本。

我想你可能over-complicating这个咯。说“我想在特定条件下尽早放弃剧本而不会出错”是否准确?

如果是这样,你想要“end_host”

How do I exit Ansible play without error on a condition

首先检查文件,如果找到,end_host。

  - name: Bootstrap check
    stat:
      path: /home/bot/bootstrapped-ok
    register: bootstrap

  - name: End the play if previous provisioning was successful
    meta: end_host
    when: bootstrap.stat.exists == True

  - name: Confinue if bootstrap missing
    debug:
      msg: "Hello"