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')