Added type description for volume type client
This patch added client handling and unit tests for volume type description: * Added 2 client methods for volume type. default: to get the default volume type update: to upate an existing volume type to update description * Added 2 new command-line operations. type-update (adminitrator only) type-default * type-list should display description. * type-create should have an option for entering the description. The corresponding cinder APIs change volume-type-description: https://review.openstack.org/#/c/131871/ Implements: blueprint volume-type-description Change-Id: I2735d7050d90589d19f45e21096577febdcca8bb
This commit is contained in:
		@@ -189,9 +189,11 @@ class Manager(utils.HookableMixin):
 | 
			
		||||
    def _delete(self, url):
 | 
			
		||||
        resp, body = self.api.client.delete(url)
 | 
			
		||||
 | 
			
		||||
    def _update(self, url, body, **kwargs):
 | 
			
		||||
    def _update(self, url, body, response_key=None, **kwargs):
 | 
			
		||||
        self.run_hooks('modify_body_for_update', body, **kwargs)
 | 
			
		||||
        resp, body = self.api.client.put(url, body=body)
 | 
			
		||||
        if response_key:
 | 
			
		||||
            return self.resource_class(self, body[response_key], loaded=True)
 | 
			
		||||
        return body
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -578,9 +578,13 @@ class FakeHTTPClient(base_client.HTTPClient):
 | 
			
		||||
                          'name': 'test-type-2',
 | 
			
		||||
                          'extra_specs': {}}})
 | 
			
		||||
 | 
			
		||||
    def get_types_default(self, **kw):
 | 
			
		||||
        return self.get_types_1()
 | 
			
		||||
 | 
			
		||||
    def post_types(self, body, **kw):
 | 
			
		||||
        return (202, {}, {'volume_type': {'id': 3,
 | 
			
		||||
                          'name': 'test-type-3',
 | 
			
		||||
                          'description': 'test_type-3-desc',
 | 
			
		||||
                          'extra_specs': {}}})
 | 
			
		||||
 | 
			
		||||
    def post_types_1_extra_specs(self, body, **kw):
 | 
			
		||||
@@ -593,6 +597,9 @@ class FakeHTTPClient(base_client.HTTPClient):
 | 
			
		||||
    def delete_types_1(self, **kw):
 | 
			
		||||
        return (202, {}, None)
 | 
			
		||||
 | 
			
		||||
    def put_types_1(self, **kw):
 | 
			
		||||
        return self.get_types_1()
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # VolumeEncryptionTypes
 | 
			
		||||
    #
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,21 @@ class TypesTest(utils.TestCase):
 | 
			
		||||
        cs.assert_called('POST', '/types')
 | 
			
		||||
        self.assertIsInstance(t, volume_types.VolumeType)
 | 
			
		||||
 | 
			
		||||
    def test_update(self):
 | 
			
		||||
        t = cs.volume_types.update('1', 'test_desc_1')
 | 
			
		||||
        cs.assert_called('PUT', '/types/1')
 | 
			
		||||
        self.assertIsInstance(t, volume_types.VolumeType)
 | 
			
		||||
 | 
			
		||||
    def test_get(self):
 | 
			
		||||
        t = cs.volume_types.get('1')
 | 
			
		||||
        cs.assert_called('GET', '/types/1')
 | 
			
		||||
        self.assertIsInstance(t, volume_types.VolumeType)
 | 
			
		||||
 | 
			
		||||
    def test_default(self):
 | 
			
		||||
        t = cs.volume_types.default()
 | 
			
		||||
        cs.assert_called('GET', '/types/default')
 | 
			
		||||
        self.assertIsInstance(t, volume_types.VolumeType)
 | 
			
		||||
 | 
			
		||||
    def test_set_key(self):
 | 
			
		||||
        t = cs.volume_types.get(1)
 | 
			
		||||
        t.set_keys({'k': 'v'})
 | 
			
		||||
 
 | 
			
		||||
