From: Thanh Ha Date: Tue, 26 Jun 2018 00:58:59 +0000 (-0400) Subject: Add remove-offline-nodes command X-Git-Tag: v0.14.0~8 X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F54%2F11554%2F2;p=releng%2Flftools.git Add remove-offline-nodes command Migrates the 2 scripts for removing offline nodes from global-jjb jenkins-admin into lftools. https://github.com/lfit/releng-global-jjb/blob/v0.21.4/jenkins-admin/del_computer.groovy https://github.com/lfit/releng-global-jjb/blob/v0.21.4/jenkins-admin/slay_computer.groovy Change-Id: Ifb96689274d91d2655fe3fe1122856c82a3edaf2 Signed-off-by: Thanh Ha --- diff --git a/lftools/cli/jenkins/__init__.py b/lftools/cli/jenkins/__init__.py index 83ef71d8..6da1e458 100644 --- a/lftools/cli/jenkins/__init__.py +++ b/lftools/cli/jenkins/__init__.py @@ -94,9 +94,77 @@ def quiet_down(ctx, n): raise m +@click.command() +@click.option( + '--force', is_flag=True, default=False, + help='Forcibly remove nodes, use only if the non-force version fails.') +@click.pass_context +def remove_offline_nodes(ctx, force): + """Remove any offline nodes.""" + server = ctx.obj['server'] + groovy_script = """ +import hudson.model.* + +def numberOfflineNodes = 0 +def numberNodes = 0 + +slaveNodes = hudson.model.Hudson.instance + +for (slave in slaveNodes.nodes) { + def node = slave.computer + numberNodes ++ + println "" + println "Checking node ${node.name}:" + println '\tcomputer.isOffline: ${slave.getComputer().isOffline()}' + println '\tcomputer.offline: ${node.offline}' + + if (node.offline) { + numberOfflineNodes ++ + println '\tRemoving node ${node.name}' + slaveNodes.removeNode(slave) + } +} + +println "Number of Offline Nodes: " + numberOfflineNodes +println "Number of Nodes: " + numberNodes +""" + + force_script = """ +import jenkins.* +import jenkins.model.* +import hudson.* +import hudson.model.* + +for (node in Jenkins.instance.computers) { + try { + println "Checking node: ${node.name}" + println "\tdisplay-name: ${node.properties.displayName}" + println "\toffline: ${node.properties.offline}" + println "\ttemporarily-offline: ${node.properties.temporarilyOffline}" + if (node.properties.offline) { + println "Removing bad node: ${node.name}" + Jenkins.instance.removeComputer(node) + } + println "" + } + catch (NullPointerException nullPointer) { + println "NullPointerException caught" + println "" + } +} +""" + + if force: + result = server.run_script(force_script) + else: + result = server.run_script(groovy_script) + print(result) + + jenkins_cli.add_command(plugins_init, name='plugins') jenkins_cli.add_command(nodes) jenkins_cli.add_command(builds) jenkins_cli.add_command(get_credentials, name='get-credentials') jenkins_cli.add_command(groovy) jenkins_cli.add_command(quiet_down, name='quiet-down') +jenkins_cli.add_command(remove_offline_nodes, name='remove-offline-nodes')