Update openstack cmd to support ci_managed filter 86/7886/2
authorThanh Ha <thanh.ha@linuxfoundation.org>
Sat, 9 Dec 2017 01:40:13 +0000 (20:40 -0500)
committerThanh Ha <thanh.ha@linuxfoundation.org>
Sat, 9 Dec 2017 01:52:30 +0000 (20:52 -0500)
Add support for filtering ci_managed metadata when querying for
images.

Issue: RELENG-705
Change-Id: I9570a0683e1d87547bda8fc6741369549450045e
Signed-off-by: Thanh Ha <thanh.ha@linuxfoundation.org>
lftools/openstack/cmd.py
lftools/openstack/image.py

index 97fd125..468e198 100644 (file)
@@ -35,6 +35,9 @@ def image(ctx):
 
 
 @click.command()
+@click.option(
+    '--ci-managed', type=bool, default=True,
+    help='Filter only images that have the ci_managed=yes metadata set.')
 @click.option(
     '--days', type=int, default=0,
     help='Find images older than or equal to days.')
@@ -46,16 +49,20 @@ def image(ctx):
     help=('Clouds (as defined in clouds.yaml) to remove images from. If not'
           'passed will assume from os-cloud parameter. (optional)'))
 @click.pass_context
-def cleanup(ctx, days, hide_public, clouds):
+def cleanup(ctx, days, hide_public, ci_managed, clouds):
     """Cleanup old images."""
     os_image.cleanup(
         ctx.obj['os_cloud'],
+        ci_managed=ci_managed,
         days=days,
         hide_public=hide_public,
         clouds=clouds)
 
 
 @click.command()
+@click.option(
+    '--ci-managed', type=bool, default=True,
+    help='Filter only images that have the ci_managed=yes metadata set.')
 @click.option(
     '--days', type=int, default=0,
     help='Find images older than or equal to days.')
@@ -63,10 +70,11 @@ def cleanup(ctx, days, hide_public, clouds):
     '--hide-public', type=bool, default=False,
     help='Ignore public images.')
 @click.pass_context
-def list(ctx, days, hide_public):
+def list(ctx, days, hide_public, ci_managed):
     """List cloud images."""
     os_image.list(
         ctx.obj['os_cloud'],
+        ci_managed=ci_managed,
         days=days,
         hide_public=hide_public)
 
index c6034b4..4c9ac98 100644 (file)
@@ -18,15 +18,19 @@ from datetime import timedelta
 import shade
 
 
-def _filter_images(images, days=0, hide_public=False):
+def _filter_images(images, days=0, hide_public=False, ci_managed=True):
     """Filter image data and return list.
 
+    :arg bool ci_managed: Filters images with metadata set to `ci_managed=yes`.
+        (Default: true)
     :arg bool hide_public: Whether or not to include public images.
     """
     filtered = []
     for image in images:
         if hide_public and image.is_public:
             continue
+        if ci_managed and image.metadata.get('ci_managed', None) != 'yes':
+            continue
         if days and (
                 datetime.strptime(image.created_at, '%Y-%m-%dT%H:%M:%SZ')
                 >= datetime.now() - timedelta(days=days)):
@@ -36,20 +40,22 @@ def _filter_images(images, days=0, hide_public=False):
     return filtered
 
 
-def list(os_cloud, days=0, hide_public=False):
+def list(os_cloud, days=0, hide_public=False, ci_managed=True):
     """List images found according to parameters."""
     cloud = shade.openstack_cloud(cloud=os_cloud)
     images = cloud.list_images()
 
-    filtered_images = _filter_images(images, days, hide_public)
+    filtered_images = _filter_images(images, days, hide_public, ci_managed)
     for image in filtered_images:
         print(image.name)
 
 
-def cleanup(os_cloud, days=0, hide_public=False, clouds=None):
+def cleanup(os_cloud, days=0, hide_public=False, ci_managed=True, clouds=None):
     """Remove image from cloud.
 
     :arg str os_cloud: Cloud name as defined in OpenStack clouds.yaml.
+    :arg bool ci_managed: Filters images with metadata set to `ci_managed=yes`.
+        (Default: true)
     :arg int days: Filter images that are older than number of days.
     :arg bool hide_public: If true, will ignore public images. (Default: false)
     :arg str clouds: If passed, comma-separated list of clouds to remove image
@@ -81,7 +87,7 @@ def cleanup(os_cloud, days=0, hide_public=False, clouds=None):
             cloud_list.append(shade.openstack_cloud(cloud=c))
 
     images = cloud.list_images()
-    filtered_images = _filter_images(images, days, hide_public)
+    filtered_images = _filter_images(images, days, hide_public, ci_managed)
 
     if clouds:
         for c in cloud_list: