]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Unified Volume Driver for IBM XIV and IBM DS8K
authorErik Zaadi <erikz@il.ibm.com>
Mon, 12 Aug 2013 10:27:19 +0000 (13:27 +0300)
committerErik Zaadi <erikz@il.ibm.com>
Thu, 22 Aug 2013 06:34:44 +0000 (09:34 +0300)
    * Refactored xiv.py to xiv_ds8k.py
    * Updated tests
    * Updated flags
    * Updated compatibility checks
    * DocImpact
    * Added extend_volume and migrate_volume

implements blueprint ibm-unify-xiv-ds8k

Change-Id: Ifd64fc1dab91ada6fd42a7e92a41361cf220042f

cinder/tests/conf_fixture.py
cinder/tests/test_drivers_compatibility.py
cinder/tests/test_xiv_ds8k.py [moved from cinder/tests/test_xiv.py with 69% similarity]
cinder/volume/drivers/xiv.py [deleted file]
cinder/volume/drivers/xiv_ds8k.py [new file with mode: 0644]
cinder/volume/manager.py
etc/cinder/cinder.conf.sample

index cd42a8262f0b6f52434be65cacd9d4301d45ce4d..499f332630b74f8c15637e48733808ca1c59d335 100644 (file)
@@ -25,7 +25,7 @@ CONF = cfg.CONF
 CONF.import_opt('iscsi_num_targets', 'cinder.volume.drivers.lvm')
 CONF.import_opt('policy_file', 'cinder.policy')
 CONF.import_opt('volume_driver', 'cinder.volume.manager')
-CONF.import_opt('xiv_proxy', 'cinder.volume.drivers.xiv')
+CONF.import_opt('xiv_ds8k_proxy', 'cinder.volume.drivers.xiv_ds8k')
 CONF.import_opt('backup_driver', 'cinder.backup.manager')
 
 def_vol_type = 'fake_vol_type'
@@ -44,5 +44,7 @@ def set_defaults(conf):
     conf.set_default('connection', 'sqlite://', group='database')
     conf.set_default('sqlite_synchronous', False)
     conf.set_default('policy_file', 'cinder/tests/policy.json')
-    conf.set_default('xiv_proxy', 'cinder.tests.test_xiv.XIVFakeProxyDriver')
+    conf.set_default(
+        'xiv_ds8k_proxy',
+        'cinder.tests.test_xiv_ds8k.XIVDS8KFakeProxyDriver')
     conf.set_default('backup_driver', 'cinder.tests.backup.fake_service')
index 9781a1a341d2e5cc375a3bb705718e59dce5cc9e..8796b79e29d65a8c47d0b86558c2833b7cb16fa3 100644 (file)
@@ -33,7 +33,7 @@ NFS_MODULE = "cinder.volume.drivers.nfs.NfsDriver"
 SOLIDFIRE_MODULE = "cinder.volume.drivers.solidfire.SolidFireDriver"
 STORWIZE_SVC_MODULE = "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver"
 WINDOWS_MODULE = "cinder.volume.drivers.windows.WindowsDriver"
-XIV_MODULE = "cinder.volume.drivers.xiv.XIVDriver"
+XIV_DS8K_MODULE = "cinder.volume.drivers.xiv_ds8k.XIVDS8KDriver"
 ZADARA_MODULE = "cinder.volume.drivers.zadara.ZadaraVPSAISCSIDriver"
 
 
@@ -148,11 +148,11 @@ class VolumeDriverCompatibility(test.TestCase):
 
     def test_xiv_old(self):
         self._load_driver('cinder.volume.xiv.XIVDriver')
-        self.assertEquals(self._driver_module_name(), XIV_MODULE)
+        self.assertEquals(self._driver_module_name(), XIV_DS8K_MODULE)
 
-    def test_xiv_new(self):
-        self._load_driver(XIV_MODULE)
-        self.assertEquals(self._driver_module_name(), XIV_MODULE)
+    def test_xiv_ds8k_new(self):
+        self._load_driver(XIV_DS8K_MODULE)
+        self.assertEquals(self._driver_module_name(), XIV_DS8K_MODULE)
 
     def test_zadara_old(self):
         self._load_driver('cinder.volume.zadara.ZadaraVPSAISCSIDriver')
similarity index 69%
rename from cinder/tests/test_xiv.py
rename to cinder/tests/test_xiv_ds8k.py
index fbb45b14bfa38d42561563293d538f82f6f4a97c..cbb1776ff1007a290b85fa50c664a33cbd3b108c 100644 (file)
@@ -1,7 +1,7 @@
 # vim: tabstop=4 shiftwidth=4 softtabstop=4
 
-# Copyright 2012 IBM Corp.
-# Copyright (c) 2012 OpenStack LLC.
+# Copyright 2013 IBM Corp.
+# Copyright (c) 2013 OpenStack LLC.
 # All Rights Reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -27,7 +27,7 @@ from oslo.config import cfg
 from cinder import exception
 from cinder import test
 from cinder.volume import configuration as conf
-from cinder.volume.drivers import xiv
+from cinder.volume.drivers import xiv_ds8k
 
 
 FAKE = "fake"
@@ -40,27 +40,30 @@ CONNECTOR = {'initiator': "iqn.2012-07.org.fake:01:948f189c4695", }
 CONF = cfg.CONF
 
 
-class XIVFakeProxyDriver(object):
-    """Fake XIV Proxy Driver."""
+class XIVDS8KFakeProxyDriver(object):
+    """Fake IBM XIV and DS8K Proxy Driver."""
 
-    def __init__(self, xiv_info, logger, expt):
+    def __init__(self, xiv_ds8k_info, logger, expt, driver=None):
         """
         Initialize Proxy
         """
 
-        self.xiv_info = xiv_info
+        self.xiv_ds8k_info = xiv_ds8k_info
         self.logger = logger
         self.exception = expt
-        self.xiv_portal = \
-            self.xiv_iqn = FAKE
+        self.xiv_ds8k_portal = \
+            self.xiv_ds8k_iqn = FAKE
 
         self.volumes = {}
+        self.driver = driver
 
     def setup(self, context):
-        if self.xiv_info['xiv_user'] != CONF.san_login:
+        if self.xiv_ds8k_info['xiv_ds8k_user'] != self.driver\
+                .configuration.san_login:
             raise self.exception.NotAuthorized()
 
-        if self.xiv_info['xiv_address'] != CONF.san_ip:
+        if self.xiv_ds8k_info['xiv_ds8k_address'] != self.driver\
+                .configuration.san_ip:
             raise self.exception.HostNotFound(host='fake')
 
     def create_volume(self, volume):
@@ -85,14 +88,14 @@ class XIVFakeProxyDriver(object):
         return {'driver_volume_type': 'iscsi',
                 'data': {'target_discovered': True,
                          'target_discovered': True,
-                         'target_portal': self.xiv_portal,
-                         'target_iqn': self.xiv_iqn,
+                         'target_portal': self.xiv_ds8k_portal,
+                         'target_iqn': self.xiv_ds8k_iqn,
                          'target_lun': lun_id,
                          'volume_id': volume['id'],
                          'multipath': True,
                          'provider_location': "%s,1 %s %s" % (
-                             self.xiv_portal,
-                             self.xiv_iqn,
+                             self.xiv_ds8k_portal,
+                             self.xiv_ds8k_iqn,
                              lun_id), },
                 }
 
@@ -111,41 +114,53 @@ class XIVFakeProxyDriver(object):
                 == connector)
 
 
