Support datastore version number
- Support "--datastore-version-number" for creating configuration - Support "--datastore-version-number" for creating instance - Support "--version-number" for creating datastore version - Support "--version-name" for updating datastore version - Support showing version number for datastore version, instance and configuration Story: 2008358 Task: 41264 Change-Id: Ie84b4506736a82a214b0416f7e451d565552f651
This commit is contained in:
parent
f28390ee5d
commit
a57568397e
4
releasenotes/notes/wallaby-datastore-version-number.yaml
Normal file
4
releasenotes/notes/wallaby-datastore-version-number.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- Support specifying and showing datastore version number for several
|
||||
resources such as datastore version, instance and configuration.
|
@ -13,12 +13,13 @@
|
||||
"""Database v1 Configurations action implementations"""
|
||||
|
||||
import json
|
||||
|
||||
from osc_lib.command import command
|
||||
from osc_lib import utils as osc_utils
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from troveclient import exceptions
|
||||
from troveclient.i18n import _
|
||||
from troveclient import utils
|
||||
|
||||
|
||||
def set_attributes_for_print_detail(configuration):
|
||||
@ -32,7 +33,7 @@ class ListDatabaseConfigurations(command.Lister):
|
||||
|
||||
_description = _("List database configurations")
|
||||
columns = ['ID', 'Name', 'Description', 'Datastore Name',
|
||||
'Datastore Version Name']
|
||||
'Datastore Version Name', 'Datastore Version Number']
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(ListDatabaseConfigurations, self).get_parser(prog_name)
|
||||
@ -94,8 +95,9 @@ class ListDatabaseConfigurationParameters(command.Lister):
|
||||
parser.add_argument(
|
||||
'datastore_version',
|
||||
metavar='<datastore_version>',
|
||||
help=_('Datastore version name or ID assigned'
|
||||
'to the configuration group.')
|
||||
help=_('Datastore version name or ID assigned to the '
|
||||
'configuration group. ID is preferred if more than one '
|
||||
'datastore versions have the same name.')
|
||||
)
|
||||
parser.add_argument(
|
||||
'--datastore',
|
||||
@ -110,19 +112,19 @@ class ListDatabaseConfigurationParameters(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
db_configuration_parameters = self.app.client_manager.\
|
||||
database.configuration_parameters
|
||||
if parsed_args.datastore:
|
||||
params = db_configuration_parameters.\
|
||||
parameters(parsed_args.datastore,
|
||||
parsed_args.datastore_version)
|
||||
elif utils.is_uuid_like(parsed_args.datastore_version):
|
||||
params = db_configuration_parameters.\
|
||||
parameters_by_version(parsed_args.datastore_version)
|
||||
|
||||
if uuidutils.is_uuid_like(parsed_args.datastore_version):
|
||||
params = db_configuration_parameters.parameters_by_version(
|
||||
parsed_args.datastore_version)
|
||||
elif parsed_args.datastore:
|
||||
params = db_configuration_parameters.parameters(
|
||||
parsed_args.datastore,
|
||||
parsed_args.datastore_version)
|
||||
else:
|
||||
raise exceptions.NoUniqueMatch(_('The datastore name or id is'
|
||||
' required to retrieve the'
|
||||
' parameters for the'
|
||||
' configuration group'
|
||||
' by name.'))
|
||||
raise exceptions.NoUniqueMatch(_('Either datastore version ID or '
|
||||
'datastore name needs to be '
|
||||
'specified.'))
|
||||
|
||||
for param in params:
|
||||
setattr(param, 'min_size', getattr(param, 'min', '-'))
|
||||
setattr(param, 'max_size', getattr(param, 'max', '-'))
|
||||
@ -140,8 +142,9 @@ class ShowDatabaseConfigurationParameter(command.ShowOne):
|
||||
parser.add_argument(
|
||||
'datastore_version',
|
||||
metavar='<datastore_version>',
|
||||
help=_('Datastore version name or ID assigned to the'
|
||||
' configuration group.'),
|
||||
help=_('Datastore version name or ID assigned to the '
|
||||
'configuration group. ID is preferred if more than one '
|
||||
'datastore versions have the same name.')
|
||||
)
|
||||
parser.add_argument(
|
||||
'parameter',
|
||||
@ -159,23 +162,23 @@ class ShowDatabaseConfigurationParameter(command.ShowOne):
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
db_configuration_parameters = self.app.client_manager.database.\
|
||||
db_configuration_parameters = self.app.client_manager.database. \
|
||||
configuration_parameters
|
||||
if parsed_args.datastore:
|
||||
|
||||
if uuidutils.is_uuid_like(parsed_args.datastore_version):
|
||||
param = db_configuration_parameters.get_parameter_by_version(
|
||||
parsed_args.datastore_version,
|
||||
parsed_args.parameter)
|
||||
elif parsed_args.datastore:
|
||||
param = db_configuration_parameters.get_parameter(
|
||||
parsed_args.datastore,
|
||||
parsed_args.datastore_version,
|
||||
parsed_args.parameter)
|
||||
elif utils.is_uuid_like(parsed_args.datastore_version):
|
||||
param = db_configuration_parameters.get_parameter_by_version(
|
||||
parsed_args.datastore_version,
|
||||
parsed_args.parameter)
|
||||
else:
|
||||
raise exceptions.NoUniqueMatch(_('The datastore name or id is'
|
||||
' required to retrieve the'
|
||||
' parameter for the'
|
||||
' configuration group'
|
||||
' by name.'))
|
||||
raise exceptions.NoUniqueMatch(_('Either datastore version ID or '
|
||||
'datastore name needs to be '
|
||||
'specified.'))
|
||||
|
||||
return zip(*sorted(param._info.items()))
|
||||
|
||||
|
||||
@ -228,12 +231,18 @@ class CreateDatabaseConfiguration(command.ShowOne):
|
||||
'if default datastore is not configured.'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--datastore_version',
|
||||
'--datastore-version',
|
||||
metavar='<datastore_version>',
|
||||
default=None,
|
||||
help=_('Datastore version ID assigned to the '
|
||||
'configuration group.'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--datastore-version-number',
|
||||
default=None,
|
||||
help=_('The version number for the database. The version number '
|
||||
'is needed for the datastore versions with the same name.'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--description',
|
||||
metavar='<description>',
|
||||
@ -249,7 +258,8 @@ class CreateDatabaseConfiguration(command.ShowOne):
|
||||
parsed_args.values,
|
||||
description=parsed_args.description,
|
||||
datastore=parsed_args.datastore,
|
||||
datastore_version=parsed_args.datastore_version)
|
||||
datastore_version=parsed_args.datastore_version,
|
||||
datastore_version_number=parsed_args.datastore_version_number)
|
||||
config_grp = set_attributes_for_print_detail(config_grp)
|
||||
return zip(*sorted(config_grp.items()))
|
||||
|
||||
|
@ -70,6 +70,8 @@ def set_attributes_for_print_detail(instance):
|
||||
if hasattr(instance, 'datastore'):
|
||||
info['datastore'] = instance.datastore['type']
|
||||
info['datastore_version'] = instance.datastore['version']
|
||||
info['datastore_version_number'] = instance.datastore.get(
|
||||
'version_number')
|
||||
if hasattr(instance, 'configuration'):
|
||||
info['configuration'] = instance.configuration['id']
|
||||
if hasattr(instance, 'replica_of'):
|
||||
@ -303,6 +305,12 @@ class CreateDatabaseInstance(command.ShowOne):
|
||||
default=None,
|
||||
help=_("A datastore version name or ID."),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--datastore-version-number',
|
||||
default=None,
|
||||
help=_('The version number for the database. The version number '
|
||||
'is needed for the datastore versions with the same name.'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--nic',
|
||||
metavar=('<net-id=<net-uuid>,subnet-id=<subnet-uuid>,'
|
||||
@ -461,6 +469,7 @@ class CreateDatabaseInstance(command.ShowOne):
|
||||
availability_zone=(parsed_args.availability_zone),
|
||||
datastore=parsed_args.datastore,
|
||||
datastore_version=(parsed_args.datastore_version),
|
||||
datastore_version_number=(parsed_args.datastore_version_number),
|
||||
nics=nics,
|
||||
configuration=parsed_args.configuration,
|
||||
replica_of=replica_of,
|
||||
|
@ -92,7 +92,7 @@ class DeleteDatastore(command.Command):
|
||||
class ListDatastoreVersions(command.Lister):
|
||||
|
||||
_description = _("Lists available versions for a datastore")
|
||||
columns = ['ID', 'Name']
|
||||
columns = ['ID', 'Name', "Version"]
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(ListDatastoreVersions, self).get_parser(prog_name)
|
||||
@ -207,6 +207,11 @@ class CreateDatastoreVersion(command.Command):
|
||||
action='store_true',
|
||||
help=_('If set the datastore version as default.'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--version-number',
|
||||
help=_("The version number for the database. If not specified, "
|
||||
"use the version name as the default value."),
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
@ -224,7 +229,8 @@ class CreateDatastoreVersion(command.Command):
|
||||
parsed_args.image_id,
|
||||
image_tags=image_tags,
|
||||
active='true' if parsed_args.active else 'false',
|
||||
default='true' if parsed_args.default else 'false'
|
||||
default='true' if parsed_args.default else 'false',
|
||||
version_number=parsed_args.version_number
|
||||
)
|
||||
except Exception as e:
|
||||
msg = (_("Failed to create datastore version %(version)s: %(e)s")
|
||||
@ -256,6 +262,10 @@ class UpdateDatastoreVersion(command.Command):
|
||||
default=None,
|
||||
help=_('List of image tags separated by comma, e.g. trove,mysql'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'--version-name',
|
||||
help=_('New datastore version name.'),
|
||||
)
|
||||
|
||||
enable_group = parser.add_mutually_exclusive_group()
|
||||
enable_group.add_argument('--enable', dest='enable',
|
||||
@ -292,7 +302,8 @@ class UpdateDatastoreVersion(command.Command):
|
||||
datastore_manager=parsed_args.datastore_manager,
|
||||
image=parsed_args.image,
|
||||
image_tags=image_tags,
|
||||
active=parsed_args.enable, default=parsed_args.default
|
||||
active=parsed_args.enable, default=parsed_args.default,
|
||||
name=parsed_args.version_name
|
||||
)
|
||||
except Exception as e:
|
||||
msg = (_("Failed to update datastore version %(version)s: %(e)s")
|
||||
|
@ -173,7 +173,10 @@ class FakeHTTPClient(base_client.HTTPClient):
|
||||
"volume": {"size": 2},
|
||||
"flavor": {"id": "02"},
|
||||
"region": "regionOne",
|
||||
"datastore": {"version": "5.6", "type": "mysql"},
|
||||
"datastore": {
|
||||
"version": "5.6", "type": "mysql",
|
||||
"version_number": "5.7.29"
|
||||
},
|
||||
"tenant_id": "fake_tenant_id",
|
||||
"replica_of": {"id": "fake_master_id"},
|
||||
"access": {"is_public": False, "allowed_cidrs": []}
|
||||
@ -188,7 +191,10 @@ class FakeHTTPClient(base_client.HTTPClient):
|
||||
"volume": {"size": 2},
|
||||
"flavor": {"id": "2"},
|
||||
"region": "regionOne",
|
||||
"datastore": {"version": "5.6", "type": "mysql"},
|
||||
"datastore": {
|
||||
"version": "5.6", "type": "mysql",
|
||||
"version_number": "5.7.29"
|
||||
},
|
||||
"tenant_id": "fake_tenant_id",
|
||||
"access": {"is_public": False, "allowed_cidrs": []}
|
||||
},
|
||||
@ -231,7 +237,8 @@ class FakeHTTPClient(base_client.HTTPClient):
|
||||
},
|
||||
"datastore": {
|
||||
"version": "5.6",
|
||||
"type": "mysql"
|
||||
"type": "mysql",
|
||||
"version_number": "5.7.29"
|
||||
}}})
|
||||
|
||||
def post_instances(self, body, **kw):
|
||||
@ -503,6 +510,7 @@ class FakeHTTPClient(base_client.HTTPClient):
|
||||
"name": "test_config",
|
||||
"created": "2015-05-16T10:24:28",
|
||||
"datastore_version_name": "5.6",
|
||||
"datastore_version_number": "5.7.29",
|
||||
"id": "c-123",
|
||||
"values": {"max_connections": 5},
|
||||
"datastore_version_id": "d-123", "description": ''}]})
|
||||
|
@ -41,7 +41,7 @@ class TestConfigurationList(TestConfigurations):
|
||||
}
|
||||
|
||||
columns = database_configurations.ListDatabaseConfigurations.columns
|
||||
values = ('c-123', 'test_config', '', 'mysql', '5.6')
|
||||
values = ('c-123', 'test_config', '', 'mysql', '5.6', "5.7.29")
|
||||
|
||||
def setUp(self):
|
||||
super(TestConfigurationList, self).setUp()
|
||||
@ -60,7 +60,7 @@ class TestConfigurationList(TestConfigurations):
|
||||
|
||||
class TestConfigurationShow(TestConfigurations):
|
||||
|
||||
values = ('2015-05-16T10:24:28', 'mysql', '5.6', '', 'c-123',
|
||||
values = ('2015-05-16T10:24:28', 'mysql', '5.6', '5.7.29', '', 'c-123',
|
||||
'test_config', '2015-05-16T10:24:29', '{"max_connections": 5}')
|
||||
|
||||
def setUp(self):
|
||||
@ -73,6 +73,7 @@ class TestConfigurationShow(TestConfigurations):
|
||||
'created',
|
||||
'datastore_name',
|
||||
'datastore_version_name',
|
||||
'datastore_version_number',
|
||||
'description',
|
||||
'id',
|
||||
'name',
|
||||
@ -205,7 +206,7 @@ class TestDatabaseConfigurationDelete(TestConfigurations):
|
||||
|
||||
class TestConfigurationCreate(TestConfigurations):
|
||||
|
||||
values = ('2015-05-16T10:24:28', 'mysql', '5.6', '', 'c-123',
|
||||
values = ('2015-05-16T10:24:28', 'mysql', '5.6', '5.7.29', '', 'c-123',
|
||||
'test_config', '2015-05-16T10:24:29', '{"max_connections": 5}')
|
||||
|
||||
def setUp(self):
|
||||
@ -218,6 +219,7 @@ class TestConfigurationCreate(TestConfigurations):
|
||||
'created',
|
||||
'datastore_name',
|
||||
'datastore_version_name',
|
||||
'datastore_version_number',
|
||||
'description',
|
||||
'id',
|
||||
'name',
|
||||
@ -229,7 +231,7 @@ class TestConfigurationCreate(TestConfigurations):
|
||||
args = ['c-123', '{"max_connections": 5}',
|
||||
'--description', 'test_config',
|
||||
'--datastore', 'mysql',
|
||||
'--datastore_version', '5.6']
|
||||
'--datastore-version', '5.6']
|
||||
parsed_args = self.check_parser(self.cmd, args, [])
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
self.assertEqual(self.columns, columns)
|
||||
@ -244,13 +246,14 @@ class TestConfigurationCreate(TestConfigurations):
|
||||
'{"param1": 1, "param2": 2}',
|
||||
description=None,
|
||||
datastore=None,
|
||||
datastore_version=None)
|
||||
datastore_version=None,
|
||||
datastore_version_number=None)
|
||||
|
||||
def test_configuration_create_with_optional_args(self):
|
||||
args = ['cgroup2', '{"param3": 3, "param4": 4}',
|
||||
'--description', 'cgroup 2',
|
||||
'--datastore', 'mysql',
|
||||
'--datastore_version', '5.6']
|
||||
'--datastore-version', '5.6']
|
||||
parsed_args = self.check_parser(self.cmd, args, [])
|
||||
self.cmd.take_action(parsed_args)
|
||||
self.configuration_client.create.assert_called_with(
|
||||
@ -258,7 +261,8 @@ class TestConfigurationCreate(TestConfigurations):
|
||||
'{"param3": 3, "param4": 4}',
|
||||
description='cgroup 2',
|
||||
datastore='mysql',
|
||||
datastore_version='5.6')
|
||||
datastore_version='5.6',
|
||||
datastore_version_number=None)
|
||||
|
||||
|
||||
class TestConfigurationAttach(TestConfigurations):
|
||||
|
@ -107,8 +107,8 @@ class TestInstanceList(TestInstances):
|
||||
|
||||
class TestInstanceShow(TestInstances):
|
||||
values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql',
|
||||
'5.6', '02', '1234', 'test-member-1', False, 'regionOne',
|
||||
'fake_master_id', 'ACTIVE', 'fake_tenant_id', 2)
|
||||
'5.6', '5.7.29', '02', '1234', 'test-member-1', False,
|
||||
'regionOne', 'fake_master_id', 'ACTIVE', 'fake_tenant_id', 2)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstanceShow, self).setUp()
|
||||
@ -120,6 +120,7 @@ class TestInstanceShow(TestInstances):
|
||||
'allowed_cidrs',
|
||||
'datastore',
|
||||
'datastore_version',
|
||||
'datastore_version_number',
|
||||
'flavor',
|
||||
'id',
|
||||
'name',
|
||||
@ -197,13 +198,14 @@ class TestDatabaseInstanceDelete(TestInstances):
|
||||
|
||||
class TestDatabaseInstanceCreate(TestInstances):
|
||||
|
||||
values = ('2017-12-22T20:02:32', 'mysql', '5.6', '310',
|
||||
values = ('2017-12-22T20:02:32', 'mysql', '5.6', '5.7.29', '310',
|
||||
'2468', 'test', 'test-net', 'net-id', 'BUILD',
|
||||
'2017-12-22T20:02:32', 1)
|
||||
columns = (
|
||||
'created',
|
||||
'datastore',
|
||||
'datastore_version',
|
||||
'datastore_version_number',
|
||||
'flavor',
|
||||
'id',
|
||||
'name',
|
||||
@ -266,7 +268,8 @@ class TestDatabaseInstanceCreate(TestInstances):
|
||||
},
|
||||
"datastore": {
|
||||
"type": "mysql",
|
||||
"version": "5.7.29"
|
||||
"version": "5.7.29",
|
||||
"version_number": "5.7.29"
|
||||
},
|
||||
"region": "RegionOne",
|
||||
"access": {
|
||||
@ -310,6 +313,7 @@ class TestDatabaseInstanceCreate(TestInstances):
|
||||
'created',
|
||||
'datastore',
|
||||
'datastore_version',
|
||||
'datastore_version_number',
|
||||
'flavor',
|
||||
'id',
|
||||
'name',
|
||||
@ -325,6 +329,7 @@ class TestDatabaseInstanceCreate(TestInstances):
|
||||
"2020-08-12T09:41:47",
|
||||
"mysql",
|
||||
"5.7.29",
|
||||
"5.7.29",
|
||||
"a48ea749-7ee3-4003-8aae-eb4e79773e2d",
|
||||
"a1fea1cf-18ad-48ab-bdfd-fce99a4b834e",
|
||||
"test-mysql",
|
||||
@ -363,6 +368,7 @@ class TestDatabaseInstanceCreate(TestInstances):
|
||||
availability_zone=None,
|
||||
datastore='mysql',
|
||||
datastore_version='5.7.29',
|
||||
datastore_version_number=None,
|
||||
nics=[
|
||||
{'network_id': 'net1', 'subnet_id': 'subnet_id',
|
||||
'ip_address': '192.168.1.11'}
|
||||
|
@ -88,7 +88,7 @@ class TestDeleteDatastore(TestDatastores):
|
||||
|
||||
class TestDatastoreVersionList(TestDatastores):
|
||||
columns = datastores.ListDatastoreVersions.columns
|
||||
values = ('v-56', '5.6')
|
||||
values = ('v-56', '5.6', '')
|
||||
|
||||
def setUp(self):
|
||||
super(TestDatastoreVersionList, self).setUp()
|
||||
@ -173,7 +173,8 @@ class TestCreateDatastoreVersion(TestDatastores):
|
||||
|
||||
self.dsversion_mgmt_client.create.assert_called_once_with(
|
||||
'new_name', 'ds_name', 'ds_manager', image_id, active='true',
|
||||
default='true', image_tags=['trove', 'mysql'])
|
||||
default='true', image_tags=['trove', 'mysql'],
|
||||
version_number=None)
|
||||
|
||||
|
||||
class TestUpdateDatastoreVersion(TestDatastores):
|
||||
@ -191,4 +192,5 @@ class TestUpdateDatastoreVersion(TestDatastores):
|
||||
|
||||
self.dsversion_mgmt_client.edit.assert_called_once_with(
|
||||
version_id, datastore_manager=None, image=None,
|
||||
active='true', default='false', image_tags=['trove', 'mysql'])
|
||||
active='true', default='false', image_tags=['trove', 'mysql'],
|
||||
name=None)
|
||||
|
@ -56,7 +56,7 @@ class Configurations(base.ManagerWithFind):
|
||||
limit, marker)
|
||||
|
||||
def create(self, name, values, description=None, datastore=None,
|
||||
datastore_version=None):
|
||||
datastore_version=None, datastore_version_number=None):
|
||||
"""Create a new configuration."""
|
||||
body = {
|
||||
"configuration": {
|
||||
@ -69,6 +69,8 @@ class Configurations(base.ManagerWithFind):
|
||||
datastore_obj["type"] = datastore
|
||||
if datastore_version:
|
||||
datastore_obj["version"] = datastore_version
|
||||
if datastore_version_number:
|
||||
datastore_obj["version_number"] = datastore_version_number
|
||||
if datastore_obj:
|
||||
body["configuration"]["datastore"] = datastore_obj
|
||||
if description:
|
||||
|
@ -94,7 +94,7 @@ class Instances(base.ManagerWithFind):
|
||||
datastore=None, datastore_version=None, nics=None,
|
||||
configuration=None, replica_of=None, replica_count=None,
|
||||
modules=None, locality=None, region_name=None, access=None,
|
||||
**kwargs):
|
||||
datastore_version_number=None, **kwargs):
|
||||
"""Create (boot) a new instance."""
|
||||
|
||||
body = {"instance": {
|
||||
@ -117,6 +117,8 @@ class Instances(base.ManagerWithFind):
|
||||
datastore_obj["type"] = datastore
|
||||
if datastore_version:
|
||||
datastore_obj["version"] = datastore_version
|
||||
if datastore_version_number:
|
||||
datastore_obj["version_number"] = datastore_version_number
|
||||
if datastore_obj:
|
||||
body["instance"]["datastore"] = datastore_obj
|
||||
if nics:
|
||||
|
@ -268,7 +268,8 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
|
||||
"version")
|
||||
|
||||
def create(self, name, datastore_name, datastore_manager, image,
|
||||
packages=None, active='true', default='false', image_tags=[]):
|
||||
packages=None, active='true', default='false', image_tags=[],
|
||||
version=None):
|
||||
"""Create a new datastore version."""
|
||||
packages = packages or []
|
||||
body = {
|
||||
@ -284,11 +285,14 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
|
||||
}
|
||||
if image:
|
||||
body['version']['image'] = image
|
||||
if version:
|
||||
body['version']['version'] = version
|
||||
|
||||
return self._create("/mgmt/datastore-versions", body, None, True)
|
||||
|
||||
def edit(self, datastore_version_id, datastore_manager=None, image=None,
|
||||
packages=None, active=None, default=None, image_tags=None):
|
||||
packages=None, active=None, default=None, image_tags=None,
|
||||
name=None):
|
||||
"""Update a datastore-version."""
|
||||
packages = packages or []
|
||||
body = {}
|
||||
@ -304,6 +308,8 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
|
||||
body['default'] = json.loads(default)
|
||||
if image_tags is not None:
|
||||
body['image_tags'] = image_tags
|
||||
if name:
|
||||
body['name'] = name
|
||||
|
||||
url = ("/mgmt/datastore-versions/%s" % datastore_version_id)
|
||||
resp, body = self.api.client.patch(url, body=body)
|
||||
|
Loading…
x
Reference in New Issue
Block a user