import logging
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
from lftools.cli.jenkins.nodes import nodes
from lftools.cli.jenkins.plugins import plugins_init
from lftools.cli.jenkins.token import token
-from lftools.jenkins import JJB_INI
+from lftools.jenkins import Jenkins
log = logging.getLogger(__name__)
@click.pass_context
def jenkins_cli(ctx, server, user, password):
"""Query information about the Jenkins Server."""
- if '://' not in server:
- if JJB_INI:
- log.debug('Using config from {}'.format(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:
- log.debug('jenkins_jobs.ini not found in any of the default paths.')
- server = 'https://localhost:8080'
-
# Initial the Jenkins object and pass it to sub-commands
- ctx.obj['server'] = jenkins_python.Jenkins(
- server,
- username=user,
- password=password)
-
- ctx.obj['jenkins_url'] = server
+ ctx.obj['jenkins'] = Jenkins(server, user, password)
@click.command()
with open(groovy_file, 'r') as f:
data = f.read()
- server = ctx.obj['server']
- result = server.run_script(data)
+ jenkins = ctx.obj['jenkins']
+ result = jenkins.server.run_script(data)
log.info(result)
@click.pass_context
def quiet_down(ctx, n):
"""Put Jenkins into 'Quiet Down' mode."""
- version = ctx.obj['server'].get_version()
+ jenkins = ctx.obj['jenkins']
+ version = jenkins.server.get_version()
# Ask permission first
if n:
try:
- ctx.obj['server'].quiet_down()
+ jenkins.server.quiet_down()
except HTTPError as m:
if m.code == 405:
log.error("\n[%s]\nJenkins %s does not support Quiet Down "
@click.pass_context
def remove_offline_nodes(ctx, force):
"""Remove any offline nodes."""
- server = ctx.obj['server']
+ jenkins = ctx.obj['jenkin']
groovy_script = """
import hudson.model.*
"""
if force:
- result = server.run_script(force_script)
+ result = jenkins.server.run_script(force_script)
else:
- result = server.run_script(groovy_script)
+ result = jenkins.server.run_script(groovy_script)
log.info(result)
@click.pass_context
def running(ctx):
"""Show all the currently running builds."""
- running_builds = ctx.obj['server'].get_running_builds()
+ jenkins = ctx.obj['jenkins']
+ running_builds = jenkins.server.get_running_builds()
for build in running_builds:
print("- %s on %s" % (build['name'], build['node']))
@click.pass_context
def queued(ctx):
"""Show all jobs waiting in the queue and their status."""
- queue = ctx.obj['server'].get_queue_info()
+ jenkins = ctx.obj['jenkins']
+ queue = jenkins.server.get_queue_info()
queue_length = len(queue)
print("Build Queue (%s)" % queue_length)
@click.pass_context
def enable(ctx, regex):
"""Enable all Jenkins jobs matching REGEX."""
- server = ctx.obj['server']
+ jenkins = ctx.obj['jenkins']
- result = server.run_script(enable_disable_jobs.format(regex, "enable"))
+ result = jenkins.server.run_script(enable_disable_jobs.format(regex, "enable"))
print(result)
@click.pass_context
def disable(ctx, regex):
"""Disable all Jenkins jobs matching REGEX."""
- server = ctx.obj['server']
+ jenkins = ctx.obj['jenkins']
- result = server.run_script(enable_disable_jobs.format(regex, "disable"))
+ result = jenkins.server.run_script(enable_disable_jobs.format(regex, "disable"))
print(result)
@click.pass_context
def nodes(ctx):
"""Find information about builders connected to Jenkins Master."""
- ctx.obj['nodes'] = ctx.obj['server'].get_nodes()
+ jenkins = ctx.obj['jenkins']
+ ctx.obj['nodes'] = jenkins.server.get_nodes()
@click.command()
@click.pass_context
def plugins_init(ctx):
"""Inspect Jenkins plugins on the server."""
- ctx.obj['plugins'] = ctx.obj['server'].get_plugins()
+ jenkins = ctx.obj['jenkins']
+ ctx.obj['plugins'] = jenkins.server.get_plugins()
@click.command()
@click.pass_context
def change(ctx):
"""Generate a new API token."""
- log.info(get_token(ctx.obj['jenkins_url'], change=True))
+ jenkins = ctx.obj['jenkins']
+ log.info(get_token(jenkins.url, change=True))
@click.command()
@click.pass_context
def print_token(ctx):
"""Print current API token."""
- log.info(get_token(ctx.obj['jenkins_url']))
+ jenkins = ctx.obj['jenkins']
+ log.info(get_token(jenkins.url))
@click.command()
import logging
import os
+import jenkins
+from six.moves import configparser
+
log = logging.getLogger(__name__)
JJB_INI = jjb_ini()
+
+
+class Jenkins():
+ """lftools Jenkins object."""
+
+ def __init__(self, server, user=None, password=None):
+ """Initialize a Jenkins object."""
+ if '://' not in server:
+ if JJB_INI:
+ log.debug('Using config from {}'.format(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:
+ log.debug('jenkins_jobs.ini not found in any of the default paths.')
+ server = 'https://localhost:8080'
+
+ self.server = jenkins.Jenkins(
+ server,
+ username=user,
+ password=password)
+
+ self.url = server
--- /dev/null
+---
+other:
+ - |
+ Refactored the Jenkins object into a class to allow us to reuse it outside
+ of the Jenkins command group.