Ignore:
Timestamp:
Mar 7, 2010 8:01:52 AM (14 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
062b991
Parents:
d101c8c
Message:

Add slice/sliver renewal

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/proxy_protogeni_segment.py

    rd101c8c rdd3e38b  
    9191    # name) has an entry with the allocated machine in hostname and the
    9292    # interfaces in 'interfaces'.  I love having XML parser code lying around.
    93     def manifest_to_dict(self, manifest):
    94         if self.debug:
     93    def manifest_to_dict(self, manifest, ignore_debug=False):
     94        if self.debug and not ignore_debug:
    9595            self.log.debug("Returning null manifest dict")
    9696            return { }
     
    388388                    print >>script, "sudo perl -I%s/lib %s/bin/import_key.pl /users/%s/.ssh/authorized_keys /root/.ssh/authorized_keys" % (fed_dir, fed_dir, user)
    389389                    # XXX: debug
     390                    # start routing on nodes
     391                    print >>script, "sudo perl %s/bin/protogeni_routing.pl" % \
     392                            fed_dir
    390393                    if e.get_attribute('startup'):
    391394                        print >>script, "%s \\$USER '%s'" % \
     
    541544
    542545        # With manifest in hand, we can export the portal node names.
    543         nodes = self.manifest_to_dict(manifest)
    544         print nodes
     546        nodes = self.manifest_to_dict(manifest, ignore_debug=True)
    545547        self.export_store_info(export_certfile, nodes, parent.ssh_port,
    546548                connInfo)
     
    589591        else:
    590592            parent.state_lock.acquire()
     593            parent.allocation[aid]['slice_name'] = slicename
    591594            parent.allocation[aid]['slice_credential'] = slice_cred
    592595            parent.allocation[aid]['sliver_credential'] = sliver_cred
     
    644647        return rv
    645648
     649class renew_segment(segment_base):
     650    def __init__(self, log=None, debug=False, keyfile=None,
     651            ch_url=None, sa_url=None, cm_url=None):
     652        segment_base.__init__(self, log=log, keyfile=keyfile, debug=debug,
     653                ch_url=cm_url, sa_url=sa_url, cm_url=cm_url)
     654
     655    def __call__(self, name, scred, interval, certfile, certpw):
     656        ctxt = fedd_ssl_context(my_cert=certfile, password=certpw)
     657        try:
     658            expiration = time.strftime("%Y%m%dT%H:%M:%S",
     659                    time.gmtime(time.time() + interval))
     660            cred = self.pg_call(self.sa_url, 'GetCredential', {}, ctxt)
     661
     662            param = {
     663                    'credential': scred,
     664                    'expiration': expiration
     665                    }
     666            r = self.pg_call(self.sa_url, 'RenewSlice', param, ctxt)
     667            param = {
     668                    'credential': cred,
     669                    'hrn': name,
     670                    'type': 'Slice',
     671                    }
     672            slice = self.pg_call(self.sa_url, 'Resolve', param, ctxt)
     673            uuid = slice.get('uuid', None)
     674            if uuid == None:
     675                sys.exit('No uuid for %s' % slicename)
     676
     677            print 'Calling GetCredential (uuid)'
     678            param = {
     679                    'credential': cred,
     680                    'uuid': uuid,
     681                    'type': 'Slice',
     682                    }
     683            new_scred = self.pg_call(self.sa_url, 'GetCredential', param, ctxt)
     684            f = open('./new_slice_cred', 'w')
     685            print >>f, new_scred
     686            f.close()
     687
     688        except self.ProtoGENIError, e:
     689            self.log.error("Failed to extend slice %s: %s" % (name, e))
     690            return None
     691        try:
     692            print 'Calling RenewSlice (CM)'
     693            param = {
     694                    'credential': new_scred,
     695                    }
     696            r = self.pg_call(self.cm_url, 'RenewSlice', param, ctxt)
     697        except self.ProtoGENIError, e:
     698            self.log.warn("Failed to renew sliver for %s: %s" % (name, e))
     699
     700        return new_scred
     701   
Note: See TracChangeset for help on using the changeset viewer.