CORD-880 add accessor for core api
Change-Id: Idd83ac235504b7266a6a72f9a50831f00f5ad22b
diff --git a/xos/xos_client/xosapi/convenience/instance.py b/xos/xos_client/xosapi/convenience/instance.py
new file mode 100644
index 0000000..10da548
--- /dev/null
+++ b/xos/xos_client/xosapi/convenience/instance.py
@@ -0,0 +1,55 @@
+from xosapi.orm import ORMWrapper, register_convenience_wrapper
+
+class ORMWrapperInstance(ORMWrapper):
+
+ def all_ips(self):
+ ips={}
+ for ns in self.ports.all():
+ if ns.ip:
+ ips[ns.network.name] = ns.ip
+ return ips
+
+ def all_ips_string(self):
+ result = []
+ ips = self.all_ips()
+ for key in sorted(ips.keys()):
+ #result.append("%s = %s" % (key, ips[key]))
+ result.append(ips[key])
+ return ", ".join(result)
+
+ def get_public_ip(self):
+ for ns in self.ports.all():
+ if (ns.ip) and (ns.network.template.visibility=="public") and (ns.network.template.translation=="none"):
+ return ns.ip
+ return None
+
+ # return an address on nat-net
+ def get_network_ip(self, pattern):
+ for ns in self.ports.all():
+ if pattern in ns.network.name.lower():
+ return ns.ip
+ return None
+
+ # return an address that the synchronizer can use to SSH to the instance
+ def get_ssh_ip(self):
+ # first look specifically for a management_local network
+ for ns in self.ports.all():
+ if ns.network.template and ns.network.template.vtn_kind=="MANAGEMENT_LOCAL":
+ return ns.ip
+
+ # for compatibility, now look for any management network
+ management=self.get_network_ip("management")
+ if management:
+ return management
+
+ # if all else fails, look for nat-net (for OpenCloud?)
+ return self.get_network_ip("nat")
+
+ @property
+ def controller(self):
+ if self.node and self.node.site_deployment:
+ return self.node.site_deployment.controller
+ else:
+ return None
+
+register_convenience_wrapper("Instance", ORMWrapperInstance)