From: Thanh Ha Date: Sat, 9 Dec 2017 01:40:13 +0000 (-0500) Subject: Update openstack cmd to support ci_managed filter X-Git-Tag: v0.11.0~2 X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=commitdiff_plain;h=68f40d36088f00159b51578e236bc2620109e0ff;p=releng%2Flftools.git Update openstack cmd to support ci_managed filter Add support for filtering ci_managed metadata when querying for images. Issue: RELENG-705 Change-Id: I9570a0683e1d87547bda8fc6741369549450045e Signed-off-by: Thanh Ha --- diff --git a/lftools/openstack/cmd.py b/lftools/openstack/cmd.py index 97fd125a..468e1982 100644 --- a/lftools/openstack/cmd.py +++ b/lftools/openstack/cmd.py @@ -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) diff --git a/lftools/openstack/image.py b/lftools/openstack/image.py index c6034b48..4c9ac98d 100644 --- a/lftools/openstack/image.py +++ b/lftools/openstack/image.py @@ -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: