Esempio n. 1
0
 def CreateSliver(self,xrn,rspec_string,users,creds,options):
     xrn = Xrn(xrn, 'slice')
     slice_leaf = xrn.get_leaf()
     slice_hrn = xrn.get_hrn()
     authority = xrn.get_authority_hrn()
     expiration_date = self.driver.get_expiration(creds, slice_hrn)
     return self.driver.create_sliver (slice_leaf,authority,rspec_string, users, options, expiration_date)
Esempio n. 2
0
        def create_sliver (self,slice_leaf,authority,rspec_string, users, options, expiration_date):
                rspec = RSpec(rspec_string,'OcfVt')
                requested_attributes = rspec.version.get_slice_attributes()
                requested_attributes = self.shell.convert_to_uuid(requested_attributes) #Converts component_id URNs to UUIDs
		projectName = authority#users[0]['slice_record']['authority']
		sliceName = slice_leaf
		self.shell.CreateSliver(requested_attributes,projectName,sliceName,expiration_date)
		created_vms = list()
		nodes = list()
		for slivers in requested_attributes:
			node = self.shell.GetNodes(uuid=slivers['component_id'])
			#print "\n\n\n\n\n\nslivers: %s\n\n\n\n\n\n" % slivers['slivers']
			for vm in slivers['slivers']:
				#node = self.shell.GetNodes(uuid=vm['server-id'])
				if not node in nodes:
					nodes.append(node)
                                try:
                                       #print "\n\n\n\n\n\nusers: %s\n\n\n\n\n\n" % str(users)
                                       for user in users:
                                           xrn = Xrn(user['urn'], 'user')
                                           user_name = xrn.get_leaf()
                                           # Store user SSH key for future use
                                           for user_key in user['keys']:
                                               if not VirtualMachineKeys.objects.filter(project_uuid=vm["project-id"], slice_uuid=vm["slice-id"], vm_uuid=vm['uuid'],user_name=user_name ,ssh_key=user_key):
                                                   key_entry = VirtualMachineKeys(project_uuid=vm["project-id"], slice_uuid=vm["slice-id"], vm_uuid=vm['uuid'],user_name=user_name ,ssh_key=user_key)
                                                   key_entry.save()
                                except Exception as e:
                                           logging.error("create_sliver > Could not store user SSH key. Details: %s" % str(e))     
				#ip = self.shell.get_ip_from_vm(vm_name=vm['name'],slice_name=vm['slice-name'],project=authority)
				#created_vms.append({'vm-name':vm['name'],'vm-ip':ip,'vm-state':'ongoing','slice-name':slice_leaf,'node-name':node.name})
		#add ssh keys to ldap of ssh gateway
		if len(nodes):
			logging.info("create_slice > Connecting to LDAP")
			session = ldapManager()
			con = session.bind()
			logging.info("create_slice > Connected to LDAP. Connection: %s" % str(con))
			if con:
				logging.info("LDAP: trying to create the following users: %s" % str(users))
				for user in users:
					logging.info("Sending users to LDAP")
					#logging.error("project: "+str(projectName)+" slicename"+str(sliceName))
					ldapprj = "%s.%s" % (projectName, sliceName)
					ldapprj = ldapprj.replace("\\" ,"")
					logging.info("LDAP project: " + ldapprj)
					session.add_modify_project_users(con, user["urn"], ldapprj, user["keys"])
					logging.info("User added to project: " + str(ldapprj) + ", SSH key: " + str(user['keys']))
				#status=session.add_project(con,projectName+"."+sliceName)
				#if status != 0:
					#logging.error("users"+users)
				#	for index,user in enumerate(users):
						#logging.error(user)
				#		status=session.add_user(con,"user"+str(index),user['urn'],projectName+"."+sliceName,user['keys'])
				#		if status ==0:
				#			logging.error("can't add user to ldap of ssh gateway:"+ str(user))
				#else:
				#	logging.error("can't add project to ldap of ssh gateway: "+projectName+"."+sliceName)
			else:
				logging.error("Cannot contact LDAP of the SSH gateway")
		return self.aggregate.get_rspec(slice_leaf=slice_leaf,projectName=projectName,version=rspec.version,created_vms=created_vms,new_nodes=nodes)
