def get_repo(self):
        # import moved here, to avoid messages when you don't need to use ODCS
        from odcs.client.odcs import ODCS, AuthMech

        if self.odcsauth.get("auth_mech") == AuthMech.OpenIDC:
            if not self.odcsauth.get("openidc_token"):
                self.odcsauth["openidc_token"] = common.get_openidc_auth()
        odcs = ODCS(common.conf["odcs"]["url"], **self.odcsauth)
        core.print_debug(
            "ODCS Starting module composing: %s" % odcs, "%s compose for: %s" %
            (self.compose_type, self.get_module_identifier()))
        compose_builder = odcs.new_compose(
            self.get_module_identifier(), self.compose_type,
            **common.conf["odcs"]["new_compose_dict"])
        timeout_time = common.conf["odcs"]["timeout"]
        core.print_debug("ODCS Module compose started, timeout set to %ss" %
                         timeout_time)
        compose_state = odcs.wait_for_compose(compose_builder["id"],
                                              timeout=timeout_time)
        core.print_debug(
            "ODCS compose debug info for: %s" % self.get_module_identifier(),
            compose_state)
        if compose_state["state_name"] == "done":
            compose = "{compose}/{arch}/os".format(
                compose=compose_state["result_repo"],
                arch=common.conf["generic"]["arch"])
            core.print_info("ODCS Compose done, URL with repo file", compose)
            return compose
        else:
            raise mtfexceptions.PDCExc(
                "ODCS: Failed to generate compose for module: %s" %
                self.get_module_identifier())
Beispiel #2
0
 def get_repo(self):
     odcs = ODCS(ODCS_URL,
                 auth_mech=AuthMech.OpenIDC,
                 openidc_token=self.auth_token)
     print_debug(
         "ODCS Starting module composing: %s" % odcs, "%s compose for: %s" %
         (self.compose_type, self.get_module_identifier()))
     compose_builder = odcs.new_compose(self.get_module_identifier(),
                                        self.compose_type)
     timeout_time = 600
     print_debug("ODCS Module compose started, timeout set to %ss" %
                 timeout_time)
     compose_state = odcs.wait_for_compose(compose_builder["id"],
                                           timeout=timeout_time)
     if compose_state["state_name"] == "done":
         compose = "{compose}/{arch}/os".format(
             compose=compose_state["result_repo"], arch=ARCH)
         print_info("ODCS Compose done, URL with repo file", compose)
         return compose
     else:
         raise mtfexceptions.PDCExc(
             "ODCS: Failed to generate compose for module: %s" %
             self.get_module_identifier())
Beispiel #3
0
    def _prepare_content_sets(self, content_sets):
        if not content_sets:
            return False

        arch = platform.machine()

        if arch not in content_sets:
            raise CekitError("There are no content_sets defined for platform '{}'!".format(arch))

        repos = ' '.join(content_sets[arch])

        odcs_service_type = "Fedora"
        odcs_url = "https://odcs.fedoraproject.org"

        if CONFIG.get('common', 'redhat'):
            odcs_service_type = "Red Hat"
            odcs_url = "https://odcs.engineering.redhat.com"

        LOGGER.info("Using {} ODCS service to create composes".format(odcs_service_type))

        flags = []

        compose = self.image.get('osbs', {}).get(
            'configuration', {}).get('container', {}).get('compose', {})

        if compose.get(Generator.ODCS_HIDDEN_REPOS_FLAG, False):
            flags.append(Generator.ODCS_HIDDEN_REPOS_FLAG)

        odcs = ODCS(odcs_url, auth_mech=AuthMech.Kerberos)

        LOGGER.debug(
            "Requesting ODCS pulp compose for '{}' repositories with '{}' flags...".format(repos, flags))

        try:
            compose = odcs.new_compose(repos, 'pulp', flags=flags)
        except requests.exceptions.HTTPError as ex:
            if ex.response.status_code == 401:
                LOGGER.error(("You are not authorized to use {} ODCS service. "
                              "Are you sure you have a valid Kerberos session?").format(odcs_service_type))
            raise CekitError("Could not create ODCS compose", ex)

        compose_id = compose.get('id', None)

        if not compose_id:
            raise CekitError(
                "Invalid response from ODCS service: no compose id found: {}".format(compose))

        LOGGER.debug("Waiting for compose {} to finish...".format(compose_id))

        compose = odcs.wait_for_compose(compose_id, timeout=600)
        state = compose.get('state', None)

        if not state:
            raise CekitError(
                "Invalid response from ODCS service: no state found: {}".format(compose))

        # State 2 is "done"
        if state != 2:
            raise CekitError("Cannot create ODCS compose: '{}'".format(compose))

        LOGGER.debug("Compose finished successfully")

        repofile = compose.get('result_repofile', None)

        if not repofile:
            raise CekitError(
                "Invalid response from ODCS service: no state_repofile key found: {}".format(compose))

        return repofile