several bug fixes
[plstackapi.git] / planetstack / core / api / slivers.py
1 from types import StringTypes
2 from django.contrib.auth import authenticate
3 from openstack.manager import OpenStackManager
4 from core.models import Sliver, Slice
5 from core.api.images import _get_images
6 from core.api.slices import _get_slices
7 from core.api.deployment_networks import _get_deployment_networks
8 from core.api.nodes import _get_nodes
9
10 def _get_slivers(filter):
11     if isinstance(filter, StringTypes) and filter.isdigit():
12         filter = int(filter)
13     if isinstance(filter, int):
14         slivers = Sliver.objects.filter(id=filter)
15     elif isinstance(filter, StringTypes):
16         slivers = Sliver.objects.filter(name=filter)
17     elif isinstance(filter, dict):
18         slivers = Sliver.objects.filter(**filter)
19     else:
20         slivers = []
21     return slivers
22  
23 def add_sliver(auth, fields):
24     user = authenticate(username=auth.get('username'),
25                         password=auth.get('password'))
26     
27     images = _get_images(fields.get('image'))
28     slices = _get_slices(fields.get('slice'))
29     deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
30     nodes = _get_nodes(fields.get('node'))
31     if images: fields['image'] = images[0]     
32     if slices: fields['slice'] = slices[0]     
33     if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]     
34     if nodes: fields['node'] = nodes[0]     
35
36     sliver = Sliver(**fields)
37     auth['tenant'] = sliver.slice.name
38     sliver.os_manager = OpenStackManager(auth=auth, caller = user)    
39     sliver.save()
40     return sliver
41
42 def update_sliver(auth, sliver, **fields):
43     return  
44
45 def delete_sliver(auth, filter={}):
46     user = authenticate(username=auth.get('username'),
47                         password=auth.get('password'))
48     slivers = _get_slivers(filter)
49     for sliver in slivers:
50         auth['tenant'] = sliver.slice.name 
51         slice.os_manager = OpenStackManager(auth=auth, caller = user)
52         sliver.delete()
53     return 1
54
55 def get_slivers(auth, filter={}):
56     user = authenticate(username=auth.get('username'),
57                         password=auth.get('password'))
58     if 'slice' in filter:
59         slices = _get_slices(filter.get('slice'))
60         if slices: filter['slice'] = slices[0]
61     slivers = _get_slivers(filter)
62     return slivers             
63         
64
65