Esempio n. 3
0
 def ListResources(self, options):
     slice_xrn = options.get('geni_slice_urn', None)
     if slice_xrn:
         xrn = Xrn(slice_xrn,'slice')
         slice_leaf = xrn.get_leaf()
         options['slice'] = slice_leaf
     rspec = self.driver.list_resources(options)
     if options.has_key('geni_compressed') and options['geni_compressed'] == True:
         rspec = zlib.compress(rspec).encode('base64')
     return rspec
Esempio n. 4
0
    def call(self, xrn, creds, type):
        xrn=Xrn(xrn,type=type)
        
        # validate the cred
        valid_creds = self.api.auth.checkCredentials(creds, "remove")
        self.api.auth.verify_object_permission(xrn.get_hrn())

        #log the call
        origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn()
        self.api.logger.info("interface: %s\tmethod-name: %s\tcaller-hrn: %s\ttarget-urn: %s"%(
                self.api.interface, self.name, origin_hrn, xrn.get_urn()))

        return self.api.manager.Remove(self.api, xrn) 
Esempio n. 5
0
    def to_sfa_rspec(rspec, content_type = None):
        if not isinstance(rspec, RSpec):
            pg_rspec = RSpec(rspec)
        else:
            pg_rspec = rspec
        
        version_manager = VersionManager()
        sfa_version = version_manager._get_version('sfa', '1')    
        sfa_rspec = RSpec(version=sfa_version)

        #nodes = pg_rspec.version.get_nodes()
        #sfa_rspec.version.add_nodes(nodes())
        #sfa_rspec.version.add_links(pg_rspec.version.get_links())
        #return sfa_rspec.toxml() 

        # get network
        networks = pg_rspec.version.get_networks()
        network_hrn = networks[0]["name"]
        network_element = sfa_rspec.xml.add_element('network', name=network_hrn, id=network_hrn)
        
        # get nodes
        pg_nodes_elements = pg_rspec.version.get_nodes()
        nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers()
        i = 1
        for pg_node in pg_nodes_elements:
            attribs = dict(pg_node.items())
            attribs['id'] = 'n'+str(i)
            
            node_element = network_element.add_element('node')
            for attrib in attribs:
                if type(attribs[attrib]) == str:
                    node_element.set(attrib, attribs[attrib])
            urn = pg_node["component_id"]
            if urn:
                if type(urn)==list:
                    # legacy code, not sure if urn is ever a list...
                    urn = urn[0]
                hostname = Xrn.urn_split(urn)[-1]
                hostname_element = node_element.add_element('hostname')
                hostname_element.set_text(hostname)
                if hostname in nodes_with_slivers:
                    node_element.add_element('sliver')

            for hardware_type in pg_node["hardware_types"]:
                if "name" in hardware_type:
                    node_element.add_element("hardware_type", name=hardware_type["name"])
                     
            # just copy over remaining child elements  
            #for child in pg_node_element.getchildren():
            #    node_element.append(transform(child).getroot())
            i = i+1
 
        return sfa_rspec.toxml()
Esempio n. 6
0
    def reset_slice(self,xrn):
        xrn = Xrn(xrn)
	slice_leaf = xrn.get_leaf()
	authority = xrn.get_authority_hrn()
        return self.driver.crud_slice (slice_leaf,authority,action='reset_slice')
Esempio n. 7
0
    def DeleteSliver(self, xrn, options):
	#TODO: Check the options or xrn to get a single vm.
        xrn = Xrn(xrn)
        slice_leaf = xrn.get_leaf()
	authority = xrn.get_authority_hrn()
        return self.driver.crud_slice(slice_leaf,authority,action='delete_slice')
Esempio n. 8
0
    def SliverStatus (self, xrn, options):
        xrn = Xrn(xrn,'slice')
	slice_leaf = xrn.get_leaf()
	authority = xrn.get_authority_hrn()
	return self.driver.sliver_status(slice_leaf,authority,options)