add networkPorts
[plstackapi.git] / planetstack / core / xoslib / objects / sliceplus.py
1 from core.models.slice import Slice
2 from plus import PlusObjectMixin
3
4 class SlicePlus(Slice, PlusObjectMixin):
5     class Meta:
6         proxy = True
7
8     def getSliceInfo(self, user=None):
9         used_sites = {}
10         used_deployments = {}
11         sliverCount = 0
12         for sliver in self.slivers.all():
13             site = sliver.node.site_deployment.site
14             deployment = sliver.node.site_deployment.deployment
15             used_sites[site.name] = used_sites.get(site.name, 0) + 1
16             used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
17             sliverCount = sliverCount + 1
18
19         roles = []
20         if (user!=None):
21             roles = [x.role.role for x in self.sliceprivileges.filter(user=user)]
22
23         return {"sitesUsed": used_sites,
24                 "deploymentsUsed": used_deployments,
25                 "sliverCount": sliverCount,
26                 "siteCount": len(used_sites.keys()),
27                 "roles": roles}
28
29     @property
30     def networkPorts(self):
31         # XXX this assumes there is only one network that can have ports bound
32         # to it for a given slice. This is intended for the tenant view, which
33         # will obey this field.
34         networkPorts = ""
35         for networkSlice in self.networkslices.all():
36             network = networkSlice.network
37             if network.ports:
38                 networkPorts = network.ports
39
40         return networkPorts
41
42     @networkPorts.setter
43     def networkPorts(self, value):
44         print "XXX set networkPorts to", value
45
46     @staticmethod
47     def select_by_user(user):
48         if user.is_admin:
49             qs = SlicePlus.objects.all()
50         else:
51             slice_ids = [sp.slice.id for sp in SlicePrivilege.objects.filter(user=user)]
52             qs = SlicePlus.objects.filter(id__in=slice_ids)
53         return qs