'Launch a play in playbook based on gather facts

I have this Ansible Playbook with three different plays. What I want to do is to launch the two lasts plays based on a condition. How can I do this directly at playbook level (not using when clause in each role)?

- name: Base setup
  hosts: all
  roles :
    - apt
    - pip

# !!!!! SHUT DOWN IF NOT DEBIAN DIST

- name: dbserver setup
  hosts: dbserver
  remote_user: "{{ user }}"
  become: true
  roles:
    - mariadb

- name: webserver and application setup
  hosts: webserver
  remote_user: "{{ user }}"
  become: true
  roles:
    - php
    - users
    - openssh
    - sshkey
    - gitclone
    - symfony


Solution 1:[1]

You could just end the play for the hosts you do not wish to continue with, with the help of the meta task in a pre_tasks:

- name: dbserver setup
  hosts: dbserver
  remote_user: "{{ user }}"
  become: true

  pre_tasks:
    - meta: end_host
      when: ansible_facts.os_family != 'Debian'

  roles:
    - mariadb

And do the same for the web servers.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 β.εηοιτ.βε