-class XIVVolumeDriverTest(test.TestCase):
-    """Test IBM XIV volume driver."""
+class XIVDS8KVolumeDriverTest(test.TestCase):
+    """Test IBM XIV and DS8K volume driver."""
 
     def setUp(self):
-        """Initialize IVM XIV Driver."""
-        super(XIVVolumeDriverTest, self).setUp()
+        """Initialize IBM XIV and DS8K Driver."""
+        super(XIVDS8KVolumeDriverTest, self).setUp()
 
         configuration = mox.MockObject(conf.Configuration)
         configuration.san_is_local = False
+        configuration.xiv_ds8k_proxy = \
+            'cinder.tests.test_xiv_ds8k.XIVDS8KFakeProxyDriver'
+        configuration.xiv_ds8k_connection_type = 'iscsi'
+        configuration.san_ip = FAKE
+        configuration.san_login = FAKE
+        configuration.san_clustername = FAKE
+        configuration.san_password = FAKE
         configuration.append_config_values(mox.IgnoreArg())
 
-        self.driver = xiv.XIVDriver(configuration=configuration)
+        self.driver = xiv_ds8k.XIVDS8KDriver(configuration=configuration)
 
-    def test_initialized_should_set_xiv_info(self):
-        """Test that the san flags are passed to the XIV proxy."""
+    def test_initialized_should_set_xiv_ds8k_info(self):
+        """Test that the san flags are passed to the IBM proxy."""
 
-        self.assertEquals(self.driver.xiv_proxy.xiv_info['xiv_user'],
-                          CONF.san_login)
-        self.assertEquals(self.driver.xiv_proxy.xiv_info['xiv_pass'],
-                          CONF.san_password)
-        self.assertEquals(self.driver.xiv_proxy.xiv_info['xiv_address'],
-                          CONF.san_ip)
-        self.assertEquals(self.driver.xiv_proxy.xiv_info['xiv_vol_pool'],
-                          CONF.san_clustername)
+        self.assertEquals(
+            self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_user'],
+            self.driver.configuration.san_login)
+        self.assertEquals(
+            self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_pass'],
+            self.driver.configuration.san_password)
+        self.assertEquals(
+            self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_address'],
+            self.driver.configuration.san_ip)
+        self.assertEquals(
+            self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_vol_pool'],
+            self.driver.configuration.san_clustername)
 
     def test_setup_should_fail_if_credentials_are_invalid(self):
-        """Test that the xiv_proxy validates credentials."""
+        """Test that the xiv_ds8k_proxy validates credentials."""
 
-        self.driver.xiv_proxy.xiv_info['xiv_user'] = 'invalid'
+        self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_user'] = 'invalid'
         self.assertRaises(exception.NotAuthorized, self.driver.do_setup, None)
 
     def test_setup_should_fail_if_connection_is_invalid(self):
-        """Test that the xiv_proxy validates connection."""
+        """Test that the xiv_ds8k_proxy validates connection."""
 
-        self.driver.xiv_proxy.xiv_info['xiv_address'] = 'invalid'
+        self.driver.xiv_ds8k_proxy.xiv_ds8k_info['xiv_ds8k_address'] = \
+            'invalid'
         self.assertRaises(exception.HostNotFound, self.driver.do_setup, None)
 
     def test_create_volume(self):
@@ -153,7 +168,7 @@ class XIVVolumeDriverTest(test.TestCase):
 
         self.driver.do_setup(None)
         self.driver.create_volume(VOLUME)
-        has_volume = self.driver.xiv_proxy.volume_exists(VOLUME)
+        has_volume = self.driver.xiv_ds8k_proxy.volume_exists(VOLUME)
         self.assertTrue(has_volume)
         self.driver.delete_volume(VOLUME)
 
@@ -161,7 +176,8 @@ class XIVVolumeDriverTest(test.TestCase):
         """Test the volume exist method with a volume that doesn't exist."""
 
         self.driver.do_setup(None)
-        self.assertFalse(self.driver.xiv_proxy.volume_exists({'name': FAKE}))
+        self.assertFalse(
+            self.driver.xiv_ds8k_proxy.volume_exists({'name': FAKE}))
 
     def test_delete_volume(self):
         """Verify that a volume is deleted."""
@@ -169,7 +185,7 @@ class XIVVolumeDriverTest(test.TestCase):
         self.driver.do_setup(None)
         self.driver.create_volume(VOLUME)
         self.driver.delete_volume(VOLUME)
-        has_volume = self.driver.xiv_proxy.volume_exists(VOLUME)
+        has_volume = self.driver.xiv_ds8k_proxy.volume_exists(VOLUME)
         self.assertFalse(has_volume)
 
     def test_delete_volume_should_fail_for_not_existing_volume(self):
@@ -179,7 +195,7 @@ class XIVVolumeDriverTest(test.TestCase):
         self.driver.delete_volume(VOLUME)
 
     def test_create_volume_should_fail_if_no_pool_space_left(self):
-        """Vertify that the xiv_proxy validates volume pool space."""
+        """Vertify that the xiv_ds8k_proxy validates volume pool space."""
 
         self.driver.do_setup(None)
         self.assertRaises(exception.VolumeBackendAPIException,
@@ -196,7 +212,7 @@ class XIVVolumeDriverTest(test.TestCase):
         self.driver.initialize_connection(VOLUME, CONNECTOR)
 
         self.assertTrue(
-            self.driver.xiv_proxy.is_volume_attached(VOLUME, CONNECTOR))
+            self.driver.xiv_ds8k_proxy.is_volume_attached(VOLUME, CONNECTOR))
 
         self.driver.terminate_connection(VOLUME, CONNECTOR)
         self.driver.delete_volume(VOLUME)
@@ -218,8 +234,9 @@ class XIVVolumeDriverTest(test.TestCase):
         self.driver.initialize_connection(VOLUME, CONNECTOR)
         self.driver.terminate_connection(VOLUME, CONNECTOR)
 
-        self.assertFalse(self.driver.xiv_proxy.is_volume_attached(VOLUME,
-                                                                  CONNECTOR))
+        self.assertFalse(self.driver.xiv_ds8k_proxy.is_volume_attached(
+            VOLUME,
+            CONNECTOR))
 
         self.driver.delete_volume(VOLUME)
 
