@click.group()
+@click.option(
+ '-c', '--conf', type=str, default=None,
+ help='Path to jenkins_jobs.ini config.')
@click.option(
'-s', '--server', type=str, envvar='JENKINS_URL', default='jenkins',
help='The URL to a Jenkins server. Alternatively the jenkins_jobs.ini '
@click.option('-u', '--user', type=str, envvar='JENKINS_USER', default='admin')
@click.option('-p', '--password', type=str, envvar='JENKINS_PASSWORD')
@click.pass_context
-def jenkins_cli(ctx, server, user, password):
+def jenkins_cli(ctx, server, user, password, conf):
"""Query information about the Jenkins Server."""
# Initial the Jenkins object and pass it to sub-commands
- ctx.obj['jenkins'] = Jenkins(server, user, password)
+ ctx.obj['jenkins'] = Jenkins(server, user, password, config_file=conf)
@click.command()
__author__ = 'Thanh Ha'
import logging
+import os
import sys
import click
from six.moves import configparser
from lftools import config as lftools_cfg
-from lftools.jenkins import JJB_INI
from lftools.jenkins.token import get_token
log = logging.getLogger(__name__)
@click.command()
@click.argument('name')
@click.argument('url')
-def init(name, url):
+@click.pass_context
+def init(ctx, name, url):
"""Initialize jenkins_jobs.ini config for new server section."""
- _require_jjb_ini()
+ jenkins = ctx.obj['jenkins']
+ _require_jjb_ini(jenkins.config_file)
config = configparser.ConfigParser()
- config.read(JJB_INI)
+ config.read(jenkins.config_file)
token = get_token(url, True)
try:
config.set(name, 'user', lftools_cfg.get_setting('global', 'username'))
config.set(name, 'password', token)
- with open(JJB_INI, 'w') as configfile:
+ with open(jenkins.config_file, 'w') as configfile:
config.write(configfile)
If the server parameter is NOT passed then all servers listed in the
configuration file will be reset via multi-server mode.
"""
- _require_jjb_ini()
+ jenkins = ctx.obj['jenkins']
+ _require_jjb_ini(jenkins.config_file)
def _reset_key(config, server):
url = config.get(server, 'url')
try:
token = get_token(url, True)
config.set(server, 'password', token)
- with open(JJB_INI, 'w') as configfile:
+ with open(jenkins.config_file, 'w') as configfile:
config.write(configfile)
return token
except requests.exceptions.ConnectionError as e:
fail = 0
success = 0
config = configparser.ConfigParser()
- config.read(JJB_INI)
+ config.read(jenkins.config_file)
if len(servers) == 0:
cfg_sections = config.sections()
token.add_command(reset)
-def _require_jjb_ini():
- if not JJB_INI:
+def _require_jjb_ini(config):
+ if not os.path.isfile(config):
log.error('jenkins_jobs.ini not found in any of the search paths. '
'Please provide one before proceeding.')
sys.exit(1)
try:
return config.get(section, option)
except configparser.NoOptionError:
+ print(section, option)
log.error('Config option does not exist.')
sys.exit(1)
except configparser.NoSectionError:
class Jenkins():
"""lftools Jenkins object."""
- def __init__(self, server, user=None, password=None):
+ def __init__(self, server, user=None, password=None, config_file=None):
"""Initialize a Jenkins object."""
+ self.config_file = config_file
+ if not self.config_file:
+ self.config_file = JJB_INI
+
if '://' not in server:
- if JJB_INI:
- log.debug('Using config from {}'.format(JJB_INI))
+ if self.config_file:
+ log.debug('Using config from {}'.format(self.config_file))
config = configparser.ConfigParser()
- config.read(JJB_INI)
+ config.read(self.config_file)
user = config.get(server, 'user')
password = config.get(server, 'password')
server = config.get(server, 'url')
--- /dev/null
+---
+features:
+ - |
+ Add ``--conf`` parameter to jenkins subcommand to allow choosing a jjb
+ config outside of the default paths.