summaryrefslogtreecommitdiff
path: root/cinder/volume/drivers/huawei/huawei_18000.py
diff options
context:
space:
mode:
Diffstat (limited to 'cinder/volume/drivers/huawei/huawei_18000.py')
-rw-r--r--cinder/volume/drivers/huawei/huawei_18000.py199
1 files changed, 199 insertions, 0 deletions
diff --git a/cinder/volume/drivers/huawei/huawei_18000.py b/cinder/volume/drivers/huawei/huawei_18000.py
new file mode 100644
index 000000000..c306fecb2
--- /dev/null
+++ b/cinder/volume/drivers/huawei/huawei_18000.py
@@ -0,0 +1,199 @@
+# Copyright (c) 2013 - 2014 Huawei Technologies Co., Ltd.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+"""
+Volume Drivers for Huawei OceanStor 18000 storage arrays.
+"""
+
+from cinder.volume import driver
+from cinder.volume.drivers.huawei import rest_common
+from cinder.zonemanager import utils as fczm_utils
+
+
+class Huawei18000ISCSIDriver(driver.ISCSIDriver):
+ """ISCSI driver for Huawei OceanStor 18000 storage arrays.
+
+ Version history:
+ 1.0.0 - Initial driver
+ 1.1.0 - Provide Huawei OceanStor 18000 storage volume driver.
+ """
+
+ VERSION = "1.1.0"
+
+ def __init__(self, *args, **kwargs):
+ super(Huawei18000ISCSIDriver, self).__init__(*args, **kwargs)
+
+ def do_setup(self, context):
+ """Instantiate common class and log in storage system."""
+ self.common = rest_common.RestCommon(configuration=self.configuration)
+ return self.common.login()
+
+ def check_for_setup_error(self):
+ """Check configuration file."""
+ return self.common._check_conf_file()
+
+ def create_volume(self, volume):
+ """Create a volume."""
+ lun_info = self.common.create_volume(volume)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def create_volume_from_snapshot(self, volume, snapshot):
+ """Create a volume from a snapshot."""
+ lun_info = self.common.create_volume_from_snapshot(volume, snapshot)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def create_cloned_volume(self, volume, src_vref):
+ """Create a clone of the specified volume."""
+ lun_info = self.common.create_cloned_volume(volume, src_vref)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def extend_volume(self, volume, new_size):
+ """Extend a volume."""
+ return self.common.extend_volume(volume, new_size)
+
+ def delete_volume(self, volume):
+ """Delete a volume."""
+ return self.common.delete_volume(volume)
+
+ def create_snapshot(self, snapshot):
+ """Create a snapshot."""
+ lun_info = self.common.create_snapshot(snapshot)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def delete_snapshot(self, snapshot):
+ """Delete a snapshot."""
+ return self.common.delete_snapshot(snapshot)
+
+ def get_volume_stats(self, refresh=False):
+ """Get volume stats."""
+ data = self.common.update_volume_stats()
+ backend_name = self.configuration.safe_get('volume_backend_name')
+ data['volume_backend_name'] = backend_name or self.__class__.__name__
+ data['storage_protocol'] = 'iSCSI'
+ data['driver_version'] = self.VERSION
+ return data
+
+ def initialize_connection(self, volume, connector):
+ """Map a volume to a host."""
+ return self.common.initialize_connection_iscsi(volume, connector)
+
+ def terminate_connection(self, volume, connector, **kwargs):
+ """Terminate the map."""
+ self.common.terminate_connection_iscsi(volume, connector)
+
+ def create_export(self, context, volume):
+ """Export the volume."""
+ pass
+
+ def ensure_export(self, context, volume):
+ """Synchronously recreate an export for a volume."""
+ pass
+
+ def remove_export(self, context, volume):
+ """Remove an export for a volume."""
+ pass
+
+
+class Huawei18000FCDriver(driver.FibreChannelDriver):
+ """FC driver for Huawei OceanStor 18000 storage arrays.
+
+ Version history:
+ 1.0.0 - Initial driver
+ 1.1.0 - Provide Huawei OceanStor 18000 storage volume driver.
+ """
+
+ VERSION = "1.1.0"
+
+ def __init__(self, *args, **kwargs):
+ super(Huawei18000FCDriver, self).__init__(*args, **kwargs)
+
+ def do_setup(self, context):
+ """Instantiate common class and log in storage system."""
+ self.common = rest_common.RestCommon(configuration=self.configuration)
+ return self.common.login()
+
+ def check_for_setup_error(self):
+ """Check configuration file."""
+ return self.common._check_conf_file()
+
+ def create_volume(self, volume):
+ """Create a volume."""
+ lun_info = self.common.create_volume(volume)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def create_volume_from_snapshot(self, volume, snapshot):
+ """Create a volume from a snapshot."""
+ lun_info = self.common.create_volume_from_snapshot(volume, snapshot)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def create_cloned_volume(self, volume, src_vref):
+ """Create a clone of the specified volume."""
+ lun_info = self.common.create_cloned_volume(volume, src_vref)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def extend_volume(self, volume, new_size):
+ """Extend a volume."""
+ return self.common.extend_volume(volume, new_size)
+
+ def delete_volume(self, volume):
+ """Delete a volume."""
+ return self.common.delete_volume(volume)
+
+ def create_snapshot(self, snapshot):
+ """Create a snapshot."""
+ lun_info = self.common.create_snapshot(snapshot)
+ return {'provider_location': lun_info['ID'],
+ 'lun_info': lun_info}
+
+ def delete_snapshot(self, snapshot):
+ """Delete a snapshot."""
+ return self.common.delete_snapshot(snapshot)
+
+ def get_volume_stats(self, refresh=False):
+ """Get volume stats."""
+ data = self.common.update_volume_stats()
+ backend_name = self.configuration.safe_get('volume_backend_name')
+ data['volume_backend_name'] = backend_name or self.__class__.__name__
+ data['storage_protocol'] = 'FC'
+ data['driver_version'] = self.VERSION
+ return data
+
+ @fczm_utils.AddFCZone
+ def initialize_connection(self, volume, connector):
+ """Map a volume to a host."""
+ return self.common.initialize_connection_fc(volume, connector)
+
+ @fczm_utils.RemoveFCZone
+ def terminate_connection(self, volume, connector, **kwargs):
+ """Terminate the map."""
+ return self.common.terminate_connection_fc(volume, connector)
+
+ def create_export(self, context, volume):
+ """Export the volume."""
+ pass
+
+ def ensure_export(self, context, volume):
+ """Synchronously recreate an export for a volume."""
+ pass
+
+ def remove_export(self, context, volume):
+ """Remove an export for a volume."""
+ pass