Example #1
0
    def provision(self, urns, client_cert, credentials, best_effort, end_time,
                  geni_users):
        """Documentation see [geniv3rpc] GENIv3DelegateBase.
        {geni_users} is not relevant here."""
        se_manifest, se_slivers, last_slice = SERMv3ManifestFormatter(), [], ""
        slivers=[]

        for urn in urns:
            if self._verify_users:
                logger.debug("provision: authenticate the user...")
                client_urn, client_uuid, client_email =\
                    self.auth(client_cert, credentials, urn, ("renewsliver",))
                logger.info("Client urn=%s, uuid=%s, email=%s" % (
                    client_urn, client_uuid, client_email,))

            logger.info("urn=%s, best_effort=%s, end_time=%s, geni_users=%s" % (
                urn, best_effort, end_time, geni_users,))

            links_db, nodes, links = self.SESlices.get_link_db(urn)
            sliceVlansPairs = self.SESlices.get_slice_vlan_pairs(urn)
            self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs)
            # reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)["ports"]
            reservation_ports = self.SESlices._allocate_ports_in_slice(nodes=nodes, slice_urn=urn)["ports"]

            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job( se_job_unprovision,
                                                            "date",
                                                            run_date=alarm_time,
                                                            args=[datetime.now(),
                                                            links_db,
                                                            urn])

            
            # Retrieve allocation status and modify after the method's operation
            links_db, _, _ = self.__update_fetch_allocation_status_slivers(urn, "geni_provisioned")

            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job( se_job_unprovision,
                                                            "date",
                                                            run_date=alarm_time,
                                                            args=[datetime.now(),
                                                            links_db,
                                                            urn])

            for sliver in links_db["geni_sliver_urn"]:
                slivers.append( 
                                {   
                                    "geni_sliver_urn": sliver,
                                    "geni_expires": end_time,
                                    "geni_allocation_status": links_db["geni_allocation_status"],
                                    "geni_operational_status": links_db["geni_operational_status"],
                                }
                            )

            logger.info("provision successfully completed: %s", urn)

        return str(se_manifest), slivers
Example #2
0
    def provision(self, urns, client_cert, credentials, best_effort, end_time,
                  geni_users):
        """Documentation see [geniv3rpc] GENIv3DelegateBase.
        {geni_users} is not relevant here."""
        se_manifest, se_slivers, last_slice = SERMv3ManifestFormatter(), [], ""
        slivers=[]

        for urn in urns:
            if self._verify_users:
                logger.debug("provision: authenticate the user...")
                client_urn, client_uuid, client_email =\
                    self.auth(client_cert, credentials, urn, ("renewsliver",))
                logger.info("Client urn=%s, uuid=%s, email=%s" % (
                    client_urn, client_uuid, client_email,))

            logger.info("urn=%s, best_effort=%s, end_time=%s, geni_users=%s" % (
                urn, best_effort, end_time, geni_users,))

            links_db, nodes, links = self.SESlices.get_link_db(urn)
            sliceVlansPairs = self.SESlices.get_slice_vlan_pairs(urn)
            self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs)
            reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)["ports"]

            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job( se_job_unprovision,
                                                            "date",
                                                            run_date=alarm_time,
                                                            args=[datetime.now(),
                                                            links_db,
                                                            urn])

            
            # Retrieve allocation status and modify after the method's operation
            links_db, _, _ = self.__update_fetch_allocation_status_slivers(urn, "geni_provisioned")

            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job( se_job_unprovision,
                                                            "date",
                                                            run_date=alarm_time,
                                                            args=[datetime.now(),
                                                            links_db,
                                                            urn])

            for sliver in links_db["geni_sliver_urn"]:
                slivers.append( 
                                {   
                                    "geni_sliver_urn": sliver,
                                    "geni_expires": end_time,
                                    "geni_allocation_status": links_db["geni_allocation_status"],
                                    "geni_operational_status": links_db["geni_operational_status"],
                                }
                            )

            logger.info("provision successfully completed: %s", urn)

        return str(se_manifest), slivers
