示例#1
0
 def retry_tmpfunc():
     # Using develop=True to not authenticate to the server
     pdc_session = PDCClient(common.conf["pdc"]["pdc_server"],
                             ssl_verify=True,
                             develop=True)
     core.print_debug(pdc_session, pdc_query)
     return pdc_session(**pdc_query)
示例#2
0
 def retry_tmpfunc():
     # Using develop=True to not authenticate to the server
     pdc_session = PDCClient(PDC_SERVER,
                             ssl_verify=True,
                             develop=True)
     print_debug(pdc_session, pdc_query)
     return pdc_session(**pdc_query)
def get_pdc_session(workflow, fallback):
    config = get_pdc(workflow, fallback)

    from pdc_client import PDCClient
    return PDCClient(server=config['api_url'],
                     ssl_verify=not config.get('insecure', False),
                     develop=True)
示例#4
0
 def _query_pdc(self, module_name, stream):
     """
     Check if module and stream are built successfully on PDC server
     """
     pdc_server = "https://pdc.fedoraproject.org/rest_api/v1/unreleasedvariants"
     #Using develop=True to not authenticate to the server
     pdc_session = PDCClient(pdc_server, ssl_verify=True, develop=True)
     pdc_query = dict(
         variant_id = module_name,
         variant_version = stream,
         #active=True returns only succesful builds
         active = True
     )
     try:
         mod_info = pdc_session(**pdc_query)
     except Exception as ex:
         self.error("Could not query PDC server for %s (stream: %s) - %s" % (
                    module_name, stream, ex))
     if not mod_info or "results" not in mod_info.keys() or not mod_info["results"]:
         self.error("%s (stream: %s) is not available on PDC" % (
                    module_name, stream))
示例#5
0
    def __getDataFromPdc(self):
        """
        Internal method, do not use it

        :return: None
        """
        # Using develop=True to not authenticate to the server
        pdc_session = PDCClient(PDC_SERVER, ssl_verify=True, develop=True)
        pdc_query = { 'variant_id' : self.name, 'active': True }
        if self.stream:
            pdc_query['variant_version'] = self.stream
        if self.version:
            pdc_query['variant_release'] = self.version
        try:
            mod_info = pdc_session(**pdc_query)
        except Exception as ex:
            raise PDCExc("Could not query PDC server", ex)
        if not mod_info or "results" not in mod_info.keys() or not mod_info["results"]:
            raise PDCExc("QUERY: %s is not available on PDC" % pdc_query)
        self.pdcdata = mod_info["results"][-1]
        self.modulemd = yaml.load(self.pdcdata["modulemd"])
示例#6
0
def get_modulemd(module_name, stream):
    """
    Check if module and stream are built successfully on PDC server
    """
    pdc_server = "https://pdc.fedoraproject.org/rest_api/v1/unreleasedvariants"
    #Using develop=True to not authenticate to the server
    pdc_session = PDCClient(pdc_server, ssl_verify=True, develop=True)
    pdc_query = dict(
        variant_id = module_name,
        variant_version = stream,
        fields="modulemd",
        ordering="variant_release",
        #active=True returns only succesful builds
        active = True,
    )
    try:
        mod_info = pdc_session(**pdc_query)
    except Exception as ex:
        raise IOError("Could not query PDC server for %s (stream: %s) - %s" % (
                       module_name, stream, ex))
    if not mod_info or "results" not in mod_info.keys() or not mod_info["results"]:
        raise IOError("%s (stream: %s) is not available on PDC" % (
                       module_name, stream))
    return yaml.load(mod_info["results"][-1]["modulemd"], Loader=Loader)
    def _resolve_compose(self):
        if self.odcs_openidc_secret_path:
            token_path = os.path.join(self.odcs_openidc_secret_path, 'token')
            with open(token_path, "r") as f:
                odcs_token = f.read().strip()
        else:
            odcs_token = None

        odcs_client = ODCSClient(self.odcs_url,
                                 insecure=self.odcs_insecure,
                                 token=odcs_token)
        # The effect of develop=True is that requests to the PDC are made without authentication;
        # since we our interaction with the PDC is read-only, this is fine for our needs and
        # makes things simpler.
        pdc_client = PDCClient(server=self.pdc_url,
                               ssl_verify=not self.pdc_insecure,
                               develop=True)

        fmt = '{n}-{s}' if self.module_version is None else '{n}-{s}-{v}'
        source_spec = fmt.format(n=self.module_name,
                                 s=self.module_stream,
                                 v=self.module_version)

        if self.compose_id is None:
            self.compose_id = odcs_client.start_compose(
                source_type='module', source=source_spec)['id']

        compose_info = odcs_client.wait_for_compose(self.compose_id)
        if compose_info['state_name'] != "done":
            raise RuntimeError("Compose cannot be retrieved, state='%s'" %
                               compose_info['state_name'])

        compose_source = compose_info['source']
        self.log.info("Resolved list of modules: %s", compose_source)

        resolved_modules = {}

        for module_spec in compose_source.strip().split():
            m = re.match(r'^(.*)-([^-]+)-(\d{14})$', module_spec)
            if not m:
                raise RuntimeError(
                    "Cannot parse resolved module in compose: %s" %
                    module_spec)

            module_name = m.group(1)
            module_stream = m.group(2)
            module_version = m.group(3)

            query = {
                'variant_id': module_name,
                'variant_version': module_stream,
                'variant_release': module_version,
                'active': True,
            }

            self.log.info("Looking up module metadata for '%s' in the PDC",
                          module_spec)
            retval = pdc_client['unreleasedvariants/'](
                page_size=-1, fields=['modulemd', 'rpms'], **query)
            # Error handling
            if not retval:
                raise RuntimeError("Failed to find module in PDC %r" % query)
            if len(retval) != 1:
                raise RuntimeError("Multiple modules in the PDC matched %r" %
                                   query)

            mmd = ModuleMetadata()
            mmd.loads(retval[0]['modulemd'])
            rpms = set(retval[0]['rpms'])

            resolved_modules[module_name] = ModuleInfo(module_name,
                                                       module_stream,
                                                       module_version, mmd,
                                                       rpms)

        base_module = resolved_modules[self.module_name]
        assert base_module.stream == self.module_stream
        if self.module_version is not None:
            assert base_module.version == self.module_version

        return ComposeInfo(source_spec=source_spec,
                           compose_id=self.compose_id,
                           base_module=base_module,
                           modules=resolved_modules,
                           repo_url=compose_info['result_repo'] +
                           '/$basearch/os/')
示例#8
0
    compose_id = _find_latest_compose_id_for_release(release)
    if not compose_id:
        print "The release %s doesn't exist or no compose in it." % release
        exit(1)
    srpm_name_result = _find_src_rpm_names_for_compose(compose_id)
    if srpm_name_result:
        _generate_global_components(srpm_name_result)
        _generate_release_components(release, srpm_name_result)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Create release components according release id')
    parser.add_argument('-s',
                        '--server',
                        help='PDC instance url or shortcut.',
                        required=True)
    parser.add_argument("-r",
                        "--release",
                        help="release id for a release.",
                        required=True)

    options = parser.parse_args()
    try:
        client = PDCClient(options.server)
        main(options.release)
    except BeanBagException as e:
        print "%d %s" % (e.response.status_code, e.response.content)
    except Exception as e:
        print str(e)