2 # vim:set ts=4 sw=4 expandtab:
3 # NodeManager plugin to empower slivers to make API calls
6 Sliver authentication support for NodeManager.
19 def start(options, conf):
20 logger.log("sliverauth plugin starting up...")
22 def SetSliverTag(plc, slice, tagname, value):
23 node_id = tools.node_id()
24 slivertags=plc.GetSliceTags({"name":slice,"node_id":node_id})
25 if len(slivertags)==0:
26 slivertag_id=plc.AddSliceTag(slice,tagname,value,node_id)
28 slivertag_id=slivertags[0]['slice_tag_id']
29 plc.UpdateSliceTag(slivertag_id,value)
31 def GetSlivers(plc, data, conf):
32 if 'slivers' not in data:
33 logger.log("sliverauth: getslivers data lack's sliver information. IGNORING!")
37 for sliver in data['slivers']:
39 for attribute in sliver['attributes']:
40 name = attribute.get('tagname',attribute.get('name',''))
43 hmac = attribute['value']
47 d = [random.choice(string.letters) for x in xrange(32)]
49 SetSliverTag(plc,sliver['name'],'hmac',hmac)
51 path = '/vservers/%s/etc/planetlab' % sliver['name']
52 if os.path.exists(path):
53 keyfile = '%s/key' % path
55 if os.path.exists(keyfile):
61 # create a temporary file in the vserver
62 fd, name = tempfile.mkstemp('','key',path)
65 if os.path.exists(keyfile):
67 os.rename(name,keyfile)
69 os.chmod(keyfile,0400)