# how to run play for subgroup when children has same name

**URL:** <https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759>\
**Category:** Ansible Project\
**Created:** [April 19, 2024, 12:40pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759 "2024-04-19T12:40:08Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sameer\_Modak](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/sameer_modak/32/5180_2.png) [@Sameer\_Modak](https://forum.ansible.com/u/Sameer_Modak)\
**Post date:** [April 19, 2024, 12:40pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759/1 "2024-04-19T12:40:08Z")

</div>

I have an inventory something like this , each main cluster has children like broker.  
Now how do i run any tasks against perticular group.broker. When we pass the group with --limit it does not work it runs on all broker. Also main playbook has hosts:all in it

annsible/grafana-agent-play.yaml -i kafka\_inventory.yaml --limit qa\_kafka\_cluster -u sam -k -b

dev\_kafka:

children:

App:

children:

dev\_kafka\_cluster:

children:

zookeeper:

hosts:

dev1-main-zookpr[01:05].dev

broker:

hosts:

dev1-main-kafka[01:06].dev

schema\_registry:

hosts:

dev1-main-kafka[01:06].dev

uc:

children:

qa\_kafka:

children:

App:

children:

qa\_kafka\_cluster:

children:

zookeeper:

hosts:

qa1-main-zookpr[01:03].qa

broker:

hosts:

qa1-main-kafka[01:06].qa

schema\_registry:

hosts:

qa1-main-kafka[04:06].qa

---

<div class="post-metadata">

**Author:** ![utoddl](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/utoddl/32/249_2.png) [@utoddl](https://forum.ansible.com/u/utoddl)\
**Post date:** [April 19, 2024, 2:58pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759/2 "2024-04-19T14:58:06Z")

</div>

It appears you are trying to define two different “ **broker** ” groups: one as a child of the “ **dev\_kafka\_cluster** ” and another as a child of “ **qa\_kafka\_cluster** ”.

That isn’t how groups work. There is only one “ **broker** ” group. You have added hosts to the “ **broker** ” group in two places.

(Also, “ **App** ” as a group name should be lower-case letters.)

Let me suggest an alternative inventory/group arrangement that implements this naming scheme:  
**kafka[_{$env}[_{app,web,db}[\_{zoo,broker,schema}]]]**  
In this scheme, there isn’t a “ **broker** ” group. Instead there are groups named “ **kafka\_dev\_app\_broker** ” and “ **kafka\_qa\_app\_broker** ” (and eventually a “ **kafka\_prd\*** ” set I imagine).

I call this type of group naming scheme “fully articulated” — any group you care to specify is completely unambiguous. It’s a set of strict hierarchies (in this case there’s only one hierarchy: “ **kafka** ”), and hosts appear in a particular hierarchy exactly once. (If you find yourself trying to inject a host in two different places, you either need to rethink your hierarchy’s structure, or maybe you need two hierarchies.)

We have on occasion included an “ **all** ” environment (like “ **dev** ” and “ **qa** ”). If you did that, there would be a corresponding “ **kafka\_all\*** ” group for any “ **kafka\_dev\*** ” or “ **kafka\_qa\*** ” groups. Then you could target all the brokers with “ **kafka\_all\_app\_broker** ” instead of “ **kafka\_dev\_app\_broker** \*\*,\*\ ***kafka\_qa\_app\_broker** ”. You would have to decide if the benefit is worth the extra text you have to maintain in your inventory.

Your inventory would look like this:

```auto
kafka:
  children:
    kafka_dev:
      children:
        kafka_dev_app:
          children:
            kafka_dev_app_zoo:
              hosts:
                dev1-main-zookpr[01:05].dev
            kafka_dev_app_broker:
              hosts:
                dev1-main-kafka[01:06].dev
            kafka_dev_app_schema:
              hosts:
                dev1-main-kafka[01:06].dev
        kafka_dev_web: […] # omitted for brevity,
        kafka_dev_db: […] # but you get the idea.
  children:
    kafka_qa:
      children:
        kafka_qa_app:
          children:
            kafka_qa_app_zoo:
              hosts:
                qa1-main-zookpr[01:03].qa
            kafka_qa_app_broker:
              hosts:
                qa1-main-kafka[01:06].qa
            kafka_qa_app_schema:
              hosts:
                qa1-main-kafka[04:06].qa
        kafka_qa_web: […] # omitted for brevity,
        kafka_qa_db: […] # but you get the idea.

```

---

<div class="post-metadata">

**Author:** ![utoddl](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/utoddl/32/249_2.png) [@utoddl](https://forum.ansible.com/u/utoddl)\
**Post date:** [April 19, 2024, 3:07pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759/3 "2024-04-19T15:07:51Z")

</div>

Oops. That second “children:” under “kafka:” shouldn’t be there. Otherwise, it’s pretty close.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/ansible/original/1X/1882d9a01da5d8996a862359b0913cc568a39b84.svg) [@system](https://forum.ansible.com/u/system)\
**Post date:** [April 25, 2024, 5:09pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759/4 "2024-04-25T17:09:54Z")

</div>

See `select` (or `reject`) filter with `match` test, you can use it to  
go over group\_names.

---

<div class="post-metadata">

**Author:** ![utoddl](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/utoddl/32/249_2.png) [@utoddl](https://forum.ansible.com/u/utoddl)\
**Post date:** [April 25, 2024, 8:17pm UTC](https://forum.ansible.com/t/how-to-run-play-for-subgroup-when-children-has-same-name/38759/5 "2024-04-25T20:17:15Z")

</div>

Brian said what to do, but left _how to do it_ as a (very worthwhile) exercise for the reader.  
It could look something like

```auto
    when: group_names | select('search', '_broker' ) | length > 0 # matches all the broker groups
    when: group_names | select('search', kenv ~ '_app_zoo') | length > 0 # app_zoo hosts in {{ kenv }} environment
    when: "'kafka_dev' in group_names" # matches all your dev environment hosts
    when: "'kafka_dev_app_zoo' in group_names" # matches all your dev app zoo hosts

```

In jinja templates, those become if conditionals:

```auto
    {% if group_names | select('search', '_broker' ) | length > 0 %}
    {% if group_names | select('search', kenv ~ '_app_zoo') | length > 0 %}
    {% if 'kafka_dev' in group_names" %}
    {% if 'kafka_dev_app_zoo' in group_names" %}

```

Sorry to be slow to respond. It’s been crazy busy at work.
