Exit playbook and return an error

Hi,

I want to insert an failure on my playbook where if the hostgroup isnt in the inventory, it fails.

Inventory path is
inventory/“environment_name”/inventory

and looks similiar to this

[NodeGroup1]
node1@node

[NodeGroup2]
node2@node.
node3@node.

When running a playbook using --extra vars and declaring the name of the host group like so
ansible-playbook deploy_rpm.yml -i environment/testEnv --extra-vars=‘{“hostgroup”: “NodeGroup1”, “var1”: “test-rpm”, “version”: “0.1”}’

It passes as NodeGroup1 is in the inventory

When the hostgroup is named wrong, ‘NodeGroup999’ for example.
ansible-playbook deploy_rpm.yml -i environment/testEnv --extra-vars=‘{“hostgroup”: “NodeGroup999”, “var1”: “test-rpm”, “version”: “0.1”}’

It just silently fails but doesnt return an error message or stop.
I have added this in as a task but it doesnt seem to like it.

  • name: “Grep inventory to check hostgroup exists.”
    fail: msg:=“Hostgroup ‘{{ hostgroup }}’ is not defined”
    when:
  • inventory_hostname in groups[‘hostgroup’]|default()

How can i improve this task to stop the playbook and return a failure? Is it best to put the path of the inventory files inside the ‘when’ part of the task?

I think you only option is to add the following play on top of your playbook.

- hosts: localhost
   gather_facts: no
   become: no
   tasks:
     - fail:
         msg: Hostgroup '{{ hostgroup }}' is not defined
       when: hostgroup not in groups

Is this possible to do the script locally and then still be able to connect to hosts in a later stage of the same playbook?

for example

task:

  • name: local run of script against inventory

Yes, the play I posted has "- hosts: localhost", meaning it will run on the Ansible controller.
If this play fails, it's will not run subsequent plays in the playbook.

The subsequent play can therefore have - hosts: "{{ hostgroup }}"