rough cleanup of the slicemanager business
[sfa.git] / sfa / managers / component_manager_pl.py
1 from sfa.util.faults import SliverDoesNotExist
2 from sfa.util.version import version_core
3 from sfa.util.py23 import xmlrpc_client
4
5 from sfa.trust.sfaticket import SfaTicket
6
7 from sfa.planetlab.plxrn import PlXrn
8
9
10 def GetVersion(api, options):
11     return version_core({'interface': 'component',
12                          'testbed': 'myplc'})
13
14
15 def init_server():
16     from sfa.server import sfa_component_setup
17     # get current trusted gids
18     try:
19         sfa_component_setup.get_trusted_certs()
20     except:
21         # our keypair may be old, try refreshing
22         sfa_component_setup.get_node_key()
23         sfa_component_setup.GetCredential(force=True)
24         sfa_component_setup.get_trusted_certs()
25
26
27 def SliverStatus(api, slice_xrn, creds):
28     result = {}
29     result['geni_urn'] = slice_xrn
30     result['geni_status'] = 'unknown'
31     result['geni_resources'] = {}
32     return result
33
34
35 def start_slice(api, xrn, creds):
36     slicename = PlXrn(xrn, type='slice').pl_slicename()
37     api.driver.nodemanager.Start(slicename)
38
39
40 def stop_slice(api, xrn, creds):
41     slicename = PlXrn(xrn, type='slice').pl_slicename()
42     api.driver.nodemanager.Stop(slicename)
43
44
45 def DeleteSliver(api, xrn, creds, call_id):
46     slicename = PlXrn(xrn, type='slice').pl_slicename()
47     api.driver.nodemanager.Destroy(slicename)
48
49
50 def reset_slice(api, xrn):
51     slicename = PlXrn(xrn, type='slice').pl_slicename()
52     if not api.sliver_exists(slicename):
53         raise SliverDoesNotExist(slicename)
54     api.driver.nodemanager.ReCreate(slicename)
55
56 # xxx outdated - this should accept a credential & call_id
57
58
59 def ListSlices(api):
60     # this returns a tuple, the data we want is at index 1
61     xids = api.driver.nodemanager.GetXIDs()
62     # unfortunately the data we want is given to us as
63     # a string but we really want it as a dict
64     # lets eval it
65     slices = eval(xids[1])
66     return slices.keys()
67
68
69 def redeem_ticket(api, ticket_string):
70     ticket = SfaTicket(string=ticket_string)
71     ticket.decode()
72     hrn = ticket.attributes['slivers'][0]['hrn']
73     slicename = PlXrn(hrn).pl_slicename()
74     if not api.sliver_exists(slicename):
75         raise SliverDoesNotExist(slicename)
76
77     # convert ticket to format nm is used to
78     nm_ticket = xmlrpc_client.dumps((ticket.attributes,), methodresponse=True)
79     api.driver.nodemanager.AdminTicket(nm_ticket)