From 54c0bdb08963841eecd01cc816d485d15f1e9de1 Mon Sep 17 00:00:00 2001 From: Thanh Ha Date: Sat, 25 Aug 2018 01:23:08 -0400 Subject: [PATCH] Add support to jenkins cmd for jenkins_jobs.ini Allow the jenkins command to use existing jenkins_jobs.ini for configuration. By default assume jenkins_jobs.ini's default configuration 'jenkins'. This change makes 'server', 'user', and 'password' parameters no longer required as defaults replace the need for these options. 'server' now defaults to 'jenkins' if jenkins_jobs.ini exists, otherwise defaults to 'http://localhost:8080' which is the default Jenkins deploy port. 'user' now defaults to 'admin' which is the Jenkins default admin user. 'password' has no default and must be set by the user as this is randomly generated by Jenkins at boot. Change-Id: Ic7af1eb53e8e9079b845203f44914310616c4bab Signed-off-by: Thanh Ha --- lftools/cli/jenkins/__init__.py | 29 ++++++++++++++++++++---- releasenotes/notes/jenkins-25629106553ebbd5.yaml | 5 ++++ 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/jenkins-25629106553ebbd5.yaml diff --git a/lftools/cli/jenkins/__init__.py b/lftools/cli/jenkins/__init__.py index 6da1e458..8d541515 100644 --- a/lftools/cli/jenkins/__init__.py +++ b/lftools/cli/jenkins/__init__.py @@ -12,8 +12,11 @@ __author__ = 'Trevor Bramwell' +import os + import click import jenkins as jenkins_python # Don't confuse this with the function ... +from six.moves import configparser from six.moves.urllib.error import HTTPError from lftools.cli.jenkins.builds import builds @@ -22,13 +25,31 @@ from lftools.cli.jenkins.plugins import plugins_init @click.group() -@click.option('-s', '--server', type=str, required=True, envvar='JENKINS_URL') -@click.option('-u', '--user', type=str, required=True, envvar='JENKINS_USER') -@click.option('-p', '--password', type=str, required=True, - envvar='JENKINS_PASSWORD') +@click.option( + '-s', '--server', type=str, envvar='JENKINS_URL', default='jenkins', + help='The URL to a Jenkins server. Alternatively the jenkins_jobs.ini ' + 'section to parse for url/user/password configuration if available.') +@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): """Query information about the Jenkins Server.""" + jjb_ini = os.path.join( + os.path.expanduser('~'), + '.config', + 'jenkins_jobs', + 'jenkins_jobs.ini') + + if '://' not in server: + if os.path.isfile(jjb_ini): + config = configparser.ConfigParser() + config.read(jjb_ini) + user = config.get(server, 'user') + password = config.get(server, 'password') + server = config.get(server, 'url') + else: + server = 'https://localhost:8080' + # Initial the Jenkins object and pass it to sub-commands ctx.obj['server'] = jenkins_python.Jenkins( server, diff --git a/releasenotes/notes/jenkins-25629106553ebbd5.yaml b/releasenotes/notes/jenkins-25629106553ebbd5.yaml new file mode 100644 index 00000000..9b8bc0fa --- /dev/null +++ b/releasenotes/notes/jenkins-25629106553ebbd5.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support to the **jenkins** command to parse ``jenkins_jobs.ini`` for + configuration if **server** parameter passed is not a URL. -- 2.16.6