Cloud plugin: handle error if AM is down
[myslice.git] / portal / slicetabcloud.py
1 # this somehow is not used anymore - should it not be ?
2 from django.core.context_processors import csrf
3 from django.http import HttpResponseRedirect
4 from django.contrib.auth import authenticate, login, logout
5 from django.template import RequestContext
6 from django.shortcuts import render_to_response
7 from django.shortcuts import render
8
9 from unfold.loginrequired import LoginRequiredView
10
11 from manifold.core.query        import Query
12 from manifoldapi.manifoldapi    import execute_query
13 from manifoldapi.manifoldresult import ManifoldResult
14 from ui.topmenu import topmenu_items, the_user
15 from myslice.configengine import ConfigEngine
16
17 from myslice.theme import ThemeView
18 from myslice.configengine import ConfigEngine
19 from myslice.settings import logger
20
21 from rest.sfa_api import sfa_client
22
23 from sfa.planetlab.plxrn import hash_loginbase
24
25 import urllib2,json
26
27 class CloudView (LoginRequiredView, ThemeView):
28     # parent View is portal/sliceview.py
29
30     def get_platforms (self, request):
31         username = self.request.user    
32         
33         pf_query = Query().get('local:platform').filter_by('disabled', '==', '0').filter_by('gateway_type', '==', 'sfa').select('platform')
34         res_platforms = execute_query(request, pf_query)
35         platforms = [p['platform'] for p in res_platforms]
36         return platforms
37
38
39     template_name = 'slice-tab-cloud.html'
40     def post (self, request, slicename):
41         logger.debug("---------------- POST CloudView ------------------")
42         logger.debug(request.POST)
43
44         username = self.request.user    
45         platforms = self.get_platforms(request)
46         cloud_platforms = ["onelab-cloud","fuseco"]
47         len_platforms = len(platforms)
48
49         #if 'action' in request.POST:
50         #    if request.POST['action'] == 'add':
51
52         #    elif request.POST['action'] == 'delete':
53         #        for key,val in request.POST:
54         #            if key.endswith('_vm'):
55         #                request.POST['platform']
56         #                
57         #    elif request.POST['action'] == 'reserve':
58         #    
59         #    else:
60         #        log.error("action %s not supported" % request.POST['action'])
61
62         env = { 'theme' : self.theme,
63                 'slicename':slicename,
64                 'platforms':platforms,
65                 'cloud_platforms':cloud_platforms,
66                 'len_platforms': len_platforms,
67                 'post_values': request.POST,
68                 'request':self.request,
69               }
70         return render_to_response(self.template, env, context_instance=RequestContext(request))
71
72
73     def get (self, request, slicename, state=None):
74   
75         username = self.request.user    
76         platforms = self.get_platforms(request)
77         cloud_platforms = ["onelab-cloud","fuseco"]
78         len_platforms = len(platforms)
79         result = sfa_client(request,'ListResources',platforms=cloud_platforms)
80
81         # Handle errors in ListResources, example AM is down
82         for key, value in result.iteritems():
83             logger.debug("key in result = %s" % key)
84             if 'error' in value:
85                 cloud_platforms.remove(key)
86
87         env = { 'theme' : self.theme,
88                 'slicename':slicename, 
89                 'platforms':platforms,
90                 'result':result,
91                 'cloud_platforms':cloud_platforms,
92                 'len_platforms': len_platforms,
93                 'request':self.request,
94               }
95         return render_to_response(self.template, env, context_instance=RequestContext(request))
96