From 6d73310afaffec276085de76123bc5967747c611 Mon Sep 17 00:00:00 2001
From: Chris Hines <chris.hines@monash.edu>
Date: Thu, 5 Feb 2015 05:22:32 +0000
Subject: [PATCH] allow the heat template to specify an ansible_host_groups
 list instead of a single value

---
 dynamicInventory | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/dynamicInventory b/dynamicInventory
index cd93e153..eeeb2a64 100755
--- a/dynamicInventory
+++ b/dynamicInventory
@@ -174,7 +174,15 @@ class OpenStackConnection:
 		inventory['_meta'] = { 'hostvars': {} }
 		for server in nc.servers.list():
                         if server.id in instance_ids:
-                            if server.metadata and 'ansible_host_group' in server.metadata:
+                            if server.metadata and 'ansible_host_groups' in server.metadata:
+                                    hostname=server.name
+                                    groups = json.loads(server.metadata['ansible_host_groups'])
+                                    for group in groups:
+                                            if group in inventory:
+                                                    inventory[group].append(hostname)
+                                            else:
+                                                    inventory[group] = [ hostname ]
+                            elif server.metadata and 'ansible_host_group' in server.metadata:
                                     #hostname = socket.gethostbyaddr(server.networks.values()[0][0])[0]
                                     hostname = server.name
                                     # Set Ansible Host Group
@@ -182,16 +190,14 @@ class OpenStackConnection:
                                             inventory[server.metadata['ansible_host_group']].append(hostname)
                                     else:
                                             inventory[server.metadata['ansible_host_group']] = [hostname]
-                                    # Set the other host variables
-                                    inventory['_meta']['hostvars'][hostname] = {}
-                                    inventory['_meta']['hostvars'][hostname]['ansible_ssh_host'] = server.networks.values()[0][0]
-                                    inventory['_meta']['hostvars'][hostname]['ansible_remote_tmp'] = '/tmp/ansible'
-                                    for key in server.metadata.keys():
-                                        if 'ansible_ssh' in key:
-                                            inventory['_meta']['hostvars'][hostname][key] = server.metadata[key]
-                                    
-                            else:
-                                    continue
+                            # Set the other host variables
+                            inventory['_meta']['hostvars'][hostname] = {}
+                            inventory['_meta']['hostvars'][hostname]['ansible_ssh_host'] = server.networks.values()[0][0]
+                            inventory['_meta']['hostvars'][hostname]['ansible_remote_tmp'] = '/tmp/ansible'
+                            for key in server.metadata.keys():
+                                if 'ansible_ssh' in key:
+                                    inventory['_meta']['hostvars'][hostname][key] = server.metadata[key]
+                            inventory['_meta']['hostvars'][hostname]['ansible_ssh_user'] = 'root'
 		print json.dumps(inventory)
 
 if __name__ == "__main__":
-- 
GitLab