Add lftools command to remove specific server 25/8725/3
authorThanh Ha <thanh.ha@linuxfoundation.org>
Wed, 7 Feb 2018 16:09:57 +0000 (11:09 -0500)
committerThanh Ha <thanh.ha@linuxfoundation.org>
Wed, 7 Feb 2018 16:30:58 +0000 (11:30 -0500)
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 <thanh.ha@linuxfoundation.org>
lftools/openstack/cmd.py
lftools/openstack/server.py

index 468e198..5dfdf61 100644 (file)
@@ -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)
index 34a9796..713a5de 100644 (file)
@@ -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)