From 3468ea1ca429e8b6403ae5f989cfed521d8f5690 Mon Sep 17 00:00:00 2001 From: M V P Nitesh Date: Fri, 30 Jun 2017 14:13:02 +0530 Subject: [PATCH] Added 'openstack image set --visibility' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This feature will allow image owners to share images across multiple tenants/projects without explicitly creating members individually through the glance API V2. “Community images” will not appear iu user's default image listings Change-Id: Ic02bf44cca5d6d793d68a8737d3cfe3f44407d88 Closes-Bug: #1626837 --- doc/source/cli/command-objects/image.rst | 20 +++++++++-- openstackclient/image/v2/image.py | 34 ++++++++++++++++--- ...image_set_visibility-babf4ff2f687d465.yaml | 7 ++++ 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/image_set_visibility-babf4ff2f687d465.yaml diff --git a/doc/source/cli/command-objects/image.rst b/doc/source/cli/command-objects/image.rst index ec51fa931..2918452ba 100644 --- a/doc/source/cli/command-objects/image.rst +++ b/doc/source/cli/command-objects/image.rst @@ -57,7 +57,7 @@ Create/upload an image [--force] [--checksum ] [--protected | --unprotected] - [--public | --private] + [--public | --private | --community | --shared] [--property [...] ] [--tag [...] ] [--project [--project-domain ]] @@ -143,6 +143,14 @@ Create/upload an image Image is inaccessible to the public (default) +.. option:: --community + + Image is accessible to the community + +.. option:: --shared + + Image can be shared + .. option:: --property Set a property on this image (repeat for multiple values) @@ -310,7 +318,7 @@ Set image properties [--disk-format ] [--size ] [--protected | --unprotected] - [--public | --private] + [--public | --private | --community | --shared] [--store ] [--location ] [--copy-from ] @@ -376,6 +384,14 @@ Set image properties Image is inaccessible to the public (default) +.. option:: --community + + Image is accessible to the community + +.. option:: --shared + + Image can be shared + .. option:: --store Upload image to this store diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py index ad21cbd7e..2b171410f 100644 --- a/openstackclient/image/v2/image.py +++ b/openstackclient/image/v2/image.py @@ -205,6 +205,16 @@ class CreateImage(command.ShowOne): action="store_true", help=_("Image is inaccessible to the public (default)"), ) + public_group.add_argument( + "--community", + action="store_true", + help=_("Image is accessible to the community"), + ) + public_group.add_argument( + "--shared", + action="store_true", + help=_("Image can be shared"), + ) parser.add_argument( "--property", dest="properties", @@ -260,7 +270,7 @@ class CreateImage(command.ShowOne): kwargs = {} copy_attrs = ('name', 'id', 'container_format', 'disk_format', - 'min_disk', 'min_ram', 'tags') + 'min_disk', 'min_ram', 'tags', 'visibility') for attr in copy_attrs: if attr in parsed_args: val = getattr(parsed_args, attr, None) @@ -288,7 +298,10 @@ class CreateImage(command.ShowOne): kwargs['visibility'] = 'public' if parsed_args.private: kwargs['visibility'] = 'private' - + if parsed_args.community: + kwargs['visibility'] = 'community' + if parsed_args.shared: + kwargs['visibility'] = 'shared' # Handle deprecated --owner option project_arg = parsed_args.project if parsed_args.owner: @@ -698,6 +711,16 @@ class SetImage(command.Command): action="store_true", help=_("Image is inaccessible to the public (default)"), ) + public_group.add_argument( + "--community", + action="store_true", + help=_("Image is accessible to the community"), + ) + public_group.add_argument( + "--shared", + action="store_true", + help=_("Image can be shared"), + ) parser.add_argument( "--property", dest="properties", @@ -817,7 +840,7 @@ class SetImage(command.Command): copy_attrs = ('architecture', 'container_format', 'disk_format', 'file', 'instance_id', 'kernel_id', 'locations', 'min_disk', 'min_ram', 'name', 'os_distro', 'os_version', - 'prefix', 'progress', 'ramdisk_id', 'tags') + 'prefix', 'progress', 'ramdisk_id', 'tags', 'visibility') for attr in copy_attrs: if attr in parsed_args: val = getattr(parsed_args, attr, None) @@ -845,7 +868,10 @@ class SetImage(command.Command): kwargs['visibility'] = 'public' if parsed_args.private: kwargs['visibility'] = 'private' - + if parsed_args.community: + kwargs['visibility'] = 'community' + if parsed_args.shared: + kwargs['visibility'] = 'shared' # Handle deprecated --owner option project_arg = parsed_args.project if parsed_args.owner: diff --git a/releasenotes/notes/image_set_visibility-babf4ff2f687d465.yaml b/releasenotes/notes/image_set_visibility-babf4ff2f687d465.yaml new file mode 100644 index 000000000..c521ac185 --- /dev/null +++ b/releasenotes/notes/image_set_visibility-babf4ff2f687d465.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - Add ``--community`` and ``--shared`` options to the ``image create`` and + ``image set`` commands to allow image owners to share images across + multiple projects without explicitly creating image members. + “Community images” will not appear in user’s default + image listings.