Define experimental API header on python client level instead of CLI
For the moment we cannot use experimental APIs using "python" client. It is possible only if we use shell client (CLI). It means, we cannot use "share replication", "share migration" and "consistency groups" APIs of python manilaclient from other apps such as Manila UI. So, add special experimental header on python client level instead of CLI. Change-Id: I6eed5dcfd1cb309817e083856b40e10cc6f970f6 Closes-Bug: #1599586
This commit is contained in:
parent
947989952a
commit
8c2f3c3a9b
@ -353,7 +353,8 @@ def experimental_api(f):
|
||||
@functools.wraps(f)
|
||||
def _wrapper(*args, **kwargs):
|
||||
client = args[0]
|
||||
if isinstance(client, manilaclient.v2.client.Client):
|
||||
if (isinstance(client, manilaclient.v2.client.Client) or
|
||||
hasattr(client, 'client')):
|
||||
dh = client.client.default_headers
|
||||
dh[constants.EXPERIMENTAL_HTTP_HEADER] = 'true'
|
||||
return f(*args, **kwargs)
|
||||
|
@ -46,6 +46,7 @@ class Manager(utils.HookableMixin):
|
||||
|
||||
def __init__(self, api):
|
||||
self.api = api
|
||||
self.client = api.client
|
||||
|
||||
@property
|
||||
def api_version(self):
|
||||
|
@ -23,13 +23,18 @@ from manilaclient.v2 import client
|
||||
class FakeClient(fakes.FakeClient):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
client.Client.__init__(self, manilaclient.API_MAX_VERSION,
|
||||
'username', 'password',
|
||||
'project_id', 'auth_url',
|
||||
input_auth_token='token',
|
||||
extensions=kwargs.get('extensions'),
|
||||
service_catalog_url='http://localhost:8786',
|
||||
api_version=manilaclient.API_MAX_VERSION)
|
||||
client.Client.__init__(
|
||||
self,
|
||||
manilaclient.API_MAX_VERSION,
|
||||
'username',
|
||||
'password',
|
||||
'project_id',
|
||||
'auth_url',
|
||||
input_auth_token='token',
|
||||
extensions=kwargs.get('extensions'),
|
||||
service_catalog_url='http://localhost:8786',
|
||||
api_version=kwargs.get("api_version", manilaclient.API_MAX_VERSION)
|
||||
)
|
||||
self.client = FakeHTTPClient(**kwargs)
|
||||
|
||||
fake_share_instance = {
|
||||
@ -73,7 +78,8 @@ class FakeHTTPClient(fakes.FakeHTTPClient):
|
||||
}
|
||||
],
|
||||
"min_version": "2.0",
|
||||
"version": "2.8",
|
||||
"version": self.default_headers[
|
||||
"X-Openstack-Manila-Api-Version"],
|
||||
"id": "v2.0",
|
||||
}
|
||||
]
|
||||
|
@ -29,13 +29,10 @@ class ConsistencyGroupSnapshotsTest(utils.TestCase):
|
||||
class _FakeConsistencyGroupSnapshot(object):
|
||||
id = 'fake_cg_snapshot_id'
|
||||
|
||||
class _FakeClient(object):
|
||||
api_version = manilaclient.API_MAX_VERSION
|
||||
|
||||
def setUp(self):
|
||||
super(ConsistencyGroupSnapshotsTest, self).setUp()
|
||||
self.manager = cg_snapshots.ConsistencyGroupSnapshotManager(
|
||||
api=self._FakeClient())
|
||||
api=fakes.FakeClient())
|
||||
self.values = {
|
||||
'consistency_group_id': 'fake_cg_id',
|
||||
'name': 'fake snapshot name',
|
||||
|
@ -28,13 +28,10 @@ class ConsistencyGroupsTest(utils.TestCase):
|
||||
class _FakeConsistencyGroupSnapshot(object):
|
||||
id = 'fake_cg_snapshot_id'
|
||||
|
||||
class _FakeClient(object):
|
||||
api_version = manilaclient.API_MAX_VERSION
|
||||
|
||||
def setUp(self):
|
||||
super(ConsistencyGroupsTest, self).setUp()
|
||||
self.manager = consistency_groups.ConsistencyGroupManager(
|
||||
api=self._FakeClient())
|
||||
api=fakes.FakeClient())
|
||||
self.values = {'name': 'fake name', 'description': 'new cg'}
|
||||
|
||||
def test_create(self):
|
||||
|
@ -15,6 +15,7 @@
|
||||
import mock
|
||||
|
||||
from manilaclient.tests.unit import utils
|
||||
from manilaclient.tests.unit.v2 import fakes
|
||||
from manilaclient.v2 import scheduler_stats
|
||||
|
||||
|
||||
@ -40,7 +41,7 @@ class PoolManagerTest(utils.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(PoolManagerTest, self).setUp()
|
||||
self.manager = scheduler_stats.PoolManager(api=None)
|
||||
self.manager = scheduler_stats.PoolManager(fakes.FakeClient())
|
||||
|
||||
@mock.patch.object(scheduler_stats.PoolManager, '_list', mock.Mock())
|
||||
def test_list(self):
|
||||
|
@ -27,7 +27,8 @@ class SecurityServiceTest(utils.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(SecurityServiceTest, self).setUp()
|
||||
self.manager = security_services.SecurityServiceManager(api=None)
|
||||
self.manager = security_services.SecurityServiceManager(
|
||||
fakes.FakeClient())
|
||||
|
||||
def test_create_all_fields(self):
|
||||
values = {
|
||||
|
@ -30,7 +30,7 @@ class ShareNetworkTest(utils.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(ShareNetworkTest, self).setUp()
|
||||
self.manager = share_networks.ShareNetworkManager(api=None)
|
||||
self.manager = share_networks.ShareNetworkManager(fakes.FakeClient())
|
||||
self.values = {
|
||||
'nova_net_id': 'fake_nova_net_id',
|
||||
'neutron_net_id': 'fake net id',
|
||||
|
@ -32,9 +32,8 @@ class ShareReplicasTest(utils.TestCase):
|
||||
def setUp(self):
|
||||
super(ShareReplicasTest, self).setUp()
|
||||
microversion = api_versions.APIVersion("2.11")
|
||||
mock_microversion = mock.Mock(api_version=microversion)
|
||||
self.manager = share_replicas.ShareReplicaManager(
|
||||
api=mock_microversion)
|
||||
fakes.FakeClient(api_version=microversion))
|
||||
|
||||
def test_create(self):
|
||||
values = {
|
||||
|
@ -16,6 +16,7 @@
|
||||
import mock
|
||||
|
||||
from manilaclient.tests.unit import utils
|
||||
from manilaclient.tests.unit.v2 import fakes
|
||||
from manilaclient.v2 import share_servers
|
||||
|
||||
|
||||
@ -68,7 +69,7 @@ class ShareServerManagerTest(utils.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(ShareServerManagerTest, self).setUp()
|
||||
self.manager = share_servers.ShareServerManager(api=None)
|
||||
self.manager = share_servers.ShareServerManager(api=fakes.FakeClient())
|
||||
|
||||
def test_list(self):
|
||||
with mock.patch.object(self.manager, '_list',
|
||||
|
@ -533,8 +533,8 @@ class SharesTest(utils.TestCase):
|
||||
host = "fake_host"
|
||||
force_host_copy = "fake_force_host_copy"
|
||||
version = api_versions.APIVersion(microversion)
|
||||
mock_microversion = mock.Mock(api_version=version)
|
||||
manager = shares.ShareManager(api=mock_microversion)
|
||||
manager = shares.ShareManager(
|
||||
api=fakes.FakeClient(api_version=version))
|
||||
|
||||
with mock.patch.object(manager, "_action",
|
||||
mock.Mock(return_value="fake")):
|
||||
@ -552,9 +552,7 @@ class SharesTest(utils.TestCase):
|
||||
|
||||
def test_migration_complete(self):
|
||||
share = "fake_share"
|
||||
version = api_versions.APIVersion("2.15")
|
||||
mock_microversion = mock.Mock(api_version=version)
|
||||
manager = shares.ShareManager(api=mock_microversion)
|
||||
manager = shares.ShareManager(api=fakes.FakeClient())
|
||||
|
||||
with mock.patch.object(manager, "_action",
|
||||
mock.Mock(return_value="fake")):
|
||||
@ -566,9 +564,7 @@ class SharesTest(utils.TestCase):
|
||||
|
||||
def test_migration_get_progress(self):
|
||||
share = "fake_share"
|
||||
version = api_versions.APIVersion("2.15")
|
||||
mock_microversion = mock.Mock(api_version=version)
|
||||
manager = shares.ShareManager(api=mock_microversion)
|
||||
manager = shares.ShareManager(api=fakes.FakeClient())
|
||||
|
||||
with mock.patch.object(manager, "_action",
|
||||
mock.Mock(return_value="fake")):
|
||||
@ -581,9 +577,7 @@ class SharesTest(utils.TestCase):
|
||||
def test_reset_task_state(self):
|
||||
share = "fake_share"
|
||||
state = "fake_state"
|
||||
version = api_versions.APIVersion("2.15")
|
||||
mock_microversion = mock.Mock(api_version=version)
|
||||
manager = shares.ShareManager(api=mock_microversion)
|
||||
manager = shares.ShareManager(api=fakes.FakeClient())
|
||||
|
||||
with mock.patch.object(manager, "_action",
|
||||
mock.Mock(return_value="fake")):
|
||||
@ -595,9 +589,7 @@ class SharesTest(utils.TestCase):
|
||||
|
||||
def test_migration_cancel(self):
|
||||
share = "fake_share"
|
||||
version = api_versions.APIVersion("2.15")
|
||||
mock_microversion = mock.Mock(api_version=version)
|
||||
manager = shares.ShareManager(api=mock_microversion)
|
||||
manager = shares.ShareManager(api=fakes.FakeClient())
|
||||
|
||||
with mock.patch.object(manager, "_action",
|
||||
mock.Mock(return_value="fake")):
|
||||
|
@ -40,7 +40,6 @@ class ShellTest(test_utils.TestCase):
|
||||
'MANILA_USERNAME': 'username',
|
||||
'MANILA_PASSWORD': 'password',
|
||||
'MANILA_PROJECT_ID': 'project_id',
|
||||
'OS_SHARE_API_VERSION': '2.5',
|
||||
'MANILA_URL': 'http://no.where',
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,7 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
resource_class = ConsistencyGroupSnapshot
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def create(self, consistency_group_id, name=None, description=None):
|
||||
"""Create a consistency group snapshot.
|
||||
|
||||
@ -68,6 +69,7 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def get(self, cg_snapshot):
|
||||
"""Get a consistency group snapshot.
|
||||
|
||||
@ -80,6 +82,7 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def update(self, cg_snapshot, **kwargs):
|
||||
"""Updates a consistency group snapshot.
|
||||
|
||||
@ -97,6 +100,7 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def list(self, detailed=True, search_opts=None):
|
||||
"""Get a list of all consistency group snapshots.
|
||||
|
||||
@ -140,14 +144,17 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
self._delete(RESOURCE_PATH % cg_id)
|
||||
|
||||
@api_versions.wraps("2.4", "2.6")
|
||||
@api_versions.experimental_api
|
||||
def delete(self, cg_snapshot, force=False):
|
||||
return self._do_delete(cg_snapshot, force, 'os-force_delete')
|
||||
|
||||
@api_versions.wraps("2.7") # noqa
|
||||
@api_versions.experimental_api
|
||||
def delete(self, cg_snapshot, force=False):
|
||||
return self._do_delete(cg_snapshot, force, 'force_delete')
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def members(self, cg_snapshot, search_opts=None):
|
||||
"""Get a list of consistency group snapshot members.
|
||||
|
||||
@ -176,10 +183,12 @@ class ConsistencyGroupSnapshotManager(base.ManagerWithFind):
|
||||
return self.api.client.post(url, body=body)
|
||||
|
||||
@api_versions.wraps("2.4", "2.6")
|
||||
@api_versions.experimental_api
|
||||
def reset_state(self, cg_snapshot, state):
|
||||
return self._do_reset_state(cg_snapshot, state, 'os-reset_status')
|
||||
|
||||
@api_versions.wraps("2.7") # noqa
|
||||
@api_versions.experimental_api
|
||||
def reset_state(self, cg_snapshot, state):
|
||||
return self._do_reset_state(cg_snapshot, state, 'reset_status')
|
||||
|
||||
|
@ -51,6 +51,7 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
resource_class = ConsistencyGroup
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def create(self, share_network=None, name=None, description=None,
|
||||
source_cgsnapshot_id=None, share_types=None):
|
||||
"""Create a Consistency Group.
|
||||
@ -87,6 +88,7 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
{RESOURCE_NAME: body}, RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def get(self, consistency_group):
|
||||
"""Get a consistency group.
|
||||
|
||||
@ -99,6 +101,7 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def update(self, consistency_group, **kwargs):
|
||||
"""Updates a consistency group.
|
||||
|
||||
@ -116,6 +119,7 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.4")
|
||||
@api_versions.experimental_api
|
||||
def list(self, detailed=True, search_opts=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
"""Get a list of all shares.
|
||||
@ -159,10 +163,12 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
self._delete(url)
|
||||
|
||||
@api_versions.wraps("2.4", "2.6")
|
||||
@api_versions.experimental_api
|
||||
def delete(self, consistency_group, force=False):
|
||||
return self._do_delete(consistency_group, force, 'os-force_delete')
|
||||
|
||||
@api_versions.wraps("2.7") # noqa
|
||||
@api_versions.experimental_api
|
||||
def delete(self, consistency_group, force=False):
|
||||
return self._do_delete(consistency_group, force, 'force_delete')
|
||||
|
||||
@ -173,11 +179,13 @@ class ConsistencyGroupManager(base.ManagerWithFind):
|
||||
return self.api.client.post(url, body=body)
|
||||
|
||||
@api_versions.wraps("2.4", "2.6")
|
||||
@api_versions.experimental_api
|
||||
def reset_state(self, cg, state):
|
||||
return self._do_reset_state(
|
||||
consistency_group, state, 'os-reset_status')
|
||||
|
||||
@api_versions.wraps("2.7") # noqa
|
||||
@api_versions.experimental_api
|
||||
def reset_state(self, consistency_group, state):
|
||||
return self._do_reset_state(consistency_group, state, 'reset_status')
|
||||
|
||||
|
@ -51,6 +51,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
resource_class = ShareReplica
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def get(self, replica):
|
||||
"""Get a share replica.
|
||||
|
||||
@ -61,6 +62,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
return self._get(RESOURCE_PATH % replica_id, RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def list(self, share=None):
|
||||
"""List all share replicas or list replicas belonging to a share.
|
||||
|
||||
@ -76,6 +78,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
return self._list(RESOURCES_PATH + '/detail', RESOURCES_NAME)
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def promote(self, replica):
|
||||
"""Promote the provided replica.
|
||||
|
||||
@ -84,6 +87,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
return self._action('promote', replica)
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def create(self, share, availability_zone=None, share_network=None):
|
||||
"""Create a replica for a share.
|
||||
|
||||
@ -107,6 +111,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
RESOURCE_NAME)
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def delete(self, replica, force=False):
|
||||
"""Delete a replica.
|
||||
|
||||
@ -116,6 +121,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
self._do_delete(replica, force=force)
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def reset_state(self, replica, state):
|
||||
"""Reset the 'status' attr of the replica.
|
||||
|
||||
@ -125,6 +131,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
return self._do_reset_state(replica, state, "reset_status")
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def reset_replica_state(self, replica, state):
|
||||
"""Reset the 'replica_state' attr of the replica.
|
||||
|
||||
@ -134,6 +141,7 @@ class ShareReplicaManager(base.ManagerWithFind):
|
||||
return self._do_reset_state(replica, state, "reset_replica_state")
|
||||
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def resync(self, replica):
|
||||
"""Re-sync the provided replica.
|
||||
|
||||
|
@ -162,21 +162,25 @@ class ShareManager(base.ManagerWithFind):
|
||||
"notify": notify})
|
||||
|
||||
@api_versions.wraps("2.5", "2.6")
|
||||
@api_versions.experimental_api
|
||||
def migration_start(self, share, host, force_host_copy):
|
||||
return self._do_migrate_start(
|
||||
share, host, force_host_copy, True, "os-migrate_share")
|
||||
|
||||
@api_versions.wraps("2.7", "2.14") # noqa
|
||||
@api_versions.experimental_api
|
||||
def migration_start(self, share, host, force_host_copy):
|
||||
return self._do_migrate_start(
|
||||
share, host, force_host_copy, True, "migrate_share")
|
||||
|
||||
@api_versions.wraps("2.15") # noqa
|
||||
@api_versions.experimental_api
|
||||
def migration_start(self, share, host, force_host_copy, notify):
|
||||
return self._do_migrate_start(
|
||||
share, host, force_host_copy, notify, "migration_start")
|
||||
|
||||
@api_versions.wraps("2.15")
|
||||
@api_versions.experimental_api
|
||||
def reset_task_state(self, share, task_state):
|
||||
"""Update the provided share with the provided task state.
|
||||
|
||||
@ -187,6 +191,7 @@ class ShareManager(base.ManagerWithFind):
|
||||
{"task_state": task_state})
|
||||
|
||||
@api_versions.wraps("2.15")
|
||||
@api_versions.experimental_api
|
||||
def migration_complete(self, share):
|
||||
"""Completes migration for a given share.
|
||||
|
||||
@ -195,6 +200,7 @@ class ShareManager(base.ManagerWithFind):
|
||||
return self._action('migration_complete', share)
|
||||
|
||||
@api_versions.wraps("2.15")
|
||||
@api_versions.experimental_api
|
||||
def migration_cancel(self, share):
|
||||
"""Attempts to cancel migration for a given share.
|
||||
|
||||
@ -203,6 +209,7 @@ class ShareManager(base.ManagerWithFind):
|
||||
return self._action('migration_cancel', share)
|
||||
|
||||
@api_versions.wraps("2.15")
|
||||
@api_versions.experimental_api
|
||||
def migration_get_progress(self, share):
|
||||
"""Obtains progress of share migration for a given share.
|
||||
|
||||
|
@ -180,7 +180,6 @@ def _print_share_replica(cs, replica):
|
||||
cliutils.print_dict(info)
|
||||
|
||||
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.4")
|
||||
def _find_consistency_group(cs, consistency_group):
|
||||
"""Get a consistency group ID."""
|
||||
@ -634,7 +633,6 @@ def do_create(cs, args):
|
||||
help='Enables or disables generic host-based force-migration, which '
|
||||
'bypasses driver optimizations. Default=False.',
|
||||
default=False)
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.5", "2.14")
|
||||
def do_migrate(cs, args):
|
||||
"""(Deprecated) Migrates share to a new host (Admin only, Experimental)."""
|
||||
@ -667,7 +665,6 @@ def do_migrate(cs, args):
|
||||
help='Enables or disables notification of data copying completed. '
|
||||
'Default=True.',
|
||||
default=True)
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.15")
|
||||
def do_migration_start(cs, args):
|
||||
"""Migrates share to a new host (Admin only, Experimental)."""
|
||||
@ -679,7 +676,6 @@ def do_migration_start(cs, args):
|
||||
'share',
|
||||
metavar='<share>',
|
||||
help='Name or ID of share to complete migration.')
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.15")
|
||||
def do_migration_complete(cs, args):
|
||||
"""Completes migration for a given share (Admin only, Experimental)."""
|
||||
@ -691,7 +687,6 @@ def do_migration_complete(cs, args):
|
||||
'share',
|
||||
metavar='<share>',
|
||||
help='Name or ID of share to cancel migration.')
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.15")
|
||||
def do_migration_cancel(cs, args):
|
||||
"""Cancels migration of a given share when copying
|
||||
@ -721,7 +716,6 @@ def do_migration_cancel(cs, args):
|
||||
'data_copying_completing, data_copying_completed, '
|
||||
'data_copying_cancelled, data_copying_error. If no value is '
|
||||
'provided, migration_error will be used.'))
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.15")
|
||||
def do_reset_task_state(cs, args):
|
||||
"""Explicitly update the task state of a share
|
||||
@ -737,7 +731,6 @@ def do_reset_task_state(cs, args):
|
||||
metavar='<share>',
|
||||
help='Name or ID of the share to get share migration progress '
|
||||
'information.')
|
||||
@api_versions.experimental_api
|
||||
@api_versions.wraps("2.15")
|
||||
def do_migration_get_progress(cs, args):
|
||||
"""Gets migration progress of a given share when copying
|
||||
@ -2857,7 +2850,6 @@ def do_shrink(cs, args):
|
||||
help='Optional snapshot ID to create the share from. (Default=None)',
|
||||
default=None)
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_create(cs, args):
|
||||
"""Creates a new consistency group (Experimental)."""
|
||||
|
||||
@ -2914,7 +2906,6 @@ def do_cg_create(cs, args):
|
||||
help='Comma separated list of columns to be displayed '
|
||||
'e.g. --columns "id,name"')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_list(cs, args):
|
||||
"""List consistency groups with filters (Experimental)."""
|
||||
list_of_keys = [
|
||||
@ -2942,7 +2933,6 @@ def do_cg_list(cs, args):
|
||||
metavar='<consistency_group>',
|
||||
help='Name or ID of the consistency group.')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_show(cs, args):
|
||||
"""Show details about a consistency group (Experimental)."""
|
||||
consistency_group = _find_consistency_group(cs, args.consistency_group)
|
||||
@ -2964,7 +2954,6 @@ def do_cg_show(cs, args):
|
||||
help='Optional consistency group description. (Default=None)',
|
||||
default=None)
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_update(cs, args):
|
||||
"""Update a consistency group (Experimental)."""
|
||||
kwargs = {}
|
||||
@ -2992,7 +2981,6 @@ def do_cg_update(cs, args):
|
||||
help='Attempt to force delete the consistency group (Default=False)'
|
||||
' (Admin only).')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_delete(cs, args):
|
||||
"""Remove one or more consistency groups (Experimental)."""
|
||||
failure_count = 0
|
||||
@ -3028,7 +3016,6 @@ def do_cg_delete(cs, args):
|
||||
'error_deleting. If no state is provided, '
|
||||
'available will be used.'))
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_reset_state(cs, args):
|
||||
"""Explicitly update the state of a consistency group
|
||||
|
||||
@ -3053,7 +3040,6 @@ def do_cg_reset_state(cs, args):
|
||||
help='Optional consistency group snapshot description. (Default=None)',
|
||||
default=None)
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_create(cs, args):
|
||||
"""Creates a new consistency group snapshot (Experimental)."""
|
||||
|
||||
@ -3109,7 +3095,6 @@ def _split_columns(columns, title=True):
|
||||
help='Comma separated list of columns to be displayed '
|
||||
'e.g. --columns "id,name"')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_list(cs, args):
|
||||
"""List consistency group snapshots with filters (Experimental)."""
|
||||
list_of_keys = [
|
||||
@ -3136,7 +3121,6 @@ def do_cg_snapshot_list(cs, args):
|
||||
metavar='<cg_snapshot>',
|
||||
help='Name or ID of the consistency group snapshot.')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_show(cs, args):
|
||||
"""Show details about a consistency group snapshot (Experimental)."""
|
||||
cg_snapshot = _find_cg_snapshot(cs, args.cg_snapshot)
|
||||
@ -3156,7 +3140,6 @@ def do_cg_snapshot_show(cs, args):
|
||||
metavar='<cg_snapshot>',
|
||||
help='Name or ID of the consistency group snapshot.')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_reset_state(cs, args):
|
||||
"""Explicitly update the state of a consistency group
|
||||
|
||||
@ -3182,7 +3165,6 @@ def do_cg_snapshot_reset_state(cs, args):
|
||||
metavar='<cg_snapshot>',
|
||||
help='Name or ID of the consistency group snapshot.')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_members(cs, args):
|
||||
"""Get member details for a consistency group snapshot (Experimental)."""
|
||||
cg_snapshot = _find_cg_snapshot(cs, args.cg_snapshot)
|
||||
@ -3224,7 +3206,6 @@ def do_cg_snapshot_members(cs, args):
|
||||
help='Optional cg snapshot description. (Default=None)',
|
||||
default=None)
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_update(cs, args):
|
||||
"""Update a consistency group snapshot (Experimental)."""
|
||||
kwargs = {}
|
||||
@ -3252,7 +3233,6 @@ def do_cg_snapshot_update(cs, args):
|
||||
help='Attempt to force delete the cg snapshot(s) (Default=False)'
|
||||
' (Admin only).')
|
||||
@cliutils.service_type('sharev2')
|
||||
@api_versions.experimental_api
|
||||
def do_cg_snapshot_delete(cs, args):
|
||||
"""Remove one or more consistency group snapshots (Experimental)."""
|
||||
failure_count = 0
|
||||
@ -3285,7 +3265,6 @@ def do_cg_snapshot_delete(cs, args):
|
||||
action='single_alias',
|
||||
help='List replicas belonging to share.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_list(cs, args):
|
||||
"""List share replicas (Experimental)."""
|
||||
share = _find_share(cs, args.share_id) if args.share_id else None
|
||||
@ -3327,7 +3306,6 @@ def do_share_replica_list(cs, args):
|
||||
action='single_alias',
|
||||
help='Optional network info ID or name.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_create(cs, args):
|
||||
"""Create a share replica (Experimental)."""
|
||||
share = _find_share(cs, args.share)
|
||||
@ -3347,7 +3325,6 @@ def do_share_replica_create(cs, args):
|
||||
metavar='<replica>',
|
||||
help='ID of the share replica.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_show(cs, args):
|
||||
"""Show details about a replica (Experimental)."""
|
||||
|
||||
@ -3368,7 +3345,6 @@ def do_share_replica_show(cs, args):
|
||||
'this option will purge the replica from Manila even if it '
|
||||
'is not cleaned up on the backend. Defaults to False.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_delete(cs, args):
|
||||
"""Remove one or more share replicas (Experimental)."""
|
||||
failure_count = 0
|
||||
@ -3396,7 +3372,6 @@ def do_share_replica_delete(cs, args):
|
||||
metavar='<replica>',
|
||||
help='ID of the share replica.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_promote(cs, args):
|
||||
"""Promote specified replica to 'active' replica_state (Experimental)."""
|
||||
replica = _find_share_replica(cs, args.replica)
|
||||
@ -3415,7 +3390,6 @@ def do_share_replica_promote(cs, args):
|
||||
'available, error, creating, deleting, error_deleting. If no '
|
||||
'state is provided, available will be used.'))
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_reset_state(cs, args):
|
||||
"""Explicitly update the 'status' of a share replica (Experimental)."""
|
||||
replica = _find_share_replica(cs, args.replica)
|
||||
@ -3437,7 +3411,6 @@ def do_share_replica_reset_state(cs, args):
|
||||
'include in_sync, out_of_sync, active, error. If no '
|
||||
'state is provided, out_of_sync will be used.'))
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_reset_replica_state(cs, args):
|
||||
"""Explicitly update the 'replica_state' of a share replica
|
||||
|
||||
@ -3452,7 +3425,6 @@ def do_share_replica_reset_replica_state(cs, args):
|
||||
metavar='<replica>',
|
||||
help='ID of the share replica to resync.')
|
||||
@api_versions.wraps("2.11")
|
||||
@api_versions.experimental_api
|
||||
def do_share_replica_resync(cs, args):
|
||||
"""Attempt to update the share replica with its 'active' mirror
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user