Example #1
0
    def reserve_vms(self, slice_urn, reservation, expiration=None, users=list()):
        # URNs of foreign RMs are not served
        current_cm_hrn = self.__config.CM_HRN
        cm_id = getattr(reservation, "get_component_manager_id")
        if callable(cm_id):
            cm_id = urn_to_hrn(cm_id())[0]
        if current_cm_hrn != cm_id:
            # No reservation is provided for URNs of other CMs
            return None
        # VMs are dynamic resource -> no collision will happen
        slice_hrn, hrn_type = urn_to_hrn(slice_urn)

        if not reservation.get_component_id() == None:
            server_hrn, hrn_type = urn_to_hrn(reservation.get_component_id())
            server_name = server_hrn.split(".")[-1]
            VTAMDriver.logger.debug("server_name = " + server_name + ", server_hrn = " + server_hrn)
        else:
            server_name = self.__get_best_server()
            server_hrn = self.__config.CM_HRN + "." + server_name
            VTAMDriver.logger.debug("server_name = " + server_name + ", server_hrn = " + server_hrn)
        server = VTServer.objects.get(name=server_name).getChildObject()
        server_id = server.id 
        if reservation.get_id():
            if Reservation.objects.filter(sliceName=slice_hrn, projectName=slice_hrn, name=reservation.get_id()) or VirtualMachine.objects.filter(sliceName=slice_hrn, projectName=slice_hrn, name=reservation.get_id()):
                raise Exception("There is another VM with client id %s on this slice already <GENI PROVISIONED> or <GENI ALLOCATED>" %reservation.get_id())
            reservation_name = reservation.get_id()
        else:
            reservation_name = str(random.randint(0,1000*1000))
        
        if expiration == None:
            expiration = datetime.utcnow() + timedelta(hours=168) 

        reserved_vm = Reservation()
        #reserved_vm.reservation_id = random.randint(0,1000)
        reserved_vm.server_id = server_id
        reserved_vm.set_slice_name(slice_hrn)
        reserved_vm.set_project_name(slice_hrn)
        reserved_vm.set_name(reservation_name)
        reserved_vm.set_valid_until(str(expiration))
        reserved_vm.uuid = str(uuid.uuid4())
        reserved_vm.set_disk_image(reservation.get_disk_image())
        reserved_vm.save()
       
        if not reservation.get_sliver():
            reservation.set_sliver(Sliver())
         
        # Set information for sliver
        sliver_urn = hrn_to_urn(server_hrn+"." + slice_hrn.split(".")[-1] + "." +str(reservation_name), "sliver")
        VTAMDriver.logger.debug("XXX sliver_urn = " + sliver_urn)
        reservation.get_sliver().set_urn(sliver_urn)
        reservation.get_sliver().set_allocation_status(self.GENI_ALLOCATED)
        reservation.get_sliver().set_expiration(expiration)
        reservation.get_sliver().set_operational_status(self.GENI_NOT_READY)
        reservation.get_sliver().set_client_id(reservation_name)
        reservation.set_allocation_status = self.GENI_ALLOCATED
        #vm_params = self.__urn_to_vm_params(slice_urn)
        #self.__store_user_keys(users, vm_params)
        return reservation
Example #2
0
 def __vm_to_ssh_keys_params_list(self, vm, users=[]):
     params_list = list()
     params = {"project_uuid": vm.projectId,
             "slice_uuid": vm.sliceId,
             "vm_uuid": vm.uuid,
             }
     if not users:
         params_list.append(params)
    
     for user in users:
         # Reuse "params" structure by operating on a new structure
         params_user = copy.deepcopy(params)
         # Retrieve user string from URN
         user_id_key = "urn"
         if user_id_key not in user:
             # Get the other key that's not the user's keys
             # Depending on client: "urn", "name", ...
             user_id_key = set(user.keys()) - set(["keys"])
             user_id_key = user_id_key.pop()
         try:
             user_name = urn_to_hrn(user[user_id_key])[0].split(".")[-1]
         except:
             user_name = user[user_id_key]
         params_user.update({"user_name": user_name,})
         for key in user["keys"]:
             params_user_keys = copy.deepcopy(params_user)
             params_user_keys.update({"ssh_key": key,})
             params_list.append(params_user_keys)
     return params_list
Example #3
0
 def __urn_to_vm_params(self, urn):
     #XXX For now, I prefer to have the same slice name as project name
     hrn, hrn_type = urn_to_hrn(urn)
     if hrn_type == "sliver":
         value = hrn.split(".")[-1]
         try:
             # XXX Why the int() conversion in the "sliver_part"
             return {"id":int(value)}
         except:
             # E.g. VMs from jFed
             slice_name = hrn.split(".")[-2]
             # Partial matching (RegEx...)
             return {"name":value, "sliceName__iregex":slice_name}
     elif hrn_type == "slice":
         return {"projectName":hrn, "sliceName":hrn} 
     else:
         return None
Example #4
0
 def test_should_get_hrn_component_manager(self):
     cm_hrn, hrn_type = urn_to_hrn(self.component_manager_urn_template)
     print cm_hrn, hrn_type
Example #5
0
 def test_should_get_hrn_node(self):
     node_hrn, hrn_type = urn_to_hrn(self.node_urn_template)
     self.assertEquals(self.node_hrn, node_hrn)
     self.assertEquals(self.node_type, hrn_type)
Example #6
0
 def test_should_get_hrn_sliver(self):
     sliver_hrn, hrn_type = urn_to_hrn(self.sliver_urn_template)
     self.assertEquals(self.sliver_hrn, sliver_hrn)
     self.assertEquals(self.sliver_type, hrn_type)
Example #7
0
 def test_should_get_hrn_authority(self):
     authority_hrn, hrn_type = urn_to_hrn(self.authority_urn_template)
     self.assertEquals(self.authority_hrn, authority_hrn)
     self.assertEquals(self.authority_type, hrn_type)
Example #8
0
 def test_should_get_hrn_component_manager(self):
     cm_hrn, hrn_type = urn_to_hrn(self.component_manager_urn_template)
     print cm_hrn, hrn_type
Example #9
0
 def test_should_get_hrn_node(self):
     node_hrn, hrn_type = urn_to_hrn(self.node_urn_template)
     self.assertEquals(self.node_hrn, node_hrn)
     self.assertEquals(self.node_type, hrn_type)
Example #10
0
 def test_should_get_hrn_sliver(self):
     sliver_hrn, hrn_type = urn_to_hrn(self.sliver_urn_template)
     self.assertEquals(self.sliver_hrn, sliver_hrn)
     self.assertEquals(self.sliver_type, hrn_type)
Example #11
0
 def test_should_get_hrn_authority(self):
     authority_hrn, hrn_type = urn_to_hrn(self.authority_urn_template)
     self.assertEquals(self.authority_hrn, authority_hrn)
     self.assertEquals(self.authority_type, hrn_type)