From 7da69d7ee5fc76859246b9325b3e8f40712f7b0b Mon Sep 17 00:00:00 2001
From: Chris Hines <chris.hines@monash.edu>
Date: Tue, 29 Sep 2015 14:55:28 +1000
Subject: [PATCH] dynamic inventory to list cinder voluesm in the metadata

---
 dynamicInventory | 57 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 37 insertions(+), 20 deletions(-)

diff --git a/dynamicInventory b/dynamicInventory
index bd89abf0..a5e7b6c6 100755
--- a/dynamicInventory
+++ b/dynamicInventory
@@ -1,10 +1,18 @@
 #!/usr/bin/env python
 import sys, os, string, subprocess, socket, re
 import copy, shlex,uuid, random, multiprocessing, time, shutil, json
-import novaclient.v1_1.client as nvclient
-import novaclient.exceptions as nvexceptions
+#import novaclient.v1_1.client as nvclient
+#import novaclient.exceptions as nvexceptions
 from keystoneclient.auth.identity import v2 as v2_auth
-from heatclient import client as heat_client
+#from heatclient import client as heat_client
+#from novaclient import client as nova_client
+#from cinderclient import client as cinder_client
+import heatclient
+import novaclient
+import cinderclient
+import heatclient.client
+import novaclient.client
+import cinderclient.client
 
 from keystoneclient import session as kssession
 
@@ -108,13 +116,13 @@ class OpenStackConnection:
                 raise Exception("You have multiple heat stacks in your OpenStack Project and I'm not sure which one to use.\n You can select a stack by symlinking to a stack, for example if you have a stack called mycluster do ln -s %s mycluster\n"%stack)
 
         def auth(self):
-		self.nc = nvclient.Client(	auth_url=self.authUrl,
-			username=self.username,
-			api_key=self.passwd,
-			project_id=self.tenantName,
-			tenant_id=self.tenantID,
-			service_type="compute"
-			)
+#		self.nc = nvclient.Client(	auth_url=self.authUrl,
+#			username=self.username,
+#			api_key=self.passwd,
+#			project_id=self.tenantName,
+#			tenant_id=self.tenantID,
+#			service_type="compute"
+#			)
                 kwargs = {
                     'insecure': False,
                 }
@@ -131,23 +139,28 @@ class OpenStackConnection:
                                                     self.authUrl,
                                                     **kwargs)
 
-                endpoint = keystone_auth.get_endpoint(keystone_session,service_type='orchestration', region_name=None)
-
+                endpoint = keystone_auth.get_endpoint(keystone_session,service_type='compute', region_name=None)
+                kwargs = {
+                    'auth': keystone_auth,
+                }
+                api_version='2'
+                self.nc = novaclient.client.Client(api_version, endpoint, **kwargs)
 
+                endpoint = keystone_auth.get_endpoint(keystone_session,service_type='orchestration', region_name=None)
                 kwargs = {
-                    'username': self.username,
-                    'include_pass': False,
                     'session': keystone_session,
-                    'auth_url': self.authUrl,
-                    'region_name': '',
-                    'endpoint_type': 'publicURL',
-                    'service_type': 'orchestration',
-                    'password': self.passwd,
                     'auth': keystone_auth,
                 }
                 api_version=1
+                self.hc = heatclient.client.Client(api_version, endpoint, **kwargs)
 
-                self.hc = heat_client.Client(api_version, endpoint, **kwargs)
+                endpoint = keystone_auth.get_endpoint(keystone_session,service_type='volume', region_name=None)
+                kwargs = {
+#                    'session': keystone_session,
+                    'auth': keystone_auth,
+                }
+                api_version=1
+                self.cc = cinderclient.client.Client(api_version, endpoint, **kwargs)
 
 	
         def recurse_resources(self,stack,resource):
@@ -170,6 +183,7 @@ class OpenStackConnection:
                             instance_ids.extend(self.recurse_resources(stack=i,resource=r))
 
                 nc=self.nc
+#                cc=self.cc
 		inventory = {}
 		inventory['_meta'] = { 'hostvars': {} }
 		for server in nc.servers.list():
@@ -190,6 +204,9 @@ class OpenStackConnection:
                                             inventory[server.metadata['ansible_host_group']].append(hostname)
                                     else:
                                             inventory[server.metadata['ansible_host_group']] = [hostname]
+                            #print dir(server)
+                            if len(server.to_dict()['os-extended-volumes:volumes_attached']) >0:
+                                pass
                             # Set the other host variables
                             inventory['_meta']['hostvars'][hostname] = {}
                             inventory['_meta']['hostvars'][hostname]['ansible_ssh_host'] = server.networks.values()[0][0]
-- 
GitLab