From: Thanh Ha Date: Wed, 7 Feb 2018 16:09:57 +0000 (-0500) Subject: Add lftools command to remove specific server X-Git-Tag: v0.12.0~1 X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F25%2F8725%2F3;p=releng%2Flftools.git Add lftools command to remove specific server This command also supports an optional minutes parameter which can be used to ignore the server if it is not older than a certain number of minutes. This is useful for cases like Jenkins orphan server cleanup scripts so that they do not try to remove servers that have just been spawned and have not yet connected to Jenkins causing the server to be mistakenly marked as orphaned. Issue: RELENG-780 Change-Id: I7f12218e0ac730ff43def4ec9b6133b4cc8ee0c8 Signed-off-by: Thanh Ha --- diff --git a/lftools/openstack/cmd.py b/lftools/openstack/cmd.py index 468e1982..5dfdf614 100644 --- a/lftools/openstack/cmd.py +++ b/lftools/openstack/cmd.py @@ -114,5 +114,20 @@ def list(ctx, days): days=days) +@click.command() +@click.argument('server') +@click.option( + '--minutes', type=int, default=0, + help='Delete server if older than x minutes.') +@click.pass_context +def remove(ctx, server, minutes): + """Remove servers.""" + os_server.remove( + ctx.obj['os_cloud'], + server_name=server, + minutes=minutes) + + server.add_command(cleanup) server.add_command(list) +server.add_command(remove) diff --git a/lftools/openstack/server.py b/lftools/openstack/server.py index 34a97961..713a5dea 100644 --- a/lftools/openstack/server.py +++ b/lftools/openstack/server.py @@ -14,6 +14,7 @@ __author__ = 'Anil Belur' from datetime import datetime from datetime import timedelta +import sys import shade @@ -70,3 +71,24 @@ def cleanup(os_cloud, days=0): servers = cloud.list_servers() filtered_servers = _filter_servers(servers, days) _remove_servers_from_cloud(filtered_servers, cloud) + + +def remove(os_cloud, server_name, minutes=0): + """Remove a server from cloud. + + :arg str os_cloud: Cloud name as defined in OpenStack clouds.yaml. + :arg int minutes: Only delete server if it is older than number of minutes. + """ + cloud = shade.openstack_cloud(cloud=os_cloud) + server = cloud.get_server(server_name) + + if not server: + print("ERROR: Server not found.") + sys.exit(1) + + if (datetime.strptime(server.created, '%Y-%m-%dT%H:%M:%SZ') + >= datetime.utcnow() - timedelta(minutes=minutes)): + print('WARN: Server "{}" is not older than {} minutes.'.format( + server.name, minutes)) + else: + cloud.delete_server(server.name)