diff --git a/cinder/volume/drivers/xiv.py b/cinder/volume/drivers/xiv.py
deleted file mode 100644 (file)
index cecc18b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2012 IBM Corp.
-# Copyright (c) 2012 OpenStack LLC.
-# 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.
-#
-# Authors:
-#   Erik Zaadi <erikz@il.ibm.com>
-#   Avishay Traeger <avishay@il.ibm.com>
-
-"""
-Volume driver for IBM XIV storage systems.
-"""
-
-from oslo.config import cfg
-
-from cinder import exception
-from cinder.openstack.common import importutils
-from cinder.openstack.common import log as logging
-from cinder.volume.drivers.san import san
-
-ibm_xiv_opts = [
-    cfg.StrOpt('xiv_proxy',
-               default='xiv_openstack.nova_proxy.XIVNovaProxy',
-               help='Proxy driver'),
-]
-
-CONF = cfg.CONF
-CONF.register_opts(ibm_xiv_opts)
-
-LOG = logging.getLogger('cinder.volume.xiv')
-
-
-class XIVDriver(san.SanISCSIDriver):
-    """IBM XIV volume driver."""
-
-    def __init__(self, *args, **kwargs):
-        """Initialize the driver."""
-
-        proxy = importutils.import_class(CONF.xiv_proxy)
-
-        self.xiv_proxy = proxy({"xiv_user": CONF.san_login,
-                                "xiv_pass": CONF.san_password,
-                                "xiv_address": CONF.san_ip,
-                                "xiv_vol_pool": CONF.san_clustername},
-                               LOG,
-                               exception)
-        san.SanISCSIDriver.__init__(self, *args, **kwargs)
-
-    def do_setup(self, context):
-        """Setup and verify IBM XIV storage connection."""
-
-        self.xiv_proxy.setup(context)
-
-    def ensure_export(self, context, volume):
-        """Ensure an export."""
-
-        return self.xiv_proxy.ensure_export(context, volume)
-
-    def create_export(self, context, volume):
-        """Create an export."""
-
-        return self.xiv_proxy.create_export(context, volume)
-
-    def create_volume(self, volume):
-        """Create a volume on the IBM XIV storage system."""
-
-        return self.xiv_proxy.create_volume(volume)
-
-    def delete_volume(self, volume):
-        """Delete a volume on the IBM XIV storage system."""
-
-        self.xiv_proxy.delete_volume(volume)
-
-    def remove_export(self, context, volume):
-        """Disconnect a volume from an attached instance."""
-
-        return self.xiv_proxy.remove_export(context, volume)
-
-    def initialize_connection(self, volume, connector):
-        """Map the created volume."""
-
-        return self.xiv_proxy.initialize_connection(volume, connector)
-
-    def terminate_connection(self, volume, connector, **kwargs):
-        """Terminate a connection to a volume."""
-
-        return self.xiv_proxy.terminate_connection(volume, connector)
-
-    def create_volume_from_snapshot(self, volume, snapshot):
-        """Create a volume from a snapshot."""
-
-        return self.xiv_proxy.create_volume_from_snapshot(volume,
-                                                          snapshot)
-
-    def create_snapshot(self, snapshot):
-        """Create a snapshot."""
-
-        return self.xiv_proxy.create_snapshot(snapshot)
-
-    def delete_snapshot(self, snapshot):
-        """Delete a snapshot."""
-
-        return self.xiv_proxy.delete_snapshot(snapshot)
-
-    def get_volume_stats(self, refresh=False):
-        """Get volume stats."""
-
-        return self.xiv_proxy.get_volume_stats(refresh)
diff --git a/cinder/volume/drivers/xiv_ds8k.py b/cinder/volume/drivers/xiv_ds8k.py
new file mode 100644 (file)
index 0000000..e1b4d9c
--- /dev/null
@@ -0,0 +1,157 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 IBM Corp.
+# Copyright (c) 2013 OpenStack LLC.
+# 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.
+#
+# Authors:
+#   Erik Zaadi <erikz@il.ibm.com>
+#   Avishay Traeger <avishay@il.ibm.com>
+
+"""
+Unified Volume driver for IBM XIV and DS8K Storage Systems.
+"""
+
+from oslo.config import cfg
+
+from cinder import exception
+from cinder.openstack.common import importutils
+from cinder.openstack.common import log as logging
+from cinder.volume.drivers.san import san
+
+xiv_ds8k_opts = [
+    cfg.StrOpt(
+        'xiv_ds8k_proxy',
+        default='xiv_ds8k_openstack.nova_proxy.XIVDS8KNovaProxy',
+        help='Proxy driver that connects to the IBM Storage Array'),
+    cfg.StrOpt(
+        'xiv_ds8k_connection_type',
+        default='iscsi',
+        help='Connection type to the IBM Storage Array'
+        ' (fibre_channel|iscsi)'),
+]
+
+CONF = cfg.CONF
+CONF.register_opts(xiv_ds8k_opts)
+
+LOG = logging.getLogger(__name__)
+
+
+class XIVDS8KDriver(san.SanDriver):
+    """Unified IBM XIV and DS8K volume driver."""
+
+    def __init__(self, *args, **kwargs):
+        """Initialize the driver."""
+
+        super(XIVDS8KDriver, self).__init__(*args, **kwargs)
+
+        self.configuration.append_config_values(xiv_ds8k_opts)
+
+        proxy = importutils.import_class(self.configuration.xiv_ds8k_proxy)
+
+        #NOTE: All Array specific configurations are prefixed with:
+        #"xiv_ds8k_array_"
+        #These additional flags should be specified in the cinder.conf
+        #preferably in each backend configuration.
+
+        self.xiv_ds8k_proxy = proxy(
+            {
+                "xiv_ds8k_user": self.configuration.san_login,
+                "xiv_ds8k_pass": self.configuration.san_password,
+                "xiv_ds8k_address": self.configuration.san_ip,
+                "xiv_ds8k_vol_pool": self.configuration.san_clustername,
+                "xiv_ds8k_connection_type":
+                self.configuration.xiv_ds8k_connection_type
+            },
+            LOG,
+            exception,
+            driver=self)
+
+    def do_setup(self, context):
+        """Setup and verify IBM XIV and DS8K Storage connection."""
+
+        self.xiv_ds8k_proxy.setup(context)
+
+    def ensure_export(self, context, volume):
+        """Ensure an export."""
+
+        return self.xiv_ds8k_proxy.ensure_export(context, volume)
+
+    def create_export(self, context, volume):
+        """Create an export."""
+
+        return self.xiv_ds8k_proxy.create_export(context, volume)
+
+    def create_volume(self, volume):
+        """Create a volume on the IBM XIV and DS8K Storage system."""
+
+        return self.xiv_ds8k_proxy.create_volume(volume)
+
+    def delete_volume(self, volume):
+        """Delete a volume on the IBM XIV and DS8K Storage system."""
+
+        self.xiv_ds8k_proxy.delete_volume(volume)
+
+    def remove_export(self, context, volume):
+        """Disconnect a volume from an attached instance."""
+
+        return self.xiv_ds8k_proxy.remove_export(context, volume)
+
+    def initialize_connection(self, volume, connector):
+        """Map the created volume."""
+
+        return self.xiv_ds8k_proxy.initialize_connection(volume, connector)
+
+    def terminate_connection(self, volume, connector, **kwargs):
+        """Terminate a connection to a volume."""
+
+        return self.xiv_ds8k_proxy.terminate_connection(volume, connector)
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        """Create a volume from a snapshot."""
+
+        return self.xiv_ds8k_proxy.create_volume_from_snapshot(
+            volume,
+            snapshot)
+
+    def create_snapshot(self, snapshot):
+        """Create a snapshot."""
+
+        return self.xiv_ds8k_proxy.create_snapshot(snapshot)
+
+    def delete_snapshot(self, snapshot):
+        """Delete a snapshot."""
+
+        return self.xiv_ds8k_proxy.delete_snapshot(snapshot)
+
+    def get_volume_stats(self, refresh=False):
+        """Get volume stats."""
+
+        return self.xiv_ds8k_proxy.get_volume_stats(refresh)
+
+    def create_cloned_volume(self, tgt_volume, src_volume):
+        """Create Cloned Volume."""
+
+        return self.xiv_ds8k_proxy.create_cloned_volume(tgt_volume, src_volume)
+
+    def extend_volume(self, volume, new_size):
+        """Extend Created Volume."""
+
+        self.xiv_ds8k_proxy.extend_volume(volume, new_size)
+
+    def migrate_volume(self, context, volume, host):
+        """Migrate the volume to the specified host."""
+
+        return self.xiv_ds8k_proxy.migrate_volume(context, volume, host)
index 7fb85514c4d55082579da54c8491c6f61719e8b3..6513c14c3b0c26544aa05e461adf5884e87ac768 100644 (file)
@@ -101,7 +101,9 @@ MAPPING = {
     'cinder.volume.windows.WindowsDriver':
     'cinder.volume.drivers.windows.WindowsDriver',
     'cinder.volume.xiv.XIVDriver':
-    'cinder.volume.drivers.xiv.XIVDriver',
+    'cinder.volume.drivers.xiv_ds8k.XIVDS8KDriver',
+    'cinder.volume.drivers.xiv.XIVDriver':
+    'cinder.volume.drivers.xiv_ds8k.XIVDS8KDriver',
     'cinder.volume.zadara.ZadaraVPSAISCSIDriver':
     'cinder.volume.drivers.zadara.ZadaraVPSAISCSIDriver',
     'cinder.volume.driver.ISCSIDriver':
index be17a234feefc8240ea766c0a3db6de5c8a1e3a0..547e107ae17a639bde30bc827213e544535186be 100644 (file)
 #fatal_exception_format_errors=false
 
 
-#
-# Options defined in cinder.flags
-#
-
-# Virtualization api connection type : libvirt, xenapi, or
-# fake (string value)
-#connection_type=<None>
-
-# The SQLAlchemy connection string used to connect to the
-# database (string value)
-#sql_connection=sqlite:///$state_path/$sqlite_db
-
-# Verbosity of SQL debugging information. 0=None,
-# 100=Everything (integer value)
-#sql_connection_debug=0
-
-# File name for the paste.deploy config for cinder-api (string
-# value)
-#api_paste_config=api-paste.ini
-
-# Directory where the cinder python module is installed
-# (string value)
-#pybasedir=/usr/lib/python/site-packages
-
-# Directory where cinder binaries are installed (string value)
-#bindir=$pybasedir/bin
-
-# Top-level directory for maintaining cinder's state (string
-# value)
-#state_path=$pybasedir
-
-# ip address of this host (string value)
-#my_ip=10.0.0.1
-
-# default glance hostname or ip (string value)
-#glance_host=$my_ip
-
-# default glance port (integer value)
-#glance_port=9292
-
-# A list of the glance api servers available to cinder
-# ([hostname|ip]:port) (list value)
-#glance_api_servers=$glance_host:$glance_port
-
-# Version of the glance api to use (integer value)
-#glance_api_version=1
-
-# Number retries when downloading an image from glance
-# (integer value)
-#glance_num_retries=0
-
-# Allow to perform insecure SSL (https) requests to glance
-# (boolean value)
-#glance_api_insecure=false
-
-# Whether to attempt to negotiate SSL layer compression
-# when using SSL (https) requests. Set to False to
-# disable SSL layer compression. In some cases disabling
-# this may improve data throughput, eg when high network
-# bandwidth is available and you are using already compressed
-# image formats such as qcow2 .
-#glance_api_ssl_compression=false
-
-# http/https timeout value for glance operations. If no value (None) is
-# supplied, the glanceclient default value is used.
-#glance_request_timeout=None
-
-# the topic scheduler nodes listen on (string value)
-#scheduler_topic=cinder-scheduler
-
-# the topic volume nodes listen on (string value)
-#volume_topic=cinder-volume
-
-# the topic volume backup nodes listen on (string value)
-#backup_topic=cinder-backup
-
-# Deploy v1 of the Cinder API.  (boolean value)
-#enable_v1_api=true
-
-# Deploy v2 of the Cinder API.  (boolean value)
-#enable_v2_api=true
-
-# whether to rate limit the api (boolean value)
-#api_rate_limit=true
-
-# Specify list of extensions to load when using
-# osapi_volume_extension option with
-# cinder.api.contrib.select_extensions (list value)
-#osapi_volume_ext_list=
-
-# osapi volume extension to load (multi valued)
-#osapi_volume_extension=cinder.api.contrib.standard_extensions
-
-# Base URL that will be presented to users in links to the
-# OpenStack Volume API (string value)
-#osapi_volume_base_URL=<None>
-
-# the maximum number of items returned in a single response
-# from a collection resource (integer value)
-#osapi_max_limit=1000
-
-# the filename to use with sqlite (string value)
-#sqlite_db=cinder.sqlite
-
-# If passed, use synchronous mode for sqlite (boolean value)
-#sqlite_synchronous=true
-
-# timeout before idle sql connections are reaped (integer
-# value)
-#sql_idle_timeout=3600
-
-# maximum db connection retries during startup. (setting -1
-# implies an infinite retry count) (integer value)
-#sql_max_retries=10
-
-# interval between retries of opening a sql connection
-# (integer value)
-#sql_retry_interval=10
-
-# full class name for the Manager for volume (string value)
-#volume_manager=cinder.volume.manager.VolumeManager
-
-# full class name for the Manager for volume backup (string
-# value)
-#backup_manager=cinder.backup.manager.BackupManager
-
-# full class name for the Manager for scheduler (string value)
-#scheduler_manager=cinder.scheduler.manager.SchedulerManager
-
-# Name of this node.  This can be an opaque identifier.  It is
-# not necessarily a hostname, FQDN, or IP address. (string
-# value)
-#host=cinder
-
-# availability zone of this node (string value)
-#storage_availability_zone=nova
-
-# Memcached servers or None for in process cache. (list value)
-#memcached_servers=<None>
-
-# default volume type to use (string value)
-#default_volume_type=<None>
-
-# time period to generate volume usages for.  Time period must
-# be hour, day, month or year (string value)
-#volume_usage_audit_period=month
-
-# Deprecated: command to use for running commands as root
-# (string value)
-#root_helper=sudo
-
-# Path to the rootwrap configuration file to use for running
-# commands as root (string value)
-#rootwrap_config=<None>
-
-# Whether to log monkey patching (boolean value)
-#monkey_patch=false
-
-# List of modules/decorators to monkey patch (list value)
-#monkey_patch_modules=
-
-# maximum time since last check-in for up service (integer
-# value)
-#service_down_time=60
-
-# The full class name of the volume API class to use (string
-# value)
-#volume_api_class=cinder.volume.api.API
-
-# The full class name of the volume backup API class (string
-# value)
-#backup_api_class=cinder.backup.api.API
-
-# The strategy to use for auth. Supports noauth, keystone, and
-# deprecated. (string value)
-#auth_strategy=noauth
-
-# A list of backend names to use. These backend names should
-# be backed by a unique [CONFIG] group with its options (list
-# value)
-#enabled_backends=<None>
-
-# Whether snapshots count against GigaByte quota (boolean
-# value)
-#no_snapshot_gb_quota=false
-
-
 #
 # Options defined in cinder.policy
 #
 # Options defined in cinder.quota
 #
 
-# If True, uses the default quota class for default quota, the
-# quota_* option will be deprecated if the default quota for
-# the related resource is set by default quota class (boolean value)
-#use_default_quota_class=true
-
 # number of volumes allowed per project (integer value)
 #quota_volumes=10
 
 # default driver to use for quota checks (string value)
 #quota_driver=cinder.quota.DbQuotaDriver
 
+# whether to use default quota class for default quota
+# (boolean value)
+#use_default_quota_class=true
+
 
 #
 # Options defined in cinder.service
 #ssl_key_file=<None>
 
 
+#
+# Options defined in cinder.api.common
+#
+
+# the maximum number of items returned in a single response
+# from a collection resource (integer value)
+#osapi_max_limit=1000
+
+# Base URL that will be presented to users in links to the
+# OpenStack Volume API (string value)
+#osapi_volume_base_URL=<None>
+
+
 #
 # Options defined in cinder.api.middleware.auth
 #
 #osapi_max_request_body_size=114688
 
 
+#
+# Options defined in cinder.backup.drivers.ceph
+#
+
+# Ceph config file to use. (string value)
+#backup_ceph_conf=/etc/ceph/ceph.conf
+
+# the Ceph user to connect with (string value)
+#backup_ceph_user=cinder
+
+# the chunk size in bytes that a backup will be broken into
+# before transfer to backup store (integer value)
+#backup_ceph_chunk_size=134217728
+
+# the Ceph pool to backup to (string value)
+#backup_ceph_pool=backups
+
+# RBD stripe unit to use when creating a backup image (integer
+# value)
+#backup_ceph_stripe_unit=0
+
+# RBD stripe count to use when creating a backup image
+# (integer value)
+#backup_ceph_stripe_count=0
+
+
+#
+# Options defined in cinder.backup.drivers.swift
+#
+
+# The URL of the Swift endpoint (string value)
+#backup_swift_url=http://localhost:8080/v1/AUTH_
+
+# Swift authentication mechanism (string value)
+#backup_swift_auth=per_user
+
+# Swift user name (string value)
+#backup_swift_user=<None>
+
+# Swift key for authentication (string value)
+#backup_swift_key=<None>
+
+# The default Swift container to use (string value)
+#backup_swift_container=volumebackups
+
+# The size in bytes of Swift backup objects (integer value)
+#backup_swift_object_size=52428800
+
+# The number of retries to make for Swift operations (integer
+# value)
+#backup_swift_retry_attempts=3
+
+# The backoff time in seconds between Swift retries (integer
+# value)
+#backup_swift_retry_backoff=2
+
+# Compression algorithm (None to disable) (string value)
+#backup_compression_algorithm=zlib
+
+
 #
 # Options defined in cinder.backup.manager
 #
 
-# Service to use for backups. (string value)
+# Driver to use for backups. (string value)
 #backup_driver=cinder.backup.drivers.swift
 
 
-#
-# Options defined in cinder.backup.drivers.swift
-#
+#
+# Options defined in cinder.brick.initiator.connector
+#
+
+# The maximum number of times to rescan targetsto find volume
+# (integer value)
+#num_volume_device_scan_tries=3
+
+
+#
+# Options defined in cinder.brick.iscsi.iscsi
+#
+
+# iscsi target user-land tool to use (string value)
+#iscsi_helper=tgtadm
+
+# Volume configuration file storage directory (string value)
+#volumes_dir=$state_path/volumes
+
+# IET configuration file (string value)
+#iet_conf=/etc/iet/ietd.conf
+
+# Comma-separatd list of initiator IQNs allowed to connect to
+# the iSCSI target. (From Nova compute nodes.) (string value)
+#lio_initiator_iqns=
+
+# Sets the behavior of the iSCSI target to either perform
+# blockio or fileio optionally, auto can be set and Cinder
+# will autodetect type of backing device (string value)
+#iscsi_iotype=fileio
+
+
+#
+# Options defined in cinder.brick.iser.iser
+#
+
+# iser target user-land tool to use (string value)
+#iser_helper=tgtadm
+
+# Volume configuration file storage directory (string value)
+#volumes_dir=$state_path/volumes
+
+
+#
+# Options defined in cinder.common.config
+#
+
+# Virtualization api connection type : libvirt, xenapi, or
+# fake (string value)
+#connection_type=<None>
+
+# File name for the paste.deploy config for cinder-api (string
+# value)
+#api_paste_config=api-paste.ini
+
+# Directory where the cinder python module is installed
+# (string value)
+#pybasedir=/usr/lib/python/site-packages
+
+# Directory where cinder binaries are installed (string value)
+#bindir=$pybasedir/bin
+
+# Top-level directory for maintaining cinder's state (string
+# value)
+#state_path=$pybasedir
+
+# ip address of this host (string value)
+#my_ip=10.0.0.1
+
+# default glance hostname or ip (string value)
+#glance_host=$my_ip
+
+# default glance port (integer value)
+#glance_port=9292
+
+# A list of the glance api servers available to cinder
+# ([hostname|ip]:port) (list value)
+#glance_api_servers=$glance_host:$glance_port
+
+# Version of the glance api to use (integer value)
+#glance_api_version=1
+
+# Number retries when downloading an image from glance
+# (integer value)
+#glance_num_retries=0
+
+# Allow to perform insecure SSL (https) requests to glance
+# (boolean value)
+#glance_api_insecure=false
+
+# Whether to attempt to negotiate SSL layer compression when
+# using SSL (https) requests. Set to False to disable SSL
+# layer compression. In some cases disabling this may improve
+# data throughput, eg when high network bandwidth is available
+# and you are using already compressed image formats such as
+# qcow2 . (boolean value)
+#glance_api_ssl_compression=false
+
+# http/https timeout value for glance operations. If no value
+# (None) is supplied here, the glanceclient default value is
+# used. (integer value)
+#glance_request_timeout=<None>
+
+# the topic scheduler nodes listen on (string value)
+#scheduler_topic=cinder-scheduler
+
+# the topic volume nodes listen on (string value)
+#volume_topic=cinder-volume
+
+# the topic volume backup nodes listen on (string value)
+#backup_topic=cinder-backup
+
+# Deploy v1 of the Cinder API.  (boolean value)
+#enable_v1_api=true
+
+# Deploy v2 of the Cinder API.  (boolean value)
+#enable_v2_api=true
+
+# whether to rate limit the api (boolean value)
+#api_rate_limit=true
+
+# Specify list of extensions to load when using
+# osapi_volume_extension option with
+# cinder.api.contrib.select_extensions (list value)
+#osapi_volume_ext_list=
+
+# osapi volume extension to load (multi valued)
+#osapi_volume_extension=cinder.api.contrib.standard_extensions
+
+# full class name for the Manager for volume (string value)
+#volume_manager=cinder.volume.manager.VolumeManager
+
+# full class name for the Manager for volume backup (string
+# value)
+#backup_manager=cinder.backup.manager.BackupManager
+
+# full class name for the Manager for scheduler (string value)
+#scheduler_manager=cinder.scheduler.manager.SchedulerManager
+
+# Name of this node.  This can be an opaque identifier.  It is
+# not necessarily a hostname, FQDN, or IP address. (string
+# value)
+#host=cinder
+
+# availability zone of this node (string value)
+#storage_availability_zone=nova
+
+# Memcached servers or None for in process cache. (list value)
+#memcached_servers=<None>
+
+# default volume type to use (string value)
+#default_volume_type=<None>
+
+# time period to generate volume usages for.  Time period must
+# be hour, day, month or year (string value)
+#volume_usage_audit_period=month
+
+# Deprecated: command to use for running commands as root
+# (string value)
+#root_helper=sudo
+
+# Path to the rootwrap configuration file to use for running
+# commands as root (string value)
+#rootwrap_config=<None>
+
+# Whether to log monkey patching (boolean value)
+#monkey_patch=false
 
-# The URL of the Swift endpoint (string value)
-#backup_swift_url=http://localhost:8080/v1/AUTH_
+# List of modules/decorators to monkey patch (list value)
+#monkey_patch_modules=
 
-# The Swift authentication mechanism
-#  - Set to "per_user": uses keystone authentication for every user
-#  - Set to "single_user": uses one user+pw for all backups
-#backup_swift_auth=per_user
+# maximum time since last check-in for up service (integer
+# value)
+#service_down_time=60
 
-# The Swift user name (use only if backup_swift_auth is set to single_user)
-#backup_swift_user=username
+# The full class name of the volume API class to use (string
+# value)
+#volume_api_class=cinder.volume.api.API
 
-# The Swift password (use only if backup_swift_auth is set to single_user)
-#backup_swift_key=his9ZxhZuabG1rqv3vjRqOXf2/iSg4KFUZEp3net
+# The full class name of the volume backup API class (string
+# value)
+#backup_api_class=cinder.backup.api.API
 
-# The default Swift container to use (string value)
-#backup_swift_container=volumebackups
+# The strategy to use for auth. Supports noauth, keystone, and
+# deprecated. (string value)
+#auth_strategy=noauth
 
-# The size in bytes of Swift backup objects (integer value)
-#backup_swift_object_size=52428800
+# A list of backend names to use. These backend names should
+# be backed by a unique [CONFIG] group with its options (list
+# value)
+#enabled_backends=<None>
 
-# The number of retries to make for Swift operations (integer
+# Whether snapshots count against GigaByte quota (boolean
 # value)
-#backup_swift_retry_attempts=3
+#no_snapshot_gb_quota=false
 
-# The backoff time in seconds between Swift retries (integer
+# The full class name of the volume transfer API class (string
 # value)
-#backup_swift_retry_backoff=2
+#transfer_api_class=cinder.transfer.api.API
 
-# Compression algorithm (None to disable) (string value)
-#backup_compression_algorithm=zlib
+
+#
+# Options defined in cinder.compute
+#
+
+# The full class name of the compute API class to use (string
+# value)
+#compute_api_class=cinder.compute.nova.API
 
 
 #
-# Options defined in cinder.backup.services.ceph
+# Options defined in cinder.compute.nova
 #
 
-# The configration file to use for the backup cluster (string value)
-#backup_ceph_conf=/etc/ceph/ceph.conf
+# Info to match when looking for nova in the service catalog.
+# Format is : separated values of the form:
+# <service_type>:<service_name>:<endpoint_type> (string value)
+#nova_catalog_info=compute:nova:publicURL
 
-# The Ceph user with permissions to access the backup pool (string value)
-#backup_ceph_user=cinder
+# Override service catalog lookup with template for nova
+# endpoint e.g. http://localhost:8774/v2/%(tenant_id)s (string
+# value)
+#nova_endpoint_template=<None>
 
-# The RADOS pool in which volume backups are stored (string value)
-#backup_ceph_pool=backups
+# region name of this node (string value)
+#os_region_name=<None>
 
-# The RBD stripe unit to use when creating a backup image (integer value)
-#backup_ceph_stripe_unit=0
+# Location of ca certicates file to use for nova client
+# requests. (string value)
+#nova_ca_certificates_file=<None>
 
-# The RBD stripe count to use when creating a backup image (integer value)
-#backup_ceph_stripe_count=0
+# Allow to perform insecure SSL requests to nova (boolean
+# value)
+#nova_api_insecure=false
 
-# The chunk size used to break up the data when transferring to Ceph object
-# store.
-#backup_ceph_chunk_size=134217728
 
 #
 # Options defined in cinder.db.api
 #image_conversion_dir=/tmp
 
 
+#
+# Options defined in cinder.keymgr
+#
+
+# The full class name of the key manager API class (string
+# value)
+#keymgr_api_class=cinder.keymgr.not_implemented_key_mgr.NotImplementedKeyManager
+
+
+#
+# Options defined in cinder.openstack.common.db.api
+#
+
+# The backend to use for db (string value)
+#backend=sqlalchemy
+
+# Enable the experimental use of thread pooling for all DB API
+# calls (boolean value)
+#use_tpool=false
+
+
+#
+# Options defined in cinder.openstack.common.db.sqlalchemy.session
+#
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+#connection=sqlite:////Users/erikzaadi/Storage/Code/Opensource/other/Openstack/cinder/cinder/openstack/common/db/$sqlite_db
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+#max_pool_size=5
+
+# maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+#max_retries=10
+
+# interval between retries of opening a sql connection
+# (integer value)
+#retry_interval=10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+#connection_debug=0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+#connection_trace=false
+
+# the filename to use with sqlite (string value)
+#sqlite_db=cinder.sqlite
+
+# If true, use synchronous mode for sqlite (boolean value)
+#sqlite_synchronous=true
+
+
+#
+# Options defined in cinder.openstack.common.eventlet_backdoor
+#
+
+# port for eventlet backdoor to listen (integer value)
+#backdoor_port=<None>
+
+
 #
 # Options defined in cinder.openstack.common.lockutils
 #
 # Log output to standard error (boolean value)
 #use_stderr=true
 
-# Default file mode used when creating log files (string
-# value)
-#logfile_mode=0644
-
 # format string to use for log messages with context (string
 # value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
 
 # format string to use for log messages without context
 # (string value)
 #log_config=<None>
 
 # A logging.Formatter log message format string which may use
-# any of the available logging.LogRecord attributes. Default:
-# %(default)s (string value)
-#log_format=%(asctime)s %(levelname)8s [%(name)s] %(message)s
+# any of the available logging.LogRecord attributes. This
+# option is deprecated.  Please use
+# logging_context_format_string and
+# logging_default_format_string instead. (string value)
+#log_format=<None>
 
 # Format string for %%(asctime)s in log records. Default:
 # %(default)s (string value)
 #log_date_format=%Y-%m-%d %H:%M:%S
 
-# (Optional) Name of log file to output to. If not set,
-# logging will go to stdout. (string value)
+# (Optional) Name of log file to output to. If no default is
+# set, logging will go to stdout. (string value)
 #log_file=<None>
 
-# (Optional) The directory to keep log files in (will be
-# prepended to --log-file) (string value)
+# (Optional) The base directory used for relative --log-file
+# paths (string value)
 #log_dir=<None>
 
 # Use syslog for logging. (boolean value)
 
 # Default publisher_id for outgoing notifications (string
 # value)
-#default_publisher_id=$host
+#default_publisher_id=<None>
 
 
 #
 #topics=notifications
 
 
+#
+# Options defined in cinder.openstack.common.periodic_task
+#
+
+# Some periodic tasks can be run in a separate process. Should
+# we run them here? (boolean value)
+#run_external_periodic_tasks=true
+
+
 #
 # Options defined in cinder.openstack.common.rpc
 #
 # Qpid broker hostname (string value)
 #qpid_hostname=localhost
 
-# Qpid broker port (string value)
+# Qpid broker port (integer value)
 #qpid_port=5672
 
 # Qpid HA cluster host:port pairs (list value)
 #capacity_weight_multiplier=1.0
 
 
+#
+# Options defined in cinder.transfer.api
+#
+
+# The number of characters in the salt. (integer value)
+#volume_transfer_salt_length=8
+
+# The number of characters in the autogenerated auth key.
+# (integer value)
+#volume_transfer_key_length=16
+
+
 #
 # Options defined in cinder.volume.api
 #
 # resides (boolean value)
 #snapshot_same_host=true
 
+# Ensure that the new volumes are the same AZ as snapshot or
+# source volume (boolean value)
+#cloned_volume_same_az=true
+
 
 #
 # Options defined in cinder.volume.driver
 # value)
 #reserved_percentage=0
 
-# number of times to rescan iSCSI target to find volume
-# (integer value)
-#num_iscsi_scan_tries=3
-
-# Number of iscsi target ids per host (integer value)
+# The maximum number of iscsi target ids per host (integer
+# value)
 #iscsi_num_targets=100
 
 # prefix for iscsi volumes (string value)
 #iscsi_target_prefix=iqn.2010-10.org.openstack:
 
-# The port that the iSCSI daemon is listening on (string
+# The IP address that the iSCSI daemon is listening on (string
 # value)
 #iscsi_ip_address=$my_ip
 
 # value)
 #iscsi_port=3260
 
-# number of times to rescan iSER target to find volume
-# (integer value)
+# The maximum number of times to rescan iSER targetto find
+# volume (integer value)
 #num_iser_scan_tries=3
 
-# Number of iser target ids per host (integer value)
+# The maximum number of iser target ids per host (integer
+# value)
 #iser_num_targets=100
 
 # prefix for iser volumes (string value)
 #iser_target_prefix=iqn.2010-10.org.iser.openstack:
 
-# The port that the iSER daemon is listening on (string
+# The IP address that the iSER daemon is listening on (string
 # value)
 #iser_ip_address=$my_ip
 
 # value)
 #volume_backend_name=<None>
 
-# Do we attach/detach volumes in cinder using multipath
-# for volume to image and image to volume transfers?
-# (boolean value)
-#use_multipath_for_image_xfer=False
+# Do we attach/detach volumes in cinder using multipath for
+# volume to image and image to volume transfers? (boolean
+# value)
+#use_multipath_for_image_xfer=false
+
+# Method used to wipe old voumes (valid options are: none,
+# zero, shred) (string value)
+#volume_clear=zero
+
+# Size in MiB to wipe at start of old volumes. 0 => all
+# (integer value)
+#volume_clear_size=0
 
 
 #
 # List of all available devices (list value)
 #available_devices=
 
-# Size in MiB to wipe at start of old volumes. 0 => all
-# (integer value)
-#volume_clear_size=0
-
-# Method used to wipe old volumes (valid options are: none,
-# zero, shred) (string value)
-#volume_clear=zero
-
 
 #
 # Options defined in cinder.volume.drivers.coraid
 # User name to connect to Coraid ESM (string value)
 #coraid_user=admin
 
-# Group name of coraid_user (must have admin privilege)
-# (boolean value)
-#coraid_group=false
+# Name of group on Coraid ESM to which coraid_user belongs
+# (must have admin privilege) (string value)
+#coraid_group=admin
 
 # Password to connect to Coraid ESM (string value)
 #coraid_password=password
 # value)
 #glusterfs_shares_config=/etc/cinder/glusterfs_shares
 
-# Base dir where gluster expected to be mounted (string value)
+# Base dir containing mount points for gluster shares (string
+# value)
 #glusterfs_mount_point_base=$state_path/mnt
 
 # Use du or df for free space calculation (string value)
 #glusterfs_sparsed_volumes=true
 
 
+#
+# Options defined in cinder.volume.drivers.gpfs
+#
+
+# Path to the directory on GPFS mount point where volumes are
+# stored (string value)
+#gpfs_mount_point_base=<None>
+
+# Path to GPFS Glance repository as mounted on Nova nodes
+# (string value)
+#gpfs_images_dir=<None>
+
+# Set this if Glance image repo is on GPFS as well so that the
+# image bits can be transferred efficiently between Glance and
+# Cinder.  Valid values are copy or copy_on_write. copy
+# performs a full copy of the image, copy_on_write efficiently
+# shares unmodified blocks of the image. (string value)
+#gpfs_images_share_mode=<None>
+
+# A lengthy chain of copy-on-write snapshots or clones could
+# have impact on performance.  This option limits the number
+# of indirections required to reach a specific block. 0
+# indicates unlimited. (integer value)
+#gpfs_max_clone_depth=0
+
+# Create volumes as sparse files which take no space. If set
+# to False volume is created as regular file. In this case
+# volume creation may take a significantly longer time.
+# (boolean value)
+#gpfs_sparse_volumes=true
+
+
+#
+# Options defined in cinder.volume.drivers.hds.hds
+#
+
+# configuration file for HDS cinder plugin for HUS (string
+# value)
+#hds_cinder_config_file=/opt/hds/hus/cinder_hus_conf.xml
+
+
 #
 # Options defined in cinder.volume.drivers.huawei.huawei_iscsi
 #
 # value)
 #volume_group=cinder-volumes
 
-# Method used to wipe old volumes (valid options are: none,
-# zero, shred) (string value)
-#volume_clear=zero
-
-# Size in MiB to wipe at start of old volumes. 0 => all
-# (integer value)
-#volume_clear_size=0
-
-# The default block size used when clearing volumes (string
-# value)
-#volume_dd_blocksize=1M
-
 # Size of thin provisioning pool (None uses entire cinder VG)
 # (string value)
 #pool_size=<None>
 # value)
 #lvm_mirrors=0
 
+# Type of LVM volumes to deploy; (default or thin) (string
+# value)
+#lvm_type=default
+
 
 #
-# Options defined in cinder.volume.drivers.netapp.iscsi
+# Options defined in cinder.volume.drivers.netapp.options
 #
 
-# URL of the WSDL file for the DFM/Webservice server (string
-# value)
-#netapp_wsdl_url=<None>
+# Vfiler to use for provisioning (string value)
+#netapp_vfiler=<None>
 
-# User name for the DFM/Controller server (string value)
+# User name for the storage controller (string value)
 #netapp_login=<None>
 
-# Password for the DFM/Controller server (string value)
+# Password for the storage controller (string value)
 #netapp_password=<None>
 
-# Hostname for the DFM/Controller server (string value)
-#netapp_server_hostname=<None>
-
-# Port number for the DFM/Controller server (integer value)
-#netapp_server_port=8088
-
-# Storage service to use for provisioning (when
-# volume_type=None) (string value)
-#netapp_storage_service=<None>
-
-# Prefix of storage service name to use for provisioning
-# (volume_type name will be appended) (string value)
-#netapp_storage_service_prefix=<None>
-
-# Vfiler to use for provisioning (string value)
-#netapp_vfiler=<None>
-
-# Transport type protocol (string value)
-#netapp_transport_type=http
-
 # Cluster vserver to use for provisioning (string value)
 #netapp_vserver=openstack
 
+# Host name for the storage controller (string value)
+#netapp_server_hostname=<None>
+
+# Port number for the storage controller (integer value)
+#netapp_server_port=80
+
 # Volume size multiplier to ensure while creation (floating
 # point value)
 #netapp_size_multiplier=1.2
 
-# Comma separated eligible volumes for provisioning on 7 mode
-# (string value)
-#netapp_volume_list=
-
-
-#
-# Options defined in cinder.volume.drivers.netapp.nfs
-#
-
-# Does snapshot creation call returns immediately (integer
+# Comma separated volumes to be used for provisioning (string
 # value)
-#synchronous_snapshot_create=0
+#netapp_volume_list=<None>
 
-# URL of the WSDL file for the DFM/Webservice server (string
-# value)
-#netapp_wsdl_url=<None>
-
-# User name for the DFM/Controller server (string value)
-#netapp_login=<None>
-
-# Password for the DFM/Controller server (string value)
-#netapp_password=<None>
-
-# Hostname for the DFM/Controller server (string value)
-#netapp_server_hostname=<None>
-
-# Port number for the DFM/Controller server (integer value)
-#netapp_server_port=8088
+# Storage family type. (string value)
+#netapp_storage_family=ontap_cluster
 
-# Storage service to use for provisioning (when
-# volume_type=None) (string value)
-#netapp_storage_service=<None>
-
-# Prefix of storage service name to use for provisioning
-# (volume_type name will be appended) (string value)
-#netapp_storage_service_prefix=<None>
-
-# Vfiler to use for provisioning (string value)
-#netapp_vfiler=<None>
+# Storage protocol type. (string value)
+#netapp_storage_protocol=<None>
 
 # Transport type protocol (string value)
 #netapp_transport_type=http
 
-# Cluster vserver to use for provisioning (string value)
-#netapp_vserver=openstack
-
-# Volume size multiplier to ensure while creation (floating
-# point value)
-#netapp_size_multiplier=1.2
-
-# Comma separated eligible volumes for provisioning on 7 mode
-# (string value)
-#netapp_volume_list=
-
 
 #
-# Options defined in cinder.volume.drivers.nexenta.volume.options
+# Options defined in cinder.volume.drivers.nexenta.options
 #
 
 # HTTP port to connect to Nexenta REST API server (integer
 # File with the list of available nfs shares (string value)
 #nfs_shares_config=/etc/cinder/nfs_shares
 
-# Base dir where nfs expected to be mounted (string value)
+# Base dir containing mount points for nfs shares (string
+# value)
 #nfs_mount_point_base=$state_path/mnt
 
 # Create volumes as sparsed files which take no space.If set
 #nfs_mount_options=<None>
 
 # Percent of ACTUAL usage of the underlying volume before no
-# new volumes can be allocated to the volume destination. (floating point
-# value)
+# new volumes can be allocated to the volume destination.
+# (floating point value)
 #nfs_used_ratio=0.95
 
 # This will compare the allocated to available space on the
 # Options defined in cinder.volume.drivers.rbd
 #
 
-# path to the ceph configuration file to use (string)
-#rbd_ceph_conf=/etc/ceph/ceph.conf
-
 # the RADOS pool in which rbd volumes are stored (string
 # value)
 #rbd_pool=rbd
 
-# the RADOS client name for accessing rbd volumes (string
-# value)
+# the RADOS client name for accessing rbd volumes - only set
+# when using cephx authentication (string value)
 #rbd_user=<None>
 
+# path to the ceph configuration file to use (string value)
+#rbd_ceph_conf=
+
+# flatten volumes created from snapshots to remove dependency
+# (boolean value)
+#rbd_flatten_volume_from_snapshot=false
+
 # the libvirt uuid of the secret for the rbd_uservolumes
 # (string value)
 #rbd_secret_uuid=<None>
 # does not write them directly to the volume (string value)
 #volume_tmp_dir=<None>
 
-# Flatten images created from snapshots (to remove dependency)
-#rbd_flatten_volume_from_snapshot=False
 
 #
 # Options defined in cinder.volume.drivers.san.hp.hp_3par_common
 # 3PAR Super user password (string value)
 #hp3par_password=
 
-# The 3par domain name to use (string value)-DEPRECATED
-#hp3par_domain=OpenStack
+# This option is DEPRECATED and no longer used. The 3par
+# domain name to use. (string value)
+#hp3par_domain=<None>
 
 # The CPG to use for volume creation (string value)
 #hp3par_cpg=OpenStack
 # Enable HTTP debugging to 3PAR (boolean value)
 #hp3par_debug=false
 
-#List of target iSCSI addresses to use (list value)
+# List of target iSCSI addresses to use. (list value)
 #hp3par_iscsi_ips=
 
 
 # Options defined in cinder.volume.drivers.solidfire
 #
 
-# Set 512 byte emulation on volume creation (boolean value)
+# Set 512 byte emulation on volume creation (boolean value)
 #sf_emulate_512=true
 
 # Allow tenants to specify QOS on create (boolean value)
 #sf_allow_tenant_qos=false
 
-# Create solidfire accounts with this prefix. Defaults to current
-# hostname (string value)
-#sf_account_prefix=
+# Create SolidFire accounts with this prefix (string value)
+#sf_account_prefix=cinder
 
-# Solidfire API port. Useful if the device is behind a proxy (integer value)
+# SolidFire API port. Useful if the device api is behind a
+# proxy on a different port. (integer value)
 #sf_api_port=443
 
 
 # Connect with multipath (currently FC-only) (boolean value)
 #storwize_svc_multipath_enabled=false
 
+# Allows vdisk to multi host mapping (boolean value)
+#storwize_svc_multihostmap_enabled=true
+
 
 #
 # Options defined in cinder.volume.drivers.windows
 
 
 #
-# Options defined in cinder.volume.drivers.xiv
+# Options defined in cinder.volume.drivers.xiv_ds8k
 #
 
-# Proxy driver (string value)
-#xiv_proxy=xiv_openstack.nova_proxy.XIVNovaProxy
+# Proxy driver that connects to the IBM Storage Array (string
+# value)
+#xiv_ds8k_proxy=xiv_ds8k_openstack.nova_proxy.XIVDS8KNovaProxy
+
+# Connection type to the IBM Storage Array
+# (fibre_channel|iscsi) (string value)
+#xiv_ds8k_connection_type=iscsi
 
 
 #
 #zadara_vpsa_allow_nonexistent_delete=true
 
 
-#
-# options for cinder.volumes.drivers.hds.hds.HUSDriver
-#
-
-# default configuration file location/name is (string) :
-# hds_cinder_config_file=/opt/hds/hus/cinder_hds_conf.xml
-
-
-#
-# Options defined in cinder.volume.iscsi
-#
-
-# iscsi target user-land tool to use (string value)
-#iscsi_helper=tgtadm
-
-# iser target user-land tool to use (string value)
-#iser_helper=tgtadm
-
-# Volume configuration file storage directory (string value)
-#volumes_dir=$state_path/volumes
-
-# IET configuration file (string value)
-#iet_conf=/etc/iet/ietd.conf
-
-# Comma-separatd list of initiator IQNs allowed to connect to
-# the iSCSI target. (From Nova compute nodes.) (string value)
-#lio_initiator_iqns=
-
-# The type of IO the iSCSI target will issue to the backend storage.
-# This option only currently works with IET.
-# Valid settings are 'blockio','fileio' and 'auto' which will autodetect
-# the type of file provided to the target. (string value)
-# iscsi_iotype=fileio
-
 #
 # Options defined in cinder.volume.manager
 #
 
 # Driver to use for volume creation (string value)
-#volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver,cinder.volume.drivers.lvm.LVMISERDriver
+#volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
 
-#
-# Options defined in cinder.volume.drivers.gpfs
-#
-
-# Path to the directory on GPFS mount point where
-# volumes are stored (string value)
-# gpfs_mount_point_base=$state_path/mnt
+# Timeout for creating the volume to migrate to when
+# performing volume migration (seconds) (integer value)
+#migration_create_volume_timeout_secs=300
 
-# Path to GPFS Glance repository as mounted on
-# Nova nodes (string value)
-# gpfs_images_dir=None
 
-# Set this if Glance image repo is on GPFS as well
-# so that the image bits can be transferred efficiently
-# between Glance and Cinder.  Valid values are copy or
-# copy_on_write. copy performs a full copy of the image,
-# copy_on_write efficiently shares unmodified blocks of
-# the image. (string value)
-# gpfs_images_share_mode=None
+#
+# Options defined in cinder.volume.utils
+#
 
-# A lengthy chain of copy-on-write snapshots or clones
-# could have impact on performance.  This option limits
-# the number of indirections required to reach a specific
-# block. 0 indicates unlimited. (integer value)
-# gpfs_max_clone_depth=0
+# The default block size used when copying/clearing volumes
+# (string value)
+#volume_dd_blocksize=1M
 
-# Create volumes as sparse files which take no space.
-# If set to False volume is created as regular file.
-# In this case volume creation may take a significantly
-# longer time. (boolean value)
-# gpfs_sparse_volumes=True
 
-# Total option count: 305
+# Total option count: 337