From ede7543970a5a53f94a6b5a6c6e596c4e7d7be8c Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Mon, 26 Sep 2016 15:20:24 +0200 Subject: [PATCH 1/6] make Builder a new-style class --- rida/builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rida/builder.py b/rida/builder.py index 676543c7..55dfb663 100644 --- a/rida/builder.py +++ b/rida/builder.py @@ -221,7 +221,7 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): """ raise NotImplementedError() -class Builder: +class Builder(object): """Wrapper class""" def __new__(cls, module, backend, config, **extra): From 5368b6b344313d46db3f28d3af64192b4989ff8b Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 4 Oct 2016 12:32:55 +0200 Subject: [PATCH 2/6] actually use Builder factory --- rida/scheduler/handlers/components.py | 3 ++- rida/scheduler/handlers/modules.py | 2 +- rida/scheduler/handlers/repos.py | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rida/scheduler/handlers/components.py b/rida/scheduler/handlers/components.py index d391e584..bec41007 100644 --- a/rida/scheduler/handlers/components.py +++ b/rida/scheduler/handlers/components.py @@ -70,7 +70,8 @@ def _finalize(config, session, msg, state): # And install the macros. module_name = parent.name tag = parent.koji_tag - builder = rida.builder.KojiModuleBuilder(module_name, config, tag_name=tag) + builder = rida.builder.Builder(module_name, 'koji', config, + tag_name=tag) builder.buildroot_connect() # tag && add to srpm-build group nvr = "{}-{}-{}".format(msg.build_name, msg.build_version, diff --git a/rida/scheduler/handlers/modules.py b/rida/scheduler/handlers/modules.py index d23f56ab..497ff13d 100644 --- a/rida/scheduler/handlers/modules.py +++ b/rida/scheduler/handlers/modules.py @@ -118,7 +118,7 @@ def wait(config, session, msg): log.debug("Assigning koji tag=%s to module build" % tag) build.koji_tag = tag - builder = rida.builder.KojiModuleBuilder(build.name, config, tag_name=tag) + builder = rida.builder.Builder(build.name, 'koji', config, tag_name=tag) build.buildroot_task_id = builder.buildroot_connect() log.debug("Adding dependencies %s into buildroot for module %s" % (dependencies, module_info)) builder.buildroot_add_repos(dependencies) diff --git a/rida/scheduler/handlers/repos.py b/rida/scheduler/handlers/repos.py index da6f8e45..eaeec56a 100644 --- a/rida/scheduler/handlers/repos.py +++ b/rida/scheduler/handlers/repos.py @@ -75,7 +75,8 @@ def done(config, session, msg): log.warn("Odd! All components in batch failed for %r." % module_build) return - builder = rida.builder.KojiModuleBuilder(module_build.name, config, tag_name=tag) + builder = rida.builder.Builder(module_build.name, 'koji', config, + tag_name=tag) builder.buildroot_connect() # Ok, for the subset of builds that did complete successfully, check to From 300f9474251641b1fd70801ecb8d7c2b4fd31c7c Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 4 Oct 2016 12:53:31 +0200 Subject: [PATCH 3/6] get rid of unused koji profile module --- rida/builder.py | 9 +++------ rida/scheduler/main.py | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/rida/builder.py b/rida/builder.py index 55dfb663..049f5dd3 100644 --- a/rida/builder.py +++ b/rida/builder.py @@ -257,7 +257,7 @@ class KojiModuleBuilder(GenericBuilder): log.debug("Using koji profile %r" % config.koji_profile) log.debug("Using koji_config: %s" % config.koji_config) - self.koji_session, self.koji_module = self.get_session_from_config(config) + self.koji_session = self.get_session_from_config(config) self.arches = config.koji_arches if not self.arches: raise ValueError("No koji_arches specified in the config.") @@ -365,10 +365,6 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules profile_name=config.koji_profile, user_config=config.koji_config, )) - koji_module = koji.get_profile_module( - config.koji_profile, - config=koji_config, - ) address = koji_config.server log.info("Connecting to koji %r" % address) @@ -397,7 +393,8 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules ) else: raise ValueError("Unrecognized koji authtype %r" % authtype) - return (koji_session, koji_module) + + return koji_session def buildroot_connect(self): log.info("%r connecting buildroot." % self) diff --git a/rida/scheduler/main.py b/rida/scheduler/main.py index 47e6558e..cb34f425 100644 --- a/rida/scheduler/main.py +++ b/rida/scheduler/main.py @@ -185,7 +185,8 @@ class Poller(threading.Thread): # TODO re-use if conf.system == "koji": - koji_session, _ = rida.builder.KojiModuleBuilder.get_session_from_config(conf) + koji_session = ( + rida.builder.KojiModuleBuilder.get_session_from_config(conf)) log.info("Querying tasks for statuses:") res = models.ComponentBuild.query.filter_by(state=koji.BUILD_STATES['BUILDING']).all() From b94c4601842dd6cc38856ce583fad3a76a72ede5 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 4 Oct 2016 12:35:09 +0200 Subject: [PATCH 4/6] add owner attribute to Builder classes --- rida/builder.py | 12 ++++++++---- rida/scheduler/handlers/components.py | 4 ++-- rida/scheduler/handlers/modules.py | 3 ++- rida/scheduler/handlers/repos.py | 4 ++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rida/builder.py b/rida/builder.py index 049f5dd3..8809911c 100644 --- a/rida/builder.py +++ b/rida/builder.py @@ -224,9 +224,10 @@ class GenericBuilder(six.with_metaclass(ABCMeta)): class Builder(object): """Wrapper class""" - def __new__(cls, module, backend, config, **extra): + def __new__(cls, owner, module, backend, config, **extra): """ - :param module : a module string e.g. 'testmodule-1.0' + :param owner: a string representing who kicked off the builds + :param module: a module string e.g. 'testmodule-1.0' :param backend: a string representing backend e.g. 'koji' :param config: instance of rida.config.Config @@ -235,7 +236,8 @@ class Builder(object): """ if backend == "koji": - return KojiModuleBuilder(module=module, config=config, **extra) + return KojiModuleBuilder(owner=owner, module=module, + config=config, **extra) else: raise ValueError("Builder backend='%s' not recognized" % backend) @@ -245,12 +247,14 @@ class KojiModuleBuilder(GenericBuilder): backend = "koji" - def __init__(self, module, config, tag_name): + def __init__(self, owner, module, config, tag_name): """ + :param owner: a string representing who kicked off the builds :param module: string representing module :param config: rida.config.Config instance :param tag_name: name of tag for given module """ + self.owner = owner self.module_str = module self.tag_name = tag_name self.__prep = False diff --git a/rida/scheduler/handlers/components.py b/rida/scheduler/handlers/components.py index bec41007..a33ed523 100644 --- a/rida/scheduler/handlers/components.py +++ b/rida/scheduler/handlers/components.py @@ -70,8 +70,8 @@ def _finalize(config, session, msg, state): # And install the macros. module_name = parent.name tag = parent.koji_tag - builder = rida.builder.Builder(module_name, 'koji', config, - tag_name=tag) + builder = rida.builder.Builder(parent.owner, module_name, 'koji', + config, tag_name=tag) builder.buildroot_connect() # tag && add to srpm-build group nvr = "{}-{}-{}".format(msg.build_name, msg.build_version, diff --git a/rida/scheduler/handlers/modules.py b/rida/scheduler/handlers/modules.py index 497ff13d..91d6444e 100644 --- a/rida/scheduler/handlers/modules.py +++ b/rida/scheduler/handlers/modules.py @@ -118,7 +118,8 @@ def wait(config, session, msg): log.debug("Assigning koji tag=%s to module build" % tag) build.koji_tag = tag - builder = rida.builder.Builder(build.name, 'koji', config, tag_name=tag) + builder = rida.builder.Builder(build.owner, build.name, 'koji', config, + tag_name=tag) build.buildroot_task_id = builder.buildroot_connect() log.debug("Adding dependencies %s into buildroot for module %s" % (dependencies, module_info)) builder.buildroot_add_repos(dependencies) diff --git a/rida/scheduler/handlers/repos.py b/rida/scheduler/handlers/repos.py index eaeec56a..7ff1dd45 100644 --- a/rida/scheduler/handlers/repos.py +++ b/rida/scheduler/handlers/repos.py @@ -75,8 +75,8 @@ def done(config, session, msg): log.warn("Odd! All components in batch failed for %r." % module_build) return - builder = rida.builder.Builder(module_build.name, 'koji', config, - tag_name=tag) + builder = rida.builder.Builder(module_build.owner, module_build.name, + 'koji', config, tag_name=tag) builder.buildroot_connect() # Ok, for the subset of builds that did complete successfully, check to From 31ec1835dbba88a21c459d128c5c656ff43f19df Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 4 Oct 2016 12:38:10 +0200 Subject: [PATCH 5/6] rename method to KojiModuleBuilder.get_session() KojiModuleBuilder.get_session_from_config() will require the owner as an argument, therefore drop encoding arguments in the method name. --- rida/builder.py | 4 ++-- rida/scheduler/main.py | 3 +-- tests/test_scheduler/test_repo_done.py | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rida/builder.py b/rida/builder.py index 8809911c..7e6f4ab1 100644 --- a/rida/builder.py +++ b/rida/builder.py @@ -261,7 +261,7 @@ class KojiModuleBuilder(GenericBuilder): log.debug("Using koji profile %r" % config.koji_profile) log.debug("Using koji_config: %s" % config.koji_config) - self.koji_session = self.get_session_from_config(config) + self.koji_session = self.get_session(config) self.arches = config.koji_arches if not self.arches: raise ValueError("No koji_arches specified in the config.") @@ -364,7 +364,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules return srpm_paths[0] @staticmethod - def get_session_from_config(config): + def get_session(config): koji_config = munch.Munch(koji.read_config( profile_name=config.koji_profile, user_config=config.koji_config, diff --git a/rida/scheduler/main.py b/rida/scheduler/main.py index cb34f425..0bf92eaa 100644 --- a/rida/scheduler/main.py +++ b/rida/scheduler/main.py @@ -185,8 +185,7 @@ class Poller(threading.Thread): # TODO re-use if conf.system == "koji": - koji_session = ( - rida.builder.KojiModuleBuilder.get_session_from_config(conf)) + koji_session = rida.builder.KojiModuleBuilder.get_session(conf) log.info("Querying tasks for statuses:") res = models.ComponentBuild.query.filter_by(state=koji.BUILD_STATES['BUILDING']).all() diff --git a/tests/test_scheduler/test_repo_done.py b/tests/test_scheduler/test_repo_done.py index 1de319b7..ad46ab45 100644 --- a/tests/test_scheduler/test_repo_done.py +++ b/tests/test_scheduler/test_repo_done.py @@ -49,7 +49,7 @@ class TestRepoDone(unittest.TestCase): self.fn(config=self.config, session=self.session, msg=msg) @mock.patch('rida.builder.KojiModuleBuilder.buildroot_ready') - @mock.patch('rida.builder.KojiModuleBuilder.get_session_from_config') + @mock.patch('rida.builder.KojiModuleBuilder.get_session') @mock.patch('rida.builder.KojiModuleBuilder.build') @mock.patch('rida.builder.KojiModuleBuilder.buildroot_connect') @mock.patch('rida.models.ModuleBuild.from_repo_done_event') From 2ae9e872fa80f800b2b53958e625fdcb225cba57 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 4 Oct 2016 12:48:00 +0200 Subject: [PATCH 6/6] create koji sessions on behalf of users --- rida/builder.py | 8 ++++---- rida/scheduler/main.py | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rida/builder.py b/rida/builder.py index 7e6f4ab1..d1f7ed67 100644 --- a/rida/builder.py +++ b/rida/builder.py @@ -261,7 +261,7 @@ class KojiModuleBuilder(GenericBuilder): log.debug("Using koji profile %r" % config.koji_profile) log.debug("Using koji_config: %s" % config.koji_config) - self.koji_session = self.get_session(config) + self.koji_session = self.get_session(config, owner) self.arches = config.koji_arches if not self.arches: raise ValueError("No koji_arches specified in the config.") @@ -364,7 +364,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules return srpm_paths[0] @staticmethod - def get_session(config): + def get_session(config, owner): koji_config = munch.Munch(koji.read_config( profile_name=config.koji_profile, user_config=config.koji_config, @@ -384,7 +384,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules principal=principal, keytab=keytab, ccache=ccache, - proxyuser=None, + proxyuser=owner, ) else: koji_session.krb_login(ccache=ccache) @@ -393,7 +393,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules os.path.expanduser(koji_config.cert), None, os.path.expanduser(koji_config.serverca), - proxyuser=None, + proxyuser=owner, ) else: raise ValueError("Unrecognized koji authtype %r" % authtype) diff --git a/rida/scheduler/main.py b/rida/scheduler/main.py index 0bf92eaa..08ead819 100644 --- a/rida/scheduler/main.py +++ b/rida/scheduler/main.py @@ -185,7 +185,9 @@ class Poller(threading.Thread): # TODO re-use if conf.system == "koji": - koji_session = rida.builder.KojiModuleBuilder.get_session(conf) + # we don't do this on behalf of users + koji_session = ( + rida.builder.KojiModuleBuilder.get_session(conf, None)) log.info("Querying tasks for statuses:") res = models.ComponentBuild.query.filter_by(state=koji.BUILD_STATES['BUILDING']).all()