from core.models import Slice, SlicePrivilege, SliceRole, Sliver, Site, Node, User
from plus import PlusObjectMixin
from operator import itemgetter, attrgetter
+from rest_framework.exceptions import APIException
class SlicePlus(Slice, PlusObjectMixin):
class Meta:
def getSliceInfo(self, user=None):
if not self._sliceInfo:
used_sites = {}
+ ready_sites = {}
used_deployments = {}
sliverCount = 0
sshCommands = []
used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
sliverCount = sliverCount + 1
- if (sliver.instance_id and sliver.instance_name):
- sshCommand = 'ssh -o "ProxyCommand ssh -q %s@%s" ubuntu@%s' % (sliver.instance_id, sliver.node.name, sliver.instance_name)
- sshCommands.append(sshCommand);
+ sshCommand = sliver.get_ssh_command()
+ if sshCommand:
+ sshCommands.append(sshCommand)
+
+ ready_sites[site.name] = ready_sites.get(site.name, 0) + 1
users = {}
for priv in SlicePrivilege.objects.filter(slice=self):
networkPorts = network.ports
self._sliceInfo= {"sitesUsed": used_sites,
+ "sitesReady": ready_sites,
"deploymentsUsed": used_deployments,
"sliverCount": sliverCount,
"siteCount": len(used_sites.keys()),
return self._sliceInfo
+ @property
+ def site_ready(self):
+ return self.getSliceInfo()["sitesReady"]
+
+ @site_ready.setter
+ def site_ready(self, value):
+ pass
+
@property
def site_allocation(self):
return self._site_allocation
nodes = self.get_node_allocation([site])
if (not nodes):
- raise ValueError("no nodes in site %s" % site_name)
+ raise APIException(detail="no nodes in site %s" % site_name)
while (len(slivers) < desired_allocation):
# pick the least allocated node
# uh oh, we didn't find a network
- raise ValueError("No network was found that ports could be set on")
+ raise APIException(detail="No network was found that ports could be set on")