Node class
diff --git a/nodes/openstack.py b/nodes/openstack.py
index 8b425cb..7444e46 100644
--- a/nodes/openstack.py
+++ b/nodes/openstack.py
@@ -1,11 +1,33 @@
-from novaclient.v1_1 import client as novacl
+import node
+
+from novaclient.client import Client
+
+
+def get_floating_ip(vm):
+ addrs = vm.addresses
+ for net_name, ifaces in addrs.items():
+ for iface in ifaces:
+ if iface.get('OS-EXT-IPS:type') == "floating":
+ return iface['addr']
+ raise Exception("No floating ip found for VM %s" % repr(vm))
+
+
+def discover_openstack_vms(conn_details):
+ """Discover vms running in openstack
+ :param conn_details - dict with openstack connection details -
+ auth_url, api_key (password), username
+ """
+ client = Client(version='1.1', **conn_details)
+ servers = client.servers.list(search_opts={"all_tenant": True})
+ return [node.Node(get_floating_ip(server), ["test_vm"])
+ for server in servers]
def discover_openstack_nodes(conn_details):
"""Discover openstack nodes
- :param connection_details - dict with openstack connection details -
+ :param conn_details - dict with openstack connection details -
auth_url, api_key (password), username
"""
- client = novacl.Client(**conn_details)
- servers = client.servers.list(search_opts={"all_tenant": True})
- return servers
+ client = Client(version='1.1', **conn_details)
+ services = client.services.list()
+ return [node.Node(server.ip, ["test_vm"]) for server in services]