Remove experimental flag from share groups commands
- Removed all experimental mentions from share group feature commands. Depends-On: I080683541d527657f01008d43529fc53c19a09cd Change-Id: I585c9c845851fcd581e08b0084fc2528b85cd632 Partially-Implements: bp graduate-share-groups-feature
This commit is contained in:
parent
8d2718da8c
commit
3371c54303
@ -27,7 +27,7 @@ from manilaclient import utils
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
MAX_VERSION = '2.54'
|
MAX_VERSION = '2.55'
|
||||||
MIN_VERSION = '2.0'
|
MIN_VERSION = '2.0'
|
||||||
DEPRECATED_VERSION = '1.0'
|
DEPRECATED_VERSION = '1.0'
|
||||||
_VERSIONED_METHOD_MAP = {}
|
_VERSIONED_METHOD_MAP = {}
|
||||||
|
@ -170,7 +170,7 @@ class CreateShare(command.ShowOne):
|
|||||||
metavar='<share-group>',
|
metavar='<share-group>',
|
||||||
default=None,
|
default=None,
|
||||||
help=_('Optional share group name or ID in which to create '
|
help=_('Optional share group name or ID in which to create '
|
||||||
'the share. (Experimental, Default=None).')
|
'the share. (Default=None).')
|
||||||
)
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ RESOURCE_PATH = '/share-group-snapshots/%s'
|
|||||||
RESOURCE_PATH_ACTION = '/share-group-snapshots/%s/action'
|
RESOURCE_PATH_ACTION = '/share-group-snapshots/%s/action'
|
||||||
RESOURCES_NAME = 'share_group_snapshots'
|
RESOURCES_NAME = 'share_group_snapshots'
|
||||||
RESOURCE_NAME = 'share_group_snapshot'
|
RESOURCE_NAME = 'share_group_snapshot'
|
||||||
|
SG_GRADUATION_VERSION = "2.55"
|
||||||
|
|
||||||
|
|
||||||
class ShareGroupSnapshot(common_base.Resource):
|
class ShareGroupSnapshot(common_base.Resource):
|
||||||
@ -49,9 +50,8 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
"""Manage :class:`ShareGroupSnapshot` resources."""
|
"""Manage :class:`ShareGroupSnapshot` resources."""
|
||||||
resource_class = ShareGroupSnapshot
|
resource_class = ShareGroupSnapshot
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
def _create_share_group_snapshot(self, share_group, name=None,
|
||||||
@api_versions.experimental_api
|
description=None):
|
||||||
def create(self, share_group, name=None, description=None):
|
|
||||||
"""Create a share group snapshot.
|
"""Create a share group snapshot.
|
||||||
|
|
||||||
:param share_group: either ShareGroup object or text with its UUID
|
:param share_group: either ShareGroup object or text with its UUID
|
||||||
@ -69,9 +69,18 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
return self._create(
|
return self._create(
|
||||||
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def get(self, share_group_snapshot):
|
def create(self, share_group, name=None, description=None):
|
||||||
|
return self._create_share_group_snapshot(share_group, name,
|
||||||
|
description)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def create(self, share_group, name=None, description=None):
|
||||||
|
return self._create_share_group_snapshot(share_group, name,
|
||||||
|
description)
|
||||||
|
|
||||||
|
def _get_share_group_snapshot(self, share_group_snapshot):
|
||||||
"""Get a share group snapshot.
|
"""Get a share group snapshot.
|
||||||
|
|
||||||
:param share_group_snapshot: either share group snapshot object or text
|
:param share_group_snapshot: either share group snapshot object or text
|
||||||
@ -82,9 +91,16 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH % share_group_snapshot_id
|
url = RESOURCE_PATH % share_group_snapshot_id
|
||||||
return self._get(url, RESOURCE_NAME)
|
return self._get(url, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def list(self, detailed=True, search_opts=None,
|
def get(self, share_group_snapshot):
|
||||||
|
return self._get_share_group_snapshot(share_group_snapshot)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def get(self, share_group_snapshot):
|
||||||
|
return self._get_share_group_snapshot(share_group_snapshot)
|
||||||
|
|
||||||
|
def _list_share_group_snapshots(self, detailed=True, search_opts=None,
|
||||||
sort_key=None, sort_dir=None):
|
sort_key=None, sort_dir=None):
|
||||||
"""Get a list of all share group snapshots.
|
"""Get a list of all share group snapshots.
|
||||||
|
|
||||||
@ -129,9 +145,22 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
|
|
||||||
return self._list(url, RESOURCES_NAME)
|
return self._list(url, RESOURCES_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def update(self, share_group_snapshot, **kwargs):
|
def list(self, detailed=True, search_opts=None,
|
||||||
|
sort_key=None, sort_dir=None):
|
||||||
|
return self._list_share_group_snapshots(
|
||||||
|
detailed=detailed, search_opts=search_opts,
|
||||||
|
sort_key=sort_key, sort_dir=sort_dir)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def list(self, detailed=True, search_opts=None,
|
||||||
|
sort_key=None, sort_dir=None):
|
||||||
|
return self._list_share_group_snapshots(
|
||||||
|
detailed=detailed, search_opts=search_opts,
|
||||||
|
sort_key=sort_key, sort_dir=sort_dir)
|
||||||
|
|
||||||
|
def _update_share_group_snapshot(self, share_group_snapshot, **kwargs):
|
||||||
"""Updates a share group snapshot.
|
"""Updates a share group snapshot.
|
||||||
|
|
||||||
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
||||||
@ -146,9 +175,18 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
body = {RESOURCE_NAME: kwargs}
|
body = {RESOURCE_NAME: kwargs}
|
||||||
return self._update(url, body, RESOURCE_NAME)
|
return self._update(url, body, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def delete(self, share_group_snapshot, force=False):
|
def update(self, share_group_snapshot, **kwargs):
|
||||||
|
return self._update_share_group_snapshot(share_group_snapshot,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def update(self, share_group_snapshot, **kwargs):
|
||||||
|
return self._update_share_group_snapshot(share_group_snapshot,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
def _delete_share_group_snapshot(self, share_group_snapshot, force=False):
|
||||||
"""Delete a share group snapshot.
|
"""Delete a share group snapshot.
|
||||||
|
|
||||||
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
||||||
@ -164,9 +202,16 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH % share_group_snapshot_id
|
url = RESOURCE_PATH % share_group_snapshot_id
|
||||||
self._delete(url)
|
self._delete(url)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def reset_state(self, share_group_snapshot, state):
|
def delete(self, share_group_snapshot, force=False):
|
||||||
|
self._delete_share_group_snapshot(share_group_snapshot, force=force)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def delete(self, share_group_snapshot, force=False):
|
||||||
|
self._delete_share_group_snapshot(share_group_snapshot, force=force)
|
||||||
|
|
||||||
|
def _share_group_snapshot_reset_state(self, share_group_snapshot, state):
|
||||||
"""Update the specified share group snapshot.
|
"""Update the specified share group snapshot.
|
||||||
|
|
||||||
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
:param share_group_snapshot: either ShareGroupSnapshot object or text
|
||||||
@ -177,3 +222,12 @@ class ShareGroupSnapshotManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH_ACTION % share_group_snapshot_id
|
url = RESOURCE_PATH_ACTION % share_group_snapshot_id
|
||||||
body = {'reset_status': {'status': state}}
|
body = {'reset_status': {'status': state}}
|
||||||
self.api.client.post(url, body=body)
|
self.api.client.post(url, body=body)
|
||||||
|
|
||||||
|
@api_versions.wraps("2.31", "2.54")
|
||||||
|
@api_versions.experimental_api
|
||||||
|
def reset_state(self, share_group_snapshot, state):
|
||||||
|
self._share_group_snapshot_reset_state(share_group_snapshot, state)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def reset_state(self, share_group_snapshot, state):
|
||||||
|
self._share_group_snapshot_reset_state(share_group_snapshot, state)
|
||||||
|
@ -21,6 +21,7 @@ RESOURCES_PATH = '/share-group-types'
|
|||||||
RESOURCE_PATH = '/share-group-types/%s/access'
|
RESOURCE_PATH = '/share-group-types/%s/access'
|
||||||
RESOURCE_PATH_ACTION = '/share-group-types/%s/action'
|
RESOURCE_PATH_ACTION = '/share-group-types/%s/action'
|
||||||
RESOURCE_NAME = 'share_group_type_access'
|
RESOURCE_NAME = 'share_group_type_access'
|
||||||
|
SG_GRADUATION_VERSION = "2.55"
|
||||||
|
|
||||||
|
|
||||||
class ShareGroupTypeAccess(common_base.Resource):
|
class ShareGroupTypeAccess(common_base.Resource):
|
||||||
@ -32,29 +33,51 @@ class ShareGroupTypeAccessManager(base.ManagerWithFind):
|
|||||||
"""Manage :class:`ShareGroupTypeAccess` resources."""
|
"""Manage :class:`ShareGroupTypeAccess` resources."""
|
||||||
resource_class = ShareGroupTypeAccess
|
resource_class = ShareGroupTypeAccess
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
def _list_share_group_type_access(self, share_group_type,
|
||||||
@api_versions.experimental_api
|
search_opts=None):
|
||||||
def list(self, share_group_type, search_opts=None):
|
|
||||||
if share_group_type.is_public:
|
if share_group_type.is_public:
|
||||||
return None
|
return None
|
||||||
share_group_type_id = common_base.getid(share_group_type)
|
share_group_type_id = common_base.getid(share_group_type)
|
||||||
url = RESOURCE_PATH % share_group_type_id
|
url = RESOURCE_PATH % share_group_type_id
|
||||||
return self._list(url, RESOURCE_NAME)
|
return self._list(url, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
|
@api_versions.experimental_api
|
||||||
|
def list(self, share_group_type, search_opts=None):
|
||||||
|
return self._list_share_group_type_access(share_group_type,
|
||||||
|
search_opts)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def list(self, share_group_type, search_opts=None):
|
||||||
|
return self._list_share_group_type_access(share_group_type,
|
||||||
|
search_opts)
|
||||||
|
|
||||||
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def add_project_access(self, share_group_type, project):
|
def add_project_access(self, share_group_type, project):
|
||||||
"""Add a project to the given share group type access list."""
|
"""Add a project to the given share group type access list."""
|
||||||
info = {'project': project}
|
info = {'project': project}
|
||||||
self._action('addProjectAccess', share_group_type, info)
|
self._action('addProjectAccess', share_group_type, info)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def add_project_access(self, share_group_type, project):
|
||||||
|
"""Add a project to the given share group type access list."""
|
||||||
|
info = {'project': project}
|
||||||
|
self._action('addProjectAccess', share_group_type, info)
|
||||||
|
|
||||||
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def remove_project_access(self, share_group_type, project):
|
def remove_project_access(self, share_group_type, project):
|
||||||
"""Remove a project from the given share group type access list."""
|
"""Remove a project from the given share group type access list."""
|
||||||
info = {'project': project}
|
info = {'project': project}
|
||||||
self._action('removeProjectAccess', share_group_type, info)
|
self._action('removeProjectAccess', share_group_type, info)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def remove_project_access(self, share_group_type, project):
|
||||||
|
"""Remove a project from the given share group type access list."""
|
||||||
|
info = {'project': project}
|
||||||
|
self._action('removeProjectAccess', share_group_type, info)
|
||||||
|
|
||||||
def _action(self, action, share_group_type, info, **kwargs):
|
def _action(self, action, share_group_type, info, **kwargs):
|
||||||
"""Perform a share group type action."""
|
"""Perform a share group type action."""
|
||||||
body = {action: info}
|
body = {action: info}
|
||||||
|
@ -27,6 +27,7 @@ RESOURCE_NAME = 'share_group_type'
|
|||||||
GROUP_SPECS_RESOURCES_PATH = '/share-group-types/%s/group-specs'
|
GROUP_SPECS_RESOURCES_PATH = '/share-group-types/%s/group-specs'
|
||||||
GROUP_SPECS_RESOURCE_PATH = '/share-group-types/%s/group-specs/%s'
|
GROUP_SPECS_RESOURCE_PATH = '/share-group-types/%s/group-specs/%s'
|
||||||
GROUP_SPECS_RESOURCES_NAME = 'group_specs'
|
GROUP_SPECS_RESOURCES_NAME = 'group_specs'
|
||||||
|
SG_GRADUATION_VERSION = "2.55"
|
||||||
|
|
||||||
|
|
||||||
class ShareGroupType(common_base.Resource):
|
class ShareGroupType(common_base.Resource):
|
||||||
@ -91,9 +92,8 @@ class ShareGroupTypeManager(base.ManagerWithFind):
|
|||||||
"""Manage :class:`ShareGroupType` resources."""
|
"""Manage :class:`ShareGroupType` resources."""
|
||||||
resource_class = ShareGroupType
|
resource_class = ShareGroupType
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
def _create_share_group_type(self, name, share_types, is_public=False,
|
||||||
@api_versions.experimental_api
|
group_specs=None):
|
||||||
def create(self, name, share_types, is_public=False, group_specs=None):
|
|
||||||
"""Create a share group type.
|
"""Create a share group type.
|
||||||
|
|
||||||
:param name: Descriptive name of the share group type
|
:param name: Descriptive name of the share group type
|
||||||
@ -116,9 +116,18 @@ class ShareGroupTypeManager(base.ManagerWithFind):
|
|||||||
return self._create(
|
return self._create(
|
||||||
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def get(self, share_group_type="default"):
|
def create(self, name, share_types, is_public=False, group_specs=None):
|
||||||
|
return self._create_share_group_type(name, share_types, is_public,
|
||||||
|
group_specs)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def create(self, name, share_types, is_public=False, group_specs=None):
|
||||||
|
return self._create_share_group_type(name, share_types, is_public,
|
||||||
|
group_specs)
|
||||||
|
|
||||||
|
def _get_share_group_type(self, share_group_type="default"):
|
||||||
"""Get a specific share group type.
|
"""Get a specific share group type.
|
||||||
|
|
||||||
:param share_group_type: either instance of ShareGroupType, or text
|
:param share_group_type: either instance of ShareGroupType, or text
|
||||||
@ -129,9 +138,16 @@ class ShareGroupTypeManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH % share_group_type_id
|
url = RESOURCE_PATH % share_group_type_id
|
||||||
return self._get(url, RESOURCE_NAME)
|
return self._get(url, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def list(self, show_all=True, search_opts=None):
|
def get(self, share_group_type="default"):
|
||||||
|
return self._get_share_group_type(share_group_type)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def get(self, share_group_type="default"):
|
||||||
|
return self._get_share_group_type(share_group_type)
|
||||||
|
|
||||||
|
def _list_share_group_types(self, show_all=True, search_opts=None):
|
||||||
"""Get a list of all share group types.
|
"""Get a list of all share group types.
|
||||||
|
|
||||||
:rtype: list of :class:`ShareGroupType`.
|
:rtype: list of :class:`ShareGroupType`.
|
||||||
@ -140,9 +156,16 @@ class ShareGroupTypeManager(base.ManagerWithFind):
|
|||||||
url = RESOURCES_PATH + query_string
|
url = RESOURCES_PATH + query_string
|
||||||
return self._list(url, RESOURCES_NAME)
|
return self._list(url, RESOURCES_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def delete(self, share_group_type):
|
def list(self, show_all=True, search_opts=None):
|
||||||
|
return self._list_share_group_types(show_all, search_opts)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def list(self, show_all=True, search_opts=None):
|
||||||
|
return self._list_share_group_types(show_all, search_opts)
|
||||||
|
|
||||||
|
def _delete_share_group_type(self, share_group_type):
|
||||||
"""Delete a specific share group type.
|
"""Delete a specific share group type.
|
||||||
|
|
||||||
:param share_group_type: either instance of ShareGroupType, or text
|
:param share_group_type: either instance of ShareGroupType, or text
|
||||||
@ -151,3 +174,12 @@ class ShareGroupTypeManager(base.ManagerWithFind):
|
|||||||
share_group_type_id = common_base.getid(share_group_type)
|
share_group_type_id = common_base.getid(share_group_type)
|
||||||
url = RESOURCE_PATH % share_group_type_id
|
url = RESOURCE_PATH % share_group_type_id
|
||||||
self._delete(url)
|
self._delete(url)
|
||||||
|
|
||||||
|
@api_versions.wraps("2.31", "2.54")
|
||||||
|
@api_versions.experimental_api
|
||||||
|
def delete(self, share_group_type):
|
||||||
|
self._delete_share_group_type(share_group_type)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def delete(self, share_group_type):
|
||||||
|
self._delete_share_group_type(share_group_type)
|
||||||
|
@ -25,6 +25,7 @@ RESOURCE_PATH = '/share-groups/%s'
|
|||||||
RESOURCE_PATH_ACTION = '/share-groups/%s/action'
|
RESOURCE_PATH_ACTION = '/share-groups/%s/action'
|
||||||
RESOURCES_NAME = 'share_groups'
|
RESOURCES_NAME = 'share_groups'
|
||||||
RESOURCE_NAME = 'share_group'
|
RESOURCE_NAME = 'share_group'
|
||||||
|
SG_GRADUATION_VERSION = "2.55"
|
||||||
|
|
||||||
|
|
||||||
class ShareGroup(common_base.Resource):
|
class ShareGroup(common_base.Resource):
|
||||||
@ -50,11 +51,10 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
"""Manage :class:`ShareGroup` resources."""
|
"""Manage :class:`ShareGroup` resources."""
|
||||||
resource_class = ShareGroup
|
resource_class = ShareGroup
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
def _create_share_group(
|
||||||
@api_versions.experimental_api
|
self, share_group_type=None, share_types=None, share_network=None,
|
||||||
def create(self, share_group_type=None, share_types=None,
|
name=None, description=None, source_share_group_snapshot=None,
|
||||||
share_network=None, name=None, description=None,
|
availability_zone=None):
|
||||||
source_share_group_snapshot=None, availability_zone=None):
|
|
||||||
"""Create a Share Group.
|
"""Create a Share Group.
|
||||||
|
|
||||||
:param share_group_type: either instance of ShareGroupType or text
|
:param share_group_type: either instance of ShareGroupType or text
|
||||||
@ -102,9 +102,28 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
return self._create(
|
return self._create(
|
||||||
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
RESOURCES_PATH, {RESOURCE_NAME: body}, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def get(self, share_group):
|
def create(self, share_group_type=None, share_types=None,
|
||||||
|
share_network=None, name=None, description=None,
|
||||||
|
source_share_group_snapshot=None, availability_zone=None):
|
||||||
|
return self._create_share_group(
|
||||||
|
share_group_type=share_group_type, share_types=share_types,
|
||||||
|
share_network=share_network, name=name, description=description,
|
||||||
|
source_share_group_snapshot=source_share_group_snapshot,
|
||||||
|
availability_zone=availability_zone)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def create(self, share_group_type=None, share_types=None,
|
||||||
|
share_network=None, name=None, description=None,
|
||||||
|
source_share_group_snapshot=None, availability_zone=None):
|
||||||
|
return self._create_share_group(
|
||||||
|
share_group_type=share_group_type, share_types=share_types,
|
||||||
|
share_network=share_network, name=name, description=description,
|
||||||
|
source_share_group_snapshot=source_share_group_snapshot,
|
||||||
|
availability_zone=availability_zone)
|
||||||
|
|
||||||
|
def _get_share_group(self, share_group):
|
||||||
"""Get a share group.
|
"""Get a share group.
|
||||||
|
|
||||||
:param share_group: either ShareGroup object or text with its UUID
|
:param share_group: either ShareGroup object or text with its UUID
|
||||||
@ -114,9 +133,16 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH % share_group_id
|
url = RESOURCE_PATH % share_group_id
|
||||||
return self._get(url, RESOURCE_NAME)
|
return self._get(url, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def list(self, detailed=True, search_opts=None,
|
def get(self, share_group):
|
||||||
|
return self._get_share_group(share_group)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def get(self, share_group):
|
||||||
|
return self._get_share_group(share_group)
|
||||||
|
|
||||||
|
def _list_share_groups(self, detailed=True, search_opts=None,
|
||||||
sort_key=None, sort_dir=None):
|
sort_key=None, sort_dir=None):
|
||||||
"""Get a list of all share groups.
|
"""Get a list of all share groups.
|
||||||
|
|
||||||
@ -170,9 +196,22 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
|
|
||||||
return self._list(url, RESOURCES_NAME)
|
return self._list(url, RESOURCES_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def update(self, share_group, **kwargs):
|
def list(self, detailed=True, search_opts=None,
|
||||||
|
sort_key=None, sort_dir=None):
|
||||||
|
return self._list_share_groups(
|
||||||
|
detailed=detailed, search_opts=search_opts,
|
||||||
|
sort_key=sort_key, sort_dir=sort_dir)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def list(self, detailed=True, search_opts=None,
|
||||||
|
sort_key=None, sort_dir=None):
|
||||||
|
return self._list_share_groups(
|
||||||
|
detailed=detailed, search_opts=search_opts, sort_key=sort_key,
|
||||||
|
sort_dir=sort_dir)
|
||||||
|
|
||||||
|
def _update_share_group(self, share_group, **kwargs):
|
||||||
"""Updates a share group.
|
"""Updates a share group.
|
||||||
|
|
||||||
:param share_group: either ShareGroup object or text with its UUID
|
:param share_group: either ShareGroup object or text with its UUID
|
||||||
@ -186,9 +225,15 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
body = {RESOURCE_NAME: kwargs}
|
body = {RESOURCE_NAME: kwargs}
|
||||||
return self._update(url, body, RESOURCE_NAME)
|
return self._update(url, body, RESOURCE_NAME)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
def update(self, share_group, **kwargs):
|
||||||
def delete(self, share_group, force=False):
|
return self._update_share_group(share_group, **kwargs)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def update(self, share_group, **kwargs):
|
||||||
|
return self._update_share_group(share_group, **kwargs)
|
||||||
|
|
||||||
|
def _delete_share_group(self, share_group, force=False):
|
||||||
"""Delete a share group.
|
"""Delete a share group.
|
||||||
|
|
||||||
:param share_group: either ShareGroup object or text with its UUID
|
:param share_group: either ShareGroup object or text with its UUID
|
||||||
@ -203,9 +248,16 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH % share_group_id
|
url = RESOURCE_PATH % share_group_id
|
||||||
self._delete(url)
|
self._delete(url)
|
||||||
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31", "2.54")
|
||||||
@api_versions.experimental_api
|
@api_versions.experimental_api
|
||||||
def reset_state(self, share_group, state):
|
def delete(self, share_group, force=False):
|
||||||
|
self._delete_share_group(share_group, force=force)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def delete(self, share_group, force=False):
|
||||||
|
self._delete_share_group(share_group, force=force)
|
||||||
|
|
||||||
|
def _share_group_reset_state(self, share_group, state):
|
||||||
"""Update the specified share group with the provided state.
|
"""Update the specified share group with the provided state.
|
||||||
|
|
||||||
:param share_group: either ShareGroup object or text with its UUID
|
:param share_group: either ShareGroup object or text with its UUID
|
||||||
@ -216,3 +268,12 @@ class ShareGroupManager(base.ManagerWithFind):
|
|||||||
url = RESOURCE_PATH_ACTION % share_group_id
|
url = RESOURCE_PATH_ACTION % share_group_id
|
||||||
body = {'reset_status': {'status': state}}
|
body = {'reset_status': {'status': state}}
|
||||||
self.api.client.post(url, body=body)
|
self.api.client.post(url, body=body)
|
||||||
|
|
||||||
|
@api_versions.wraps("2.31", "2.54")
|
||||||
|
@api_versions.experimental_api
|
||||||
|
def reset_state(self, share_group, state):
|
||||||
|
self._share_group_reset_state(share_group, state)
|
||||||
|
|
||||||
|
@api_versions.wraps(SG_GRADUATION_VERSION) # noqa
|
||||||
|
def reset_state(self, share_group, state):
|
||||||
|
self._share_group_reset_state(share_group, state)
|
||||||
|
@ -200,7 +200,6 @@ def _print_share_replica(cs, replica):
|
|||||||
cliutils.print_dict(info)
|
cliutils.print_dict(info)
|
||||||
|
|
||||||
|
|
||||||
@api_versions.experimental_api
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31")
|
||||||
def _find_share_group(cs, share_group):
|
def _find_share_group(cs, share_group):
|
||||||
"""Get a share group ID."""
|
"""Get a share group ID."""
|
||||||
@ -217,7 +216,6 @@ def _print_share_group(cs, share_group):
|
|||||||
cliutils.print_dict(info)
|
cliutils.print_dict(info)
|
||||||
|
|
||||||
|
|
||||||
@api_versions.experimental_api
|
|
||||||
@api_versions.wraps("2.31")
|
@api_versions.wraps("2.31")
|
||||||
def _find_share_group_snapshot(cs, share_group_snapshot):
|
def _find_share_group_snapshot(cs, share_group_snapshot):
|
||||||
"""Get a share group snapshot by name or ID."""
|
"""Get a share group snapshot by name or ID."""
|
||||||
@ -802,7 +800,7 @@ def do_rate_limits(cs, args):
|
|||||||
metavar='<share-group>',
|
metavar='<share-group>',
|
||||||
action='single_alias',
|
action='single_alias',
|
||||||
help='Optional share group name or ID in which to create the share '
|
help='Optional share group name or ID in which to create the share '
|
||||||
'(Experimental, Default=None).',
|
'(Default=None).',
|
||||||
default=None)
|
default=None)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
def do_create(cs, args):
|
def do_create(cs, args):
|
||||||
@ -1380,7 +1378,7 @@ def do_revert_to_snapshot(cs, args):
|
|||||||
metavar='<share-group>',
|
metavar='<share-group>',
|
||||||
action='single_alias',
|
action='single_alias',
|
||||||
help='Optional share group name or ID which contains the share '
|
help='Optional share group name or ID which contains the share '
|
||||||
'(Experimental, Default=None).',
|
'(Default=None).',
|
||||||
default=None)
|
default=None)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
def do_delete(cs, args):
|
def do_delete(cs, args):
|
||||||
@ -1869,8 +1867,7 @@ def do_snapshot_access_list(cs, args):
|
|||||||
type=str,
|
type=str,
|
||||||
default=None,
|
default=None,
|
||||||
action='single_alias',
|
action='single_alias',
|
||||||
help='Filter results by share group name or ID (Experimental, '
|
help='Filter results by share group name or ID (Default=None).')
|
||||||
'Default=None).')
|
|
||||||
@cliutils.arg(
|
@cliutils.arg(
|
||||||
'--columns',
|
'--columns',
|
||||||
metavar='<columns>',
|
metavar='<columns>',
|
||||||
@ -4524,7 +4521,6 @@ def _find_share_group_type(cs, sg_type):
|
|||||||
help='Comma separated list of columns to be displayed '
|
help='Comma separated list of columns to be displayed '
|
||||||
'example --columns "id,name".')
|
'example --columns "id,name".')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_type_list(cs, args):
|
def do_share_group_type_list(cs, args):
|
||||||
"""Print a list of available 'share group types'."""
|
"""Print a list of available 'share group types'."""
|
||||||
|
|
||||||
@ -4548,7 +4544,6 @@ def do_share_group_type_list(cs, args):
|
|||||||
help='Comma separated list of columns to be displayed '
|
help='Comma separated list of columns to be displayed '
|
||||||
'example --columns "id,name".')
|
'example --columns "id,name".')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_type_specs_list(cs, args):
|
def do_share_group_type_specs_list(cs, args):
|
||||||
"""Print a list of 'share group types specs' (Admin Only)."""
|
"""Print a list of 'share group types specs' (Admin Only)."""
|
||||||
|
|
||||||
@ -4583,7 +4578,6 @@ def do_share_group_type_specs_list(cs, args):
|
|||||||
'OPTIONAL: Default=None. '
|
'OPTIONAL: Default=None. '
|
||||||
'Example: "--group-specs consistent_snapshot_support=host".',)
|
'Example: "--group-specs consistent_snapshot_support=host".',)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_type_create(cs, args):
|
def do_share_group_type_create(cs, args):
|
||||||
"""Create a new share group type (Admin only)."""
|
"""Create a new share group type (Admin only)."""
|
||||||
|
|
||||||
@ -4607,7 +4601,6 @@ def do_share_group_type_create(cs, args):
|
|||||||
metavar='<id>',
|
metavar='<id>',
|
||||||
help="Name or ID of the share group type to delete.")
|
help="Name or ID of the share group type to delete.")
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_type_delete(cs, args):
|
def do_share_group_type_delete(cs, args):
|
||||||
"""Delete a specific share group type (Admin only)."""
|
"""Delete a specific share group type (Admin only)."""
|
||||||
share_group_type = _find_share_group_type(cs, args.id)
|
share_group_type = _find_share_group_type(cs, args.id)
|
||||||
@ -4630,7 +4623,6 @@ def do_share_group_type_delete(cs, args):
|
|||||||
default=None,
|
default=None,
|
||||||
help='Group specs to set or unset (key is only necessary on unset).')
|
help='Group specs to set or unset (key is only necessary on unset).')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_type_key(cs, args):
|
def do_share_group_type_key(cs, args):
|
||||||
"""Set or unset group_spec for a share group type (Admin only)."""
|
"""Set or unset group_spec for a share group type (Admin only)."""
|
||||||
sg_type = _find_share_group_type(cs, args.share_group_type)
|
sg_type = _find_share_group_type(cs, args.share_group_type)
|
||||||
@ -4746,9 +4738,8 @@ def do_share_group_type_access_remove(cs, args):
|
|||||||
help='Optional availability zone in which group should be created. '
|
help='Optional availability zone in which group should be created. '
|
||||||
'(Default=None)')
|
'(Default=None)')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_create(cs, args):
|
def do_share_group_create(cs, args):
|
||||||
"""Creates a new share group (Experimental)."""
|
"""Creates a new share group."""
|
||||||
|
|
||||||
share_types = []
|
share_types = []
|
||||||
if args.share_types:
|
if args.share_types:
|
||||||
@ -4904,9 +4895,8 @@ def do_share_group_create(cs, args):
|
|||||||
help='Filter results matching a share group description pattern. '
|
help='Filter results matching a share group description pattern. '
|
||||||
'Available only for microversion >= 2.36.')
|
'Available only for microversion >= 2.36.')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_list(cs, args):
|
def do_share_group_list(cs, args):
|
||||||
"""List share groups with filters (Experimental)."""
|
"""List share groups with filters."""
|
||||||
if args.columns is not None:
|
if args.columns is not None:
|
||||||
list_of_keys = _split_columns(columns=args.columns)
|
list_of_keys = _split_columns(columns=args.columns)
|
||||||
else:
|
else:
|
||||||
@ -4957,9 +4947,8 @@ def do_share_group_list(cs, args):
|
|||||||
metavar='<share_group>',
|
metavar='<share_group>',
|
||||||
help='Name or ID of the share group.')
|
help='Name or ID of the share group.')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_show(cs, args):
|
def do_share_group_show(cs, args):
|
||||||
"""Show details about a share group (Experimental)."""
|
"""Show details about a share group."""
|
||||||
share_group = _find_share_group(cs, args.share_group)
|
share_group = _find_share_group(cs, args.share_group)
|
||||||
_print_share_group(cs, share_group)
|
_print_share_group(cs, share_group)
|
||||||
|
|
||||||
@ -4979,9 +4968,8 @@ def do_share_group_show(cs, args):
|
|||||||
help='Optional share group description. (Default=None)',
|
help='Optional share group description. (Default=None)',
|
||||||
default=None)
|
default=None)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_update(cs, args):
|
def do_share_group_update(cs, args):
|
||||||
"""Update a share group (Experimental)."""
|
"""Update a share group."""
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
|
||||||
if args.name is not None:
|
if args.name is not None:
|
||||||
@ -5009,9 +4997,8 @@ def do_share_group_update(cs, args):
|
|||||||
help='Attempt to force delete the share group (Default=False)'
|
help='Attempt to force delete the share group (Default=False)'
|
||||||
' (Admin only).')
|
' (Admin only).')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_delete(cs, args):
|
def do_share_group_delete(cs, args):
|
||||||
"""Remove one or more share groups (Experimental)."""
|
"""Remove one or more share groups."""
|
||||||
failure_count = 0
|
failure_count = 0
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
|
||||||
@ -5045,11 +5032,10 @@ def do_share_group_delete(cs, args):
|
|||||||
'error_deleting. If no state is provided, '
|
'error_deleting. If no state is provided, '
|
||||||
'available will be used.'))
|
'available will be used.'))
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_reset_state(cs, args):
|
def do_share_group_reset_state(cs, args):
|
||||||
"""Explicitly update the state of a share group
|
"""Explicitly update the state of a share group
|
||||||
|
|
||||||
(Admin only, Experimental).
|
(Admin only).
|
||||||
"""
|
"""
|
||||||
share_group = _find_share_group(cs, args.share_group)
|
share_group = _find_share_group(cs, args.share_group)
|
||||||
cs.share_groups.reset_state(share_group, args.state)
|
cs.share_groups.reset_state(share_group, args.state)
|
||||||
@ -5077,9 +5063,8 @@ def do_share_group_reset_state(cs, args):
|
|||||||
help='Optional share group snapshot description. (Default=None)',
|
help='Optional share group snapshot description. (Default=None)',
|
||||||
default=None)
|
default=None)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_create(cs, args):
|
def do_share_group_snapshot_create(cs, args):
|
||||||
"""Creates a new share group snapshot (Experimental)."""
|
"""Creates a new share group snapshot."""
|
||||||
kwargs = {'name': args.name, 'description': args.description}
|
kwargs = {'name': args.name, 'description': args.description}
|
||||||
share_group = _find_share_group(cs, args.share_group)
|
share_group = _find_share_group(cs, args.share_group)
|
||||||
sg_snapshot = cs.share_group_snapshots.create(share_group.id, **kwargs)
|
sg_snapshot = cs.share_group_snapshots.create(share_group.id, **kwargs)
|
||||||
@ -5152,9 +5137,8 @@ def do_share_group_snapshot_create(cs, args):
|
|||||||
help='Comma separated list of columns to be displayed '
|
help='Comma separated list of columns to be displayed '
|
||||||
'example --columns "id,name".')
|
'example --columns "id,name".')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_list(cs, args):
|
def do_share_group_snapshot_list(cs, args):
|
||||||
"""List share group snapshots with filters (Experimental)."""
|
"""List share group snapshots with filters."""
|
||||||
if args.columns is not None:
|
if args.columns is not None:
|
||||||
list_of_keys = _split_columns(columns=args.columns)
|
list_of_keys = _split_columns(columns=args.columns)
|
||||||
else:
|
else:
|
||||||
@ -5182,9 +5166,8 @@ def do_share_group_snapshot_list(cs, args):
|
|||||||
metavar='<share_group_snapshot>',
|
metavar='<share_group_snapshot>',
|
||||||
help='Name or ID of the share group snapshot.')
|
help='Name or ID of the share group snapshot.')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_show(cs, args):
|
def do_share_group_snapshot_show(cs, args):
|
||||||
"""Show details about a share group snapshot (Experimental)."""
|
"""Show details about a share group snapshot."""
|
||||||
sg_snapshot = _find_share_group_snapshot(cs, args.share_group_snapshot)
|
sg_snapshot = _find_share_group_snapshot(cs, args.share_group_snapshot)
|
||||||
_print_share_group_snapshot(cs, sg_snapshot)
|
_print_share_group_snapshot(cs, sg_snapshot)
|
||||||
|
|
||||||
@ -5201,9 +5184,8 @@ def do_share_group_snapshot_show(cs, args):
|
|||||||
help='Comma separated list of columns to be displayed '
|
help='Comma separated list of columns to be displayed '
|
||||||
'example --columns "id,name".')
|
'example --columns "id,name".')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_list_members(cs, args):
|
def do_share_group_snapshot_list_members(cs, args):
|
||||||
"""List members of a share group snapshot (Experimental)."""
|
"""List members of a share group snapshot."""
|
||||||
if args.columns is not None:
|
if args.columns is not None:
|
||||||
list_of_keys = _split_columns(columns=args.columns)
|
list_of_keys = _split_columns(columns=args.columns)
|
||||||
else:
|
else:
|
||||||
@ -5228,11 +5210,10 @@ def do_share_group_snapshot_list_members(cs, args):
|
|||||||
metavar='<share_group_snapshot>',
|
metavar='<share_group_snapshot>',
|
||||||
help='Name or ID of the share group snapshot.')
|
help='Name or ID of the share group snapshot.')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_reset_state(cs, args):
|
def do_share_group_snapshot_reset_state(cs, args):
|
||||||
"""Explicitly update the state of a share group snapshot
|
"""Explicitly update the state of a share group snapshot
|
||||||
|
|
||||||
(Admin only, Experimental).
|
(Admin only).
|
||||||
"""
|
"""
|
||||||
sg_snapshot = _find_share_group_snapshot(cs, args.share_group_snapshot)
|
sg_snapshot = _find_share_group_snapshot(cs, args.share_group_snapshot)
|
||||||
cs.share_group_snapshots.reset_state(sg_snapshot, args.state)
|
cs.share_group_snapshots.reset_state(sg_snapshot, args.state)
|
||||||
@ -5253,9 +5234,8 @@ def do_share_group_snapshot_reset_state(cs, args):
|
|||||||
help='Optional share group snapshot description. (Default=None)',
|
help='Optional share group snapshot description. (Default=None)',
|
||||||
default=None)
|
default=None)
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_update(cs, args):
|
def do_share_group_snapshot_update(cs, args):
|
||||||
"""Update a share group snapshot (Experimental)."""
|
"""Update a share group snapshot."""
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
|
||||||
if args.name is not None:
|
if args.name is not None:
|
||||||
@ -5283,9 +5263,8 @@ def do_share_group_snapshot_update(cs, args):
|
|||||||
help='Attempt to force delete the share group snapshot(s) (Default=False)'
|
help='Attempt to force delete the share group snapshot(s) (Default=False)'
|
||||||
' (Admin only).')
|
' (Admin only).')
|
||||||
@cliutils.service_type('sharev2')
|
@cliutils.service_type('sharev2')
|
||||||
@api_versions.experimental_api
|
|
||||||
def do_share_group_snapshot_delete(cs, args):
|
def do_share_group_snapshot_delete(cs, args):
|
||||||
"""Remove one or more share group snapshots (Experimental)."""
|
"""Remove one or more share group snapshots."""
|
||||||
failure_count = 0
|
failure_count = 0
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
prelude: >
|
||||||
|
Since the share group APIs have graduated from their `experimental feature
|
||||||
|
state <https://docs.openstack.org/manila/latest/contributor/experimental_apis.html>`_
|
||||||
|
in API version ``2.55``, the client was updated to fit into those changes,
|
||||||
|
and the share group commands will no longer include the
|
||||||
|
`X-OpenStack-Manila-API-Experimental`` header in the request. Share group
|
||||||
|
types can be created to encompass one or more share types, share groups
|
||||||
|
can be created, updated, snapshotted and deleted, and shares can be created
|
||||||
|
within share groups.
|
Loading…
Reference in New Issue
Block a user