NetApp: Add use-exact-size parameter when creating a LUN on ONTAP iSCSI
When a cinder volume is created the ontap backend fits the LUN to the best geometry. It makes the image uploaded from a volume larger than expected and a volume of larger size must be created from that image. Using the use-exact-size parameter the backend does not fit to best geometry, the image uploaded from that volume has the same size and a volume of the same size may be created from that image. Nevertheless this parameter is available only in Data ONTAP 9.1 (ontapi version 1.110) and later. Closes-Bug: #1731474 Change-Id: I0e21cbcb6effa1e72999580564099976511ca4a9
This commit is contained in:
parent
aa58746ec2
commit
67391f1f0f
@ -46,6 +46,7 @@ class NetAppBaseClientTestCase(test.TestCase):
|
|||||||
self.mock_object(client_base.Client, '_init_ssh_client')
|
self.mock_object(client_base.Client, '_init_ssh_client')
|
||||||
self.client = client_base.Client(**CONNECTION_INFO)
|
self.client = client_base.Client(**CONNECTION_INFO)
|
||||||
self.client.connection = mock.MagicMock()
|
self.client.connection = mock.MagicMock()
|
||||||
|
self.client.connection.get_api_version.return_value = (1, 100)
|
||||||
self.client.ssh_client = mock.MagicMock()
|
self.client.ssh_client = mock.MagicMock()
|
||||||
self.connection = self.client.connection
|
self.connection = self.client.connection
|
||||||
self.fake_volume = six.text_type(uuid.uuid4())
|
self.fake_volume = six.text_type(uuid.uuid4())
|
||||||
@ -86,7 +87,6 @@ class NetAppBaseClientTestCase(test.TestCase):
|
|||||||
|
|
||||||
def test_create_lun(self):
|
def test_create_lun(self):
|
||||||
expected_path = '/vol/%s/%s' % (self.fake_volume, self.fake_lun)
|
expected_path = '/vol/%s/%s' % (self.fake_volume, self.fake_lun)
|
||||||
|
|
||||||
with mock.patch.object(netapp_api.NaElement,
|
with mock.patch.object(netapp_api.NaElement,
|
||||||
'create_node_with_children',
|
'create_node_with_children',
|
||||||
) as mock_create_node:
|
) as mock_create_node:
|
||||||
@ -105,6 +105,28 @@ class NetAppBaseClientTestCase(test.TestCase):
|
|||||||
self.connection.invoke_successfully.assert_called_once_with(
|
self.connection.invoke_successfully.assert_called_once_with(
|
||||||
mock.ANY, True)
|
mock.ANY, True)
|
||||||
|
|
||||||
|
def test_create_lun_exact_size(self):
|
||||||
|
expected_path = '/vol/%s/%s' % (self.fake_volume, self.fake_lun)
|
||||||
|
self.connection.get_api_version.return_value = (1, 110)
|
||||||
|
with mock.patch.object(netapp_api.NaElement,
|
||||||
|
'create_node_with_children',
|
||||||
|
) as mock_create_node:
|
||||||
|
self.client.create_lun(self.fake_volume,
|
||||||
|
self.fake_lun,
|
||||||
|
self.fake_size,
|
||||||
|
self.fake_metadata)
|
||||||
|
|
||||||
|
mock_create_node.assert_called_once_with(
|
||||||
|
'lun-create-by-size',
|
||||||
|
**{'path': expected_path,
|
||||||
|
'size': self.fake_size,
|
||||||
|
'ostype': self.fake_metadata['OsType'],
|
||||||
|
'use-exact-size': 'true',
|
||||||
|
'space-reservation-enabled':
|
||||||
|
self.fake_metadata['SpaceReserved']})
|
||||||
|
self.connection.invoke_successfully.assert_called_once_with(
|
||||||
|
mock.ANY, True)
|
||||||
|
|
||||||
def test_create_lun_with_qos_policy_group_name(self):
|
def test_create_lun_with_qos_policy_group_name(self):
|
||||||
expected_path = '/vol/%s/%s' % (self.fake_volume, self.fake_lun)
|
expected_path = '/vol/%s/%s' % (self.fake_volume, self.fake_lun)
|
||||||
expected_qos_group_name = 'qos_1'
|
expected_qos_group_name = 'qos_1'
|
||||||
|
@ -94,11 +94,15 @@ class Client(object):
|
|||||||
"""Issues API request for creating LUN on volume."""
|
"""Issues API request for creating LUN on volume."""
|
||||||
|
|
||||||
path = '/vol/%s/%s' % (volume_name, lun_name)
|
path = '/vol/%s/%s' % (volume_name, lun_name)
|
||||||
|
params = {'path': path, 'size': six.text_type(size),
|
||||||
|
'ostype': metadata['OsType'],
|
||||||
|
'space-reservation-enabled': metadata['SpaceReserved']}
|
||||||
|
version = self.get_ontapi_version()
|
||||||
|
if version >= (1, 110):
|
||||||
|
params['use-exact-size'] = 'true'
|
||||||
lun_create = netapp_api.NaElement.create_node_with_children(
|
lun_create = netapp_api.NaElement.create_node_with_children(
|
||||||
'lun-create-by-size',
|
'lun-create-by-size',
|
||||||
**{'path': path, 'size': six.text_type(size),
|
**params)
|
||||||
'ostype': metadata['OsType'],
|
|
||||||
'space-reservation-enabled': metadata['SpaceReserved']})
|
|
||||||
if qos_policy_group_name:
|
if qos_policy_group_name:
|
||||||
lun_create.add_new_child('qos-policy-group', qos_policy_group_name)
|
lun_create.add_new_child('qos-policy-group', qos_policy_group_name)
|
||||||
|
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixed bug #1731474 on NetApp Data ONTAP driver that was causing LUNs to be created
|
||||||
|
with larger size than requested. This fix requires version 9.1 of ONTAP
|
||||||
|
or later.
|
Loading…
x
Reference in New Issue
Block a user