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())
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())
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