diff options
author | Sorin Sbarnea <ssbarnea@redhat.com> | 2017-05-30 15:42:30 +0100 |
---|---|---|
committer | Sorin Sbarnea <ssbarnea@redhat.com> | 2017-05-30 16:12:51 +0100 |
commit | 5d3aa0dbb55b0b2f0c81115e43824a07357d17c9 (patch) | |
tree | d002c583949805372631b63ef78f7e49df7cd2dc | |
parent | 3799ed2c980240edc9c794190c22f9c210969a6e (diff) | |
download | python-jenkins-job-builder-5d3aa0dbb55b0b2f0c81115e43824a07357d17c9.tar.gz python-jenkins-job-builder-5d3aa0dbb55b0b2f0c81115e43824a07357d17c9.tar.xz python-jenkins-job-builder-5d3aa0dbb55b0b2f0c81115e43824a07357d17c9.zip |
Add support for using multiple servers
Allows user to specify which section from ini config
should be used for loading Jenkins server details.
Change-Id: I57633662e3ca2dba48af8db9e08fb8d5f8bc3bfa
-rw-r--r-- | jenkins_jobs/cli/entry.py | 5 | ||||
-rw-r--r-- | jenkins_jobs/cli/parser.py | 5 | ||||
-rw-r--r-- | jenkins_jobs/config.py | 26 |
3 files changed, 25 insertions, 11 deletions
diff --git a/jenkins_jobs/cli/entry.py b/jenkins_jobs/cli/entry.py index d714b29a..bb765181 100644 --- a/jenkins_jobs/cli/entry.py +++ b/jenkins_jobs/cli/entry.py @@ -59,7 +59,9 @@ class JenkinsJobs(object): self.parser = create_parser() self.options = self.parser.parse_args(args) - self.jjb_config = JJBConfig(self.options.conf, **kwargs) + self.jjb_config = JJBConfig(self.options.conf, + config_section=self.options.section, + **kwargs) if not self.options.command: self.parser.error("Must specify a 'command' to be performed") @@ -86,6 +88,7 @@ class JenkinsJobs(object): self._set_config(self.jjb_config.builder, 'ignore_cache') self._set_config(self.jjb_config.builder, 'flush_cache') self._set_config(self.jjb_config.yamlparser, 'allow_empty_variables') + self._set_config(self.jjb_config.jenkins, 'section') self._set_config(self.jjb_config.jenkins, 'user') self._set_config(self.jjb_config.jenkins, 'password') diff --git a/jenkins_jobs/cli/parser.py b/jenkins_jobs/cli/parser.py index c8ba9c99..cdf0fc3d 100644 --- a/jenkins_jobs/cli/parser.py +++ b/jenkins_jobs/cli/parser.py @@ -66,6 +66,11 @@ def create_parser(): help="Don\'t fail if any of the variables inside any string are " "not defined, replace with empty string instead.") parser.add_argument( + '--server', '-s', + dest='section', + default='jenkins', + help="The Jenkins server ini section to use. Defaults to 'jenkins'") + parser.add_argument( '--user', '-u', help="The Jenkins user to use for authentication. This overrides " "the user specified in the configuration file.") diff --git a/jenkins_jobs/config.py b/jenkins_jobs/config.py index cf172815..4690662a 100644 --- a/jenkins_jobs/config.py +++ b/jenkins_jobs/config.py @@ -42,6 +42,8 @@ exclude=.* allow_duplicates=False allow_empty_variables=False +# other named sections could be used in addition to the implicit [jenkins] +# if you have multiple jenkins servers. [jenkins] url=http://localhost:8080/ query_plugins_info=True @@ -57,7 +59,9 @@ CONFIG_REQUIRED_MESSAGE = ("A valid configuration file is required. " class JJBConfig(object): - def __init__(self, config_filename=None, config_file_required=False): + def __init__(self, config_filename=None, + config_file_required=False, + config_section='jenkins'): """ The JJBConfig class is intended to encapsulate and resolve priority @@ -128,6 +132,7 @@ class JJBConfig(object): self.flush_cache = False self.user = None self.password = None + self.section = config_section self.plugins_info = None self.timeout = builder._DEFAULT_TIMEOUT self.allow_empty_variables = None @@ -171,12 +176,12 @@ class JJBConfig(object): logger.debug("Config: {0}".format(config)) # check the ignore_cache setting - if config.has_option('jenkins', 'ignore_cache'): + if config.has_option(self.section, 'ignore_cache'): logging.warning("ignore_cache option should be moved to the " "[job_builder] section in the config file, the " "one specified in the [jenkins] section will be " "ignored in the future") - self.ignore_cache = config.getboolean('jenkins', 'ignore_cache') + self.ignore_cache = config.getboolean(self.section, 'ignore_cache') elif config.has_option('job_builder', 'ignore_cache'): self.ignore_cache = config.getboolean('job_builder', 'ignore_cache') @@ -195,12 +200,12 @@ class JJBConfig(object): # error # https://bugs.launchpad.net/openstack-ci/+bug/1259631 try: - self.user = config.get('jenkins', 'user') + self.user = config.get(self.section, 'user') except (TypeError, configparser.NoOptionError): pass try: - self.password = config.get('jenkins', 'password') + self.password = config.get(self.section, 'password') except (TypeError, configparser.NoOptionError): pass @@ -212,21 +217,22 @@ class JJBConfig(object): # "timeout=jenkins_jobs.builder._DEFAULT_TIMEOUT" or not set timeout at # all. try: - self.timeout = config.getfloat('jenkins', 'timeout') + self.timeout = config.getfloat(self.section, 'timeout') except (ValueError): raise JenkinsJobsException("Jenkins timeout config is invalid") except (TypeError, configparser.NoOptionError): pass - if not config.getboolean("jenkins", "query_plugins_info"): - logger.debug("Skipping plugin info retrieval") - self.plugins_info = [] + if (config.has_option(self.section, 'query_plugins_info') and + not config.getboolean(self.section, "query_plugins_info")): + logger.debug("Skipping plugin info retrieval") + self.plugins_info = [] self.recursive = config.getboolean('job_builder', 'recursive') self.excludes = config.get('job_builder', 'exclude').split(os.pathsep) # The way we want to do things moving forward: - self.jenkins['url'] = config.get('jenkins', 'url') + self.jenkins['url'] = config.get(self.section, 'url') self.jenkins['user'] = self.user self.jenkins['password'] = self.password self.jenkins['timeout'] = self.timeout |