1 from sfa.util.faults import SliverDoesNotExist
2 from sfa.util.version import version_core
3 from sfa.util.py23 import xmlrpc_client
5 from sfa.trust.sfaticket import SfaTicket
7 from sfa.planetlab.plxrn import PlXrn
10 def GetVersion(api, options):
11 return version_core({'interface': 'component',
16 from sfa.server import sfa_component_setup
17 # get current trusted gids
19 sfa_component_setup.get_trusted_certs()
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()
27 def SliverStatus(api, slice_xrn, creds):
29 result['geni_urn'] = slice_xrn
30 result['geni_status'] = 'unknown'
31 result['geni_resources'] = {}
35 def start_slice(api, xrn, creds):
36 slicename = PlXrn(xrn, type='slice').pl_slicename()
37 api.driver.nodemanager.Start(slicename)
40 def stop_slice(api, xrn, creds):
41 slicename = PlXrn(xrn, type='slice').pl_slicename()
42 api.driver.nodemanager.Stop(slicename)
45 def DeleteSliver(api, xrn, creds, call_id):
46 slicename = PlXrn(xrn, type='slice').pl_slicename()
47 api.driver.nodemanager.Destroy(slicename)
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)
56 # xxx outdated - this should accept a credential & call_id
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
65 slices = eval(xids[1])
69 def redeem_ticket(api, ticket_string):
70 ticket = SfaTicket(string=ticket_string)
72 hrn = ticket.attributes['slivers'][0]['hrn']
73 slicename = PlXrn(hrn).pl_slicename()
74 if not api.sliver_exists(slicename):
75 raise SliverDoesNotExist(slicename)
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)