Example #3
0
    def allocate(self,
                 slice_urn,
                 client_cert,
                 credentials,
                 rspec,
                 end_time=None):
        """Documentation see [geniv3rpc] GENIv3DelegateBase."""
        # TODO: Check if sliver_urn is valid for RO
        result = []
        #Default end time = 30 days
        default_end_time = datetime.now() + timedelta(days=30)
        if end_time == None:
            end_time = default_end_time
        if self._verify_users:
            logger.debug("allocate: authenticate the user...")
            client_urn, client_uuid, client_email =\
                self.auth(client_cert, credentials, slice_urn, ("createsliver",))
            logger.info("Client urn=%s, uuid=%s, email=%s" % (
                client_urn,
                client_uuid,
                client_email,
            ))

        logger.info("slice_urn=%s, end_time=%s, rspec=%s" % (
            slice_urn,
            end_time,
            rspec,
        ))
        req_rspec = SERMv3RequestParser(from_string=rspec)

        self.__validate_rspec(req_rspec.get_rspec())

        se_manifest, se_slivers, se_db_slivers = SERMv3ManifestFormatter(
        ), [], []

        links = req_rspec.links()
        nodes = req_rspec.nodes()

        # Workaround for "1:n" case: Get Vlan pairs from link->felix:vlan param
        sliceVlansPairs = req_rspec.getVlanPairs()

        # check if the requested resources (ports, vlans) are available
        reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)
        availability_result = self.SEResources.check_available_resources(
            reservation_ports['ports'])

        # print "WWWW: ", self.SEResources.get_port_mapping()

        if availability_result != False:

            # Mark resources as reserved
            self.SEResources.set_resource_reservation(
                reservation_ports['ports'])
            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job(
                    se_job_release_resources,
                    "date",
                    run_date=alarm_time,
                    args=[
                        datetime.now(), reservation_ports['ports'], slice_urn
                    ])

            self.SESlices._create_manifest_from_req_n_and_l(
                se_manifest, nodes, links, sliceVlansPairs)
            logger.debug("SE-ManifestFormatter=%s" % (se_manifest, ))

            s = self.SESlices._allocate_ports_in_slice(nodes)

            self.SESlices.set_link_db(slice_urn, end_time, links, nodes,
                                      sliceVlansPairs)

            links_db, nodes, links = self.SESlices.get_link_db(slice_urn)
            for sliver in links_db["geni_sliver_urn"]:
                result.append({
                    "geni_sliver_urn":
                    sliver,
                    "geni_expires":
                    links_db['geni_expires'],
                    "geni_allocation_status":
                    links_db["geni_allocation_status"],
                    "geni_operational_status":
                    links_db["geni_operational_status"]
                })

            se_slivers = result
            logger.info("allocate successfully completed: %s", slice_urn)
            logger.debug("requested SE-Sliver(%d)=%s" % (
                len(se_slivers),
                se_slivers,
            ))
            return ("%s" % se_manifest, se_slivers)

        else:
            raise geni_ex.GENIv3GeneralError(
                "Allocation Failed. Requested resources are not available.")
Example #4
0
    def allocate(self, slice_urn, client_cert, credentials,
                 rspec, end_time=None):
        """Documentation see [geniv3rpc] GENIv3DelegateBase."""
        # TODO: Check if sliver_urn is valid for RO
        result = []
        #Default end time = 30 days
        default_end_time = datetime.now() + timedelta(days=30)
        if end_time == None:
            end_time = default_end_time
        if self._verify_users:
            logger.debug("allocate: authenticate the user...")
            client_urn, client_uuid, client_email =\
                self.auth(client_cert, credentials, slice_urn, ("createsliver",))
            logger.info("Client urn=%s, uuid=%s, email=%s" % (
                client_urn, client_uuid, client_email,))

        logger.info("slice_urn=%s, end_time=%s, rspec=%s" % (
            slice_urn, end_time, rspec,))
        req_rspec = SERMv3RequestParser(from_string=rspec)
        
        self.__validate_rspec(req_rspec.get_rspec())

        se_manifest, se_slivers, se_db_slivers = SERMv3ManifestFormatter(), [], []
        
        links = req_rspec.links()
        nodes = req_rspec.nodes()

        # Workaround for "1:n" case: Get Vlan pairs from link->felix:vlan param
        sliceVlansPairs = req_rspec.getVlanPairs()

        # check if the requested resources (ports, vlans) are available
        reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)
        availability_result = self.SEResources.check_available_resources(reservation_ports['ports'])

        # print "WWWW: ", self.SEResources.get_port_mapping()

        if availability_result != False:

            # Mark resources as reserved
            self.SEResources.set_resource_reservation(reservation_ports['ports'])
            if end_time != None:
                alarm_time = end_time
                SESchedulerService.get_scheduler().add_job( se_job_release_resources,
                                                            "date",
                                                            run_date=alarm_time,
                                                            args=[datetime.now(),
                                                            reservation_ports['ports'],
                                                            slice_urn])

            self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs)
            logger.debug("SE-ManifestFormatter=%s" % (se_manifest,))

            s =  self.SESlices._allocate_ports_in_slice(nodes) 
                        
            self.SESlices.set_link_db(slice_urn, end_time,links, nodes, sliceVlansPairs)
            

            links_db, nodes, links = self.SESlices.get_link_db(slice_urn)
            for sliver in links_db["geni_sliver_urn"]:
                result.append( 
                                {   
                                    "geni_sliver_urn": sliver,
                                    "geni_expires": links_db['geni_expires'],
                                    "geni_allocation_status": links_db["geni_allocation_status"],
                                    "geni_operational_status" : links_db["geni_operational_status"]
                                }
                            )

            se_slivers = result
            logger.info("allocate successfully completed: %s", slice_urn)
            logger.debug("requested SE-Sliver(%d)=%s" % (len(se_slivers), se_slivers,))
            return ("%s" % se_manifest, se_slivers)

        else:
            raise geni_ex.GENIv3GeneralError("Allocation Failed. Requested resources are not available.")