16a7e0bb698236898d0fdfb7ee40827d7c5e9cb5
[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.keys import _get_keys
7 from core.api.slices import _get_slices
8 from core.api.deployment_networks import _get_deployment_networks
9 from core.api.nodes import _get_nodes
10
11 def _get_slivers(filter):
12     if isinstance(filter, StringTypes) and filter.isdigit():
13         filter = int(filter)
14     if isinstance(filter, int):
15         slivers = Sliver.objects.filter(id=filter)
16     elif isinstance(filter, StringTypes):
17         slivers = Sliver.objects.filter(name=filter)
18     elif isinstance(filter, dict):
19         slivers = Sliver.objects.filter(**filter)
20     else:
21         slivers = []
22     return slivers
23  
24 def add_sliver(auth, fields):
25     user = authenticate(username=auth.get('username'),
26                         password=auth.get('password'))
27     
28     images = _get_images(fields.get('image'))
29     keys = _get_keys(fields.get('key'))
30     slices = _get_slices(fields.get('slice'))
31     deployment_networks = _get_deployment_networks(fields.get('deploymentNetwork'))
32     nodes = _get_nodes(fields.get('node'))
33     if images: fields['image'] = images[0]     
34     if keys: fields['key'] = keys[0]     
35     if slices: fields['slice'] = slices[0]     
36     if deployment_networks: fields['deploymentNetwork'] = deployment_networks[0]     
37     if nodes: fields['node'] = nodes[0]     
38
39     sliver = Sliver(**fields)
40     auth['tenant'] = sliver.slice.name
41     sliver.os_manager = OpenStackManager(auth=auth, caller = user)    
42     sliver.save()
43     return sliver
44
45 def update_sliver(auth, sliver, **fields):
46     return  
47
48 def delete_sliver(auth, filter={}):
49     user = authenticate(username=auth.get('username'),
50                         password=auth.get('password'))
51     slivers = _get_slivers(filter)
52     for sliver in slivers:
53         auth['tenant'] = sliver.slice.name 
54         slice.os_manager = OpenStackManager(auth=auth, caller = user)
55         sliver.delete()
56     return 1
57
58 def get_slivers(auth, filter={}):
59     user = authenticate(username=auth.get('username'),
60                         password=auth.get('password'))
61     if 'slice' in filter:
62         slices = _get_slices(filter.get('slice'))
63         if slices: filter['slice'] = slices[0]
64     slivers = _get_slivers(filter)
65     return slivers             
66         
67
68