Dynamic inventory, empty group with children

233 views
Skip to first unread message

Dane

unread,
Apr 17, 2014, 7:31:00 AM4/17/14
to ansible...@googlegroups.com
Hello list,

I'm working on a dynamic inventory script for our Ansible deployment. Mostly we're going to be dealing with clusters of machines, so from our side we're grouping hosts into the cluster they'll be in and each host of a cluster has the same set of Ansible variables pushed to it. 

These groups of clusters then need to be assigned to the type of cluster they are in Ansible so we run the correct playbook against them - lets say we have clusters of layer 4 and layer 7 loadbalancers and some HA Varnish boxes, so we'd have three Ansible groups "l4", "l7" and "varnish" and these would get assigned appropriate Ansible roles. Since each cluster should get the same set of variables, it made sense to me that these should go into group_vars, then each host may or may not have individual host_vars.

This is what my dynamic inventory script is currently spitting out (excuse the random names, I auto-generated the test data from /usr/share/dict/words!): http://p.rig.gr/view/6472db0c

You can see that I've got the cluster groups at the top level, but then I'm trying to group these within Ansible:

    "varnish": {
        "children": [
            "turbinate80",
            "roofgarden90"
        ]
    }

This way, I know that the clusters "turbinate80" and "roofgarden90" (which both contain two hosts each) are Varnish boxes and should run the Varnish role. The hosts inside those groups will get their associated group_vars, then pull in any host vars from the _meta bit (currently empty).

What actually happens is that the 'empty' varnish group (and l4/l7) is being picked up as a host in it's own right, rather than as just a group:

(env)[dane@shrike ...nsible/spire]% ansible all -i spire.py --list-hosts
    192.168.0.131
    192.168.0.132
    192.168.0.115
    192.168.0.116
    192.168.0.130
    192.168.0.129
    l7
    192.168.0.15
    192.168.0.16
    192.168.0.25
    192.168.0.26
    l4
    webcel

(env)[dane@shrike ...nsible/spire]% ansible l4 -i spire.py --list-hosts
    l4
    192.168.0.131
    192.168.0.132


Now, I can move stuff around to make this work (getting rid of group_vars and dumping everything under _meta, even though this will duplicate some stuff), but I'm wondering if there's a way to do what I'm after (group of groups, I guess) or if I'm just approaching this in the wrong way?

Thanks

Dane



Michael DeHaan

unread,
Apr 17, 2014, 7:54:35 AM4/17/14
to ansible...@googlegroups.com
I suspect the code is looking for a "hosts" entry in the JSON, and it's not there.  Can you try adding an empty "hosts" array in that group response?





--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/957c0128-4b7c-4f76-9768-5a82fedf299a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Dane Elwell

unread,
Apr 17, 2014, 8:13:01 AM4/17/14
to ansible...@googlegroups.com
That was it! Seems to be working how I want it to now. Many thanks!

Dane
> https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgy13B2HpWxHQEcusEXAwwxC08HT4-a8gYDoscd63VMreQ%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages