def test_optparse_value(self):
     rel = koji.grab_session_options(optparse.Values(NORMAL_VAL))
     self.assertEqual(rel, NORMAL_VAL)
     rel = koji.grab_session_options(optparse.Values(EMPTY_VAL))
     self.assertEqual(rel, EMPTY_VAL)
     rel = koji.grab_session_options(optparse.Values(NONE_VAL))
     self.assertEqual(rel, {})
     rel = koji.grab_session_options(optparse.Values(MEANINGLESS_VAL))
     self.assertEqual(rel, {})
     rel = koji.grab_session_options(optparse.Values(MIXED_VAL))
     self.assertEqual(rel, MIXED_REL)
 def test_dict(self):
     rel = koji.grab_session_options(NORMAL_VAL)
     self.assertEqual(rel, NORMAL_VAL)
     rel = koji.grab_session_options(EMPTY_VAL)
     self.assertEqual(rel, EMPTY_VAL)
     rel = koji.grab_session_options(NONE_VAL)
     self.assertEqual(rel, {})
     rel = koji.grab_session_options(MEANINGLESS_VAL)
     self.assertEqual(rel, {})
     rel = koji.grab_session_options(MIXED_VAL)
     self.assertEqual(rel, MIXED_REL)
示例#3
0
def tag_build(nvr, dest_tags):
    """Tag build with specific tags

    Calling Koji API to tag build might fail, however successful tagged tag will
    be returned and to log the failed tag operation.

    :param str nvr: build NVR.
    :param dest_tags: tag names.
    :type dest_tags: list[str]
    :return: tag names which are tagged to build successfully.
    :rtype: list[str]
    """
    tagged_tags = []
    koji_config = koji.read_config(conf.koji_profile)
    session_opts = koji.grab_session_options(koji_config)
    koji_session = koji.ClientSession(koji_config['server'], opts=session_opts)
    login_koji(koji_session, koji_config)
    for tag in dest_tags:
        try:
            if conf.dry_run:
                logger.info("DRY-RUN: koji_session.tagBuild('%s', '%s')", tag, nvr)
            else:
                koji_session.tagBuild(tag, nvr)
        except Exception:
            logger.exception('Failed to tag %s to build %s', tag, nvr)
        else:
            tagged_tags.append(tag)
    koji_session.logout()
    return tagged_tags
示例#4
0
def make_koji_session():
    koji_config = koji.read_config(conf.koji_profile)
    session_opts = koji.grab_session_options(koji_config)
    koji_session = koji.ClientSession(koji_config['server'], opts=session_opts)
    login_koji(koji_session, koji_config)

    yield koji_session

    koji_session.logout()
示例#5
0
def main():
    module = build()

    config = {'server': module.params['server']}
    if 'ssl_auth' in module.params:
        config.update(**ssl_config(module))
    else:
        module.fail_json(changed=False,
                         skipped=False,
                         failed=True,
                         error='Missing authentication config')

    options = Values(config)
    session_opts = koji.grab_session_options(options)
    session = koji.ClientSession(options.server, session_opts)

    try:
        session.ssl_login(options.cert, None, options.serverca)
    except Exception as e:
        module.fail_json(changed=False,
                         skipped=False,
                         failed=True,
                         error=str(e))

    username = module.params['username']
    perms = module.params['permissions']

    user = session.getUser(username)
    if not user:
        try:
            user = session.createUser(username)
        except Exception as e:
            module.fail_json(changed=False,
                             skipped=False,
                             failed=True,
                             error=str(e))

    for perm in perms:
        try:
            session.grantPermission(user, perm, True)
        except Exception as e:
            if not 'already has permission' in str(e):
                module.fail_json(changed=False,
                                 skipped=False,
                                 failed=True,
                                 msg=str(e))

    module.exit_json(changed=True,
                     skipped=False,
                     failed=False,
                     result={
                         'username': username,
                         'perms': session.getUserPerms(user['id'])
                     })
