diff --git a/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py b/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py index 95fee182a1b..248d8deb5d6 100644 --- a/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py +++ b/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py @@ -44,6 +44,10 @@ class ScaleIODriver(scaleio.ScaleIODriver): override='test_domain') configuration.set_override('sio_storage_pools', override='test_domain:test_pool') + if 'san_thin_provision' in kwargs: + configuration.set_override( + 'san_thin_provision', + override=kwargs['san_thin_provision']) super(ScaleIODriver, self).__init__(configuration=configuration, *args, diff --git a/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py b/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py index 01e6e21ed80..b8dd9f30f1e 100644 --- a/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py +++ b/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py @@ -12,6 +12,8 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + +import ddt import mock from six.moves import urllib @@ -23,6 +25,7 @@ from cinder.tests.unit.volume.drivers.emc import scaleio from cinder.tests.unit.volume.drivers.emc.scaleio import mocks +@ddt.ddt class TestMisc(scaleio.TestScaleIODriver): DOMAIN_NAME = 'PD1' POOL_NAME = 'SP1' @@ -188,3 +191,20 @@ class TestMisc(scaleio.TestScaleIODriver): self.volume, self.new_volume['id'] ) + + def test_default_provisioning_type_unspecified(self): + empty_storage_type = {} + self.assertEqual( + 'thin', + self.driver._find_provisioning_type(empty_storage_type)) + + @ddt.data((True, 'thin'), (False, 'thick')) + @ddt.unpack + def test_default_provisioning_type_thin(self, config_provisioning_type, + expected_provisioning_type): + self.driver = mocks.ScaleIODriver( + san_thin_provision=config_provisioning_type) + empty_storage_type = {} + self.assertEqual( + expected_provisioning_type, + self.driver._find_provisioning_type(empty_storage_type)) diff --git a/cinder/volume/drivers/emc/scaleio.py b/cinder/volume/drivers/emc/scaleio.py index ec5a092c24a..4a8fca79669 100644 --- a/cinder/volume/drivers/emc/scaleio.py +++ b/cinder/volume/drivers/emc/scaleio.py @@ -153,6 +153,12 @@ class ScaleIODriver(driver.VolumeDriver): "Protection domain id: %(domain_id)s."), {'domain_id': self.protection_domain_id}) + self.provisioning_type = ( + 'thin' if self.configuration.san_thin_provision else 'thick') + LOG.info(_LI( + "Default provisioning type: %(provisioning_type)s."), + {'provisioning_type': self.provisioning_type}) + self.connector = connector.InitiatorConnector.factory( connector.SCALEIO, utils.get_root_helper(), device_scan_attempts= @@ -235,7 +241,8 @@ class ScaleIODriver(driver.VolumeDriver): self.protection_domain_name) def _find_provisioning_type(self, storage_type): - return storage_type.get(PROVISIONING_KEY) + return storage_type.get(PROVISIONING_KEY, + self.provisioning_type) def _find_limit(self, storage_type, qos_key, extraspecs_key): qos_limit = (storage_type.get(qos_key) diff --git a/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml b/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml new file mode 100644 index 00000000000..ff9185742c0 --- /dev/null +++ b/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - EMC ScaleIO driver now uses the config option + san_thin_provision to determine the default + provisioning type.