diff options
author | Wayne Warren <waynr+launchpad@sdf.org> | 2015-12-31 18:11:12 -0800 |
---|---|---|
committer | Wayne Warren <waynr+launchpad@sdf.org> | 2016-08-05 06:40:12 -0700 |
commit | 3ce661838183e3c8a2aa4fdce28a6c4bd7e6e472 (patch) | |
tree | ee7363c0b7656425d5957085ed62c4b70888c178 | |
parent | 535acbc671b36b20a833417b66084add722214cf (diff) | |
download | python-jenkins-job-builder-3ce661838183e3c8a2aa4fdce28a6c4bd7e6e472.tar.gz python-jenkins-job-builder-3ce661838183e3c8a2aa4fdce28a6c4bd7e6e472.tar.xz python-jenkins-job-builder-3ce661838183e3c8a2aa4fdce28a6c4bd7e6e472.zip |
Move 'update' yaml parsing to JenkinsJobs.execute.
1 Remove YamlParser from Builder.
2 ...
3 Rule the world.
Change-Id: Id465078da2a7016fd59407516fe124602abd016c
-rw-r--r-- | jenkins_jobs/builder.py | 30 | ||||
-rw-r--r-- | jenkins_jobs/cli/entry.py | 43 |
2 files changed, 47 insertions, 26 deletions
diff --git a/jenkins_jobs/builder.py b/jenkins_jobs/builder.py index 582a5fd6..a3911cec 100644 --- a/jenkins_jobs/builder.py +++ b/jenkins_jobs/builder.py @@ -245,8 +245,6 @@ class Builder(object): def delete_old_managed(self, keep=None): jobs = self.jenkins.get_jobs() deleted_jobs = 0 - if keep is None: - keep = [job.name for job in self.parser.xml_jobs] for job in jobs: if job['name'] not in keep: if self.jenkins.is_managed(job['name']): @@ -296,24 +294,14 @@ class Builder(object): logger.debug("'{0}' has not changed".format(job.name)) return changed - def update_jobs(self, input_fn, jobs_glob=None, output=None, - n_workers=None): + def update_jobs(self, xml_jobs, output=None, n_workers=None): orig = time.time() - self.parser = YamlParser(self.jjb_config, self.plugins_list) - self.parser.load_files(input_fn) - - self.parser.expandYaml(jobs_glob) - self.parser.generateXML() - step = time.time() - logging.debug('%d XML files generated in %ss', - len(self.parser.jobs), str(step - orig)) - - logger.info("Number of jobs generated: %d", len(self.parser.xml_jobs)) - self.parser.xml_jobs.sort(key=operator.attrgetter('name')) + logger.info("Number of jobs generated: %d", len(xml_jobs)) + xml_jobs.sort(key=operator.attrgetter('name')) - if (output and not hasattr(output, 'write') - and not os.path.isdir(output)): + if (output and not hasattr(output, 'write') and + not os.path.isdir(output)): logger.info("Creating directory %s" % output) try: os.makedirs(output) @@ -326,7 +314,7 @@ class Builder(object): if hasattr(output, 'write'): output = utils.wrap_stream(output) - for job in self.parser.xml_jobs: + for job in xml_jobs: if hasattr(output, 'write'): # `output` is a file-like object logger.info("Job name: %s", job.name) @@ -346,13 +334,13 @@ class Builder(object): logger.debug("Writing XML to '{0}'".format(output_fn)) with io.open(output_fn, 'w', encoding='utf-8') as f: f.write(job.output().decode('utf-8')) - return self.parser.xml_jobs, len(self.parser.xml_jobs) + return xml_jobs, len(xml_jobs) # Filter out the jobs that did not change logging.debug('Filtering %d jobs for changed jobs', - len(self.parser.xml_jobs)) + len(xml_jobs)) step = time.time() - jobs = [job for job in self.parser.xml_jobs + jobs = [job for job in xml_jobs if self.changed(job)] logging.debug("Filtered for changed jobs in %ss", (time.time() - step)) diff --git a/jenkins_jobs/cli/entry.py b/jenkins_jobs/cli/entry.py index e0e6fd07..c14ad7b2 100644 --- a/jenkins_jobs/cli/entry.py +++ b/jenkins_jobs/cli/entry.py @@ -18,10 +18,12 @@ import os import logging import platform import sys +import time import yaml from jenkins_jobs.builder import Builder +from jenkins_jobs.parser import YamlParser from jenkins_jobs.cli.parser import create_parser from jenkins_jobs.config import JJBConfig from jenkins_jobs import utils @@ -133,6 +135,7 @@ class JenkinsJobs(object): if options.command == 'delete': for job in options.name: builder.delete_job(job, options.path) + elif options.command == 'delete-all': if not utils.confirm( 'Sure you want to delete *ALL* jobs from Jenkins ' @@ -142,6 +145,7 @@ class JenkinsJobs(object): logger.info("Deleting all jobs") builder.delete_all_jobs() + elif options.command == 'update': if options.n_workers < 0: self.parser.error( @@ -149,16 +153,45 @@ class JenkinsJobs(object): logger.info("Updating jobs in {0} ({1})".format( options.path, options.names)) + orig = time.time() + + # Generate XML + parser = YamlParser(self.jjb_config, builder.plugins_list) + parser.load_files(options.path) + parser.expandYaml(options.names) + parser.generateXML() + + jobs = parser.jobs + step = time.time() + logging.debug('%d XML files generated in %ss', + len(jobs), str(step - orig)) + jobs, num_updated_jobs = builder.update_jobs( - options.path, options.names, + parser.xml_jobs, n_workers=options.n_workers) logger.info("Number of jobs updated: %d", num_updated_jobs) + if options.delete_old: - num_deleted_jobs = builder.delete_old_managed() - logger.info("Number of jobs deleted: %d", num_deleted_jobs) + n = builder.delete_old_managed(keep=parser.xml_jobs) + logger.info("Number of jobs deleted: %d", n) + elif options.command == 'test': - builder.update_jobs(options.path, options.name, - output=options.output_dir, + logger.info("Updating jobs in {0} ({1})".format( + options.path, options.name)) + orig = time.time() + + # Generate XML + parser = YamlParser(self.jjb_config, builder.plugins_list) + parser.load_files(options.path) + parser.expandYaml(options.name) + parser.generateXML() + + jobs = parser.jobs + step = time.time() + logging.debug('%d XML files generated in %ss', + len(jobs), str(step - orig)) + + builder.update_jobs(parser.xml_jobs, output=options.output_dir, n_workers=1) |