示例#6
0
    def load_anon_kojisession(self):
        """Initiate a koji session."""
        logger = logging.getLogger("load_anon_kojisession")
        koji_config = koji.read_config(self.kojiprofile)

        logger.debug('Initiating a brew session to %s',
                     os.path.basename(koji_config['server']))

        # Build session options used to create instance of ClientSession
        session_opts = koji.grab_session_options(koji_config)

        try:
            session = koji.ClientSession(koji_config['server'], session_opts)
        except Exception:
            raise Exception('Could not initiate brew session')
        else:
            return session
    def __init__(self, output, base):
        self.output = output
        self.base = base
        self.base_update_info = {}
        self.update_info = {}
        self.build_id_to_nvr = {}
        self.module_nvr_short_to_nvr = {}
        self.image_packages = set()

        if self.base:
            self._load_build_ids(self.base)
            self._load_update_info(self.base)

        koji_config_file = os.path.join(os.path.dirname(__file__),
                                        '../koji.conf')
        options = koji.read_config(profile_name='fedora',
                                   user_config=koji_config_file)
        session_opts = koji.grab_session_options(options)
        self.koji_session = koji.ClientSession(options['server'], session_opts)
示例#8
0
    def load_kojisession(self, anon=False):
        """Initiate a koji session.

        The koji session can be logged in or anonymous
        """
        koji_config = self.read_koji_config()

        # Expand out the directory options
        for name in ('cert', 'ca', 'serverca'):
            path = koji_config[name]
            if path:
                koji_config[name] = os.path.expanduser(path)

        # save the weburl and topurl for later use as well
        self._kojiweburl = koji_config['weburl']
        self._topurl = koji_config['topurl']

        self.log.debug('Initiating a %s session to %s',
                       os.path.basename(self.build_client), koji_config['server'])

        # Build session options used to create instance of ClientSession
        session_opts = koji.grab_session_options(koji_config)

        try:
            session = koji.ClientSession(koji_config['server'], session_opts)
        except Exception:
            raise rpkgError('Could not initiate %s session' % os.path.basename(self.build_client))
        else:
            if anon:
                self._anon_kojisession = session
            else:
                self._kojisession = session

        if not anon:
            try:
                self.login_koji_session(koji_config, self._kojisession)
            except pyrpkg.rpkgAuthError:
                self.log.info("You might want to run rpmfusion-packager-setup to "
                              "regenerate SSL certificate. For more info see "
                              "https://fedoraproject.org/wiki/Using_the_Koji_build"
                              "_system#Fedora_Account_System_.28FAS2.29_Setup")
                raise
示例#9
0
def main():
    """
  Main funtion that runs the module. 
  """
    module = build()
    config = {'server': module.params['server']}

    archs = module.params['archs']
    channels = module.params['channels']
    host_name = module.params['host']

    if 'ssl_auth' in module.params:
        config.update(**ssl_config(module))
    else:
        module.fail_json(changed=False,
                         skipped=False,
                         failed=True,
                         error='Missing authentication config')

    options = Values(config)
    session_opts = koji.grab_session_options(options)
    session = koji.ClientSession(options.server, session_opts)

    try:
        session.ssl_login(options.cert, None, options.serverca)
    except Exception as e:
        module.fail_json(changed=False,
                         skipped=False,
                         failed=True,
                         error=str(e))

    if not session.getHost(host_name):
        try:
            session.addHost(host_name, archs)
        except Exception as e:
            module.fail_json(changed=False,
                             skipped=False,
                             failed=True,
                             msg=str(e))

    channel_errs = []
    added_channels = []
    for channel in channels:
        try:
            session.addHostToChannel(host_name, channel, create=True)
            added_channels.append(channel)
        except Exception as e:
            if not str(e).endswith(
                    'is already subscribed to the %s channel' % channel):
                channel_errs.append(str(e))

    if len(channel_errs) > 0:
        module.fail_json(changed=False,
                         skipped=False,
                         failed=True,
                         msg=dir(channel_errs[0]),
                         error='Add Channel Error: ' + str(channel_errs))

    module.exit_json(changed=True,
                     skipped=False,
                     failed=False,
                     result={
                         'name': host_name,
                         'archs': archs,
                         'channels': added_channels
                     })
def koji_session() -> koji.ClientSession:
    module = koji.get_profile_module("koji")
    session_opts = koji.grab_session_options(module.config)
    session = koji.ClientSession(module.config.server, session_opts)
    return session