@@ -696,7 +696,7 @@ def do_snapshot_reset_state(cs, args):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _print_volume_type_list(vtypes):
 | 
			
		||||
    utils.print_list(vtypes, ['ID', 'Name'])
 | 
			
		||||
    utils.print_list(vtypes, ['ID', 'Name', 'Description'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@utils.service_type('volumev2')
 | 
			
		||||
@@ -706,6 +706,26 @@ def do_type_list(cs, args):
 | 
			
		||||
    _print_volume_type_list(vtypes)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@utils.service_type('volumev2')
 | 
			
		||||
def do_type_default(cs, args):
 | 
			
		||||
    """List the default volume type."""
 | 
			
		||||
    vtype = cs.volume_types.default()
 | 
			
		||||
    _print_volume_type_list([vtype])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@utils.arg('id',
 | 
			
		||||
           metavar='<id>',
 | 
			
		||||
           help="ID of the volume type.")
 | 
			
		||||
@utils.arg('description',
 | 
			
		||||
           metavar='<description>',
 | 
			
		||||
           help="Description of the volume type.")
 | 
			
		||||
@utils.service_type('volumev2')
 | 
			
		||||
def do_type_update(cs, args):
 | 
			
		||||
    """Updates volume type description."""
 | 
			
		||||
    vtype = cs.volume_types.update(args.id, args.description)
 | 
			
		||||
    _print_volume_type_list([vtype])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@utils.service_type('volumev2')
 | 
			
		||||
def do_extra_specs_list(cs, args):
 | 
			
		||||
    """Lists current volume types and extra specs."""
 | 
			
		||||
@@ -716,10 +736,13 @@ def do_extra_specs_list(cs, args):
 | 
			
		||||
@utils.arg('name',
 | 
			
		||||
           metavar='<name>',
 | 
			
		||||
           help="Name of new volume type.")
 | 
			
		||||
@utils.arg('--description',
 | 
			
		||||
           metavar='<description>',
 | 
			
		||||
           help="Description of new volume type.")
 | 
			
		||||
@utils.service_type('volumev2')
 | 
			
		||||
def do_type_create(cs, args):
 | 
			
		||||
    """Creates a volume type."""
 | 
			
		||||
    vtype = cs.volume_types.create(args.name)
 | 
			
		||||
    vtype = cs.volume_types.create(args.name, args.description)
 | 
			
		||||
    _print_volume_type_list([vtype])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -85,6 +85,13 @@ class VolumeTypeManager(base.ManagerWithFind):
 | 
			
		||||
        """
 | 
			
		||||
        return self._get("/types/%s" % base.getid(volume_type), "volume_type")
 | 
			
		||||
 | 
			
		||||
    def default(self):
 | 
			
		||||
        """Get the default volume type.
 | 
			
		||||
 | 
			
		||||
        :rtype: :class:`VolumeType`
 | 
			
		||||
        """
 | 
			
		||||
        return self._get("/types/default", "volume_type")
 | 
			
		||||
 | 
			
		||||
    def delete(self, volume_type):
 | 
			
		||||
        """Deletes a specific volume_type.
 | 
			
		||||
 | 
			
		||||
@@ -92,17 +99,36 @@ class VolumeTypeManager(base.ManagerWithFind):
 | 
			
		||||
        """
 | 
			
		||||
        self._delete("/types/%s" % base.getid(volume_type))
 | 
			
		||||
 | 
			
		||||
    def create(self, name):
 | 
			
		||||
    def create(self, name, description=None):
 | 
			
		||||
        """Creates a volume type.
 | 
			
		||||
 | 
			
		||||
        :param name: Descriptive name of the volume type
 | 
			
		||||
        :param description: Description of the the volume type
 | 
			
		||||
        :rtype: :class:`VolumeType`
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        body = {
 | 
			
		||||
            "volume_type": {
 | 
			
		||||
                "name": name,
 | 
			
		||||
                "description": description
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return self._create("/types", body, "volume_type")
 | 
			
		||||
 | 
			
		||||
    def update(self, volume_type, description):
 | 
			
		||||
        """Update the description for a volume type.
 | 
			
		||||
 | 
			
		||||
        :param volume_type: The ID of the :class:`VolumeType` to update.
 | 
			
		||||
        :param description: Description of the the volume type.
 | 
			
		||||
        :rtype: :class:`VolumeType`
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        body = {
 | 
			
		||||
            "volume_type": {
 | 
			
		||||
                "description": description
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return self._update("/types/%s" % base.getid(volume_type),
 | 
			
		||||
                            body, response_key="volume_type")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user