24465600 Update Cinder for the Mitaka release
authorLaszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:41 -0700
changeset 6849 f9a2279efa0d
parent 6848 8e252a37ed0d
child 6850 f8d3bc724af7
24465600 Update Cinder for the Mitaka release
components/openstack/cinder/Makefile
components/openstack/cinder/cinder.p5m
components/openstack/cinder/files/cinder-api
components/openstack/cinder/files/cinder-api.stencil
components/openstack/cinder/files/cinder-api.xml
components/openstack/cinder/files/cinder-upgrade
components/openstack/cinder/files/cinder-volume-setup
components/openstack/cinder/files/cinder.conf
components/openstack/cinder/files/cinder.exec_attr
components/openstack/cinder/files/solaris/nfs.py
components/openstack/cinder/files/solaris/solarisfc.py
components/openstack/cinder/files/solaris/solarisiscsi.py
components/openstack/cinder/files/solaris/zfs.py
components/openstack/cinder/files/zfssa/zfssaiscsi.py
components/openstack/cinder/patches/01-requirements.patch
components/openstack/cinder/patches/02-nopycrypto.patch
components/openstack/cinder/patches/03-emc_vmax_iscsi.patch
components/openstack/cinder/patches/04-volume-backup.patch
components/openstack/cinder/patches/05-launchpad-1479342.patch
components/openstack/cinder/patches/05-opts.patch
components/openstack/cinder/patches/06-enable-dd.patch
components/openstack/cinder/patches/07-entry_points.patch
components/openstack/cinder/patches/07-launchpad-1460156.patch
components/openstack/cinder/patches/08-zfssa-target_lun.patch
components/openstack/cinder/patches/09-nfs-mount.patch
components/openstack/cinder/patches/10-remotefs.patch
components/openstack/cinder/patches/11-nfs-backup.patch
components/openstack/cinder/patches/12-generate_sample.patch
components/openstack/cinder/patches/13-launchpad-1482873.patch
components/openstack/cinder/patches/14-launchpad-1499921.patch
components/openstack/cinder/patches/15-mysql_cluster_support.patch
components/openstack/cinder/patches/15-zfssa-iscsi-config.patch
--- a/components/openstack/cinder/Makefile	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/Makefile	Wed Sep 07 14:48:41 2016 -0700
@@ -26,20 +26,19 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cinder
-COMPONENT_CODENAME=	kilo
-COMPONENT_VERSION=	2015.1.2
-COMPONENT_BE_VERSION=	2015.1
+COMPONENT_CODENAME=	mitaka
+COMPONENT_VERSION=	8.0.0
+COMPONENT_BE_VERSION=	2016.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:8baa42a3008b0bb0870df678237c0d06ab8ee148b3bf5c00c6b95cfe05c52333
-COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
+    sha256:bd05f3c0b7b2ae098284c062d20230aecdaa47ed623cb79907c39dd1e28f8a2e
+COMPONENT_ARCHIVE_URL=	https://tarballs.openstack.org/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
 COMPONENT_SIG_URL=	$(COMPONENT_ARCHIVE_URL).asc
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUGDB=	service/cinder
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
 
-TPNO=			25784
+TPNO=			30298
 
 PKG_VARS +=		COMPONENT_BE_VERSION
 
@@ -56,39 +55,31 @@
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
 PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
-COMPONENT_POST_UNPACK_ACTION += \
-    $(MKDIR) $(SOURCE_DIR)/cinder/volume/drivers/zfssa; \
-    $(CP) files/zfssa/zfssaiscsi.py \
-	$(SOURCE_DIR)/cinder/volume/drivers/zfssa
-
 #
-# cinder-api, cinder-backup, cinder-scrubber, and cinder-volume depend
-# on cinder-db, and cinder-upgrade so copy all of the service
-# manifests into the proto directory for pkgdepend(1) to find.
+# cinder-api, cinder-backup, cinder-scheduler, and cinder-volume depend
+# on cinder-db and cinder-upgrade, so copy all of the service manifests
+# into the proto directory for pkgdepend(1) to find.
 #
 COMPONENT_POST_INSTALL_ACTION += \
     ($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
      $(CP) \
-         files/cinder-api.xml \
-         files/cinder-backup.xml \
-         files/cinder-db.xml \
-         files/cinder-scheduler.xml \
-         files/cinder-upgrade.xml \
-         files/cinder-volume.xml \
-         $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
-     $(CP) \
-         files/solaris/solarisfc.py \
-         files/solaris/solarisiscsi.py \
-         $(PROTO_DIR)$(PYTHON_LIB)/cinder/brick/initiator; \
+	 files/cinder-api.xml \
+	 files/cinder-backup.xml \
+	 files/cinder-db.xml \
+	 files/cinder-scheduler.xml \
+	 files/cinder-upgrade.xml \
+	 files/cinder-volume.xml \
+	 $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
      $(MKDIR) $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/solaris; \
      $(TOUCH) \
-         $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/solaris/__init__.py; \
+	 $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/solaris/__init__.py; \
      $(CP) \
-         files/solaris/nfs.py \
-         files/solaris/zfs.py \
-         $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/solaris; \
-     $(CP) files/zfssa/cinder.akwf \
-         $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/zfssa); \
+	 files/solaris/nfs.py \
+	 files/solaris/zfs.py \
+	 $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/solaris; \
+     $(CP) \
+	 files/zfssa/cinder.akwf \
+	 $(PROTO_DIR)$(PYTHON_LIB)/cinder/volume/drivers/zfssa); \
      $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
 
 # common targets
@@ -98,7 +89,7 @@
 
 test:		$(NO_TESTS)
 
-system-test:    $(NO_TESTS)
+system-test:	$(NO_TESTS)
 
 
 REQUIRED_PACKAGES += cloud/openstack/openstack-common
--- a/components/openstack/cinder/cinder.p5m	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/cinder.p5m	Wed Sep 07 14:48:41 2016 -0700
@@ -28,7 +28,7 @@
 set name=pkg.summary value="OpenStack Cinder (Block Storage Service)"
 set name=pkg.description \
     value="OpenStack Cinder provides an infrastructure for managing block storage volumes in OpenStack. It allows block devices to be exposed and connected to compute instances for expanded storage, better performance and integration with enterprise storage platforms."
-set name=pkg.human-version value="Kilo $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Mitaka $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Cinder, the OpenStack block storage service"
 set name=com.oracle.info.tpno value=$(TPNO)
@@ -43,7 +43,7 @@
 set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/054 \
     value=PSARC/2014/208 value=PSARC/2015/110 value=PSARC/2015/289 \
-    value=PSARC/2015/535 value=PSARC/2016/014
+    value=PSARC/2015/535 value=PSARC/2016/014 value=PSARC/2016/455
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 set name=variant.opensolaris.zone value=global value=nonglobal
 #
@@ -76,6 +76,7 @@
 file files/cinder-upgrade path=lib/svc/method/cinder-upgrade
 file files/cinder-volume path=lib/svc/method/cinder-volume
 file files/cinder-volume-setup path=lib/svc/method/cinder-volume-setup
+file files/cinder-api.stencil path=lib/svc/stencils/cinder-api.stencil
 file path=usr/bin/cinder-manage
 file usr/bin/cinder-api path=usr/lib/cinder/cinder-api mode=0555
 file usr/bin/cinder-backup path=usr/lib/cinder/cinder-backup mode=0555
@@ -83,6 +84,7 @@
 file usr/bin/cinder-volume path=usr/lib/cinder/cinder-volume mode=0555
 file usr/bin/cinder-volume-usage-audit \
     path=usr/lib/cinder/cinder-volume-usage-audit mode=0555
+file usr/bin/cinder-wsgi path=usr/lib/cinder/cinder-wsgi mode=0555
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -98,6 +100,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/admin_actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/availability_zones.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/capabilities.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/cgsnapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/consistencygroups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/extended_services.py
@@ -111,6 +114,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/scheduler_stats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/services.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/snapshot_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/snapshot_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/snapshot_unmanage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_extra_specs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/used_limits.py
@@ -120,7 +125,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_image_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_mig_status_attribute.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_replication.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_tenant_attribute.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_transfer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_type_access.py
@@ -132,6 +136,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/fault.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/sizelimit.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/api_version_request.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/rest_api_version_history.rst
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/versioned_method.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/atom-link.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/extension.rng
@@ -158,18 +165,23 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/snapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/views/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/views/volumes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/volume_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v3/router.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/availability_zones.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/capabilities.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/cgsnapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/consistencygroups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/qos_specs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/scheduler_stats.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/snapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/transfers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/versions.py
@@ -180,33 +192,28 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/ceph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/glusterfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/google.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/posix.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/swift.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/drivers/tsm.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/rpcapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/README.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/executor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/connector.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/host_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/linuxfc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/linuxscsi.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/solarisfc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/solarisiscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/local_dev/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/local_dev/lvm.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/remotefs/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/remotefs/remotefs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/all.py \
-    pkg.depend.bypass-generate=.*/oslo_log.*
+    pkg.depend.bypass-generate=.*/oslo_log.* \
+    pkg.depend.bypass-generate=.*/oslo_reports.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/api.py \
-    pkg.depend.bypass-generate=.*/oslo_log.*
+    pkg.depend.bypass-generate=.*/oslo_log.* \
+    pkg.depend.bypass-generate=.*/oslo_reports.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/backup.py \
-    pkg.depend.bypass-generate=.*/oslo_log.*
+    pkg.depend.bypass-generate=.*/oslo_log.* \
+    pkg.depend.bypass-generate=.*/oslo_reports.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/manage.py \
     pkg.depend.bypass-generate=.*/bpython.* \
     pkg.depend.bypass-generate=.*/oslo_db.* \
@@ -216,20 +223,26 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/rtstool.py \
     pkg.depend.bypass-generate=.*/rtslib.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/scheduler.py \
-    pkg.depend.bypass-generate=.*/oslo_log.*
+    pkg.depend.bypass-generate=.*/oslo_log.* \
+    pkg.depend.bypass-generate=.*/oslo_reports.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/volume.py \
-    pkg.depend.bypass-generate=.*/oslo_log.*
+    pkg.depend.bypass-generate=.*/oslo_log.* \
+    pkg.depend.bypass-generate=.*/oslo_reports.*
 file \
     path=usr/lib/python$(PYVER)/vendor-packages/cinder/cmd/volume_usage_audit.py \
     pkg.depend.bypass-generate=.*/oslo_log.*
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/sqlalchemyutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/nova.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/config/cinder-config-generator.conf
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/config/generate_cinder_opts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/consistencygroup/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/consistencygroup/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/coordination.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/base.py
@@ -245,21 +258,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/004_volume_type_to_uuid.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/005_add_source_volume_column.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/005_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/006_snapshots_add_provider_location.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/007_add_volume_snapshot_fk.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/011_add_bootable_column.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/011_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/012_add_attach_host_column.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/012_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/013_add_provider_geometry_column.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/014_add_name_id.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/014_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/015_drop_migrations_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/016_drop_sm_tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py
@@ -278,10 +285,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/030_placeholder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/031_placeholder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/032_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/033_add_encryption_unique_key.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/033_sqlite_downgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/034_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/034_volume_type_add_desc_column.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/035_add_provider_id_column.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/036_add_provider_id_column_to_snapshots.py
@@ -289,8 +293,39 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/038_add_driver_initiator_data_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/039_add_parent_id_to_backups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/040_sqlite_downgrade.sql
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/041_add_modified_at_column_to_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/042_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/043_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/044_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/045_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/046_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/047_add_per_volume_quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/048_add_allocated_in_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/049_add_temp_volume_snapshot_ids_to_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/050_add_previous_status_to_volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/051_add_source_cgid_column_to_consistencygroups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/052_add_provider_auth_column_to_snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/053_add_version_columns_to_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/054_add_has_dependent_backups_column_to_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/055_add_image_volume_cache_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/056_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/057_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/058_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/059_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/060_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/061_add_snapshot_id_timestamp_to_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/062_deleted_type_to_Integer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/062_sqlite_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/063_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/064_add_restore_volume_id_to_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/065_add_replication_info_to_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/066_add_allocated_id_column_to_reservations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/067_readd_iscsi_targets_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/068_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/069_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/070_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/071_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/072_placeholder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/exception.py
@@ -299,6 +334,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/hacking/checks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/cache.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/glance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/image_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/__init__.py
@@ -309,41 +345,17 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/not_implemented_key_mgr.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/backup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/cgsnapshot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/consistencygroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/fields.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/snapshot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/volume.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/README
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/_i18n.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/config/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/config/generator.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/eventlet_backdoor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/fileutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/gettextutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/imageutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/loopingcall.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/catch_errors.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/request_id.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/periodic_task.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/policy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/base_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/base_handler.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/base_weight.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/availability_zone_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/capabilities_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/extra_specs_ops.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/ignore_attempted_hosts_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/json_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/weights/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/systemd.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/threadgroup.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/versionutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/volume_attachment.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/objects/volume_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/opts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/quota.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/quota_utils.py
@@ -351,22 +363,29 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/replication/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/base_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/base_handler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/base_weight.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/evaluator/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/evaluator/evaluator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filter_scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/affinity_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/availability_zone_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/capabilities_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/capacity_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/driver_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/extra_specs_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/ignore_attempted_hosts_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/instance_locality_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/json_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/flows/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/flows/create_volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/host_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/rpcapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/scheduler_options.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/simple.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/capacity.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/chance.py
@@ -385,15 +404,25 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/block_device.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/blockbridge.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/cloudbyte/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/cloudbyte/cloudbyte.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/cloudbyte/options.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/coho.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/datera.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dell/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dell/dell_storagecenter_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dell/dell_storagecenter_common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dell/dell_storagecenter_fc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dell/dell_storagecenter_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/disco/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/disco/disco.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dothill/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dothill/dothill_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dothill/dothill_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dothill/dothill_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/dothill/dothill_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/drbdmanagedrv.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_cli_fc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_cli_iscsi.py
@@ -407,15 +436,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_provision_v3.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vnx_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/scaleio.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/xtremio.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/eqlx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu/eternus_dx_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu/eternus_dx_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu/eternus_dx_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/glusterfs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hds.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hnas_backend.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hus_backend.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/iscsi.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hgst.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_basiclib.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_common.py
@@ -423,19 +452,48 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_horcm.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_snm2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hnas_backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hnas_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hnas_nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_3par_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_3par_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_3par_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_lefthand_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_xp_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hpe/hpe_xp_opts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_18000.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/fc_zone_helper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_conf.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/rest_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/hypermetro.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/replication.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/rest_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/smartx.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/flashsystem.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/flashsystem_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/flashsystem_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/flashsystem_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/gpfs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/ibmnas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/helpers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/replication.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/ssh.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/xiv_ds8k.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/eonstor_ds_cli/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/eonstor_ds_cli/cli_factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/eonstor_ds_cli/common_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/infortrend_fc_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/infortrend/infortrend_iscsi_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lenovo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lenovo/lenovo_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lenovo/lenovo_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lenovo/lenovo_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lenovo/lenovo_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lvm.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/common.py
@@ -455,16 +513,36 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/nfs_7mode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/nfs_base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/nfs_cmode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/performance/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/performance/perf_7mode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/performance/perf_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/performance/perf_cmode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/dataontap/ssc_cmode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/client.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/fc_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/host_mapper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/iscsi_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/library.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/options.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/jsonrpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/nexentaedge/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/nexentaedge/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/nexentaedge/jsonrpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/ns5/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/ns5/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/ns5/jsonrpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/ns5/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/options.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nfs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nimble.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/openvstorage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/dpl_fc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/dpl_iscsi.py
@@ -476,12 +554,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/remotefs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_fc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_iscsi.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_cliq_proxy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_iscsi.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_rest_proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hpmsa_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hpmsa_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hpmsa_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hpmsa_iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/san.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/scality.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/sheepdog.py
@@ -490,23 +566,22 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solaris/nfs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solaris/zfs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solidfire.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/srb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/tegile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/tintri.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/v6000_common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/v6000_fcp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/v6000_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/v7000_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/violin/v7000_fcp.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/datastore.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/vmdk.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/volumeops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vzstorage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/remotefs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/smbfs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/vhdutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/windows.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/windows_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/xio.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zfssa/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zfssa/cinder.akwf
@@ -518,10 +593,12 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/api/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/api/create_volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/api/manage_existing.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/create_volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/manage_existing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/manage_existing_snapshot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/qos_specs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/rpcapi.py
@@ -538,14 +615,19 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/throttling.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/volume_types.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi/eventlet_server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fabric_opts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_san_lookup_service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_zone_client_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_zone_connector_factory.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_zone_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_http_fc_zone_client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/fc_zone_constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fabric_opts.py
@@ -553,12 +635,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fc_zone_client_cli.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fc_zone_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/fc_zone_constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/driver_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/fc_zone_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_san_lookup_service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_zone_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fczm_constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/utils.py
 dir  path=var/lib/cinder owner=cinder group=cinder mode=0700
+dir  path=var/log/cinder owner=cinder group=cinder mode=0700
 #
 group groupname=cinder gid=81
 user username=cinder ftpuser=false gcos-field="OpenStack Cinder" group=cinder \
@@ -566,6 +651,10 @@
 #
 license cinder.license license="Apache v2.0"
 
+# force a group dependency on the optional greenlet; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/greenlet-$(PYV)
+
 # force a group dependency on the optional oslo.vmware; pkgdepend work is needed
 # to flush this out.
 depend type=group fmri=library/python/oslo.vmware-$(PYV)
@@ -578,47 +667,46 @@
 # flush this out.
 depend type=group fmri=library/python/pywbem-$(PYV)
 
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/simplejson-$(PYV)
+
 # force a group dependency on the optional suds; pkgdepend work is needed to
 # flush this out.
 depend type=group fmri=library/python/suds-$(PYV)
 
-# To upgrade to Kilo version, Juno version of the package must be on the system
-depend type=origin fmri=cloud/openstack/[email protected] root-image=true
+# To upgrade to the Mitaka version, the Kilo version of the package must be on
+# the system
+depend type=origin fmri=cloud/openstack/[email protected] root-image=true
 
-# force a dependency on package delivering GNU du(1M)
+# force a dependency on package delivering GNU du(1)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/bin/gdu
 
-# force a dependency on package delivering fcinfo(1M)
+# force a dependency on package delivering fcinfo(8)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/fcinfo
 
-# force a dependency on package delivering itadm(1M)
+# force a dependency on package delivering itadm(8)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/itadm \
     variant.opensolaris.zone=global
 
-# force a dependency on package delivering stmfadm(1M)
+# force a dependency on package delivering stmfadm(8)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/stmfadm \
     variant.opensolaris.zone=global
 
-# force a dependency on package delivering zfs(1M)
+# force a dependency on package delivering zfs(8)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zfs
 
-# force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/babel-$(PYV)
-
 # force a dependency on barbicanclient; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/barbicanclient-$(PYV)
 
+# force a dependency on enum; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/enum-$(PYV)
+
 # force a dependency on glanceclient; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/glanceclient-$(PYV)
 
-# force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/greenlet-$(PYV)
-
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
-
 # force a dependency on keystoneclient; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/keystoneclient-$(PYV)
@@ -629,12 +717,12 @@
 # force a dependency on lxml; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/lxml-$(PYV)
 
-# force a dependency on netaddr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/netaddr-$(PYV)
-
 # force a dependency on novaclient; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/novaclient-$(PYV)
 
+# force a dependency on os-brick; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/os-brick-$(PYV)
+
 # force a dependency on oslo.concurrency; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/oslo.concurrency-$(PYV)
@@ -660,11 +748,26 @@
 # out.
 depend type=require fmri=library/python/oslo.middleware-$(PYV)
 
+# force a dependency on oslo.policy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.policy-$(PYV)
+
+# force a dependency on oslo.reports; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.reports-$(PYV)
+
 # force a dependency on oslo.serialization; pkgdepend work is needed to flush
 # this out.
 depend type=require fmri=library/python/oslo.serialization-$(PYV)
 
-# force a dependency on osprofiler; pkgdepend work is needed to flush this out.
+# force a dependency on oslo.service; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.service-$(PYV)
+
+# force a dependency on oslo.versionedobjects; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.versionedobjects-$(PYV)
+
+# force a dependency on osprofiler; used via a paste.deploy filter
 depend type=require fmri=library/python/osprofiler-$(PYV)
 
 # force a dependency on paramiko; pkgdepend work is needed to flush this out.
@@ -673,16 +776,15 @@
 # force a dependency on paste; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/paste-$(PYV)
 
-# force a dependency on paste.deploy; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/paste.deploy-$(PYV)
-
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pbr-$(PYV)
 
 # force a dependency on pyparsing; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pyparsing-$(PYV)
 
+# force a dependency on pytz; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pytz-$(PYV)
+
 # force a dependency on requests; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/requests-$(PYV)
 
@@ -692,9 +794,6 @@
 # force a dependency on routes; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/routes-$(PYV)
 
-# force a dependency on setuptools; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/setuptools-$(PYV)
-
 # force a dependency on six; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/six-$(PYV)
 
@@ -707,6 +806,9 @@
 # force a dependency on taskflow; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/taskflow-$(PYV)
 
+# force a dependency on tooz; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/tooz-$(PYV)
+
 # force a dependency on webob; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/webob-$(PYV)
 
--- a/components/openstack/cinder/files/cinder-api	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder-api	Wed Sep 07 14:48:41 2016 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/python2.7
 
-# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2016, Oracle and/or its affiliates. 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
@@ -15,12 +15,35 @@
 #    under the License.
 
 import os
+from subprocess import CalledProcessError, check_call, Popen
+import sys
 
 import smf_include
 
 
+def httpd(cmd):
+    cmd = ['/usr/apache2/2.4/bin/httpd', '-f',
+           '/var/lib/cinder/cinder.httpd.conf', '-k', cmd]
+    try:
+        Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)
+    except CalledProcessError as err:
+        print >> sys.stderr, 'Error executing %s: %s' % (cmd, err)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
 def start():
-    smf_include.smf_subprocess("/usr/lib/cinder/cinder-api")
+    httpd('start')
+
+
+def stop():
+    httpd('stop')
+
+
+def restart():
+    httpd('restart')
+
 
 if __name__ == "__main__":
     os.putenv("LC_ALL", "C")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-api.stencil	Wed Sep 07 14:48:41 2016 -0700
@@ -0,0 +1,97 @@
+;
+;TLS macro for vhost blocks
+;
+$%define TLS {$%{config/use_tls:?
+    SSLEngine On
+
+    # Disable the known insecure SSLv3 protocol
+    SSLProtocol all -SSLv3
+
+    SSLCertificateFile $%{config/ssl_cert_file}
+    $%{config/ssl_ca_cert_file:^*SSLCACertificateFile }
+    SSLCertificateKeyFile $%{config/ssl_cert_key_file}
+}}
+;
+; Start of conf file stencil
+;
+# WARNING: THIS FILE GENERATED FROM SMF DATA.
+#     DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
+#
+
+ServerRoot "/usr/apache2/2.4"
+
+LoadModule authn_file_module libexec/mod_authn_file.so
+LoadModule authn_core_module libexec/mod_authn_core.so
+LoadModule authz_host_module libexec/mod_authz_host.so
+LoadModule authz_groupfile_module libexec/mod_authz_groupfile.so
+LoadModule authz_user_module libexec/mod_authz_user.so
+LoadModule authz_core_module libexec/mod_authz_core.so
+LoadModule access_compat_module libexec/mod_access_compat.so
+LoadModule auth_basic_module libexec/mod_auth_basic.so
+LoadModule reqtimeout_module libexec/mod_reqtimeout.so
+LoadModule filter_module libexec/mod_filter.so
+LoadModule log_config_module libexec/mod_log_config.so
+LoadModule env_module libexec/mod_env.so
+LoadModule headers_module libexec/mod_headers.so
+LoadModule version_module libexec/mod_version.so
+LoadModule slotmem_shm_module libexec/mod_slotmem_shm.so
+<IfDefine prefork>
+    LoadModule mpm_prefork_module libexec/mod_mpm_prefork.so
+</IfDefine>
+<IfDefine worker>
+    LoadModule mpm_worker_module libexec/mod_mpm_worker.so
+</IfDefine>
+<IfDefine !prefork>
+    <IfDefine !worker>
+        LoadModule mpm_event_module libexec/mod_mpm_event.so
+    </IfDefine>
+</IfDefine>
+LoadModule unixd_module libexec/mod_unixd.so
+LoadModule status_module libexec/mod_status.so
+LoadModule alias_module libexec/mod_alias.so
+LoadModule wsgi_module libexec/mod_wsgi-2.7.so
+$%{config/use_tls:?
+LoadModule ssl_module libexec\/mod_ssl.so
+}
+
+<IfModule unixd_module>
+    User cinder
+    Group cinder
+</IfModule>
+
+PidFile /var/lib/cinder/cinder.httpd.pid
+
+ServerName $%{config/servername}
+Listen $%{config/port}
+
+<Directory />
+    AllowOverride none
+    Require all denied
+</Directory>
+
+ErrorLogFormat "%{cu}t %M"
+ErrorLog "$%{config/error_log}"
+LogLevel warn
+
+<IfModule log_config_module>
+    LogFormat "%h %u %t \\"%r\\" %p %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
+</IfModule>
+
+CustomLog $%{config/access_log} combined
+
+<Directory /usr/lib/cinder>
+    Options Indexes FollowSymLinks MultiViews
+    AllowOverride None
+    Require all granted
+</Directory>
+
+WSGISocketPrefix /var/run/cinder_wsgi_
+
+<VirtualHost *:$%{config/port}>
+$%[TLS]
+    WSGIDaemonProcess cinder-api processes=2 threads=1 user=cinder group=cinder display-name=%\{GROUP\}
+    WSGIScriptAlias / /usr/lib/cinder/cinder-wsgi
+    WSGIProcessGroup cinder-api
+    WSGIApplicationGroup %\{GLOBAL\}
+    WSGIPassAuthorization On
+</VirtualHost>
--- a/components/openstack/cinder/files/cinder-api.xml	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder-api.xml	Wed Sep 07 14:48:41 2016 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2016, Oracle and/or its affiliates. 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
@@ -58,11 +58,28 @@
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/cinder-api %m">
       <method_context>
+        <method_credential user='cinder' group='cinder'
+          privileges='basic,{zone}:/system/volatile/cinder_wsgi_*'/>
+      </method_context>
+    </exec_method>
+
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec="/lib/svc/method/cinder-api %m">
+      <method_context>
+        <method_credential user='cinder' group='cinder'/>
+      </method_context>
+    </exec_method>
+
+    <exec_method timeout_seconds="60" type="method" name="restart"
+      exec="/lib/svc/method/cinder-api %m">
+      <method_context>
         <method_credential user='cinder' group='cinder' />
       </method_context>
     </exec_method>
-    <exec_method timeout_seconds="60" type="method" name="stop"
-      exec=":kill"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="ignore_error" value="core,signal"/>
+    </property_group>
 
     <instance name='default' enabled='false'>
       <!-- to start/stop/refresh the service -->
@@ -72,6 +89,26 @@
         <propval name='value_authorization' type='astring'
                  value='solaris.smf.value.cinder' />
       </property_group>
+
+      <property_group name='cinder-api_stencil' type='configfile'>
+        <propval name='path' type='astring'
+          value='/var/lib/cinder/cinder.httpd.conf'/>
+        <propval name='stencil' type='astring' value='cinder-api.stencil'/>
+        <propval name='mode' type='astring' value='0444'/>
+        <propval name='owner' type='astring' value='cinder'/>
+        <propval name='group' type='astring' value='cinder'/>
+      </property_group>
+
+      <property_group name='config' type='application'>
+        <propval name='access_log' type='astring'
+          value='/var/log/cinder/cinder_access.log'/>
+        <propval name='error_log' type='astring'
+          value='/var/log/cinder/cinder_error.log'/>
+        <propval name='port' type='count' value='8776'/>
+        <propval name='servername' type='astring' value='127.0.0.1'/>
+        <propval name='use_tls' type='boolean' value='false'/>
+      </property_group>
+
     </instance>
 
     <template>
@@ -86,6 +123,75 @@
           order to provide volume management for the OpenStack Compute service.
         </loctext>
       </description>
+
+      <pg_pattern required='true' type='application' name='config'>
+        <prop_pattern required='true' type='astring' name='access_log'>
+          <description>
+            <loctext xml:lang='C'>
+              The absolute path for the Apache access log file.  Defaults to
+              /var/log/cinder/cinder_access.log
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='true' type='astring' name='error_log'>
+          <description>
+            <loctext xml:lang='C'>
+              The absolute path for the Apache error log file.  Defaults to
+              /var/log/cinder/cinder_error.log
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='true' type='count' name='port'>
+          <description>
+            <loctext xml:lang='C'>
+              The port for public requests.  Default value is 8776.
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='true' type='astring' name='servername'>
+          <description>
+            <loctext xml:lang='C'>
+              The Apache ServerName Directive.  Hostname and port that the
+              server uses to identify itself.
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='false' type='astring' name='ssl_cert_file'>
+          <description>
+            <loctext xml:lang='C'>
+              Server PEM-encoded X.509 Certificate file.
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='false' type='astring' name='ssl_ca_cert_file'>
+          <description>
+            <loctext xml:lang='C'>
+              File of concatenated PEM-encoded CA Certificates for Client Auth.
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='false' type='astring' name='ssl_cert_key_file'>
+          <description>
+            <loctext xml:lang='C'>
+              Server PEM-encoded Private Key file.
+            </loctext>
+          </description>
+        </prop_pattern>
+
+        <prop_pattern required='true' type='boolean' name='use_tls'>
+          <description>
+            <loctext xml:lang='C'>
+              Boolean property to indicate usage of TLS.  Defaults to 'false'.
+            </loctext>
+          </description>
+        </prop_pattern>
+      </pg_pattern>
     </template>
   </service>
 </service_bundle>
--- a/components/openstack/cinder/files/cinder-upgrade	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder-upgrade	Wed Sep 07 14:48:41 2016 -0700
@@ -30,82 +30,84 @@
 
 CINDER_CONF_MAPPINGS = {
     # Deprecated group/name
-    ('DEFAULT', 'eqlx_chap_password'): ('DEFAULT', 'chap_password'),
-    ('DEFAULT', 'eqlx_use_chap'): ('DEFAULT', 'use_chap_auth'),
-    ('DEFAULT', 'eqlx_chap_login'): ('DEFAULT', 'chap_username'),
-    ('DEFAULT', 'host'): ('DEFAULT', 'backend_host'),
-    ('DEFAULT', 'db_backend'): ('database', 'backend'),
-    ('DEFAULT', 'qpid_hostname'):
-        ('oslo_messaging_qpid', 'qpid_hostname'),
-    ('DEFAULT', 'qpid_port'):
-        ('oslo_messaging_qpid', 'qpid_port'),
-    ('DEFAULT', 'qpid_hosts'):
-        ('oslo_messaging_qpid', 'qpid_hosts'),
-    ('DEFAULT', 'qpid_username'):
-        ('oslo_messaging_qpid', 'qpid_username'),
-    ('DEFAULT', 'qpid_password'):
-        ('oslo_messaging_qpid', 'qpid_password'),
-    ('DEFAULT', 'qpid_sasl_mechanisms'):
-        ('oslo_messaging_qpid', 'qpid_sasl_mechanisms'),
-    ('DEFAULT', 'qpid_heartbeat'):
-        ('oslo_messaging_qpid', 'qpid_heartbeat'),
-    ('DEFAULT', 'qpid_protocol'):
-        ('oslo_messaging_qpid', 'qpid_protocol'),
-    ('DEFAULT', 'qpid_tcp_nodelay'):
-        ('oslo_messaging_qpid', 'qpid_tcp_nodelay'),
-    ('DEFAULT', 'qpid_receiver_capacity'):
-        ('oslo_messaging_qpid', 'qpid_receiver_capacity'),
-    ('DEFAULT', 'qpid_topology_version'):
-        ('oslo_messaging_qpid', 'qpid_topology_version'),
-    ('DEFAULT', 'amqp_durable_queues'):
-        ('oslo_messaging_rabbit', 'amqp_durable_queues'),
-    ('DEFAULT', 'amqp_auto_delete'):
-        ('oslo_messaging_rabbit', 'amqp_auto_delete'),
-    ('DEFAULT', 'rpc_conn_pool_size'):
-        ('oslo_messaging_rabbit', 'rpc_conn_pool_size'),
-    ('DEFAULT', 'kombu_ssl_version'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_version'),
-    ('DEFAULT', 'kombu_ssl_keyfile'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_keyfile'),
-    ('DEFAULT', 'kombu_ssl_certfile'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_certfile'),
-    ('DEFAULT', 'kombu_ssl_ca_certs'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_ca_certs'),
-    ('DEFAULT', 'kombu_reconnect_delay'):
-        ('oslo_messaging_rabbit', 'kombu_reconnect_delay'),
-    ('DEFAULT', 'rabbit_host'):
-        ('oslo_messaging_rabbit', 'rabbit_host'),
-    ('DEFAULT', 'rabbit_port'):
-        ('oslo_messaging_rabbit', 'rabbit_port'),
-    ('DEFAULT', 'rabbit_hosts'):
-        ('oslo_messaging_rabbit', 'rabbit_hosts'),
-    ('DEFAULT', 'rabbit_use_ssl'):
-        ('oslo_messaging_rabbit', 'rabbit_use_ssl'),
-    ('DEFAULT', 'rabbit_userid'):
-        ('oslo_messaging_rabbit', 'rabbit_userid'),
-    ('DEFAULT', 'rabbit_password'):
-        ('oslo_messaging_rabbit', 'rabbit_password'),
-    ('DEFAULT', 'rabbit_login_method'):
-        ('oslo_messaging_rabbit', 'rabbit_login_method'),
-    ('DEFAULT', 'rabbit_virtual_host'):
-        ('oslo_messaging_rabbit', 'rabbit_virtual_host'),
-    ('DEFAULT', 'rabbit_retry_interval'):
-        ('oslo_messaging_rabbit', 'rabbit_retry_interval'),
-    ('DEFAULT', 'rabbit_retry_backoff'):
-        ('oslo_messaging_rabbit', 'rabbit_retry_backoff'),
-    ('DEFAULT', 'rabbit_max_retries'):
-        ('oslo_messaging_rabbit', 'rabbit_max_retries'),
-    ('DEFAULT', 'rabbit_ha_queues'):
-        ('oslo_messaging_rabbit', 'rabbit_ha_queues'),
-    ('DEFAULT', 'fake_rabbit'):
-        ('oslo_messaging_rabbit', 'fake_rabbit'),
-    ('DEFAULT', 'osapi_max_request_body_size'):
-        ('oslo_middleware', 'max_request_body_size'),
-    ('DEFAULT', 'log-format'): (None, None),
-    ('DEFAULT', 'use-syslog'): (None, None),
-    ('DEFAULT', 'datera_api_token'): (None, None),
-    ('DEFAULT', 'enable_v1_api'): (None, None),
-    ('DEFAULT', 'log_format'): (None, None),
+    ('DEFAULT', 'host'): ('BACKEND', 'backend_host'),
+    ('DEFAULT', 'glusterfs_sparsed_volumes'):
+        ('DEFAULT', 'nas_volume_prov_type'),
+    ('DEFAULT', 'glusterfs_qcow2_volumes'):
+        ('DEFAULT', 'nas_volume_prov_type'),
+    ('DEFAULT', 'rpc_thread_pool_size'):
+        ('DEFAULT', 'executor_thread_pool_size'),
+    ('DEFAULT', 'netapp_volume_list'):
+        ('DEFAULT', 'netapp_pool_name_search_pattern'),
+    ('DEFAULT', 'netapp_storage_pools'):
+        ('DEFAULT', 'netapp_pool_name_search_pattern'),
+    ('DEFAULT', 'netapp_eseries_host_type'):
+        ('DEFAULT', 'netapp_host_type'),
+    ('DEFAULT', 'storage_vnx_pool_name'):
+        ('DEFAULT', 'storage_vnx_pool_names'),
+    ('DEFAULT', 'notification_driver'):
+        ('oslo_messaging_notifications', 'driver'),
+    ('DEFAULT', 'notification_topics'):
+        ('oslo_messaging_notifications', 'topics'),
+    ('DEFAULT', 'hp3par_api_url'): ('DEFAULT', 'hpe3par_api_url'),
+    ('DEFAULT', 'hp3par_cpg'): ('DEFAULT', 'hp3par_cpg'),
+    ('DEFAULT', 'hp3par_cpg_snap'): ('DEFAULT', 'hpe3par_cpg_snap'),
+    ('DEFAULT', 'hp3par_debug'): ('DEFAULT', 'hpe3par_debug'),
+    ('DEFAULT', 'hp3par_iscsi_chap_enabled'):
+        ('DEFAULT', 'hpe3par_iscsi_chap_enabled'),
+    ('DEFAULT', 'hp3par_debug'): ('DEFAULT', 'hpe3par_debug'),
+    ('DEFAULT', 'hp3par_password'): ('DEFAULT', 'hpe3par_password'),
+    ('DEFAULT', 'hp3par_snapshot_expiration'):
+        ('DEFAULT', 'hpe3par_snapshot_expiration'),
+    ('DEFAULT', 'hp3par_snapshot_retention'):
+        ('DEFAULT', 'hpe3par_snapshot_retention'),
+    ('DEFAULT', 'hp3par_username'): ('DEFAULT', 'hpe3par_username'),
+    ('DEFAULT', 'hplefthand_api_url'): ('DEFAULT', 'hpelefthand_api_url'),
+    ('DEFAULT', 'hplefthand_clustername'):
+        ('DEFAULT', ' hpelefthand_clustername'),
+    ('DEFAULT', 'hplefthand_debug'): ('DEFAULT', 'hpelefthand_debug'),
+    ('DEFAULT', 'hplefthand_iscsi_chap_enabled'):
+        ('DEFAULT', ' hpelefthand_iscsi_chap_enabled'),
+    ('DEFAULT', 'hplefthand_password'): ('DEFAULT', 'hpelefthand_password'),
+    ('DEFAULT', 'hplefthand_username'): ('DEFAULT', 'hpelefthand_username'),
+    ('DEFAULT', 'hpxp_async_copy_check_interval'):
+        ('DEFAULT', 'hpexp_async_copy_check_interval'),
+    ('DEFAULT', 'hpxp_compute_target_ports'):
+        ('DEFAULT', 'hpexp_compute_target_ports'),
+    ('DEFAULT', 'hpxp_copy_check_interval'):
+        ('DEFAULT', 'hpexp_copy_check_interval'),
+    ('DEFAULT', 'hpxp_copy_speed'): ('DEFAULT', 'hpexp_copy_speed'),
+    ('DEFAULT', 'hpxp_default_copy_method'):
+        ('DEFAULT', 'hpexp_default_copy_method'),
+    ('DEFAULT', 'hpxp_group_request'): ('DEFAULT', 'hpexp_group_request'),
+    ('DEFAULT', 'hpxp_horcm_add_conf'): ('DEFAULT', 'hpexp_horcm_add_conf'),
+    ('DEFAULT', 'hpxp_horcm_name_only_discovery'):
+        ('DEFAULT', 'hpexp_horcm_name_only_discovery'),
+    ('DEFAULT', 'hpxp_horcm_numbers'): ('DEFAULT', 'hpexp_horcm_numbers'),
+    ('DEFAULT', 'hpxp_horcm_resource_name'):
+        ('DEFAULT', 'hpexp_horcm_resource_name'),
+    ('DEFAULT', 'hpxp_horcm_user'): ('DEFAULT', 'hpexp_horcm_user'),
+    ('DEFAULT', 'hpxp_ldev_range'): ('DEFAULT', 'hpexp_ldev_range'),
+    ('DEFAULT', 'hpxp_pool'): ('DEFAULT', 'hpexp_pool'),
+    ('DEFAULT', 'hpxp_storage_cli'): ('DEFAULT', 'hpexp_storage_cli'),
+    ('DEFAULT', 'hpxp_storage_id'): ('DEFAULT', 'hpexp_storage_id'),
+    ('DEFAULT', 'hpxp_target_ports'): ('DEFAULT', 'hpexp_target_ports'),
+    ('DEFAULT', 'hpxp_thin_pool'): ('DEFAULT', 'hpexp_thin_pool'),
+    ('DEFAULT', 'hpxp_zoning_request'): ('DEFAULT', 'hpexp_zoning_request'),
+    ('profiler', 'profiler_enabled'): ('profiler', 'enabled'),
+    ('DEFAULT', 'enable_v2_api'): (None, None),
+    ('DEFAULT', 'use_syslog_rfc_format'): (None, None),
+    ('DEFAULT', 'use_syslog'): (None, None),
+    ('hyperv', 'force_volumeutils_v1'): (None, None),
+    ('DEFAULT', 'rpc_zmq_port'): (None, None),
+    ('DEFAULT', 'matchmaker_heartbeat_freq'): (None, None),
+    ('DEFAULT', 'matchmaker_heartbeat_ttl'): (None, None),
+    ('DEFAULT', 'request_timeout'): ('DEFAULT', 'violin_request_timeout'),
+    ('DEFAULT', 'gateway_mga'): (None, None),
+    ('DEFAULT', 'gateway_mgb'): (None, None),
+    ('DEFAULT', 'use_igroups'): (None, None),
+
+
 }
 
 CINDER_CONF_EXCEPTIONS = [
--- a/components/openstack/cinder/files/cinder-volume-setup	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder-volume-setup	Wed Sep 07 14:48:41 2016 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/python2.7
 
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. 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
@@ -16,12 +16,11 @@
 
 import ConfigParser
 import os
+from subprocess import CalledProcessError, Popen, PIPE, check_call
 import sys
 
 import smf_include
 
-from subprocess import CalledProcessError, Popen, PIPE, check_call
-
 
 def start():
     """ retrieves the setting for 'zfs_volume_base' from Cinder's conf file in
--- a/components/openstack/cinder/files/cinder.conf	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder.conf	Wed Sep 07 14:48:41 2016 -0700
@@ -1,3175 +1,3576 @@
 [DEFAULT]
 
 #
-# Options defined in oslo.messaging
-#
-
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet
-# interface, or IP. The "host" option should point or resolve
-# to this address. (string value)
-#rpc_zmq_bind_address=*
-
-# MatchMaker driver. (string value)
-#rpc_zmq_matchmaker=local
-
-# ZeroMQ receiver listening port. (integer value)
-#rpc_zmq_port=9501
-
-# Number of ZeroMQ contexts, defaults to 1. (integer value)
-#rpc_zmq_contexts=1
-
-# Maximum number of ingress messages to locally buffer per
-# topic. Default is unlimited. (integer value)
-#rpc_zmq_topic_backlog=<None>
-
-# Directory for holding IPC sockets. (string value)
-#rpc_zmq_ipc_dir=/var/run/openstack
-
-# Name of this node. Must be a valid hostname, FQDN, or IP
-# address. Must match "host" option, if running Nova. (string
-# value)
-#rpc_zmq_host=cinder
-
-# Seconds to wait before a cast expires (TTL). Only supported
-# by impl_zmq. (integer value)
-#rpc_cast_timeout=30
-
-# Heartbeat frequency. (integer value)
-#matchmaker_heartbeat_freq=300
-
-# Heartbeat time-to-live. (integer value)
-#matchmaker_heartbeat_ttl=600
-
-# Size of RPC thread pool. (integer value)
-#rpc_thread_pool_size=64
-
-# Driver or drivers to handle sending notifications. (multi
-# valued)
-#notification_driver=
-
-# AMQP topic used for OpenStack notifications. (list value)
-# Deprecated group/name - [rpc_notifier2]/topics
-#notification_topics=notifications
-
-# Seconds to wait for a response from a call. (integer value)
-#rpc_response_timeout=60
-
-# A URL representing the messaging driver to use and its full
-# configuration. If not set, we fall back to the rpc_backend
-# option and driver specific configuration. (string value)
-#transport_url=<None>
-
-# The messaging driver to use, defaults to rabbit. Other
-# drivers include qpid and zmq. (string value)
-#rpc_backend=rabbit
-
-# The default exchange under which topics are scoped. May be
-# overridden by an exchange name specified in the
-# transport_url option. (string value)
-#control_exchange=openstack
-
-
-#
-# Options defined in oslo.log
+# From cinder
 #
 
-# Print debugging output (set logging level to DEBUG instead
-# of default WARNING level). (boolean value)
-#debug=false
-
-# Print more verbose output (set logging level to INFO instead
-# of default WARNING level). (boolean value)
-#verbose=false
-
-# The name of a logging configuration file. This file is
-# appended to any existing logging configuration files. For
-# details about logging configuration files, see the Python
-# logging module documentation. (string value)
-# Deprecated group/name - [DEFAULT]/log_config
-#log_config_append=<None>
-
-# DEPRECATED. A logging.Formatter log message format string
-# which may use 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 no default is
-# set, logging will go to stdout. (string value)
-# Deprecated group/name - [DEFAULT]/logfile
-#log_file=<None>
-
-# (Optional) The base directory used for relative --log-file
-# paths. (string value)
-# Deprecated group/name - [DEFAULT]/logdir
-#log_dir=<None>
-
-# Use syslog for logging. Existing syslog format is DEPRECATED
-# during I, and will change in J to honor RFC5424. (boolean
+# Backup metadata version to be used when backing up volume metadata. If this
+# number is bumped, make sure the service doing the restore supports the new
+# version. (integer value)
+#backup_metadata_version = 2
+
+# The number of chunks or objects, for which one Ceilometer notification will
+# be sent (integer value)
+#backup_object_number_per_notification = 10
+
+# Interval, in seconds, between two progress notifications reporting the backup
+# status (integer value)
+#backup_timer_interval = 120
+
+# The maximum number of items that a collection resource returns in a single
+# response (integer value)
+#osapi_max_limit = 1000
+
+# Base URL that will be presented to users in links to the OpenStack Volume API
+# (string value)
+# Deprecated group/name - [DEFAULT]/osapi_compute_link_prefix
+#osapi_volume_base_URL = <None>
+
+# Volume filter options which non-admin user could use to query volumes.
+# Default values are: ['name', 'status', 'metadata', 'availability_zone'
+# ,'bootable'] (list value)
+#query_volume_filters = name,status,metadata,availability_zone,bootable
+
+# Ceph configuration file to use. (string value)
+#backup_ceph_conf = /etc/ceph/ceph.conf
+
+# The Ceph user to connect with. Default here is to use the same user as for
+# Cinder volumes. If not using cephx this should be set to None. (string value)
+#backup_ceph_user = cinder
+
+# The chunk size, in bytes, that a backup is broken into before transfer to the
+# Ceph object store. (integer value)
+#backup_ceph_chunk_size = 134217728
+
+# The Ceph pool where volume backups are stored. (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
+
+# If True, always discard excess bytes when restoring volumes i.e. pad with
+# zeroes. (boolean value)
+#restore_discard_excess_bytes = true
+
+# File with the list of available smbfs shares. (string value)
+#smbfs_shares_config = /etc/cinder/smbfs_shares
+
+# The path of the automatically generated file containing information about
+# volume disk space allocation. (string value)
+#smbfs_allocation_info_file_path = $state_path/allocation_data
+
+# Default format that will be used when creating volumes if no volume format is
+# specified. (string value)
+# Allowed values: raw, qcow2, vhd, vhdx
+#smbfs_default_volume_format = qcow2
+
+# Create volumes as sparsed files which take no space rather than regular files
+# when using raw format, in which case volume creation takes lot of time.
+# (boolean value)
+#smbfs_sparsed_volumes = true
+
+# Percent of ACTUAL usage of the underlying volume before no new volumes can be
+# allocated to the volume destination. (floating point value)
+#smbfs_used_ratio = 0.95
+
+# This will compare the allocated to available space on the volume destination.
+# If the ratio exceeds this number, the destination will no longer be valid.
+# (floating point value)
+#smbfs_oversub_ratio = 1.0
+
+# Base dir containing mount points for smbfs shares. (string value)
+#smbfs_mount_point_base = $state_path/mnt
+
+# Mount options passed to the smbfs client. See mount.cifs man page for
+# details. (string value)
+#smbfs_mount_options = noperm,file_mode=0775,dir_mode=0775
+
+# Compression algorithm (None to disable) (string value)
+#backup_compression_algorithm = zlib
+
+# Use thin provisioning for SAN volumes? (boolean value)
+#san_thin_provision = true
+
+# IP address of SAN controller (string value)
+#san_ip =
+
+# Username for SAN controller (string value)
+#san_login = admin
+
+# Password for SAN controller (string value)
+#san_password =
+
+# Filename of private key to use for SSH authentication (string value)
+#san_private_key =
+
+# Cluster name to use for creating volumes (string value)
+#san_clustername =
+
+# SSH port to use with SAN (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#san_ssh_port = 22
+
+# Execute commands locally instead of over SSH; use if the volume service is
+# running on the SAN device (boolean value)
+san_is_local = true
+
+# SSH connection timeout in seconds (integer value)
+#ssh_conn_timeout = 30
+
+# Minimum ssh connections in the pool (integer value)
+#ssh_min_pool_conn = 1
+
+# Maximum ssh connections in the pool (integer value)
+#ssh_max_pool_conn = 5
+
+# Configuration file for HDS NFS cinder plugin (string value)
+#hds_hnas_nfs_config_file = /opt/hds/hnas/cinder_nfs_conf.xml
+
+# Sets the value of TCP_KEEPALIVE (True/False) for each server socket. (boolean
 # value)
-#use_syslog=false
-
-# (Optional) Enables or disables syslog rfc5424 format for
-# logging. If enabled, prefixes the MSG part of the syslog
-# message with APP-NAME (RFC5424). The format without the APP-
-# NAME is deprecated in I, and will be removed in J. (boolean
+#tcp_keepalive = true
+
+# Sets the value of TCP_KEEPINTVL in seconds for each server socket. Not
+# supported on OS X. (integer value)
+#tcp_keepalive_interval = <None>
+
+# Sets the value of TCP_KEEPCNT for each server socket. Not supported on OS X.
+# (integer value)
+#tcp_keepalive_count = <None>
+
+# Schedule volumes round robin across NFS shares. (boolean value)
+#nfs_round_robin = true
+
+# Option to enable strict host key checking.  When set to "True" Cinder will
+# only connect to systems with a host key present in the configured
+# "ssh_hosts_key_file".  When set to "False" the host key will be saved upon
+# first connection and used for subsequent connections.  Default=False (boolean
+# value)
+#strict_ssh_host_key_policy = false
+
+# File containing SSH host keys for the systems with which Cinder needs to
+# communicate.  OPTIONAL: Default=$state_path/ssh_known_hosts (string value)
+#ssh_hosts_key_file = $state_path/ssh_known_hosts
+
+# The storage family type used on the storage system; valid values are
+# ontap_7mode for using Data ONTAP operating in 7-Mode, ontap_cluster for using
+# clustered Data ONTAP, or eseries for using E-Series. (string value)
+# Allowed values: ontap_7mode, ontap_cluster, eseries
+#netapp_storage_family = ontap_cluster
+
+# The storage protocol to be used on the data path with the storage system.
+# (string value)
+# Allowed values: iscsi, fc, nfs
+#netapp_storage_protocol = <None>
+
+# The hostname (or IP address) for the storage system or proxy server. (string
+# value)
+#netapp_server_hostname = <None>
+
+# The TCP port to use for communication with the storage system or proxy
+# server. If not specified, Data ONTAP drivers will use 80 for HTTP and 443 for
+# HTTPS; E-Series will use 8080 for HTTP and 8443 for HTTPS. (integer value)
+#netapp_server_port = <None>
+
+# The transport protocol used when communicating with the storage system or
+# proxy server. (string value)
+# Allowed values: http, https
+#netapp_transport_type = http
+
+# Administrative user account name used to access the storage system or proxy
+# server. (string value)
+#netapp_login = <None>
+
+# Password for the administrative user account specified in the netapp_login
+# option. (string value)
+#netapp_password = <None>
+
+# This option specifies the virtual storage server (Vserver) name on the
+# storage cluster on which provisioning of block storage volumes should occur.
+# (string value)
+#netapp_vserver = <None>
+
+# The vFiler unit on which provisioning of block storage volumes will be done.
+# This option is only used by the driver when connecting to an instance with a
+# storage family of Data ONTAP operating in 7-Mode. Only use this option when
+# utilizing the MultiStore feature on the NetApp storage system. (string value)
+#netapp_vfiler = <None>
+
+# The name of the config.conf stanza for a Data ONTAP (7-mode) HA partner.
+# This option is only used by the driver when connecting to an instance with a
+# storage family of Data ONTAP operating in 7-Mode, and it is required if the
+# storage protocol selected is FC. (string value)
+#netapp_partner_backend_name = <None>
+
+# The quantity to be multiplied by the requested volume size to ensure enough
+# space is available on the virtual storage server (Vserver) to fulfill the
+# volume creation request.  Note: this option is deprecated and will be removed
+# in favor of "reserved_percentage" in the Mitaka release. (floating point
+# value)
+#netapp_size_multiplier = 1.2
+
+# This option determines if storage space is reserved for LUN allocation. If
+# enabled, LUNs are thick provisioned. If space reservation is disabled,
+# storage space is allocated on demand. (string value)
+# Allowed values: enabled, disabled
+#netapp_lun_space_reservation = enabled
+
+# If the percentage of available space for an NFS share has dropped below the
+# value specified by this option, the NFS image cache will be cleaned. (integer
 # value)
-#use_syslog_rfc_format=false
-
-# Syslog facility to receive log lines. (string value)
-#syslog_log_facility=LOG_USER
-
-# Log output to standard error. (boolean value)
-#use_stderr=true
-
-# Format string to use for log messages with context. (string
+#thres_avl_size_perc_start = 20
+
+# When the percentage of available space on an NFS share has reached the
+# percentage specified by this option, the driver will stop clearing files from
+# the NFS image cache that have not been accessed in the last M minutes, where
+# M is the value of the expiry_thres_minutes configuration option. (integer
 # value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
-
-# Format string to use for log messages without context.
-# (string value)
-#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
-
-# Data to append to log format when level is DEBUG. (string
-# value)
-#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
-
-# Prefix each line of exception output with this format.
+#thres_avl_size_perc_stop = 60
+
+# This option specifies the threshold for last access time for images in the
+# NFS image cache. When a cache cleaning cycle begins, images in the cache that
+# have not been accessed in the last M minutes, where M is the value of this
+# parameter, will be deleted from the cache to create free space on the NFS
+# share. (integer value)
+#expiry_thres_minutes = 720
+
+# This option is used to specify the path to the E-Series proxy application on
+# a proxy server. The value is combined with the value of the
+# netapp_transport_type, netapp_server_hostname, and netapp_server_port options
+# to create the URL used by the driver to connect to the proxy application.
 # (string value)
-#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
-
-# List of logger=LEVEL pairs. (list value)
-#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
-
-# Enables or disables publication of error events. (boolean
+#netapp_webservice_path = /devmgr/v2
+
+# This option is only utilized when the storage family is configured to
+# eseries. This option is used to restrict provisioning to the specified
+# controllers. Specify the value of this option to be a comma separated list of
+# controller hostnames or IP addresses to be used for provisioning. (string
 # value)
-#publish_errors=false
-
-# Enables or disables fatal status of deprecations. (boolean
+#netapp_controller_ips = <None>
+
+# Password for the NetApp E-Series storage array. (string value)
+#netapp_sa_password = <None>
+
+# This option specifies whether the driver should allow operations that require
+# multiple attachments to a volume. An example would be live migration of
+# servers that have volumes attached. When enabled, this backend is limited to
+# 256 total volumes in order to guarantee volumes can be accessed by more than
+# one host. (boolean value)
+#netapp_enable_multiattach = false
+
+# This option specifies the path of the NetApp copy offload tool binary. Ensure
+# that the binary has execute permissions set which allow the effective user of
+# the cinder-volume process to execute the file. (string value)
+#netapp_copyoffload_tool_path = <None>
+
+# This option defines the type of operating system that will access a LUN
+# exported from Data ONTAP; it is assigned to the LUN at the time it is
+# created. (string value)
+#netapp_lun_ostype = <None>
+
+# This option defines the type of operating system for all initiators that can
+# access a LUN. This information is used when mapping LUNs to individual hosts
+# or groups of hosts. (string value)
+# Deprecated group/name - [DEFAULT]/netapp_eseries_host_type
+#netapp_host_type = <None>
+
+# This option is used to restrict provisioning to the specified pools. Specify
+# the value of this option to be a regular expression which will be applied to
+# the names of objects from the storage backend which represent pools in
+# Cinder. This option is only utilized when the storage protocol is configured
+# to use iSCSI or FC. (string value)
+# Deprecated group/name - [DEFAULT]/netapp_volume_list
+# Deprecated group/name - [DEFAULT]/netapp_storage_pools
+#netapp_pool_name_search_pattern = (.+)
+
+# Configure CHAP authentication for iSCSI connections (Default: Enabled)
+# (boolean value)
+#storwize_svc_iscsi_chap_enabled = true
+
+# Base dir containing mount point for gluster share. (string value)
+#glusterfs_backup_mount_point = $state_path/backup_mount
+
+# GlusterFS share in <hostname|ipv4addr|ipv6addr>:<gluster_vol_name> format.
+# Eg: 1.2.3.4:backup_vol (string value)
+#glusterfs_backup_share = <None>
+
+# Volume prefix for the backup id when backing up to TSM (string value)
+#backup_tsm_volume_prefix = backup
+
+# TSM password for the running username (string value)
+#backup_tsm_password = password
+
+# Enable or Disable compression for backups (boolean value)
+#backup_tsm_compression = true
+
+# config file for cinder eternus_dx volume driver (string value)
+#cinder_eternus_config_file = /etc/cinder/cinder_fujitsu_eternus_dx.xml
+
+# Specifies the path of the GPFS directory where Block Storage volume and
+# snapshot files are stored. (string value)
+#gpfs_mount_point_base = <None>
+
+# Specifies the path of the Image service repository in GPFS.  Leave undefined
+# if not storing images in GPFS. (string value)
+#gpfs_images_dir = <None>
+
+# Specifies the type of image copy to be used.  Set this when the Image service
+# repository also uses GPFS so that image files can be transferred efficiently
+# from the Image service to the Block Storage service. There are two valid
+# values: "copy" specifies that a full copy of the image is made;
+# "copy_on_write" specifies that copy-on-write optimization strategy is used
+# and unmodified blocks of the image file are shared efficiently. (string
 # value)
-#fatal_deprecations=false
-
-# The format for an instance that is passed with the log
-# message. (string value)
-#instance_format="[instance: %(uuid)s] "
-
-# The format for an instance UUID that is passed with the log
-# message. (string value)
-#instance_uuid_format="[instance: %(uuid)s] "
-
-
-#
-# Options defined in cinder.exception
-#
+# Allowed values: copy, copy_on_write, <None>
+#gpfs_images_share_mode = <None>
+
+# Specifies an upper limit on the number of indirections required to reach a
+# specific block due to snapshots or clones.  A lengthy chain of copy-on-write
+# snapshots or clones can have a negative impact on performance, but improves
+# space utilization.  0 indicates unlimited clone depth. (integer value)
+#gpfs_max_clone_depth = 0
+
+# Specifies that volumes are created as sparse files which initially consume no
+# space. If set to False, the volume is created as a fully allocated file, in
+# which case, creation may take a significantly longer time. (boolean value)
+#gpfs_sparse_volumes = true
+
+# Specifies the storage pool that volumes are assigned to. By default, the
+# system storage pool is used. (string value)
+#gpfs_storage_pool = system
+
+# The base dataset for ZFS volumes. (string value)
+#zfs_volume_base = rpool/cinder
+
+# iSCSI target group name. (string value)
+#zfs_target_group = tgt-grp
+
+# Global backend request timeout, in seconds. (integer value)
+#violin_request_timeout = 300
+
+# IP address of Nexenta SA (string value)
+#nexenta_host =
+
+# HTTP port to connect to Nexenta REST API server (integer value)
+#nexenta_rest_port = 8080
+
+# Use http or https for REST connection (default auto) (string value)
+# Allowed values: http, https, auto
+#nexenta_rest_protocol = auto
+
+# User name to connect to Nexenta SA (string value)
+#nexenta_user = admin
+
+# Password to connect to Nexenta SA (string value)
+#nexenta_password = nexenta
+
+# Nexenta target portal port (integer value)
+#nexenta_iscsi_target_portal_port = 3260
+
+# SA Pool that holds all volumes (string value)
+#nexenta_volume = cinder
+
+# IQN prefix for iSCSI targets (string value)
+#nexenta_target_prefix = iqn.1986-03.com.sun:02:cinder-
+
+# Prefix for iSCSI target groups on SA (string value)
+#nexenta_target_group_prefix = cinder/
+
+# Volume group for ns5 (string value)
+#nexenta_volume_group = iscsi
+
+# Compression value for new ZFS folders. (string value)
+# Allowed values: on, off, gzip, gzip-1, gzip-2, gzip-3, gzip-4, gzip-5, gzip-6, gzip-7, gzip-8, gzip-9, lzjb, zle, lz4
+#nexenta_dataset_compression = on
+
+# Deduplication value for new ZFS folders. (string value)
+# Allowed values: on, off, sha256, verify, sha256, verify
+#nexenta_dataset_dedup = off
+
+# Human-readable description for the folder. (string value)
+#nexenta_dataset_description =
+
+# Block size for datasets (integer value)
+#nexenta_blocksize = 4096
+
+# Block size for datasets (integer value)
+#nexenta_ns5_blocksize = 32
+
+# Enables or disables the creation of sparse datasets (boolean value)
+#nexenta_sparse = false
+
+# File with the list of available nfs shares (string value)
+#nexenta_shares_config = /etc/cinder/nfs_shares
+
+# Base directory that contains NFS share mount points (string value)
+#nexenta_mount_point_base = $state_path/mnt
+
+# Enables or disables the creation of volumes as sparsed files that take no
+# space. If disabled (False), volume is created as a regular file, which takes
+# a long time. (boolean value)
+#nexenta_sparsed_volumes = true
+
+# If set True cache NexentaStor appliance volroot option value. (boolean value)
+#nexenta_nms_cache_volroot = true
+
+# Enable stream compression, level 1..9. 1 - gives best speed; 9 - gives best
+# compression. (integer value)
+#nexenta_rrmgr_compression = 0
+
+# TCP Buffer size in KiloBytes. (integer value)
+#nexenta_rrmgr_tcp_buf_size = 4096
+
+# Number of TCP connections. (integer value)
+#nexenta_rrmgr_connections = 2
+
+# IP address of NexentaEdge management REST API endpoint (string value)
+#nexenta_rest_address =
+
+# User name to connect to NexentaEdge (string value)
+#nexenta_rest_user = admin
+
+# Password to connect to NexentaEdge (string value)
+#nexenta_rest_password = nexenta
+
+# NexentaEdge logical path of bucket for LUNs (string value)
+#nexenta_lun_container =
+
+# NexentaEdge iSCSI service name (string value)
+#nexenta_iscsi_service =
+
+# NexentaEdge iSCSI Gateway client address for non-VIP service (string value)
+#nexenta_client_address =
+
+# NexentaEdge iSCSI LUN object chunk size (integer value)
+#nexenta_chunksize = 16384
 
 # Make exception message format errors fatal. (boolean value)
-#fatal_exception_format_errors=false
-
-
-#
-# Options defined in cinder.quota
-#
+#fatal_exception_format_errors = false
+
+# Top-level directory for maintaining cinder's state (string value)
+# Deprecated group/name - [DEFAULT]/pybasedir
+#state_path = /var/lib/cinder
+
+# IP address of this host (string value)
+#my_ip =
+
+# Default glance host name or IP (string value)
+#glance_host = $my_ip
+
+# Default glance port (integer value)
+# Minimum value: 1
+# Maximum value: 65535
+#glance_port = 9292
+
+# A list of the URLs of glance API servers available to cinder
+# ([http[s]://][hostname|ip]:port). If protocol is not specified it defaults to
+# http. (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
+
+# Enables or disables negotiation of SSL layer compression. In some cases
+# disabling compression can improve data throughput, such as when high network
+# bandwidth is available and you use compressed image formats like qcow2.
+# (boolean value)
+#glance_api_ssl_compression = false
+
+# Location of ca certificates file to use for glance client requests. (string
+# value)
+#glance_ca_certificates_file = <None>
+
+# 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 that scheduler nodes listen on (string value)
+#scheduler_topic = cinder-scheduler
+
+# The topic that volume nodes listen on (string value)
+#volume_topic = cinder-volume
+
+# The topic that volume backup nodes listen on (string value)
+#backup_topic = cinder-backup
+
+# DEPRECATED: Deploy v1 of the Cinder API. (boolean value)
+#enable_v1_api = true
+
+# DEPRECATED: Deploy v2 of the Cinder API. (boolean value)
+#enable_v2_api = true
+
+# Deploy v3 of the Cinder API. (boolean value)
+#enable_v3_api = true
+
+# Enables or disables rate limit of 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
+# host name, FQDN, or IP address. (string value)
+#host =
+
+# Availability zone of this node (string value)
+#storage_availability_zone = nova
+
+# Default availability zone for new volumes. If not set, the
+# storage_availability_zone option value is used as the default for new
+# volumes. (string value)
+#default_availability_zone = <None>
+
+# If the requested Cinder availability zone is unavailable, fall back to the
+# value of default_availability_zone, then storage_availability_zone, instead
+# of failing. (boolean value)
+#allow_availability_zone_fallback = false
+
+# Default volume type to use (string value)
+#default_volume_type = <None>
+
+# Time period for which to generate volume usages. The options are hour, day,
+# month, or year. (string value)
+#volume_usage_audit_period = month
+
+# Path to the rootwrap configuration file to use for running commands as root
+# (string value)
+#rootwrap_config = /etc/cinder/rootwrap.conf
+
+# Enable 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 a service to be considered up (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 or keystone. (string value)
+# Allowed values: noauth, keystone
+#auth_strategy = keystone
+
+# 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
+
+# The full class name of the volume transfer API class (string value)
+#transfer_api_class = cinder.transfer.api.API
+
+# The full class name of the volume replication API class (string value)
+#replication_api_class = cinder.replication.api.API
+
+# The full class name of the consistencygroup API class (string value)
+#consistencygroup_api_class = cinder.consistencygroup.api.API
+
+# OpenStack privileged account username. Used for requests to other services
+# (such as Nova) that require an account with special rights. (string value)
+#os_privileged_user_name = <None>
+
+# Password associated with the OpenStack privileged account. (string value)
+#os_privileged_user_password = <None>
+
+# Tenant name associated with the OpenStack privileged account. (string value)
+#os_privileged_user_tenant = <None>
+
+# Auth URL associated with the OpenStack privileged account. (string value)
+#os_privileged_user_auth_url = <None>
+
+# Multiplier used for weighing free capacity. Negative numbers mean to stack vs
+# spread. (floating point value)
+#capacity_weight_multiplier = 1.0
+
+# Multiplier used for weighing allocated capacity. Positive numbers mean to
+# stack vs spread. (floating point value)
+#allocated_capacity_weight_multiplier = -1.0
+
+# IP address of sheep daemon. (string value)
+#sheepdog_store_address = 127.0.0.1
+
+# Port of sheep daemon. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#sheepdog_store_port = 7000
+
+# Max size for body of a request (integer value)
+#osapi_max_request_body_size = 114688
+
+# 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. Any string can be used here, but
+# the string "hostname" is special and will create a prefix using the cinder
+# node hostname (previous default behavior).  The default is NO prefix. (string
+# value)
+#sf_account_prefix = <None>
+
+# Create SolidFire volumes with this prefix. Volume names are of the form
+# <sf_volume_prefix><cinder-volume-id>.  The default is to use a prefix of
+# 'UUID-'. (string value)
+#sf_volume_prefix = UUID-
+
+# Account name on the SolidFire Cluster to use as owner of template/cache
+# volumes (created if does not exist). (string value)
+#sf_template_account_name = openstack-vtemplate
+
+# Create an internal cache of copy of images when a bootable volume is created
+# to eliminate fetch from glance and qemu-conversion on subsequent calls.
+# (boolean value)
+#sf_allow_template_caching = true
+
+# Overrides default cluster SVIP with the one specified. This is required or
+# deployments that have implemented the use of VLANs for iSCSI networks in
+# their cloud. (string value)
+#sf_svip = <None>
+
+# Create an internal mapping of volume IDs and account.  Optimizes lookups and
+# performance at the expense of memory, very large deployments may want to
+# consider setting to False. (boolean value)
+#sf_enable_volume_mapping = true
+
+# SolidFire API port. Useful if the device api is behind a proxy on a different
+# port. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#sf_api_port = 443
+
+# Utilize volume access groups on a per-tenant basis. (boolean value)
+#sf_enable_vag = false
+
+# The URL of the Swift endpoint (string value)
+#backup_swift_url = <None>
+
+# The URL of the Keystone endpoint (string value)
+#backup_swift_auth_url = <None>
+
+# Info to match when looking for swift in the service catalog. Format is:
+# separated values of the form: <service_type>:<service_name>:<endpoint_type> -
+# Only used if backup_swift_url is unset (string value)
+#swift_catalog_info = object-store:swift:publicURL
+
+# Info to match when looking for keystone in the service catalog. Format is:
+# separated values of the form: <service_type>:<service_name>:<endpoint_type> -
+# Only used if backup_swift_auth_url is unset (string value)
+#keystone_catalog_info = identity:Identity Service:publicURL
+
+# Swift authentication mechanism (string value)
+#backup_swift_auth = per_user
+
+# Swift authentication version. Specify "1" for auth 1.0, or "2" for auth 2.0
+# (string value)
+#backup_swift_auth_version = 1
+
+# Swift tenant/account name. Required when connecting to an auth 2.0 system
+# (string value)
+#backup_swift_tenant = <None>
+
+# 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 size in bytes that changes are tracked for incremental backups.
+# backup_swift_object_size has to be multiple of backup_swift_block_size.
+# (integer value)
+#backup_swift_block_size = 32768
+
+# 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
+
+# Enable or Disable the timer to send the periodic progress notifications to
+# Ceilometer when backing up the volume to the Swift backend storage. The
+# default value is True to enable the timer. (boolean value)
+#backup_swift_enable_progress_timer = true
+
+# Location of the CA certificate file to use for swift client requests. (string
+# value)
+#backup_swift_ca_cert_file = <None>
+
+# Bypass verification of server certificate when making SSL connection to
+# Swift. (boolean value)
+#backup_swift_auth_insecure = false
+
+# These values will be used for CloudByte storage's addQos API call. (dict
+# value)
+#cb_add_qosgroup = graceallowed:false,iops:10,iopscontrol:true,latency:15,memlimit:0,networkspeed:0,throughput:0,tpcontrol:false
+
+# These values will be used for CloudByte storage's createVolume API call.
+# (dict value)
+#cb_create_volume = blocklength:512B,compression:off,deduplication:off,protocoltype:ISCSI,recordsize:16k,sync:always
+
+# Driver will use this API key to authenticate against the CloudByte storage's
+# management interface. (string value)
+#cb_apikey = <None>
+
+# CloudByte storage specific account name. This maps to a project name in
+# OpenStack. (string value)
+#cb_account_name = <None>
+
+# This corresponds to the name of Tenant Storage Machine (TSM) in CloudByte
+# storage. A volume will be created in this TSM. (string value)
+#cb_tsm_name = <None>
+
+# A retry value in seconds. Will be used by the driver to check if volume
+# creation was successful in CloudByte storage. (integer value)
+#cb_confirm_volume_create_retry_interval = 5
+
+# Will confirm a successful volume creation in CloudByte storage by making this
+# many number of attempts. (integer value)
+#cb_confirm_volume_create_retries = 3
+
+# A retry value in seconds. Will be used by the driver to check if volume
+# deletion was successful in CloudByte storage. (integer value)
+#cb_confirm_volume_delete_retry_interval = 5
+
+# Will confirm a successful volume deletion in CloudByte storage by making this
+# many number of attempts. (integer value)
+#cb_confirm_volume_delete_retries = 3
+
+# This corresponds to the discovery authentication group in CloudByte storage.
+# Chap users are added to this group. Driver uses the first user found for this
+# group. Default value is None. (string value)
+#cb_auth_group = <None>
+
+# These values will be used for CloudByte storage's updateQosGroup API call.
+# (list value)
+#cb_update_qos_group = iops,latency,graceallowed
+
+# These values will be used for CloudByte storage's updateFileSystem API call.
+# (list value)
+#cb_update_file_system = compression,sync,noofcopies,readonly
+
+# Interval, in seconds, between nodes reporting state to datastore (integer
+# value)
+#report_interval = 10
+
+# Interval, in seconds, between running periodic tasks (integer value)
+#periodic_interval = 60
+
+# Range, in seconds, to randomly delay when starting the periodic task
+# scheduler to reduce stampeding. (Disable by setting to 0) (integer value)
+#periodic_fuzzy_delay = 60
+
+# IP address on which OpenStack Volume API listens (string value)
+#osapi_volume_listen = 0.0.0.0
+
+# Port on which OpenStack Volume API listens (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#osapi_volume_listen_port = 8776
+
+# Number of workers for OpenStack Volume API service. The default is equal to
+# the number of CPUs available. (integer value)
+osapi_volume_workers = 1
+
+# The full class name of the compute API class to use (string value)
+#compute_api_class = cinder.compute.nova.API
+
+# Number of nodes that should replicate the data. (integer value)
+#drbdmanage_redundancy = 1
+
+# Resource deployment completion wait policy. (string value)
+#drbdmanage_resource_policy = {"ratio": "0.51", "timeout": "60"}
+
+# Snapshot completion wait policy. (string value)
+#drbdmanage_snapshot_policy = {"count": "1", "timeout": "60"}
+
+# Volume resize completion wait policy. (string value)
+#drbdmanage_resize_policy = {"timeout": "60"}
+
+# Resource deployment completion wait plugin. (string value)
+#drbdmanage_resource_plugin = drbdmanage.plugins.plugins.wait_for.WaitForResource
+
+# Snapshot completion wait plugin. (string value)
+#drbdmanage_snapshot_plugin = drbdmanage.plugins.plugins.wait_for.WaitForSnapshot
+
+# Volume resize completion wait plugin. (string value)
+#drbdmanage_resize_plugin = drbdmanage.plugins.plugins.wait_for.WaitForVolumeSize
+
+# If set, the c-vol node will receive a useable
+#                 /dev/drbdX device, even if the actual data is stored on
+#                 other nodes only.
+#                 This is useful for debugging, maintenance, and to be
+#                 able to do the iSCSI export from the c-vol node. (boolean
+# value)
+#drbdmanage_devs_on_controller = true
+
+# Pool or Vdisk name to use for volume creation. (string value)
+#dothill_backend_name = A
+
+# linear (for Vdisk) or virtual (for Pool). (string value)
+# Allowed values: linear, virtual
+#dothill_backend_type = virtual
+
+# DotHill API interface protocol. (string value)
+# Allowed values: http, https
+#dothill_api_protocol = https
+
+# Whether to verify DotHill array SSL certificate. (boolean value)
+#dothill_verify_certificate = false
+
+# DotHill array SSL certificate path. (string value)
+#dothill_verify_certificate_path = <None>
+
+# List of comma-separated target iSCSI IP addresses. (list value)
+#dothill_iscsi_ips =
+
+# File with the list of available gluster shares (string value)
+#glusterfs_shares_config = /etc/cinder/glusterfs_shares
+
+# Base dir containing mount points for gluster shares. (string value)
+#glusterfs_mount_point_base = $state_path/mnt
+
+# REST API authorization token. (string value)
+#pure_api_token = <None>
+
+# Automatically determine an oversubscription ratio based on the current total
+# data reduction values. If used this calculated value will override the
+# max_over_subscription_ratio config option. (boolean value)
+#pure_automatic_max_oversubscription_ratio = true
+
+# Snapshot replication interval in seconds. (integer value)
+#pure_replica_interval_default = 900
+
+# Retain all snapshots on target for this time (in seconds.) (integer value)
+#pure_replica_retention_short_term_default = 14400
+
+# Retain how many snapshots for each day. (integer value)
+#pure_replica_retention_long_term_per_day_default = 3
+
+# Retain snapshots per day on target for this time (in days.) (integer value)
+#pure_replica_retention_long_term_default = 7
+
+# When enabled, all Pure volumes, snapshots, and protection groups will be
+# eradicated at the time of deletion in Cinder. Data will NOT be recoverable
+# after a delete with this set to True! When disabled, volumes and snapshots
+# will go into pending eradication state and can be recovered. (boolean value)
+#pure_eradicate_on_delete = false
+
+# ID of the project which will be used as the Cinder internal tenant. (string
+# value)
+#cinder_internal_tenant_project_id = <None>
+
+# ID of the user to be used in volume operations as the Cinder internal tenant.
+# (string value)
+#cinder_internal_tenant_user_id = <None>
+
+# The scheduler host manager class to use (string value)
+#scheduler_host_manager = cinder.scheduler.host_manager.HostManager
+
+# Maximum number of attempts to schedule a volume (integer value)
+#scheduler_max_attempts = 3
+
+# Path or URL to Scality SOFS configuration file (string value)
+#scality_sofs_config = <None>
+
+# Base dir where Scality SOFS shall be mounted (string value)
+#scality_sofs_mount_point = $state_path/scality
+
+# Path from Scality SOFS root to volume dir (string value)
+#scality_sofs_volume_dir = cinder/volumes
+
+# VNX authentication scope type. (string value)
+#storage_vnx_authentication_type = global
+
+# Directory path that contains the VNX security file. Make sure the security
+# file is generated first. (string value)
+#storage_vnx_security_file_dir = <None>
+
+# Naviseccli Path. (string value)
+#naviseccli_path =
+
+# Comma-separated list of storage pool names to be used. (string value)
+# Deprecated group/name - [DEFAULT]/storage_vnx_pool_name
+#storage_vnx_pool_names = <None>
+
+# VNX secondary SP IP Address. (string value)
+#san_secondary_ip = <None>
+
+# Default timeout for CLI operations in minutes. For example, LUN migration is
+# a typical long running operation, which depends on the LUN size and the load
+# of the array. An upper bound in the specific deployment can be set to avoid
+# unnecessary long wait. By default, it is 365 days long. (integer value)
+#default_timeout = 525600
+
+# Default max number of LUNs in a storage group. By default, the value is 255.
+# (integer value)
+#max_luns_per_storage_group = 255
+
+# To destroy storage group when the last LUN is removed from it. By default,
+# the value is False. (boolean value)
+#destroy_empty_storage_group = false
+
+# Mapping between hostname and its iSCSI initiator IP addresses. (string value)
+#iscsi_initiators =
+
+# Comma separated iSCSI or FC ports to be used in Nova or Cinder. (string
+# value)
+#io_port_list = *
+
+# Automatically register initiators. By default, the value is False. (boolean
+# value)
+#initiator_auto_registration = false
+
+# Automatically deregister initiators after the related storage group is
+# destroyed. By default, the value is False. (boolean value)
+#initiator_auto_deregistration = false
+
+# Report free_capacity_gb as 0 when the limit to maximum number of pool LUNs is
+# reached. By default, the value is False. (boolean value)
+#check_max_pool_luns_threshold = false
+
+# Delete a LUN even if it is in Storage Groups. (boolean value)
+#force_delete_lun_in_storagegroup = false
+
+# Force LUN creation even if the full threshold of pool is reached. (boolean
+# value)
+#ignore_pool_full_threshold = false
+
+# IP address for connecting to VMware vCenter server. (string value)
+#vmware_host_ip = <None>
+
+# Username for authenticating with VMware vCenter server. (string value)
+#vmware_host_username = <None>
+
+# Password for authenticating with VMware vCenter server. (string value)
+#vmware_host_password = <None>
+
+# Optional VIM service WSDL Location e.g http://<server>/vimService.wsdl.
+# Optional over-ride to default location for bug work-arounds. (string value)
+#vmware_wsdl_location = <None>
+
+# Number of times VMware vCenter server API must be retried upon connection
+# related issues. (integer value)
+#vmware_api_retry_count = 10
+
+# The interval (in seconds) for polling remote tasks invoked on VMware vCenter
+# server. (floating point value)
+#vmware_task_poll_interval = 0.5
+
+# Name of the vCenter inventory folder that will contain Cinder volumes. This
+# folder will be created under "OpenStack/<project_folder>", where
+# project_folder is of format "Project (<volume_project_id>)". (string value)
+#vmware_volume_folder = Volumes
+
+# Timeout in seconds for VMDK volume transfer between Cinder and Glance.
+# (integer value)
+#vmware_image_transfer_timeout_secs = 7200
+
+# Max number of objects to be retrieved per batch. Query results will be
+# obtained in batches from the server and not in one shot. Server may still
+# limit the count to something less than the configured value. (integer value)
+#vmware_max_objects_retrieval = 100
+
+# Optional string specifying the VMware vCenter server version. The driver
+# attempts to retrieve the version from VMware vCenter server. Set this
+# configuration only if you want to override the vCenter server version.
+# (string value)
+#vmware_host_version = <None>
+
+# Directory where virtual disks are stored during volume backup and restore.
+# (string value)
+#vmware_tmp_dir = /tmp
+
+# CA bundle file to use in verifying the vCenter server certificate. (string
+# value)
+#vmware_ca_file = <None>
+
+# If true, the vCenter server certificate is not verified. If false, then the
+# default CA truststore is used for verification. This option is ignored if
+# "vmware_ca_file" is set. (boolean value)
+#vmware_insecure = false
+
+# Name of a vCenter compute cluster where volumes should be created. (multi
+# valued)
+#vmware_cluster_name =
+
+# Pool or Vdisk name to use for volume creation. (string value)
+#lenovo_backend_name = A
+
+# linear (for VDisk) or virtual (for Pool). (string value)
+# Allowed values: linear, virtual
+#lenovo_backend_type = virtual
+
+# Lenovo api interface protocol. (string value)
+# Allowed values: http, https
+#lenovo_api_protocol = https
+
+# Whether to verify Lenovo array SSL certificate. (boolean value)
+#lenovo_verify_certificate = false
+
+# Lenovo array SSL certificate path. (string value)
+#lenovo_verify_certificate_path = <None>
+
+# List of comma-separated target iSCSI IP addresses. (list value)
+#lenovo_iscsi_ips =
+
+# The maximum size in bytes of the files used to hold backups. If the volume
+# being backed up exceeds this size, then it will be backed up into multiple
+# files.backup_file_size must be a multiple of backup_sha_block_size_bytes.
+# (integer value)
+#backup_file_size = 1999994880
+
+# The size in bytes that changes are tracked for incremental backups.
+# backup_file_size has to be multiple of backup_sha_block_size_bytes. (integer
+# value)
+#backup_sha_block_size_bytes = 32768
+
+# Enable or Disable the timer to send the periodic progress notifications to
+# Ceilometer when backing up the volume to the backend storage. The default
+# value is True to enable the timer. (boolean value)
+#backup_enable_progress_timer = true
+
+# Path specifying where to store backups. (string value)
+#backup_posix_path = $state_path/backup
+
+# Custom directory to use for backups. (string value)
+#backup_container = <None>
+
+# REST server port. (string value)
+#sio_rest_server_port = 443
+
+# Verify server certificate. (boolean value)
+#sio_verify_server_certificate = false
+
+# Server certificate path. (string value)
+#sio_server_certificate_path = <None>
+
+# Round up volume capacity. (boolean value)
+#sio_round_volume_capacity = true
+
+# Unmap volume before deletion. (boolean value)
+#sio_unmap_volume_before_deletion = false
+
+# Protection Domain ID. (string value)
+#sio_protection_domain_id = <None>
+
+# Protection Domain name. (string value)
+#sio_protection_domain_name = <None>
+
+# Storage Pools. (string value)
+#sio_storage_pools = <None>
+
+# Storage Pool name. (string value)
+#sio_storage_pool_name = <None>
+
+# Storage Pool ID. (string value)
+#sio_storage_pool_id = <None>
+
+# Driver to use for database access (string value)
+#db_driver = cinder.db
+
+# Group name to use for creating volumes. Defaults to "group-0". (string value)
+#eqlx_group_name = group-0
+
+# Timeout for the Group Manager cli command execution. Default is 30. Note that
+# this option is deprecated in favour of "ssh_conn_timeout" as specified in
+# cinder/volume/drivers/san/san.py and will be removed in M release. (integer
+# value)
+#eqlx_cli_timeout = 30
+
+# Maximum retry count for reconnection. Default is 5. (integer value)
+#eqlx_cli_max_retries = 5
+
+# Use CHAP authentication for targets. Note that this option is deprecated in
+# favour of "use_chap_auth" as specified in cinder/volume/driver.py and will be
+# removed in next release. (boolean value)
+#eqlx_use_chap = false
+
+# Existing CHAP account name. Note that this option is deprecated in favour of
+# "chap_username" as specified in cinder/volume/driver.py and will be removed
+# in next release. (string value)
+#eqlx_chap_login = admin
+
+# Password for specified CHAP account name. Note that this option is deprecated
+# in favour of "chap_password" as specified in cinder/volume/driver.py and will
+# be removed in the next release (string value)
+#eqlx_chap_password = password
+
+# Pool in which volumes will be created. Defaults to "default". (string value)
+#eqlx_pool = default
+
+# 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
+
+# Services to be added to the available pool on create (boolean value)
+#enable_new_services = true
+
+# Template string to be used to generate volume names (string value)
+#volume_name_template = volume-%s
+
+# Template string to be used to generate snapshot names (string value)
+#snapshot_name_template = snapshot-%s
+
+# Template string to be used to generate backup names (string value)
+#backup_name_template = backup-%s
+
+# Multiplier used for weighing volume number. Negative numbers mean to spread
+# vs stack. (floating point value)
+#volume_number_multiplier = -1.0
+
+# RPC port to connect to Coha Data MicroArray (integer value)
+#coho_rpc_port = 2049
+
+# Default storage pool for volumes. (integer value)
+#ise_storage_pool = 1
+
+# Raid level for ISE volumes. (integer value)
+#ise_raid = 1
+
+# Number of retries (per port) when establishing connection to ISE management
+# port. (integer value)
+#ise_connection_retries = 5
+
+# Interval (secs) between retries. (integer value)
+#ise_retry_interval = 1
+
+# Number on retries to get completion status after issuing a command to ISE.
+# (integer value)
+#ise_completion_retries = 30
+
+# Connect with multipath (FC only; iSCSI multipath is controlled by Nova)
+# (boolean value)
+#storwize_svc_multipath_enabled = false
+
+# Storage pool name. (string value)
+#zfssa_pool = <None>
+
+# Project name. (string value)
+#zfssa_project = <None>
+
+# Block size. (string value)
+# Allowed values: 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k
+#zfssa_lun_volblocksize = 8k
+
+# Flag to enable sparse (thin-provisioned): True, False. (boolean value)
+#zfssa_lun_sparse = false
+
+# Data compression. (string value)
+# Allowed values: off, lzjb, gzip-2, gzip, gzip-9
+#zfssa_lun_compression = off
+
+# Synchronous write bias. (string value)
+# Allowed values: latency, throughput
+#zfssa_lun_logbias = latency
+
+# iSCSI initiator group. (string value)
+#zfssa_initiator_group =
+
+# iSCSI initiator IQNs. (comma separated) (string value)
+#zfssa_initiator =
+
+# iSCSI initiator CHAP user (name). (string value)
+#zfssa_initiator_user =
+
+# Secret of the iSCSI initiator CHAP user. (string value)
+#zfssa_initiator_password =
+
+# iSCSI initiators configuration. (string value)
+#zfssa_initiator_config =
+
+# iSCSI target group name. (string value)
+#zfssa_target_group = tgt-grp
+
+# iSCSI target CHAP user (name). (string value)
+#zfssa_target_user =
+
+# Secret of the iSCSI target CHAP user. (string value)
+#zfssa_target_password =
+
+# iSCSI target portal (Data-IP:Port, w.x.y.z:3260). (string value)
+#zfssa_target_portal = <None>
+
+# Network interfaces of iSCSI targets. (comma separated) (string value)
+#zfssa_target_interfaces = <None>
+
+# REST connection timeout. (seconds) (integer value)
+#zfssa_rest_timeout = <None>
+
+# IP address used for replication data. (maybe the same as data ip) (string
+# value)
+#zfssa_replication_ip =
+
+# Flag to enable local caching: True, False. (boolean value)
+#zfssa_enable_local_cache = true
+
+# Name of ZFSSA project where cache volumes are stored. (string value)
+#zfssa_cache_project = os-cinder-cache
+
+# Driver policy for volume manage. (string value)
+# Allowed values: loose, strict
+#zfssa_manage_policy = loose
+
+# Number of times to attempt to run flakey shell commands (integer value)
+#num_shell_tries = 3
+
+# The percentage of backend capacity is reserved (integer value)
+# Minimum value: 0
+# Maximum value: 100
+#reserved_percentage = 0
+
+# Prefix for iSCSI volumes (string value)
+#iscsi_target_prefix = iqn.2010-10.org.openstack:
+
+# The IP address that the iSCSI daemon is listening on (string value)
+#iscsi_ip_address = $my_ip
+
+# The list of secondary IP addresses of the iSCSI daemon (list value)
+#iscsi_secondary_ip_addresses =
+
+# The port that the iSCSI daemon is listening on (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#iscsi_port = 3260
+
+# The maximum number of times to rescan targets to find volume (integer value)
+#num_volume_device_scan_tries = 3
+
+# The backend name for a given driver implementation (string 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
+
+# If this is set to True, attachment of volumes for image transfer will be
+# aborted when multipathd is not running. Otherwise, it will fallback to single
+# path. (boolean value)
+#enforce_multipath_for_image_xfer = false
+
+# Method used to wipe old volumes (string value)
+# Allowed values: none, zero, shred
+#volume_clear = zero
+
+# Size in MiB to wipe at start of old volumes. 0 => all (integer value)
+#volume_clear_size = 0
+
+# The flag to pass to ionice to alter the i/o priority of the process used to
+# zero a volume after deletion, for example "-c3" for idle only priority.
+# (string value)
+#volume_clear_ionice = <None>
+
+# iSCSI target user-land tool to use. tgtadm is default, use lioadm for LIO
+# iSCSI support, scstadmin for SCST target support, iseradm for the ISER
+# protocol, ietadm for iSCSI Enterprise Target, iscsictl for Chelsio iSCSI
+# Target or fake for testing. (string value)
+# Allowed values: tgtadm, lioadm, scstadmin, iseradm, iscsictl, ietadm, fake
+#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
+
+# Chiscsi (CXT) global defaults configuration file (string value)
+#chiscsi_conf = /etc/chelsio-iscsi/chiscsi.conf
+
+# 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)
+# Allowed values: blockio, fileio, auto
+#iscsi_iotype = fileio
+
+# The default block size used when copying/clearing volumes (string value)
+#volume_dd_blocksize = 1M
+
+# The blkio cgroup name to be used to limit bandwidth of volume copy (string
+# value)
+#volume_copy_blkio_cgroup_name = cinder-volume-copy
+
+# The upper limit of bandwidth of volume copy. 0 => unlimited (integer value)
+#volume_copy_bps_limit = 0
+
+# Sets the behavior of the iSCSI target to either perform write-back(on) or
+# write-through(off). This parameter is valid if iscsi_helper is set to tgtadm
+# or iseradm. (string value)
+# Allowed values: on, off
+#iscsi_write_cache = on
+
+# Sets the target-specific flags for the iSCSI target. Only used for tgtadm to
+# specify backing device flags using bsoflags option. The specified string is
+# passed as is to the underlying tool. (string value)
+#iscsi_target_flags =
+
+# Determines the iSCSI protocol for new iSCSI volumes, created with tgtadm or
+# lioadm target helpers. In order to enable RDMA, this parameter should be set
+# with the value "iser". The supported iSCSI protocol values are "iscsi" and
+# "iser". (string value)
+# Allowed values: iscsi, iser
+#iscsi_protocol = iscsi
+
+# The path to the client certificate key for verification, if the driver
+# supports it. (string value)
+#driver_client_cert_key = <None>
+
+# The path to the client certificate for verification, if the driver supports
+# it. (string value)
+#driver_client_cert = <None>
+
+# Tell driver to use SSL for connection to backend storage if the driver
+# supports it. (boolean value)
+#driver_use_ssl = false
+
+# Float representation of the over subscription ratio when thin provisioning is
+# involved. Default ratio is 20.0, meaning provisioned capacity can be 20 times
+# of the total physical capacity. If the ratio is 10.5, it means provisioned
+# capacity can be 10.5 times of the total physical capacity. A ratio of 1.0
+# means provisioned capacity cannot exceed the total physical capacity. The
+# ratio has to be a minimum of 1.0. (floating point value)
+#max_over_subscription_ratio = 20.0
+
+# Certain ISCSI targets have predefined target names, SCST target driver uses
+# this name. (string value)
+#scst_target_iqn_name = <None>
+
+# SCST target implementation can choose from multiple SCST target drivers.
+# (string value)
+#scst_target_driver = iscsi
+
+# Option to enable/disable CHAP authentication for targets. (boolean value)
+# Deprecated group/name - [DEFAULT]/eqlx_use_chap
+#use_chap_auth = false
+
+# CHAP user name. (string value)
+# Deprecated group/name - [DEFAULT]/eqlx_chap_login
+#chap_username =
+
+# Password for specified CHAP account name. (string value)
+# Deprecated group/name - [DEFAULT]/eqlx_chap_password
+#chap_password =
+
+# Namespace for driver private data values to be saved in. (string value)
+#driver_data_namespace = <None>
+
+# String representation for an equation that will be used to filter hosts. Only
+# used when the driver filter is set to be used by the Cinder scheduler.
+# (string value)
+#filter_function = <None>
+
+# String representation for an equation that will be used to determine the
+# goodness of a host. Only used when using the goodness weigher is set to be
+# used by the Cinder scheduler. (string value)
+#goodness_function = <None>
+
+# If set to True the http client will validate the SSL certificate of the
+# backend endpoint. (boolean value)
+#driver_ssl_cert_verify = false
+
+# Can be used to specify a non default path to a CA_BUNDLE file or directory
+# with certificates of trusted CAs, which will be used to validate the backend
+# (string value)
+#driver_ssl_cert_path = <None>
+
+# List of options that control which trace info is written to the DEBUG log
+# level to assist developers. Valid values are method and api. (list value)
+#trace_flags = <None>
+
+# Multi opt of dictionaries to represent a replication target device.  This
+# option may be specified multiple times in a single config section to specify
+# multiple replication target devices.  Each entry takes the standard dict
+# config form: replication_device =
+# target_device_id:<required>,key1:value1,key2:value2... (dict value)
+#replication_device = <None>
+
+# If set to True, upload-to-image in raw format will create a cloned volume and
+# register its location to the image service, instead of uploading the volume
+# content. The cinder backend and locations support must be enabled in the
+# image service, and glance_api_version must be set to 2. (boolean value)
+#image_upload_use_cinder_backend = false
+
+# If set to True, the image volume created by upload-to-image will be placed in
+# the internal tenant. Otherwise, the image volume is created in the current
+# context's tenant. (boolean value)
+#image_upload_use_internal_tenant = false
+
+# Enable the image volume cache for this backend. (boolean value)
+#image_volume_cache_enabled = false
+
+# Max size of the image volume cache for this backend in GB. 0 => unlimited.
+# (integer value)
+#image_volume_cache_max_size_gb = 0
+
+# Max number of entries allowed in the image volume cache. 0 => unlimited.
+# (integer value)
+#image_volume_cache_max_count = 0
+
+# Report to clients of Cinder that the backend supports discard (aka.
+# trim/unmap). This will not actually change the behavior of the backend or the
+# client directly, it will only notify that it can be used. (boolean value)
+#report_discard_supported = false
+
+# The maximum number of times to rescan iSER targetto find volume (integer
+# value)
+#num_iser_scan_tries = 3
+
+# Prefix for iSER volumes (string value)
+#iser_target_prefix = iqn.2010-10.org.openstack:
+
+# The IP address that the iSER daemon is listening on (string value)
+#iser_ip_address = $my_ip
+
+# The port that the iSER daemon is listening on (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#iser_port = 3260
+
+# The name of the iSER target user-land tool to use (string value)
+#iser_helper = tgtadm
+
+# Public url to use for versions endpoint. The default is None, which will use
+# the request's host_url attribute to populate the URL base. If Cinder is
+# operating behind a proxy, you will want to change this to represent the
+# proxy's URL. (string value)
+#public_endpoint = <None>
+
+# Nimble Controller pool name (string value)
+#nimble_pool_name = default
+
+# Nimble Subnet Label (string value)
+#nimble_subnet_label = *
+
+# Pool or Vdisk name to use for volume creation. (string value)
+#hpmsa_backend_name = A
+
+# linear (for Vdisk) or virtual (for Pool). (string value)
+# Allowed values: linear, virtual
+#hpmsa_backend_type = virtual
+
+# HPMSA API interface protocol. (string value)
+# Allowed values: http, https
+#hpmsa_api_protocol = https
+
+# Whether to verify HPMSA array SSL certificate. (boolean value)
+#hpmsa_verify_certificate = false
+
+# HPMSA array SSL certificate path. (string value)
+#hpmsa_verify_certificate_path = <None>
+
+# List of comma-separated target iSCSI IP addresses. (list value)
+#hpmsa_iscsi_ips =
+
+# A list of url schemes that can be downloaded directly via the direct_url.
+# Currently supported schemes: [file]. (list value)
+#allowed_direct_url_schemes =
+
+# Default core properties of image (list value)
+#glance_core_properties = checksum,container_format,disk_format,image_name,image_id,min_disk,min_ram,name,size
+
+# HPE LeftHand WSAPI Server Url like https://<LeftHand ip>:8081/lhos (string
+# value)
+# Deprecated group/name - [DEFAULT]/hplefthand_api_url
+#hpelefthand_api_url = <None>
+
+# HPE LeftHand Super user username (string value)
+# Deprecated group/name - [DEFAULT]/hplefthand_username
+#hpelefthand_username = <None>
+
+# HPE LeftHand Super user password (string value)
+# Deprecated group/name - [DEFAULT]/hplefthand_password
+#hpelefthand_password = <None>
+
+# HPE LeftHand cluster name (string value)
+# Deprecated group/name - [DEFAULT]/hplefthand_clustername
+#hpelefthand_clustername = <None>
+
+# Configure CHAP authentication for iSCSI connections (Default: Disabled)
+# (boolean value)
+# Deprecated group/name - [DEFAULT]/hplefthand_iscsi_chap_enabled
+#hpelefthand_iscsi_chap_enabled = false
+
+# Enable HTTP debugging to LeftHand (boolean value)
+# Deprecated group/name - [DEFAULT]/hplefthand_debug
+#hpelefthand_debug = false
+
+# Port number of SSH service. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#hpelefthand_ssh_port = 16022
+
+# Name for the VG that will contain exported volumes (string value)
+#volume_group = cinder-volumes
+
+# If >0, create LVs with multiple mirrors. Note that this requires lvm_mirrors
+# + 2 PVs with available space (integer value)
+#lvm_mirrors = 0
+
+# Type of LVM volumes to deploy; (default, thin, or auto). Auto defaults to
+# thin if thin is supported. (string value)
+# Allowed values: default, thin, auto
+#lvm_type = default
+
+# LVM conf file to use for the LVM driver in Cinder; this setting is ignored if
+# the specified file does not exist (You can also specify 'None' to not use a
+# conf file even if one exists). (string value)
+#lvm_conf_file = /etc/cinder/lvm.conf
+
+# max_over_subscription_ratio setting for the LVM driver.  If set, this takes
+# precedence over the general max_over_subscription_ratio option.  If None, the
+# general option is used. (floating point value)
+#lvm_max_over_subscription_ratio = 1.0
+
+# use this file for cinder emc plugin config data (string value)
+#cinder_emc_config_file = /etc/cinder/cinder_emc_config.xml
+
+# IP address or Hostname of NAS system. (string value)
+#nas_ip =
+
+# User name to connect to NAS system. (string value)
+#nas_login = admin
+
+# Password to connect to NAS system. (string value)
+#nas_password =
+
+# SSH port to use to connect to NAS system. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#nas_ssh_port = 22
+
+# Filename of private key to use for SSH authentication. (string value)
+#nas_private_key =
+
+# Allow network-attached storage systems to operate in a secure environment
+# where root level access is not permitted. If set to False, access is as the
+# root user and insecure. If set to True, access is not as root. If set to
+# auto, a check is done to determine if this is a new installation: True is
+# used if so, otherwise False. Default is auto. (string value)
+#nas_secure_file_operations = auto
+
+# Set more secure file permissions on network-attached storage volume files to
+# restrict broad other/world access. If set to False, volumes are created with
+# open permissions. If set to True, volumes are created with permissions for
+# the cinder user and group (660). If set to auto, a check is done to determine
+# if this is a new installation: True is used if so, otherwise False. Default
+# is auto. (string value)
+#nas_secure_file_permissions = auto
+
+# Path to the share to use for storing Cinder volumes. For example:
+# "/srv/export1" for an NFS server export available at 10.0.5.10:/srv/export1 .
+# (string value)
+#nas_share_path =
+
+# Options used to mount the storage backend file system where Cinder volumes
+# are stored. (string value)
+#nas_mount_options = <None>
+
+# Provisioning type that will be used when creating volumes. (string value)
+# Allowed values: thin, thick
+# Deprecated group/name - [DEFAULT]/glusterfs_sparsed_volumes
+# Deprecated group/name - [DEFAULT]/glusterfs_qcow2_volumes
+#nas_volume_prov_type = thin
+
+# XMS cluster id in multi-cluster environment (string value)
+#xtremio_cluster_name =
+
+# Number of retries in case array is busy (integer value)
+#xtremio_array_busy_retry_count = 5
+
+# Interval between retries in case array is busy (integer value)
+#xtremio_array_busy_retry_interval = 5
+
+# Number of volumes created from each cached glance image (integer value)
+#xtremio_volumes_per_glance_cache = 100
+
+# Treat X-Forwarded-For as the canonical remote address. Only enable this if
+# you have a sanitizing proxy. (boolean value)
+#use_forwarded_for = false
+
+# Serial number of storage system (string value)
+#hitachi_serial_number = <None>
+
+# Name of an array unit (string value)
+#hitachi_unit_name = <None>
+
+# Pool ID of storage system (integer value)
+#hitachi_pool_id = <None>
+
+# Thin pool ID of storage system (integer value)
+#hitachi_thin_pool_id = <None>
+
+# Range of logical device of storage system (string value)
+#hitachi_ldev_range = <None>
+
+# Default copy method of storage system (string value)
+#hitachi_default_copy_method = FULL
+
+# Copy speed of storage system (integer value)
+#hitachi_copy_speed = 3
+
+# Interval to check copy (integer value)
+#hitachi_copy_check_interval = 3
+
+# Interval to check copy asynchronously (integer value)
+#hitachi_async_copy_check_interval = 10
+
+# Control port names for HostGroup or iSCSI Target (string value)
+#hitachi_target_ports = <None>
+
+# Range of group number (string value)
+#hitachi_group_range = <None>
+
+# Request for creating HostGroup or iSCSI Target (boolean value)
+#hitachi_group_request = false
+
+# Infortrend raid pool name list. It is separated with comma. (string value)
+#infortrend_pools_name =
+
+# The Infortrend CLI absolute path. By default, it is at
+# /opt/bin/Infortrend/raidcmd_ESDS10.jar (string value)
+#infortrend_cli_path = /opt/bin/Infortrend/raidcmd_ESDS10.jar
+
+# Maximum retry time for cli. Default is 5. (integer value)
+#infortrend_cli_max_retries = 5
+
+# Default timeout for CLI copy operations in minutes. Support: migrate volume,
+# create cloned volume and create volume from snapshot. By Default, it is 30
+# minutes. (integer value)
+#infortrend_cli_timeout = 30
+
+# Infortrend raid channel ID list on Slot A for OpenStack usage. It is
+# separated with comma. By default, it is the channel 0~7. (string value)
+#infortrend_slots_a_channels_id = 0,1,2,3,4,5,6,7
+
+# Infortrend raid channel ID list on Slot B for OpenStack usage. It is
+# separated with comma. By default, it is the channel 0~7. (string value)
+#infortrend_slots_b_channels_id = 0,1,2,3,4,5,6,7
+
+# Let the volume use specific provisioning. By default, it is the full
+# provisioning. The supported options are full or thin. (string value)
+#infortrend_provisioning = full
+
+# Let the volume use specific tiering level. By default, it is the level 0. The
+# supported levels are 0,2,3,4. (string value)
+#infortrend_tiering = 0
+
+# Configuration file for HDS iSCSI cinder plugin (string value)
+#hds_hnas_iscsi_config_file = /opt/hds/hnas/cinder_iscsi_conf.xml
+
+# The name of ceph cluster (string value)
+#rbd_cluster_name = ceph
+
+# The RADOS pool where rbd volumes are stored (string value)
+#rbd_pool = rbd
+
+# 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 (string value)
+#rbd_ceph_conf =
+
+# Flatten volumes created from snapshots to remove dependency from volume to
+# snapshot (boolean value)
+#rbd_flatten_volume_from_snapshot = false
+
+# The libvirt uuid of the secret for the rbd_user volumes (string value)
+#rbd_secret_uuid = <None>
+
+# Directory where temporary image files are stored when the volume driver does
+# not write them directly to the volume.  Warning: this option is now
+# deprecated, please use image_conversion_dir instead. (string value)
+#volume_tmp_dir = <None>
+
+# Maximum number of nested volume clones that are taken before a flatten
+# occurs. Set to 0 to disable cloning. (integer value)
+#rbd_max_clone_depth = 5
+
+# Volumes will be chunked into objects of this size (in megabytes). (integer
+# value)
+#rbd_store_chunk_size = 4
+
+# Timeout value (in seconds) used when connecting to ceph cluster. If value <
+# 0, no timeout is set and default librados value is used. (integer value)
+#rados_connect_timeout = -1
+
+# Number of retries if connection to ceph cluster failed. (integer value)
+#rados_connection_retries = 3
+
+# Interval value (in seconds) between connection retries to ceph cluster.
+# (integer value)
+#rados_connection_interval = 5
+
+# The hostname (or IP address) for the storage system (string value)
+#tintri_server_hostname = <None>
+
+# User name for the storage system (string value)
+#tintri_server_username = <None>
+
+# Password for the storage system (string value)
+#tintri_server_password = <None>
+
+# API version for the storage system (string value)
+#tintri_api_version = v310
+
+# Delete unused image snapshots older than mentioned days (integer value)
+#tintri_image_cache_expiry_days = 30
+
+# Path to image nfs shares file (string value)
+#tintri_image_shares_config = <None>
+
+# Backup services use same backend. (boolean value)
+#backup_use_same_host = false
+
+# Instance numbers for HORCM (string value)
+#hitachi_horcm_numbers = 200,201
+
+# Username of storage system for HORCM (string value)
+#hitachi_horcm_user = <None>
+
+# Password of storage system for HORCM (string value)
+#hitachi_horcm_password = <None>
+
+# Add to HORCM configuration (boolean value)
+#hitachi_horcm_add_conf = true
+
+# Timeout until a resource lock is released, in seconds. The value must be
+# between 0 and 7200. (integer value)
+#hitachi_horcm_resource_lock_timeout = 600
+
+# Driver to use for backups. (string value)
+#backup_driver = cinder.backup.drivers.swift
+
+# Offload pending backup delete during backup service startup. (boolean value)
+#backup_service_inithost_offload = false
+
+# Comma separated list of storage system storage pools for volumes. (list
+# value)
+#storwize_svc_volpool_name = volpool
+
+# Storage system space-efficiency parameter for volumes (percentage) (integer
+# value)
+# Minimum value: -1
+# Maximum value: 100
+#storwize_svc_vol_rsize = 2
+
+# Storage system threshold for volume capacity warnings (percentage) (integer
+# value)
+# Minimum value: -1
+# Maximum value: 100
+#storwize_svc_vol_warning = 0
+
+# Storage system autoexpand parameter for volumes (True/False) (boolean value)
+#storwize_svc_vol_autoexpand = true
+
+# Storage system grain size parameter for volumes (32/64/128/256) (integer
+# value)
+#storwize_svc_vol_grainsize = 256
+
+# Storage system compression option for volumes (boolean value)
+#storwize_svc_vol_compression = false
+
+# Enable Easy Tier for volumes (boolean value)
+#storwize_svc_vol_easytier = true
+
+# The I/O group in which to allocate volumes (integer value)
+#storwize_svc_vol_iogrp = 0
+
+# Maximum number of seconds to wait for FlashCopy to be prepared. (integer
+# value)
+# Minimum value: 1
+# Maximum value: 600
+#storwize_svc_flashcopy_timeout = 120
+
+# This option no longer has any affect. It is deprecated and will be removed in
+# the next release. (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+#storwize_svc_multihostmap_enabled = true
+
+# Allow tenants to specify QOS on create (boolean value)
+#storwize_svc_allow_tenant_qos = false
+
+# If operating in stretched cluster mode, specify the name of the pool in which
+# mirrored copies are stored.Example: "pool2" (string value)
+#storwize_svc_stretched_cluster_partner = <None>
+
+# Specifies secondary management IP or hostname to be used if san_ip is invalid
+# or becomes inaccessible. (string value)
+#storwize_san_secondary_ip = <None>
+
+# Specifies that the volume not be formatted during creation. (boolean value)
+#storwize_svc_vol_nofmtdisk = false
+
+# Specifies the Storwize FlashCopy copy rate to be used when creating a full
+# volume copy. The default is rate is 50, and the valid rates are 1-100.
+# (integer value)
+# Minimum value: 1
+# Maximum value: 100
+#storwize_svc_flashcopy_rate = 50
+
+# Request for FC Zone creating HostGroup (boolean value)
+#hitachi_zoning_request = false
 
 # Number of volumes allowed per project (integer value)
-#quota_volumes=10
-
-# Number of volume snapshots allowed per project (integer
-# value)
-#quota_snapshots=10
-
-# Number of consistencygroups allowed per project (integer
-# value)
-#quota_consistencygroups=10
-
-# Total amount of storage, in gigabytes, allowed for volumes
-# and snapshots per project (integer value)
-#quota_gigabytes=1000
+#quota_volumes = 10
+
+# Number of volume snapshots allowed per project (integer value)
+#quota_snapshots = 10
+
+# Number of consistencygroups allowed per project (integer value)
+#quota_consistencygroups = 10
+
+# Total amount of storage, in gigabytes, allowed for volumes and snapshots per
+# project (integer value)
+#quota_gigabytes = 1000
 
 # Number of volume backups allowed per project (integer value)
-#quota_backups=10
-
-# Total amount of storage, in gigabytes, allowed for backups
-# per project (integer value)
-#quota_backup_gigabytes=1000
-
-# Number of seconds until a reservation expires (integer
-# value)
-#reservation_expire=86400
-
-# Count of reservations until usage is refreshed (integer
-# value)
-#until_refresh=0
-
-# Number of seconds between subsequent usage refreshes
+#quota_backups = 10
+
+# Total amount of storage, in gigabytes, allowed for backups per project
 # (integer value)
-#max_age=0
+#quota_backup_gigabytes = 1000
+
+# Number of seconds until a reservation expires (integer value)
+#reservation_expire = 86400
+
+# Count of reservations until usage is refreshed (integer value)
+#until_refresh = 0
+
+# Number of seconds between subsequent usage refreshes (integer value)
+#max_age = 0
 
 # Default driver to use for quota checks (string value)
-#quota_driver=cinder.quota.DbQuotaDriver
-
-# Enables or disables use of default quota class with default
-# quota. (boolean value)
-#use_default_quota_class=true
-
-
-#
-# Options defined in cinder.service
-#
-
-# Interval, in seconds, between nodes reporting state to
-# datastore (integer value)
-#report_interval=10
-
-# Interval, in seconds, between running periodic tasks
-# (integer value)
-#periodic_interval=60
-
-# Range, in seconds, to randomly delay when starting the
-# periodic task scheduler to reduce stampeding. (Disable by
-# setting to 0) (integer value)
-#periodic_fuzzy_delay=60
-
-# IP address on which OpenStack Volume API listens (string
+#quota_driver = cinder.quota.DbQuotaDriver
+
+# Enables or disables use of default quota class with default quota. (boolean
+# value)
+#use_default_quota_class = true
+
+# Max size allowed per volume, in gigabytes (integer value)
+#per_volume_size_limit = -1
+
+# The configuration file for the Cinder Huawei driver. (string value)
+#cinder_huawei_conf_file = /etc/cinder/cinder_huawei_conf.xml
+
+# The remote device hypermetro will use. (string value)
+#hypermetro_devices = <None>
+
+# Storage Center System Serial Number (integer value)
+#dell_sc_ssn = 64702
+
+# Dell API port (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#dell_sc_api_port = 3033
+
+# Name of the server folder to use on the Storage Center (string value)
+#dell_sc_server_folder = openstack
+
+# Name of the volume folder to use on the Storage Center (string value)
+#dell_sc_volume_folder = openstack
+
+# Enable HTTPS SC certificate verification. (boolean value)
+#dell_sc_verify_cert = false
+
+# Which filter class names to use for filtering hosts when not specified in the
+# request. (list value)
+#scheduler_default_filters = AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
+
+# Which weigher class names to use for weighing hosts. (list value)
+#scheduler_default_weighers = CapacityWeigher
+
+# Default scheduler driver to use (string value)
+#scheduler_driver = cinder.scheduler.filter_scheduler.FilterScheduler
+
+# Base dir containing mount point for NFS share. (string value)
+#backup_mount_point_base = $state_path/backup_mount
+
+# NFS share in hostname:path, ipv4addr:path, or "[ipv6addr]:path" format.
+# (string value)
+#backup_share = <None>
+
+# Mount options passed to the NFS client. See NFS man page for details. (string
+# value)
+#backup_mount_options = <None>
+
+# IP address/hostname of Blockbridge API. (string value)
+#blockbridge_api_host = <None>
+
+# Override HTTPS port to connect to Blockbridge API server. (integer value)
+#blockbridge_api_port = <None>
+
+# Blockbridge API authentication scheme (token or password) (string value)
+# Allowed values: token, password
+#blockbridge_auth_scheme = token
+
+# Blockbridge API token (for auth scheme 'token') (string value)
+#blockbridge_auth_token = <None>
+
+# Blockbridge API user (for auth scheme 'password') (string value)
+#blockbridge_auth_user = <None>
+
+# Blockbridge API password (for auth scheme 'password') (string value)
+#blockbridge_auth_password = <None>
+
+# Defines the set of exposed pools and their associated backend query strings
+# (dict value)
+#blockbridge_pools = OpenStack:+openstack
+
+# Default pool name if unspecified. (string value)
+#blockbridge_default_pool = <None>
+
+# Absolute path to scheduler configuration JSON file. (string value)
+#scheduler_json_config_location =
+
+# Data path IP address (string value)
+#zfssa_data_ip = <None>
+
+# HTTPS port number (string value)
+#zfssa_https_port = 443
+
+# Options to be passed while mounting share over nfs (string value)
+#zfssa_nfs_mount_options =
+
+# Storage pool name. (string value)
+#zfssa_nfs_pool =
+
+# Project name. (string value)
+#zfssa_nfs_project = NFSProject
+
+# Share name. (string value)
+#zfssa_nfs_share = nfs_share
+
+# Data compression. (string value)
+# Allowed values: off, lzjb, gzip-2, gzip, gzip-9
+#zfssa_nfs_share_compression = off
+
+# Synchronous write bias-latency, throughput. (string value)
+# Allowed values: latency, throughput
+#zfssa_nfs_share_logbias = latency
+
+# Name of directory inside zfssa_nfs_share where cache volumes are stored.
+# (string value)
+#zfssa_cache_directory = os-cinder-cache
+
+# The IP of DMS client socket server (IP address value)
+#disco_client = 127.0.0.1
+
+# The port to connect DMS client socket server (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#disco_client_port = 9898
+
+# Path to the wsdl file to communicate with DISCO request manager (string
+# value)
+#disco_wsdl_path = /etc/cinder/DISCOService.wsdl
+
+# Prefix before volume name to differenciate DISCO volume created through
+# openstack and the other ones (string value)
+#volume_name_prefix = openstack-
+
+# How long we check whether a snapshot is finished before we give up (integer
+# value)
+#snapshot_check_timeout = 3600
+
+# How long we check whether a restore is finished before we give up (integer
+# value)
+#restore_check_timeout = 3600
+
+# How long we check whether a clone is finished before we give up (integer
+# value)
+#clone_check_timeout = 3600
+
+# How long we wait before retrying to get an item detail (integer value)
+#retry_interval = 1
+
+# Space network name to use for data transfer (string value)
+#hgst_net = Net 1 (IPv4)
+
+# Comma separated list of Space storage servers:devices. ex:
+# os1_stor:gbd0,os2_stor:gbd0 (string value)
+#hgst_storage_servers = os:gbd0
+
+# Should spaces be redundantly stored (1/0) (string value)
+#hgst_redundancy = 0
+
+# User to own created spaces (string value)
+#hgst_space_user = root
+
+# Group to own created spaces (string value)
+#hgst_space_group = disk
+
+# UNIX mode for created spaces (string value)
+#hgst_space_mode = 0600
+
+# Directory used for temporary storage during image conversion (string value)
+#image_conversion_dir = $state_path/conversion
+
+# Match this value when searching 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:Compute Service:publicURL
+
+# Same as nova_catalog_info, but for admin endpoint. (string value)
+#nova_catalog_admin_info = compute:Compute Service:adminURL
+
+# Override service catalog lookup with template for nova endpoint e.g.
+# http://localhost:8774/v2/%(project_id)s (string value)
+#nova_endpoint_template = <None>
+
+# Same as nova_endpoint_template, but for admin endpoint. (string value)
+#nova_endpoint_admin_template = <None>
+
+# Region name of this node (string value)
+#os_region_name = <None>
+
+# Location of ca certificates file to use for nova client requests. (string
 # value)
-#osapi_volume_listen=0.0.0.0
-
-# Port on which OpenStack Volume API listens (integer value)
-#osapi_volume_listen_port=8776
-
-# Number of workers for OpenStack Volume API service. The
-# default is equal to the number of CPUs available. (integer
-# value)
-osapi_volume_workers=1
-
-
-#
-# Options defined in cinder.ssh_utils
+#nova_ca_certificates_file = <None>
+
+# Allow to perform insecure SSL requests to nova (boolean value)
+#nova_api_insecure = false
+
+# This option no longer has any affect. It is deprecated and will be removed in
+# the next release. (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+#flashsystem_multipath_enabled = false
+
+# DPL pool uuid in which DPL volumes are stored. (string value)
+#dpl_pool =
+
+# DPL port number. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#dpl_port = 8357
+
+# Request for FC Zone creating host group (boolean value)
+# Deprecated group/name - [DEFAULT]/hpxp_zoning_request
+#hpexp_zoning_request = false
+
+# Type of storage command line interface (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_storage_cli
+#hpexp_storage_cli = <None>
+
+# ID of storage system (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_storage_id
+#hpexp_storage_id = <None>
+
+# Pool of storage system (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_pool
+#hpexp_pool = <None>
+
+# Thin pool of storage system (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_thin_pool
+#hpexp_thin_pool = <None>
+
+# Logical device range of storage system (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_ldev_range
+#hpexp_ldev_range = <None>
+
+# Default copy method of storage system. There are two valid values: "FULL"
+# specifies that a full copy; "THIN" specifies that a thin copy. Default value
+# is "FULL" (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_default_copy_method
+#hpexp_default_copy_method = FULL
+
+# Copy speed of storage system (integer value)
+# Deprecated group/name - [DEFAULT]/hpxp_copy_speed
+#hpexp_copy_speed = 3
+
+# Interval to check copy (integer value)
+# Deprecated group/name - [DEFAULT]/hpxp_copy_check_interval
+#hpexp_copy_check_interval = 3
+
+# Interval to check copy asynchronously (integer value)
+# Deprecated group/name - [DEFAULT]/hpxp_async_copy_check_interval
+#hpexp_async_copy_check_interval = 10
+
+# Target port names for host group or iSCSI target (list value)
+# Deprecated group/name - [DEFAULT]/hpxp_target_ports
+#hpexp_target_ports = <None>
+
+# Target port names of compute node for host group or iSCSI target (list value)
+# Deprecated group/name - [DEFAULT]/hpxp_compute_target_ports
+#hpexp_compute_target_ports = <None>
+
+# Request for creating host group or iSCSI target (boolean value)
+# Deprecated group/name - [DEFAULT]/hpxp_group_request
+#hpexp_group_request = false
+
+# Instance numbers for HORCM (list value)
+# Deprecated group/name - [DEFAULT]/hpxp_horcm_numbers
+#hpexp_horcm_numbers = 200,201
+
+# Username of storage system for HORCM (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_horcm_user
+#hpexp_horcm_user = <None>
+
+# Add to HORCM configuration (boolean value)
+# Deprecated group/name - [DEFAULT]/hpxp_horcm_add_conf
+#hpexp_horcm_add_conf = true
+
+# Resource group name of storage system for HORCM (string value)
+# Deprecated group/name - [DEFAULT]/hpxp_horcm_resource_name
+#hpexp_horcm_resource_name = meta_resource
+
+# Only discover a specific name of host group or iSCSI target (boolean value)
+# Deprecated group/name - [DEFAULT]/hpxp_horcm_name_only_discovery
+#hpexp_horcm_name_only_discovery = false
+
+# Add CHAP user (boolean value)
+#hitachi_add_chap_user = false
+
+# iSCSI authentication method (string value)
+#hitachi_auth_method = <None>
+
+# iSCSI authentication username (string value)
+#hitachi_auth_user = HBSD-CHAP-user
+
+# iSCSI authentication password (string value)
+#hitachi_auth_password = HBSD-CHAP-password
+
+# Driver to use for volume creation (string value)
 #
-
-# Option to enable strict host key checking.  When set to
-# "True" Cinder will only connect to systems with a host key
-# present in the configured "ssh_hosts_key_file".  When set to
-# "False" the host key will be saved upon first connection and
-# used for subsequent connections.  Default=False (boolean
+# The local ZFS driver provides direct access to ZFS volumes that it
+# creates. The other listed drivers provide access to ZFS volumes via
+# iSCSI, Fibre Channel, or NFS and are suitable for cases where block storage
+# for Nova compute instances is shared.
+volume_driver = cinder.volume.drivers.solaris.zfs.ZFSVolumeDriver
+#volume_driver = cinder.volume.drivers.solaris.zfs.ZFSISCSIDriver
+#volume_driver = cinder.volume.drivers.solaris.zfs.ZFSFCDriver
+#volume_driver = cinder.volume.drivers.solaris.nfs.ZfsNfsVolumeDriver
+#volume_driver = cinder.volume.drivers.zfssa.zfssaiscsi.ZFSSAISCSIDriver
+
+# Timeout for creating the volume to migrate to when performing volume
+# migration (seconds) (integer value)
+#migration_create_volume_timeout_secs = 300
+
+# Offload pending volume delete during volume service startup (boolean value)
+#volume_service_inithost_offload = false
+
+# FC Zoning mode configured (string value)
+#zoning_mode = <None>
+
+# User defined capabilities, a JSON formatted string specifying key/value
+# pairs. The key/value pairs can be used by the CapabilitiesFilter to select
+# between backends when requests specify volume types. For example, specifying
+# a service level or the geographical location of a backend, then creating a
+# volume type to allow the user to select by these different properties.
+# (string value)
+#extra_capabilities = {}
+
+# Suppress requests library SSL certificate warnings. (boolean value)
+#suppress_requests_ssl_warnings = false
+
+# Default iSCSI Port ID of FlashSystem. (Default port is 0.) (integer value)
+#flashsystem_iscsi_portid = 0
+
+# Create volumes in this pool (string value)
+#tegile_default_pool = <None>
+
+# Create volumes in this project (string value)
+#tegile_default_project = <None>
+
+# Connection protocol should be FC. (Default is FC.) (string value)
+#flashsystem_connection_protocol = FC
+
+# Allows vdisk to multi host mapping. (Default is True) (boolean value)
+#flashsystem_multihostmap_enabled = true
+
+# Enables the Force option on upload_to_image. This enables running
+# upload_volume on in-use volumes for backends that support it. (boolean value)
+#enable_force_upload = false
+
+# Create volume from snapshot at the host where snapshot 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
+
+# Cache volume availability zones in memory for the provided duration in
+# seconds (integer value)
+#az_cache_duration = 3600
+
+# 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 (string value)
+# Allowed values: fibre_channel, iscsi
+#xiv_ds8k_connection_type = iscsi
+
+# CHAP authentication mode, effective only for iscsi (disabled|enabled) (string
 # value)
-#strict_ssh_host_key_policy=false
-
-# File containing SSH host keys for the systems with which
-# Cinder needs to communicate.  OPTIONAL:
-# Default=$state_path/ssh_known_hosts (string value)
-#ssh_hosts_key_file=$state_path/ssh_known_hosts
-
+# Allowed values: disabled, enabled
+#xiv_chap = disabled
+
+# List of Management IP addresses (separated by commas) (string value)
+#management_ips =
+
+# 3PAR WSAPI Server Url like https://<3par ip>:8080/api/v1 (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_api_url
+#hpe3par_api_url =
+
+# 3PAR username with the 'edit' role (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_username
+#hpe3par_username =
+
+# 3PAR password for the user specified in hpe3par_username (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_password
+#hpe3par_password =
+
+# List of the CPG(s) to use for volume creation (list value)
+# Deprecated group/name - [DEFAULT]/hp3par_cpg
+#hpe3par_cpg = OpenStack
+
+# The CPG to use for Snapshots for volumes. If empty the userCPG will be used.
+# (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_cpg_snap
+#hpe3par_cpg_snap =
+
+# The time in hours to retain a snapshot.  You can't delete it before this
+# expires. (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_snapshot_retention
+#hpe3par_snapshot_retention =
+
+# The time in hours when a snapshot expires  and is deleted.  This must be
+# larger than expiration (string value)
+# Deprecated group/name - [DEFAULT]/hp3par_snapshot_expiration
+#hpe3par_snapshot_expiration =
+
+# Enable HTTP debugging to 3PAR (boolean value)
+# Deprecated group/name - [DEFAULT]/hp3par_debug
+#hpe3par_debug = false
+
+# List of target iSCSI addresses to use. (list value)
+# Deprecated group/name - [DEFAULT]/hp3par_iscsi_ips
+#hpe3par_iscsi_ips =
+
+# Enable CHAP authentication for iSCSI connections. (boolean value)
+# Deprecated group/name - [DEFAULT]/hp3par_iscsi_chap_enabled
+#hpe3par_iscsi_chap_enabled = false
+
+# Datera API port. (string value)
+#datera_api_port = 7717
+
+# Datera API version. (string value)
+#datera_api_version = 2
+
+# Number of replicas to create of an inode. (string value)
+#datera_num_replicas = 1
+
+# List of all available devices (list value)
+#available_devices =
+
+# URL to the Quobyte volume e.g., quobyte://<DIR host>/<volume name> (string
+# value)
+#quobyte_volume_url = <None>
+
+# Path to a Quobyte Client configuration file. (string value)
+#quobyte_client_cfg = <None>
+
+# Create volumes as sparse files which take no space. If set to False, volume
+# is created as regular file.In such case volume creation takes a lot of time.
+# (boolean value)
+#quobyte_sparsed_volumes = true
+
+# Create volumes as QCOW2 files rather than raw files. (boolean value)
+#quobyte_qcow2_volumes = true
+
+# Base dir containing the mount point for the Quobyte volume. (string value)
+#quobyte_mount_point_base = $state_path/mnt
+
+# File with the list of available vzstorage shares. (string value)
+#vzstorage_shares_config = /etc/cinder/vzstorage_shares
+
+# Create volumes as sparsed files which take no space rather than regular files
+# when using raw format, in which case volume creation takes lot of time.
+# (boolean value)
+#vzstorage_sparsed_volumes = true
+
+# Percent of ACTUAL usage of the underlying volume before no new volumes can be
+# allocated to the volume destination. (floating point value)
+#vzstorage_used_ratio = 0.95
+
+# Base dir containing mount points for vzstorage shares. (string value)
+#vzstorage_mount_point_base = $state_path/mnt
+
+# Mount options passed to the vzstorage client. See section of the pstorage-
+# mount man page for details. (list value)
+#vzstorage_mount_options = <None>
+
+# File with the list of available NFS shares (string value)
+#nfs_shares_config = /etc/cinder/nfs_shares
+
+# Create volumes as sparsed files which take no space.If set to False volume is
+# created as regular file.In such case volume creation takes a lot of time.
+# (boolean value)
+#nfs_sparsed_volumes = true
+
+# Base dir containing mount points for NFS shares. (string value)
+#nfs_mount_point_base = $state_path/mnt
+
+# Mount options passed to the NFS client. See section of the NFS man page for
+# details. (string value)
+#nfs_mount_options = <None>
+
+# The number of attempts to mount NFS shares before raising an error.  At least
+# one attempt will be made to mount an NFS share, regardless of the value
+# specified. (integer value)
+#nfs_mount_attempts = 3
+
+# If this option is specified then the start time specified is used instead of
+# the start time of the last completed audit period. (string value)
+#start_time = <None>
+
+# If this option is specified then the end time specified is used instead of
+# the end time of the last completed audit period. (string value)
+#end_time = <None>
+
+# Send the volume and snapshot create and delete notifications generated in the
+# specified period. (boolean value)
+#send_actions = false
 
 #
-# Options defined in cinder.wsgi
+# From oslo.config
 #
 
-# Maximum line size of message headers to be accepted.
-# max_header_line may need to be increased when using large
-# tokens (typically those generated by the Keystone v3 API
-# with big service catalogs). (integer value)
-#max_header_line=16384
-
-# Timeout for client connections' socket operations. If an
-# incoming connection is idle for this number of seconds it
-# will be closed. A value of '0' means wait forever. (integer
+# Path to a config file to use. Multiple config files can be specified, with
+# values in later files taking precedence. Defaults to %(default)s. (unknown
 # value)
-#client_socket_timeout=900
-
-# If False, closes the client socket connection explicitly.
-# Setting it to True to maintain backward compatibility.
-# Recommended setting is set it to False. (boolean value)
-#wsgi_keep_alive=true
-
-# Sets the value of TCP_KEEPALIVE (True/False) for each server
-# socket. (boolean value)
-#tcp_keepalive=true
-
-# Sets the value of TCP_KEEPIDLE in seconds for each server
-# socket. Not supported on OS X. (integer value)
-#tcp_keepidle=600
-
-# Sets the value of TCP_KEEPINTVL in seconds for each server
-# socket. Not supported on OS X. (integer value)
-#tcp_keepalive_interval=<None>
-
-# Sets the value of TCP_KEEPCNT for each server socket. Not
-# supported on OS X. (integer value)
-#tcp_keepalive_count=<None>
-
-# CA certificate file to use to verify connecting clients
-# (string value)
-#ssl_ca_file=<None>
-
-# Certificate file to use when starting the server securely
-# (string value)
-#ssl_cert_file=<None>
-
-# Private key file to use when starting the server securely
-# (string value)
-#ssl_key_file=<None>
-
+#config_file = ~/.project/project.conf,~/project.conf,/etc/project/project.conf,/etc/project.conf
+
+# Path to a config directory to pull *.conf files from. This file set is
+# sorted, so as to provide a predictable parse order if individual options are
+# over-ridden. The set is parsed after the file(s) specified via previous
+# --config-file, arguments hence over-ridden options in the directory take
+# precedence. (list value)
+#config_dir = <None>
 
 #
-# Options defined in cinder.api.common
-#
-
-# The maximum number of items that a collection resource
-# returns in a single response (integer value)
-#osapi_max_limit=1000
-
-# Base URL that will be presented to users in links to the
-# OpenStack Volume API (string value)
-# Deprecated group/name - [DEFAULT]/osapi_compute_link_prefix
-#osapi_volume_base_URL=<None>
-
-
-#
-# Options defined in cinder.api.middleware.auth
-#
-
-# Treat X-Forwarded-For as the canonical remote address. Only
-# enable this if you have a sanitizing proxy. (boolean value)
-#use_forwarded_for=false
-
-
-#
-# Options defined in cinder.api.middleware.sizelimit
-#
-
-# Max size for body of a request (integer value)
-#osapi_max_request_body_size=114688
-
-
-#
-# Options defined in cinder.api.views.versions
+# From oslo.log
 #
 
-# Public url to use for versions endpoint. The default is
-# None, which will use the request's host_url attribute to
-# populate the URL base. If Cinder is operating behind a
-# proxy, you will want to change this to represent the proxy's
-# URL. (string value)
-#public_endpoint=<None>
-
-
-#
-# Options defined in cinder.backup.chunkeddriver
-#
-
-# Compression algorithm (None to disable) (string value)
-#backup_compression_algorithm=zlib
-
-
-#
-# Options defined in cinder.backup.driver
-#
-
-# Backup metadata version to be used when backing up volume
-# metadata. If this number is bumped, make sure the service
-# doing the restore supports the new version. (integer value)
-#backup_metadata_version=2
-
-# The number of chunks or objects, for which one Ceilometer
-# notification will be sent (integer value)
-#backup_object_number_per_notification=10
-
-# Interval, in seconds, between two progress notifications
-# reporting the backup status (integer value)
-#backup_timer_interval=120
-
+# If set to true, the logging level will be set to DEBUG instead of the default
+# INFO level. (boolean value)
+#debug = false
+
+# If set to false, the logging level will be set to WARNING instead of the
+# default INFO level. (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+#verbose = true
+
+# The name of a logging configuration file. This file is appended to any
+# existing logging configuration files. For details about logging configuration
+# files, see the Python logging module documentation. Note that when logging
+# configuration files are used then all logging configuration is set in the
+# configuration file and other logging configuration options are ignored (for
+# example, logging_context_format_string). (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append = <None>
+
+# Defines the format string for %%(asctime)s in log records. Default:
+# %(default)s . This option is ignored if log_config_append is set. (string
+# value)
+#log_date_format = %Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to send logging output to. If no default is set,
+# logging will go to stderr as defined by use_stderr. This option is ignored if
+# log_config_append is set. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
+#log_file = <None>
+
+# (Optional) The base directory used for relative log_file  paths. This option
+# is ignored if log_config_append is set. (string value)
+# Deprecated group/name - [DEFAULT]/logdir
+#log_dir = <None>
+
+# Uses logging handler designed to watch file system. When log file is moved or
+# removed this handler will open a new log file with specified path
+# instantaneously. It makes sense only if log_file option is specified and
+# Linux platform is used. This option is ignored if log_config_append is set.
+# (boolean value)
+#watch_log_file = false
+
+# Use syslog for logging. Existing syslog format is DEPRECATED and will be
+# changed later to honor RFC5424. This option is ignored if log_config_append
+# is set. (boolean value)
+#use_syslog = false
+
+# Syslog facility to receive log lines. This option is ignored if
+# log_config_append is set. (string value)
+#syslog_log_facility = LOG_USER
+
+# Log output to standard error. This option is ignored if log_config_append is
+# set. (boolean value)
+#use_stderr = true
+
+# Format string to use for log messages with context. (string value)
+#logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages when context is undefined. (string
+# value)
+#logging_default_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+
+# Additional data to append to log message when logging level for the message
+# is DEBUG. (string value)
+#logging_debug_format_suffix = %(funcName)s %(pathname)s:%(lineno)d
+
+# Prefix each line of exception output with this format. (string value)
+#logging_exception_prefix = %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s
+
+# Defines the format string for %(user_identity)s that is used in
+# logging_context_format_string. (string value)
+#logging_user_identity_format = %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s
+
+# List of package logging levels in logger=LEVEL pairs. This option is ignored
+# if log_config_append is set. (list value)
+#default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO
+
+# Enables or disables publication of error events. (boolean value)
+#publish_errors = false
+
+# The format for an instance that is passed with the log message. (string
+# value)
+#instance_format = "[instance: %(uuid)s] "
+
+# The format for an instance UUID that is passed with the log message. (string
+# value)
+#instance_uuid_format = "[instance: %(uuid)s] "
+
+# Enables or disables fatal status of deprecations. (boolean value)
+#fatal_deprecations = false
 
 #
-# Options defined in cinder.backup.drivers.ceph
-#
-
-# Ceph configuration file to use. (string value)
-#backup_ceph_conf=/etc/ceph/ceph.conf
-
-# The Ceph user to connect with. Default here is to use the
-# same user as for Cinder volumes. If not using cephx this
-# should be set to None. (string value)
-#backup_ceph_user=cinder
-
-# The chunk size, in bytes, that a backup is broken into
-# before transfer to the Ceph object store. (integer value)
-#backup_ceph_chunk_size=134217728
-
-# The Ceph pool where volume backups are stored. (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
-
-# If True, always discard excess bytes when restoring volumes
-# i.e. pad with zeroes. (boolean value)
-#restore_discard_excess_bytes=true
-
-
-#
-# Options defined in cinder.backup.drivers.nfs
+# From oslo.messaging
 #
 
-# The maximum size in bytes of the files used to hold backups.
-# If the volume being backed up exceeds this size, then it
-# will be backed up into multiple files. backup_file_size must
-# be a multiple of backup_sha_block_size_bytes. (integer
+# Size of RPC connection pool. (integer value)
+# Deprecated group/name - [DEFAULT]/rpc_conn_pool_size
+#rpc_conn_pool_size = 30
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP.
+# The "host" option should point or resolve to this address. (string value)
+#rpc_zmq_bind_address = *
+
+# MatchMaker driver. (string value)
+# Allowed values: redis, dummy
+#rpc_zmq_matchmaker = redis
+
+# Type of concurrency used. Either "native" or "eventlet" (string value)
+#rpc_zmq_concurrency = eventlet
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts = 1
+
+# Maximum number of ingress messages to locally buffer per topic. Default is
+# unlimited. (integer value)
+#rpc_zmq_topic_backlog = <None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir = /var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP address. Must match
+# "host" option, if running Nova. (string value)
+#rpc_zmq_host = localhost
+
+# Seconds to wait before a cast expires (TTL). The default value of -1
+# specifies an infinite linger period. The value of 0 specifies no linger
+# period. Pending messages shall be discarded immediately when the socket is
+# closed. Only supported by impl_zmq. (integer value)
+#rpc_cast_timeout = -1
+
+# The default number of seconds that poll should wait. Poll raises timeout
+# exception when timeout expired. (integer value)
+#rpc_poll_timeout = 1
+
+# Expiration timeout in seconds of a name service record about existing target
+# ( < 0 means no timeout). (integer value)
+#zmq_target_expire = 120
+
+# Use PUB/SUB pattern for fanout methods. PUB/SUB always uses proxy. (boolean
 # value)
-#backup_file_size=1999994880
-
-# The size in bytes that changes are tracked for incremental
-# backups. backup_file_size has to be multiple of
-# backup_sha_block_size_bytes. (integer value)
-#backup_sha_block_size_bytes=32768
-
-# Enable or Disable the timer to send the periodic progress
-# notifications to Ceilometer when backing up the volume to
-# the backend storage. The default value is True to enable the
-# timer. (boolean value)
-#backup_enable_progress_timer=true
-
-# Base dir containing mount point for NFS share. (string
-# value)
-#backup_mount_point_base=$state_path/backup_mount
-
-# NFS share in fqdn:path, ipv4addr:path, or "[ipv6addr]:path"
-# format. (string value)
-#backup_share=<None>
-
-# Mount options passed to the NFS client. See NFS man page for
-# details. (string value)
-#backup_mount_options=<None>
-
-# Custom container to use for backups. (string value)
-#backup_container=<None>
-
+#use_pub_sub = true
+
+# Minimal port number for random ports range. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#rpc_zmq_min_port = 49152
+
+# Maximal port number for random ports range. (integer value)
+# Minimum value: 1
+# Maximum value: 65536
+#rpc_zmq_max_port = 65536
+
+# Number of retries to find free port number before fail with ZMQBindError.
+# (integer value)
+#rpc_zmq_bind_port_retries = 100
+
+# Size of executor thread pool. (integer value)
+# Deprecated group/name - [DEFAULT]/rpc_thread_pool_size
+#executor_thread_pool_size = 64
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout = 60
+
+# A URL representing the messaging driver to use and its full configuration. If
+# not set, we fall back to the rpc_backend option and driver specific
+# configuration. (string value)
+#transport_url = <None>
+
+# The messaging driver to use, defaults to rabbit. Other drivers include amqp
+# and zmq. (string value)
+#rpc_backend = rabbit
+
+# The default exchange under which topics are scoped. May be overridden by an
+# exchange name specified in the transport_url option. (string value)
+#control_exchange = openstack
 
 #
-# Options defined in cinder.backup.drivers.swift
+# From oslo.service.periodic_task
+#
+
+# Some periodic tasks can be run in a separate process. Should we run them
+# here? (boolean value)
+#run_external_periodic_tasks = true
+
+#
+# From oslo.service.service
 #
 
-# The URL of the Swift endpoint (string value)
-#backup_swift_url=<None>
-
-# Info to match when looking for swift in the service catalog.
-# Format is: separated values of the form:
-# <service_type>:<service_name>:<endpoint_type> - Only used if
-# backup_swift_url is unset (string value)
-#swift_catalog_info=object-store:swift:publicURL
-
-# Swift authentication mechanism (string value)
-#backup_swift_auth=per_user
-
-# Swift authentication version. Specify "1" for auth 1.0, or
-# "2" for auth 2.0 (string value)
-#backup_swift_auth_version=1
-
-# Swift tenant/account name. Required when connecting to an
-# auth 2.0 system (string value)
-#backup_swift_tenant=<None>
-
-# 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 size in bytes that changes are tracked for incremental
-# backups. backup_swift_object_size has to be multiple of
-# backup_swift_block_size. (integer value)
-#backup_swift_block_size=32768
-
-# 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
-
-# Enable or Disable the timer to send the periodic progress
-# notifications to Ceilometer when backing up the volume to
-# the Swift backend storage. The default value is True to
-# enable the timer. (boolean value)
-#backup_swift_enable_progress_timer=true
-
+# Enable eventlet backdoor.  Acceptable values are 0, <port>, and
+# <start>:<end>, where 0 results in listening on a random tcp port number;
+# <port> results in listening on the specified port number (and not enabling
+# backdoor if that port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range of port numbers.
+# The chosen port is displayed in the service's log file. (string value)
+#backdoor_port = <None>
+
+# Enable eventlet backdoor, using the provided path as a unix socket that can
+# receive connections. This option is mutually exclusive with 'backdoor_port'
+# in that only one should be provided. If both are provided then the existence
+# of this option overrides the usage of that option. (string value)
+#backdoor_socket = <None>
+
+# Enables or disables logging values of all registered options when starting a
+# service (at DEBUG level). (boolean value)
+#log_options = true
+
+# Specify a timeout after which a gracefully shutdown server will exit. Zero
+# value means endless wait. (integer value)
+#graceful_shutdown_timeout = 60
 
 #
-# Options defined in cinder.backup.drivers.tsm
+# From oslo.service.wsgi
 #
 
-# Volume prefix for the backup id when backing up to TSM
-# (string value)
-#backup_tsm_volume_prefix=backup
-
-# TSM password for the running username (string value)
-#backup_tsm_password=password
-
-# Enable or Disable compression for backups (boolean value)
-#backup_tsm_compression=true
-
+# File name for the paste.deploy config for api service (string value)
+#api_paste_config = api-paste.ini
+
+# A python format string that is used as the template to generate log lines.
+# The following values can beformatted into it: client_ip, date_time,
+# request_line, status_code, body_length, wall_seconds. (string value)
+#wsgi_log_format = %(client_ip)s "%(request_line)s" status: %(status_code)s  len: %(body_length)s time: %(wall_seconds).7f
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not
+# supported on OS X. (integer value)
+#tcp_keepidle = 600
+
+# Size of the pool of greenthreads used by wsgi (integer value)
+#wsgi_default_pool_size = 100
+
+# Maximum line size of message headers to be accepted. max_header_line may need
+# to be increased when using large tokens (typically those generated when
+# keystone is configured to use PKI tokens with big service catalogs). (integer
+# value)
+#max_header_line = 16384
+
+# If False, closes the client socket connection explicitly. (boolean value)
+#wsgi_keep_alive = true
+
+# Timeout for client connections' socket operations. If an incoming connection
+# is idle for this number of seconds it will be closed. A value of '0' means
+# wait forever. (integer value)
+#client_socket_timeout = 900
+
+
+[BACKEND]
 
 #
-# Options defined in cinder.backup.manager
-#
-
-# Driver to use for backups. (string value)
-# Deprecated group/name - [DEFAULT]/backup_service
-#backup_driver=cinder.backup.drivers.swift
-
-
-#
-# Options defined in cinder.cmd.volume
+# From cinder
 #
 
 # Backend override of host value. (string value)
 # Deprecated group/name - [DEFAULT]/host
-#backend_host=<None>
-
-
-#
-# Options defined in cinder.cmd.volume_usage_audit
-#
-
-# If this option is specified then the start time specified is
-# used instead of the start time of the last completed audit
-# period. (string value)
-#start_time=<None>
-
-# If this option is specified then the end time specified is
-# used instead of the end time of the last completed audit
-# period. (string value)
-#end_time=<None>
-
-# Send the volume and snapshot create and delete notifications
-# generated in the specified period. (boolean value)
-#send_actions=false
-
-
-#
-# Options defined in cinder.common.config
-#
-
-# File name for the paste.deploy config for cinder-api (string
-# value)
-#api_paste_config=api-paste.ini
-
-# Top-level directory for maintaining cinder's state (string
-# value)
-# Deprecated group/name - [DEFAULT]/pybasedir
-#state_path=/var/lib/cinder
-
-# IP address of this host (string value)
-#my_ip=10.0.0.1
-
-# Default glance host name 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
-
-# Enables or disables negotiation of SSL layer compression. In
-# some cases disabling compression can improve data
-# throughput, such as when high network bandwidth is available
-# and you use compressed image formats like qcow2. (boolean
-# value)
-#glance_api_ssl_compression=false
-
-# Location of ca certificates file to use for glance client
-# requests. (string value)
-#glance_ca_certificates_file=<None>
-
-# 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 that scheduler nodes listen on (string value)
-#scheduler_topic=cinder-scheduler
-
-# The topic that volume nodes listen on (string value)
-#volume_topic=cinder-volume
-
-# The topic that volume backup nodes listen on (string value)
-#backup_topic=cinder-backup
-
-# DEPRECATED: Deploy v1 of the Cinder API. (boolean value)
-#enable_v1_api=true
-
-# Deploy v2 of the Cinder API. (boolean value)
-#enable_v2_api=true
-
-# Enables or disables rate limit of 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 host name, FQDN, or IP address. (string
-# value)
-#host=cinder
-
-# Availability zone of this node (string value)
-#storage_availability_zone=nova
-
-# Default availability zone for new volumes. If not set, the
-# storage_availability_zone option value is used as the
-# default for new volumes. (string value)
-#default_availability_zone=<None>
-
-# Default volume type to use (string value)
-#default_volume_type=<None>
-
-# Time period for which to generate volume usages. The options
-# are hour, day, month, or year. (string value)
-#volume_usage_audit_period=month
-
-# Path to the rootwrap configuration file to use for running
-# commands as root (string value)
-#rootwrap_config=/etc/cinder/rootwrap.conf
-
-# Enable 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 a service to be
-# considered up (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=keystone
-
-# 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
-
-# The full class name of the volume transfer API class (string
-# value)
-#transfer_api_class=cinder.transfer.api.API
-
-# The full class name of the volume replication API class
-# (string value)
-#replication_api_class=cinder.replication.api.API
-
-# The full class name of the consistencygroup API class
-# (string value)
-#consistencygroup_api_class=cinder.consistencygroup.api.API
-
-# OpenStack privileged account username. Used for requests to
-# other services (such as Nova) that require an account with
-# special rights. (string value)
-#os_privileged_user_name=<None>
-
-# Password associated with the OpenStack privileged account.
-# (string value)
-#os_privileged_user_password=<None>
-
-# Tenant name associated with the OpenStack privileged
-# account. (string value)
-#os_privileged_user_tenant=<None>
-
-
-#
-# 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.compute.nova
-#
-
-# Match this value when searching 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:Compute Service:publicURL
-
-# Same as nova_catalog_info, but for admin endpoint. (string
-# value)
-#nova_catalog_admin_info=compute:Compute Service:adminURL
-
-# Override service catalog lookup with template for nova
-# endpoint e.g. http://localhost:8774/v2/%(project_id)s
-# (string value)
-#nova_endpoint_template=<None>
-
-# Same as nova_endpoint_template, but for admin endpoint.
-# (string value)
-#nova_endpoint_admin_template=<None>
-
-# Region name of this node (string value)
-#os_region_name=<None>
-
-# Location of ca certificates file to use for nova client
-# requests. (string value)
-#nova_ca_certificates_file=<None>
-
-# Allow to perform insecure SSL requests to nova (boolean
-# value)
-#nova_api_insecure=false
-
-
-#
-# Options defined in cinder.db.api
-#
-
-# Services to be added to the available pool on create
-# (boolean value)
-#enable_new_services=true
-
-# Template string to be used to generate volume names (string
-# value)
-#volume_name_template=volume-%s
-
-# Template string to be used to generate snapshot names
-# (string value)
-#snapshot_name_template=snapshot-%s
-
-# Template string to be used to generate backup names (string
-# value)
-#backup_name_template=backup-%s
-
-
-#
-# Options defined in cinder.db.base
-#
-
-# Driver to use for database access (string value)
-#db_driver=cinder.db
-
-
-#
-# Options defined in cinder.image.glance
-#
-
-# Default core properties of image (list value)
-#glance_core_properties=checksum,container_format,disk_format,image_name,image_id,min_disk,min_ram,name,size
-
-# A list of url schemes that can be downloaded directly via
-# the direct_url.  Currently supported schemes: [file]. (list
-# value)
-#allowed_direct_url_schemes=
-
-
-#
-# Options defined in cinder.image.image_utils
-#
-
-# Directory used for temporary storage during image conversion
-# (string value)
-#image_conversion_dir=$state_path/conversion
-
-
-#
-# Options defined in cinder.openstack.common.eventlet_backdoor
-#
-
-# Enable eventlet backdoor.  Acceptable values are 0, <port>,
-# and <start>:<end>, where 0 results in listening on a random
-# tcp port number; <port> results in listening on the
-# specified port number (and not enabling backdoor if that
-# port is in use); and <start>:<end> results in listening on
-# the smallest unused port number within the specified range
-# of port numbers.  The chosen port is displayed in the
-# service's log file. (string value)
-#backdoor_port=<None>
-
-
-#
-# 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.policy
-#
-
-# The JSON file that defines policies. (string value)
-#policy_file=policy.json
-
-# Default rule. Enforced when a requested rule is not found.
-# (string value)
-#policy_default_rule=default
-
-# Directories where policy configuration files are stored.
-# They can be relative to any directory in the search path
-# defined by the config_dir option, or absolute paths. The
-# file defined by policy_file must exist for these directories
-# to be searched.  Missing or empty directories are ignored.
-# (multi valued)
-#policy_dirs=policy.d
-
-
-#
-# Options defined in cinder.openstack.common.versionutils
-#
-
-# Enables or disables fatal status of deprecations. (boolean
-# value)
-#fatal_deprecations=false
-
-
-#
-# Options defined in cinder.scheduler.driver
-#
-
-# The scheduler host manager class to use (string value)
-#scheduler_host_manager=cinder.scheduler.host_manager.HostManager
-
-# Maximum number of attempts to schedule an volume (integer
-# value)
-#scheduler_max_attempts=3
-
-
-#
-# Options defined in cinder.scheduler.host_manager
-#
-
-# Which filter class names to use for filtering hosts when not
-# specified in the request. (list value)
-#scheduler_default_filters=AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
-
-# Which weigher class names to use for weighing hosts. (list
-# value)
-#scheduler_default_weighers=CapacityWeigher
-
-
-#
-# Options defined in cinder.scheduler.manager
-#
-
-# Default scheduler driver to use (string value)
-#scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler
-
-
-#
-# Options defined in cinder.scheduler.scheduler_options
-#
-
-# Absolute path to scheduler configuration JSON file. (string
-# value)
-#scheduler_json_config_location=
-
-
-#
-# Options defined in cinder.scheduler.simple
-#
-
-# This configure option has been deprecated along with the
-# SimpleScheduler.  New scheduler is able to gather capacity
-# information for each host, thus setting the maximum number
-# of volume gigabytes for host is no longer needed.  It's safe
-# to remove this configure from cinder.conf. (integer value)
-#max_gigabytes=10000
-
-
-#
-# Options defined in cinder.scheduler.weights.capacity
-#
-
-# Multiplier used for weighing volume capacity. Negative
-# numbers mean to stack vs spread. (floating point value)
-#capacity_weight_multiplier=1.0
-
-# Multiplier used for weighing volume capacity. Negative
-# numbers mean to stack vs spread. (floating point value)
-#allocated_capacity_weight_multiplier=-1.0
-
-
-#
-# Options defined in cinder.scheduler.weights.volume_number
-#
-
-# Multiplier used for weighing volume number. Negative numbers
-# mean to spread vs stack. (floating point value)
-#volume_number_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
-#
-
-# Cache volume availability zones in memory for the provided
-# duration in seconds (integer value)
-#az_cache_duration=3600
-
-# Create volume from snapshot at the host where snapshot
-# 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
-#
-
-# The maximum number of times to rescan iSER targetto find
-# volume (integer value)
-#num_iser_scan_tries=3
-
-# This option is deprecated and unused. It will be removed in
-# the Liberty release. (integer value)
-#iser_num_targets=<None>
-
-# Prefix for iSER volumes (string value)
-#iser_target_prefix=iqn.2010-10.org.openstack:
-
-# The IP address that the iSER daemon is listening on (string
-# value)
-#iser_ip_address=$my_ip
-
-# The port that the iSER daemon is listening on (integer
-# value)
-#iser_port=3260
-
-# The name of the iSER target user-land tool to use (string
-# value)
-#iser_helper=tgtadm
-
-# Number of times to attempt to run flakey shell commands
-# (integer value)
-#num_shell_tries=3
-
-# The percentage of backend capacity is reserved (integer
-# value)
-#reserved_percentage=0
-
-# This option is deprecated and unused. It will be removed in
-# the Liberty release. (integer value)
-#iscsi_num_targets=<None>
-
-# Prefix for iSCSI volumes (string value)
-#iscsi_target_prefix=iqn.2010-10.org.openstack:
-
-# The IP address that the iSCSI daemon is listening on (string
-# value)
-#iscsi_ip_address=$my_ip
-
-# The list of secondary IP addresses of the iSCSI daemon (list
-# value)
-#iscsi_secondary_ip_addresses=
-
-# The port that the iSCSI daemon is listening on (integer
-# value)
-#iscsi_port=3260
-
-# The maximum number of times to rescan targets to find volume
-# (integer value)
-# Deprecated group/name - [DEFAULT]/num_iscsi_scan_tries
-#num_volume_device_scan_tries=3
-
-# The backend name for a given driver implementation (string
-# 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
-
-# If this is set to True, attachment of volumes for image
-# transfer will be aborted when multipathd is not running.
-# Otherwise, it will fallback to single path. (boolean value)
-#enforce_multipath_for_image_xfer=false
-
-# Method used to wipe old volumes (string value)
-#volume_clear=zero
-
-# Size in MiB to wipe at start of old volumes. 0 => all
-# (integer value)
-#volume_clear_size=0
-
-# The flag to pass to ionice to alter the i/o priority of the
-# process used to zero a volume after deletion, for example
-# "-c3" for idle only priority. (string value)
-#volume_clear_ionice=<None>
-
-# iSCSI target user-land tool to use. tgtadm is default, use
-# lioadm for LIO iSCSI support, scstadmin for SCST target
-# support, iseradm for the ISER protocol, ietadm for iSCSI
-# Enterprise Target, iscsictl for Chelsio iSCSI Target or fake
-# for testing. (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
-
-# Chiscsi (CXT) global defaults configuration file (string
-# value)
-#chiscsi_conf=/etc/chelsio-iscsi/chiscsi.conf
-
-# This option is deprecated and unused. It will be removed in
-# the next release. (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
-
-# The default block size used when copying/clearing volumes
-# (string value)
-#volume_dd_blocksize=1M
-
-# The blkio cgroup name to be used to limit bandwidth of
-# volume copy (string value)
-#volume_copy_blkio_cgroup_name=cinder-volume-copy
-
-# The upper limit of bandwidth of volume copy. 0 => unlimited
-# (integer value)
-#volume_copy_bps_limit=0
-
-# Sets the behavior of the iSCSI target to either perform
-# write-back(on) or write-through(off). This parameter is
-# valid if iscsi_helper is set to tgtadm or iseradm. (string
-# value)
-#iscsi_write_cache=on
-
-# Determines the iSCSI protocol for new iSCSI volumes, created
-# with tgtadm or lioadm target helpers. In order to enable
-# RDMA, this parameter should be set with the value "iser".
-# The supported iSCSI protocol values are "iscsi" and "iser".
-# (string value)
-#iscsi_protocol=iscsi
-
-# The path to the client certificate key for verification, if
-# the driver supports it. (string value)
-#driver_client_cert_key=<None>
-
-# The path to the client certificate for verification, if the
-# driver supports it. (string value)
-#driver_client_cert=<None>
-
-# Tell driver to use SSL for connection to backend storage if
-# the driver supports it. (boolean value)
-#driver_use_ssl=false
-
-# Float representation of the over subscription ratio when
-# thin provisioning is involved. Default ratio is 20.0,
-# meaning provisioned capacity can be 20 times of the total
-# physical capacity. If the ratio is 10.5, it means
-# provisioned capacity can be 10.5 times of the total physical
-# capacity. A ratio of 1.0 means provisioned capacity cannot
-# exceed the total physical capacity. A ratio lower than 1.0
-# will be ignored and the default value will be used instead.
-# (floating point value)
-#max_over_subscription_ratio=20.0
-
-# Certain ISCSI targets have predefined target names, SCST
-# target driver uses this name. (string value)
-#scst_target_iqn_name=<None>
-
-# SCST target implementation can choose from multiple SCST
-# target drivers. (string value)
-#scst_target_driver=iscsi
-
-# Option to enable/disable CHAP authentication for targets.
-# (boolean value)
-# Deprecated group/name - [DEFAULT]/eqlx_use_chap
-#use_chap_auth=false
-
-# CHAP user name. (string value)
-# Deprecated group/name - [DEFAULT]/eqlx_chap_login
-#chap_username=
-
-# Password for specified CHAP account name. (string value)
-# Deprecated group/name - [DEFAULT]/eqlx_chap_password
-#chap_password=
-
-# Namespace for driver private data values to be saved in.
-# (string value)
-#driver_data_namespace=<None>
-
-# String representation for an equation that will be used to
-# filter hosts. Only used when the driver filter is set to be
-# used by the Cinder scheduler. (string value)
-#filter_function=<None>
-
-# String representation for an equation that will be used to
-# determine the goodness of a host. Only used when using the
-# goodness weigher is set to be used by the Cinder scheduler.
-# (string value)
-#goodness_function=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.block_device
-#
-
-# List of all available devices (list value)
-#available_devices=
-
-
-#
-# Options defined in cinder.volume.drivers.cloudbyte.options
-#
-
-# These values will be used for CloudByte storage's addQos API
-# call. (dict value)
-#cb_add_qosgroup=latency:15,iops:10,graceallowed:false,iopscontrol:true,memlimit:0,throughput:0,tpcontrol:false,networkspeed:0
-
-# Driver will use this API key to authenticate against the
-# CloudByte storage's management interface. (string value)
-#cb_apikey=None
-
-# CloudByte storage specific account name. This maps to a
-# project name in OpenStack. (string value)
-#cb_account_name=None
-
-# This corresponds to the name of Tenant Storage Machine (TSM)
-# in CloudByte storage. A volume will be created in this TSM.
-# (string value)
-#cb_tsm_name=None
-
-# A retry value in seconds. Will be used by the driver to
-# check if volume creation was successful in CloudByte
-# storage. (integer value)
-#cb_confirm_volume_create_retry_interval=5
-
-# Will confirm a successful volume creation in CloudByte
-# storage by making this many number of attempts. (integer
-# value)
-#cb_confirm_volume_create_retries=3
-
-# These values will be used for CloudByte storage's
-# createVolume API call. (dict value)
-#cb_create_volume=compression:off,deduplication:off,blocklength:512B,sync:always,protocoltype:ISCSI,recordsize:16k
-
-
-#
-# Options defined in cinder.volume.drivers.datera
-#
-
-# DEPRECATED: This will be removed in the Liberty release. Use
-# san_login and san_password instead. This directly sets the
-# Datera API token. (string value)
-#datera_api_token=<None>
-
-# Datera API port. (string value)
-#datera_api_port=7717
-
-# Datera API version. (string value)
-#datera_api_version=1
-
-# Number of replicas to create of an inode. (string value)
-#datera_num_replicas=3
-
-
-#
-# Options defined in cinder.volume.drivers.dell.dell_storagecenter_common
-#
-
-# Storage Center System Serial Number (integer value)
-#dell_sc_ssn=64702
-
-# Dell API port (integer value)
-#dell_sc_api_port=3033
-
-# Name of the server folder to use on the Storage Center
-# (string value)
-#dell_sc_server_folder=openstack
-
-# Name of the volume folder to use on the Storage Center
-# (string value)
-#dell_sc_volume_folder=openstack
-
-
-#
-# Options defined in cinder.volume.drivers.emc.emc_vmax_common
-#
-
-# use this file for cinder emc plugin config data (string
-# value)
-#cinder_emc_config_file=/etc/cinder/cinder_emc_config.xml
-
-
-#
-# Options defined in cinder.volume.drivers.emc.emc_vnx_cli
-#
-
-# VNX authentication scope type. (string value)
-#storage_vnx_authentication_type=global
-
-# Directory path that contains the VNX security file. Make
-# sure the security file is generated first. (string value)
-#storage_vnx_security_file_dir=<None>
-
-# Naviseccli Path. (string value)
-#naviseccli_path=
-
-# Storage pool name. (string value)
-#storage_vnx_pool_name=<None>
-
-# VNX secondary SP IP Address. (string value)
-#san_secondary_ip=<None>
-
-# Default timeout for CLI operations in minutes. For example,
-# LUN migration is a typical long running operation, which
-# depends on the LUN size and the load of the array. An upper
-# bound in the specific deployment can be set to avoid
-# unnecessary long wait. By default, it is 365 days long.
-# (integer value)
-#default_timeout=525600
-
-# Default max number of LUNs in a storage group. By default,
-# the value is 255. (integer value)
-#max_luns_per_storage_group=255
-
-# To destroy storage group when the last LUN is removed from
-# it. By default, the value is False. (boolean value)
-#destroy_empty_storage_group=false
-
-# Mapping between hostname and its iSCSI initiator IP
-# addresses. (string value)
-#iscsi_initiators=
-
-# Automatically register initiators. By default, the value is
-# False. (boolean value)
-#initiator_auto_registration=false
-
-# Automatically deregister initiators after the related
-# storage group is destroyed. By default, the value is False.
-# (boolean value)
-#initiator_auto_deregistration=false
-
-# Report free_capacity_gb as 0 when the limit to maximum
-# number of pool LUNs is reached. By default, the value is
-# False. (boolean value)
-#check_max_pool_luns_threshold=false
-
-# Delete a LUN even if it is in Storage Groups. (boolean
-# value)
-#force_delete_lun_in_storagegroup=false
-
-
-#
-# Options defined in cinder.volume.drivers.emc.xtremio
-#
-
-# XMS cluster id in multi-cluster environment (string value)
-#xtremio_cluster_name=
-
-
-#
-# Options defined in cinder.volume.drivers.eqlx
-#
-
-# Group name to use for creating volumes. Defaults to
-# "group-0". (string value)
-#eqlx_group_name=group-0
-
-# Timeout for the Group Manager cli command execution. Default
-# is 30. (integer value)
-#eqlx_cli_timeout=30
-
-# Maximum retry count for reconnection. Default is 5. (integer
-# value)
-#eqlx_cli_max_retries=5
-
-# Use CHAP authentication for targets. Note that this option
-# is deprecated in favour of "use_chap_auth" as specified in
-# cinder/volume/driver.py and will be removed in next release.
-# (boolean value)
-#eqlx_use_chap=false
-
-# Existing CHAP account name. Note that this option is
-# deprecated in favour of "chap_username" as specified in
-# cinder/volume/driver.py and will be removed in next release.
-# (string value)
-#eqlx_chap_login=admin
-
-# Password for specified CHAP account name. Note that this
-# option is deprecated in favour of "chap_password" as
-# specified in cinder/volume/driver.py and will be removed in
-# the next release (string value)
-#eqlx_chap_password=password
-
-# Pool in which volumes will be created. Defaults to
-# "default". (string value)
-#eqlx_pool=default
-
-
-#
-# Options defined in cinder.volume.drivers.glusterfs
-#
-
-# File with the list of available gluster shares (string
-# value)
-#glusterfs_shares_config=/etc/cinder/glusterfs_shares
-
-# Create volumes as sparsed files which take no space.If set
-# to False volume is created as regular file.In such case
-# volume creation takes a lot of time. (boolean value)
-#glusterfs_sparsed_volumes=true
-
-# Create volumes as QCOW2 files rather than raw files.
-# (boolean value)
-#glusterfs_qcow2_volumes=false
-
-# Base dir containing mount points for gluster shares. (string
-# value)
-#glusterfs_mount_point_base=$state_path/mnt
-
-
-#
-# Options defined in cinder.volume.drivers.hds.hds
-#
-
-# The configuration file for the Cinder HDS driver for HUS
-# (string value)
-#hds_cinder_config_file=/opt/hds/hus/cinder_hus_conf.xml
-
-
-#
-# Options defined in cinder.volume.drivers.hds.iscsi
-#
-
-# Configuration file for HDS iSCSI cinder plugin (string
-# value)
-#hds_hnas_iscsi_config_file=/opt/hds/hnas/cinder_iscsi_conf.xml
-
-
-#
-# Options defined in cinder.volume.drivers.hds.nfs
-#
-
-# Configuration file for HDS NFS cinder plugin (string value)
-#hds_hnas_nfs_config_file=/opt/hds/hnas/cinder_nfs_conf.xml
-
-
-#
-# Options defined in cinder.volume.drivers.hitachi.hbsd_common
-#
-
-# Serial number of storage system (string value)
-#hitachi_serial_number=<None>
-
-# Name of an array unit (string value)
-#hitachi_unit_name=<None>
-
-# Pool ID of storage system (integer value)
-#hitachi_pool_id=<None>
-
-# Thin pool ID of storage system (integer value)
-#hitachi_thin_pool_id=<None>
-
-# Range of logical device of storage system (string value)
-#hitachi_ldev_range=<None>
-
-# Default copy method of storage system (string value)
-#hitachi_default_copy_method=FULL
-
-# Copy speed of storage system (integer value)
-#hitachi_copy_speed=3
-
-# Interval to check copy (integer value)
-#hitachi_copy_check_interval=3
-
-# Interval to check copy asynchronously (integer value)
-#hitachi_async_copy_check_interval=10
-
-# Control port names for HostGroup or iSCSI Target (string
-# value)
-#hitachi_target_ports=<None>
-
-# Range of group number (string value)
-#hitachi_group_range=<None>
-
-# Request for creating HostGroup or iSCSI Target (boolean
-# value)
-#hitachi_group_request=false
-
-
-#
-# Options defined in cinder.volume.drivers.hitachi.hbsd_fc
-#
-
-# Request for FC Zone creating HostGroup (boolean value)
-#hitachi_zoning_request=false
-
-
-#
-# Options defined in cinder.volume.drivers.hitachi.hbsd_horcm
-#
-
-# Instance numbers for HORCM (string value)
-#hitachi_horcm_numbers=200,201
-
-# Username of storage system for HORCM (string value)
-#hitachi_horcm_user=<None>
-
-# Password of storage system for HORCM (string value)
-#hitachi_horcm_password=<None>
-
-# Add to HORCM configuration (boolean value)
-#hitachi_horcm_add_conf=true
-
-
-#
-# Options defined in cinder.volume.drivers.hitachi.hbsd_iscsi
-#
-
-# Add CHAP user (boolean value)
-#hitachi_add_chap_user=false
-
-# iSCSI authentication method (string value)
-#hitachi_auth_method=<None>
-
-# iSCSI authentication username (string value)
-#hitachi_auth_user=HBSD-CHAP-user
-
-# iSCSI authentication password (string value)
-#hitachi_auth_password=HBSD-CHAP-password
-
-
-#
-# Options defined in cinder.volume.drivers.huawei
-#
-
-# The configuration file for the Cinder Huawei driver (string
-# value)
-#cinder_huawei_conf_file=/etc/cinder/cinder_huawei_conf.xml
-
-
-#
-# Options defined in cinder.volume.drivers.ibm.flashsystem
-#
-
-# Connection protocol should be FC. (string value)
-#flashsystem_connection_protocol=FC
-
-# Connect with multipath (FC only). (boolean value)
-#flashsystem_multipath_enabled=false
-
-# Allows vdisk to multi host mapping. (boolean value)
-#flashsystem_multihostmap_enabled=true
-
-
-#
-# Options defined in cinder.volume.drivers.ibm.gpfs
-#
-
-# Specifies the path of the GPFS directory where Block Storage
-# volume and snapshot files are stored. (string value)
-#gpfs_mount_point_base=<None>
-
-# Specifies the path of the Image service repository in GPFS.
-# Leave undefined if not storing images in GPFS. (string
-# value)
-#gpfs_images_dir=<None>
-
-# Specifies the type of image copy to be used.  Set this when
-# the Image service repository also uses GPFS so that image
-# files can be transferred efficiently from the Image service
-# to the Block Storage service. There are two valid values:
-# "copy" specifies that a full copy of the image is made;
-# "copy_on_write" specifies that copy-on-write optimization
-# strategy is used and unmodified blocks of the image file are
-# shared efficiently. (string value)
-#gpfs_images_share_mode=<None>
-
-# Specifies an upper limit on the number of indirections
-# required to reach a specific block due to snapshots or
-# clones.  A lengthy chain of copy-on-write snapshots or
-# clones can have a negative impact on performance, but
-# improves space utilization.  0 indicates unlimited clone
-# depth. (integer value)
-#gpfs_max_clone_depth=0
-
-# Specifies that volumes are created as sparse files which
-# initially consume no space. If set to False, the volume is
-# created as a fully allocated file, in which case, creation
-# may take a significantly longer time. (boolean value)
-#gpfs_sparse_volumes=true
-
-# Specifies the storage pool that volumes are assigned to. By
-# default, the system storage pool is used. (string value)
-#gpfs_storage_pool=system
-
-
-#
-# Options defined in cinder.volume.drivers.ibm.ibmnas
-#
-
-# IBMNAS platform type to be used as backend storage; valid
-# values are - v7ku : for using IBM Storwize V7000 Unified,
-# sonas : for using IBM Scale Out NAS, gpfs-nas : for using
-# NFS based IBM GPFS deployments. (string value)
-#ibmnas_platform_type=v7ku
-
-
-#
-# Options defined in cinder.volume.drivers.ibm.storwize_svc
-#
-
-# Storage system storage pool for volumes (string value)
-#storwize_svc_volpool_name=volpool
-
-# Storage system space-efficiency parameter for volumes
-# (percentage) (integer value)
-#storwize_svc_vol_rsize=2
-
-# Storage system threshold for volume capacity warnings
-# (percentage) (integer value)
-#storwize_svc_vol_warning=0
-
-# Storage system autoexpand parameter for volumes (True/False)
-# (boolean value)
-#storwize_svc_vol_autoexpand=true
-
-# Storage system grain size parameter for volumes
-# (32/64/128/256) (integer value)
-#storwize_svc_vol_grainsize=256
-
-# Storage system compression option for volumes (boolean
-# value)
-#storwize_svc_vol_compression=false
-
-# Enable Easy Tier for volumes (boolean value)
-#storwize_svc_vol_easytier=true
-
-# The I/O group in which to allocate volumes (integer value)
-#storwize_svc_vol_iogrp=0
-
-# Maximum number of seconds to wait for FlashCopy to be
-# prepared. Maximum value is 600 seconds (10 minutes) (integer
-# value)
-#storwize_svc_flashcopy_timeout=120
-
-# Connection protocol (iSCSI/FC) (string value)
-#storwize_svc_connection_protocol=iSCSI
-
-# Configure CHAP authentication for iSCSI connections
-# (Default: Enabled) (boolean value)
-#storwize_svc_iscsi_chap_enabled=true
-
-# Connect with multipath (FC only; iSCSI multipath is
-# controlled by Nova) (boolean value)
-#storwize_svc_multipath_enabled=false
-
-# Allows vdisk to multi host mapping (boolean value)
-#storwize_svc_multihostmap_enabled=true
-
-# Indicate whether svc driver is compatible for NPIV setup. If
-# it is compatible, it will allow no wwpns being returned on
-# get_conn_fc_wwpns during initialize_connection (boolean
-# value)
-#storwize_svc_npiv_compatibility_mode=false
-
-# Allow tenants to specify QOS on create (boolean value)
-#storwize_svc_allow_tenant_qos=false
-
-# If operating in stretched cluster mode, specify the name of
-# the pool in which mirrored copies are stored.Example:
-# "pool2" (string value)
-#storwize_svc_stretched_cluster_partner=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.ibm.xiv_ds8k
-#
-
-# 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 (string value)
-#xiv_ds8k_connection_type=iscsi
-
-# CHAP authentication mode, effective only for iscsi
-# (disabled|enabled) (string value)
-#xiv_chap=disabled
-
-
-#
-# Options defined in cinder.volume.drivers.lvm
-#
-
-# Name for the VG that will contain exported volumes (string
-# value)
-#volume_group=cinder-volumes
-
-# If >0, create LVs with multiple mirrors. Note that this
-# requires lvm_mirrors + 2 PVs with available space (integer
-# value)
-#lvm_mirrors=0
-
-# Type of LVM volumes to deploy (string value)
-#lvm_type=default
-
-# LVM conf file to use for the LVM driver in Cinder; this
-# setting is ignored if the specified file does not exist (You
-# can also specify 'None' to not use a conf file even if one
-# exists). (string value)
-#lvm_conf_file=/etc/cinder/lvm.conf
-
-
-#
-# Options defined in cinder.volume.drivers.netapp.options
-#
-
-# The vFiler unit on which provisioning of block storage
-# volumes will be done. This option is only used by the driver
-# when connecting to an instance with a storage family of Data
-# ONTAP operating in 7-Mode. Only use this option when
-# utilizing the MultiStore feature on the NetApp storage
-# system. (string value)
-#netapp_vfiler=<None>
-
-# The name of the config.conf stanza for a Data ONTAP (7-mode)
-# HA partner.  This option is only used by the driver when
-# connecting to an instance with a storage family of Data
-# ONTAP operating in 7-Mode, and it is required if the storage
-# protocol selected is FC. (string value)
-#netapp_partner_backend_name=<None>
-
-# Administrative user account name used to access the storage
-# system or proxy server. (string value)
-#netapp_login=<None>
-
-# Password for the administrative user account specified in
-# the netapp_login option. (string value)
-#netapp_password=<None>
-
-# This option specifies the virtual storage server (Vserver)
-# name on the storage cluster on which provisioning of block
-# storage volumes should occur. (string value)
-#netapp_vserver=<None>
-
-# The hostname (or IP address) for the storage system or proxy
-# server. (string value)
-#netapp_server_hostname=<None>
-
-# The TCP port to use for communication with the storage
-# system or proxy server. If not specified, Data ONTAP drivers
-# will use 80 for HTTP and 443 for HTTPS; E-Series will use
-# 8080 for HTTP and 8443 for HTTPS. (integer value)
-#netapp_server_port=<None>
-
-# This option is used to specify the path to the E-Series
-# proxy application on a proxy server. The value is combined
-# with the value of the netapp_transport_type,
-# netapp_server_hostname, and netapp_server_port options to
-# create the URL used by the driver to connect to the proxy
-# application. (string value)
-#netapp_webservice_path=/devmgr/v2
-
-# This option is only utilized when the storage family is
-# configured to eseries. This option is used to restrict
-# provisioning to the specified controllers. Specify the value
-# of this option to be a comma separated list of controller
-# hostnames or IP addresses to be used for provisioning.
-# (string value)
-#netapp_controller_ips=<None>
-
-# Password for the NetApp E-Series storage array. (string
-# value)
-#netapp_sa_password=<None>
-
-# This option is used to restrict provisioning to the
-# specified storage pools. Only dynamic disk pools are
-# currently supported. Specify the value of this option to be
-# a comma separated list of disk pool names to be used for
-# provisioning. (string value)
-#netapp_storage_pools=<None>
-
-# This option is used to define how the controllers in the
-# E-Series storage array will work with the particular
-# operating system on the hosts that are connected to it.
-# (string value)
-#netapp_eseries_host_type=linux_dm_mp
-
-# If the percentage of available space for an NFS share has
-# dropped below the value specified by this option, the NFS
-# image cache will be cleaned. (integer value)
-#thres_avl_size_perc_start=20
-
-# When the percentage of available space on an NFS share has
-# reached the percentage specified by this option, the driver
-# will stop clearing files from the NFS image cache that have
-# not been accessed in the last M minutes, where M is the
-# value of the expiry_thres_minutes configuration option.
-# (integer value)
-#thres_avl_size_perc_stop=60
-
-# This option specifies the threshold for last access time for
-# images in the NFS image cache. When a cache cleaning cycle
-# begins, images in the cache that have not been accessed in
-# the last M minutes, where M is the value of this parameter,
-# will be deleted from the cache to create free space on the
-# NFS share. (integer value)
-#expiry_thres_minutes=720
-
-# This option specifies the path of the NetApp copy offload
-# tool binary. Ensure that the binary has execute permissions
-# set which allow the effective user of the cinder-volume
-# process to execute the file. (string value)
-#netapp_copyoffload_tool_path=<None>
-
-# The quantity to be multiplied by the requested volume size
-# to ensure enough space is available on the virtual storage
-# server (Vserver) to fulfill the volume creation request.
-# (floating point value)
-#netapp_size_multiplier=1.2
-
-# This option is only utilized when the storage protocol is
-# configured to use iSCSI or FC. This option is used to
-# restrict provisioning to the specified controller volumes.
-# Specify the value of this option to be a comma separated
-# list of NetApp controller volume names to be used for
-# provisioning. (string value)
-#netapp_volume_list=<None>
-
-# The storage family type used on the storage system; valid
-# values are ontap_7mode for using Data ONTAP operating in
-# 7-Mode, ontap_cluster for using clustered Data ONTAP, or
-# eseries for using E-Series. (string value)
-#netapp_storage_family=ontap_cluster
-
-# The storage protocol to be used on the data path with the
-# storage system. (string value)
-#netapp_storage_protocol=<None>
-
-# The transport protocol used when communicating with the
-# storage system or proxy server. (string value)
-#netapp_transport_type=http
-
-
-#
-# Options defined in cinder.volume.drivers.nfs
-#
-
-# File with the list of available nfs shares (string value)
-#nfs_shares_config=/etc/cinder/nfs_shares
-
-# Create volumes as sparsed files which take no space.If set
-# to False volume is created as regular file.In such case
-# volume creation takes a lot of time. (boolean value)
-#nfs_sparsed_volumes=true
-
-# Percent of ACTUAL usage of the underlying volume before no
-# 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
-# volume destination.  If the ratio exceeds this number, the
-# destination will no longer be valid. (floating point value)
-#nfs_oversub_ratio=1.0
-
-# Base dir containing mount points for nfs shares. (string
-# value)
-#nfs_mount_point_base=$state_path/mnt
-
-# Mount options passed to the nfs client. See section of the
-# nfs man page for details. (string value)
-#nfs_mount_options=<None>
-
-# The number of attempts to mount nfs shares before raising an
-# error.  At least one attempt will be made to mount an nfs
-# share, regardless of the value specified. (integer value)
-#nfs_mount_attempts=3
-
-
-#
-# Options defined in cinder.volume.drivers.nimble
-#
-
-# Nimble Controller pool name (string value)
-#nimble_pool_name=default
-
-# Nimble Subnet Label (string value)
-#nimble_subnet_label=*
-
-
-#
-# Options defined in cinder.volume.drivers.openvstorage
-#
-
-# Vpool to use for volumes - backend is defined by vpool not
-# by us. (string value)
-#vpool_name=
-
-
-#
-# Options defined in cinder.volume.drivers.prophetstor.options
-#
-
-# DPL pool uuid in which DPL volumes are stored. (string
-# value)
-#dpl_pool=
-
-# DPL port number. (integer value)
-#dpl_port=8357
-
-
-#
-# Options defined in cinder.volume.drivers.pure
-#
-
-# REST API authorization token. (string value)
-#pure_api_token=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.quobyte
-#
-
-# URL to the Quobyte volume e.g., quobyte://<DIR host>/<volume
-# name> (string value)
-#quobyte_volume_url=<None>
-
-# Path to a Quobyte Client configuration file. (string value)
-#quobyte_client_cfg=<None>
-
-# Create volumes as sparse files which take no space. If set
-# to False, volume is created as regular file.In such case
-# volume creation takes a lot of time. (boolean value)
-#quobyte_sparsed_volumes=true
-
-# Create volumes as QCOW2 files rather than raw files.
-# (boolean value)
-#quobyte_qcow2_volumes=true
-
-# Base dir containing the mount point for the Quobyte volume.
-# (string value)
-#quobyte_mount_point_base=$state_path/mnt
-
-
-#
-# Options defined in cinder.volume.drivers.rbd
-#
-
-# The RADOS pool where rbd volumes are stored (string value)
-#rbd_pool=rbd
-
-# 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 (string value)
-#rbd_ceph_conf=
-
-# Flatten volumes created from snapshots to remove dependency
-# from volume to snapshot (boolean value)
-#rbd_flatten_volume_from_snapshot=false
-
-# The libvirt uuid of the secret for the rbd_user volumes
-# (string value)
-#rbd_secret_uuid=<None>
-
-# Directory where temporary image files are stored when the
-# volume driver does not write them directly to the volume.
-# Warning: this option is now deprecated, please use
-# image_conversion_dir instead. (string value)
-#volume_tmp_dir=<None>
-
-# Maximum number of nested volume clones that are taken before
-# a flatten occurs. Set to 0 to disable cloning. (integer
-# value)
-#rbd_max_clone_depth=5
-
-# Volumes will be chunked into objects of this size (in
-# megabytes). (integer value)
-#rbd_store_chunk_size=4
-
-# Timeout value (in seconds) used when connecting to ceph
-# cluster. If value < 0, no timeout is set and default
-# librados value is used. (integer value)
-#rados_connect_timeout=-1
-
-
-#
-# Options defined in cinder.volume.drivers.remotefs
-#
-
-# IP address or Hostname of NAS system. (string value)
-#nas_ip=
-
-# User name to connect to NAS system. (string value)
-#nas_login=admin
-
-# Password to connect to NAS system. (string value)
-#nas_password=
-
-# SSH port to use to connect to NAS system. (integer value)
-#nas_ssh_port=22
-
-# Filename of private key to use for SSH authentication.
-# (string value)
-#nas_private_key=
-
-# Allow network-attached storage systems to operate in a
-# secure environment where root level access is not permitted.
-# If set to False, access is as the root user and insecure. If
-# set to True, access is not as root. If set to auto, a check
-# is done to determine if this is a new installation: True is
-# used if so, otherwise False. Default is auto. (string value)
-#nas_secure_file_operations=auto
-
-# Set more secure file permissions on network-attached storage
-# volume files to restrict broad other/world access. If set to
-# False, volumes are created with open permissions. If set to
-# True, volumes are created with permissions for the cinder
-# user and group (660). If set to auto, a check is done to
-# determine if this is a new installation: True is used if so,
-# otherwise False. Default is auto. (string value)
-#nas_secure_file_permissions=auto
-
-# Path to the share to use for storing Cinder volumes. For
-# example:  "/srv/export1" for an NFS server export available
-# at 10.0.5.10:/srv/export1 . (string value)
-#nas_share_path=
-
-# Options used to mount the storage backend file system where
-# Cinder volumes are stored. (string value)
-#nas_mount_options=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.san.hp.hp_3par_common
-#
-
-# 3PAR WSAPI Server Url like https://<3par ip>:8080/api/v1
-# (string value)
-#hp3par_api_url=
-
-# 3PAR Super user username (string value)
-#hp3par_username=
-
-# 3PAR Super user password (string value)
-#hp3par_password=
-
-# List of the CPG(s) to use for volume creation (list value)
-#hp3par_cpg=OpenStack
-
-# The CPG to use for Snapshots for volumes. If empty the
-# userCPG will be used. (string value)
-#hp3par_cpg_snap=
-
-# The time in hours to retain a snapshot.  You can't delete it
-# before this expires. (string value)
-#hp3par_snapshot_retention=
-
-# The time in hours when a snapshot expires  and is deleted.
-# This must be larger than expiration (string value)
-#hp3par_snapshot_expiration=
-
-# Enable HTTP debugging to 3PAR (boolean value)
-#hp3par_debug=false
-
-# List of target iSCSI addresses to use. (list value)
-#hp3par_iscsi_ips=
-
-# Enable CHAP authentication for iSCSI connections. (boolean
-# value)
-#hp3par_iscsi_chap_enabled=false
-
-
-#
-# Options defined in cinder.volume.drivers.san.hp.hp_lefthand_rest_proxy
-#
-
-# HP LeftHand WSAPI Server Url like https://<LeftHand
-# ip>:8081/lhos (string value)
-#hplefthand_api_url=<None>
-
-# HP LeftHand Super user username (string value)
-#hplefthand_username=<None>
-
-# HP LeftHand Super user password (string value)
-#hplefthand_password=<None>
-
-# HP LeftHand cluster name (string value)
-#hplefthand_clustername=<None>
-
-# Configure CHAP authentication for iSCSI connections
-# (Default: Disabled) (boolean value)
-#hplefthand_iscsi_chap_enabled=false
-
-# Enable HTTP debugging to LeftHand (boolean value)
-#hplefthand_debug=false
-
-
-#
-# Options defined in cinder.volume.drivers.san.san
-#
-
-# Use thin provisioning for SAN volumes? (boolean value)
-#san_thin_provision=true
-
-# IP address of SAN controller (string value)
-#san_ip=
-
-# Username for SAN controller (string value)
-#san_login=admin
-
-# Password for SAN controller (string value)
-#san_password=
-
-# Filename of private key to use for SSH authentication
-# (string value)
-#san_private_key=
-
-# Cluster name to use for creating volumes (string value)
-#san_clustername=
-
-# SSH port to use with SAN (integer value)
-#san_ssh_port=22
-
-# Execute commands locally instead of over SSH; use if the
-# volume service is running on the SAN device (boolean value)
-san_is_local=true
-
-# SSH connection timeout in seconds (integer value)
-#ssh_conn_timeout=30
-
-# Minimum ssh connections in the pool (integer value)
-#ssh_min_pool_conn=1
-
-# Maximum ssh connections in the pool (integer value)
-#ssh_max_pool_conn=5
-
-
-#
-# Options defined in cinder.volume.drivers.scality
-#
-
-# Path or URL to Scality SOFS configuration file (string
-# value)
-#scality_sofs_config=<None>
-
-# Base dir where Scality SOFS shall be mounted (string value)
-#scality_sofs_mount_point=$state_path/scality
-
-# Path from Scality SOFS root to volume dir (string value)
-#scality_sofs_volume_dir=cinder/volumes
-
-
-#
-# Options defined in cinder.volume.drivers.smbfs
-#
-
-# File with the list of available smbfs shares. (string value)
-#smbfs_shares_config=/etc/cinder/smbfs_shares
-
-# Default format that will be used when creating volumes if no
-# volume format is specified. (string value)
-#smbfs_default_volume_format=qcow2
-
-# Create volumes as sparsed files which take no space rather
-# than regular files when using raw format, in which case
-# volume creation takes lot of time. (boolean value)
-#smbfs_sparsed_volumes=true
-
-# Percent of ACTUAL usage of the underlying volume before no
-# new volumes can be allocated to the volume destination.
-# (floating point value)
-#smbfs_used_ratio=0.95
-
-# This will compare the allocated to available space on the
-# volume destination.  If the ratio exceeds this number, the
-# destination will no longer be valid. (floating point value)
-#smbfs_oversub_ratio=1.0
-
-# Base dir containing mount points for smbfs shares. (string
-# value)
-#smbfs_mount_point_base=$state_path/mnt
-
-# Mount options passed to the smbfs client. See mount.cifs man
-# page for details. (string value)
-#smbfs_mount_options=noperm,file_mode=0775,dir_mode=0775
-
-
-#
-# Options defined in cinder.volume.drivers.solaris.nfs
-#
-
-# Schedule volumes round robin across NFS shares. (boolean
-# value)
-#nfs_round_robin=true
-
-
-#
-# Options defined in cinder.volume.drivers.solaris.zfs
-#
-
-# The base dataset for ZFS volumes. (string value)
-#zfs_volume_base=rpool/cinder
-
-# iSCSI target group name. (string value)
-#zfs_target_group=tgt-grp
-
-
-#
-# Options defined in cinder.volume.drivers.solidfire
-#
-
-# 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. Any string can
-# be used here, but the string "hostname" is special and will
-# create a prefix using the cinder node hostsname (previous
-# default behavior).  The default is NO prefix. (string value)
-#sf_account_prefix=<None>
-
-# Account name on the SolidFire Cluster to use as owner of
-# template/cache volumes (created if does not exist). (string
-# value)
-#sf_template_account_name=openstack-vtemplate
-
-# Create an internal cache of copy of images when a bootable
-# volume is created to eliminate fetch from glance and qemu-
-# conversion on subsequent calls. (boolean value)
-#sf_allow_template_caching=true
-
-# SolidFire API port. Useful if the device api is behind a
-# proxy on a different port. (integer value)
-#sf_api_port=443
-
-
-#
-# Options defined in cinder.volume.drivers.srb
-#
-
-# Comma-separated list of REST servers IP to connect to. (eg
-# http://IP1/,http://IP2:81/path (string value)
-#srb_base_urls=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.violin.v6000_common
-#
-
-# IP address or hostname of mg-a (string value)
-#gateway_mga=<None>
-
-# IP address or hostname of mg-b (string value)
-#gateway_mgb=<None>
-
-# Use igroups to manage targets and initiators (boolean value)
-#use_igroups=false
-
-# Global backend request timeout, in seconds (integer value)
-#request_timeout=300
-
-
-#
-# Options defined in cinder.volume.drivers.vmware.vmdk
-#
-
-# IP address for connecting to VMware ESX/VC server. (string
-# value)
-#vmware_host_ip=<None>
-
-# Username for authenticating with VMware ESX/VC server.
-# (string value)
-#vmware_host_username=<None>
-
-# Password for authenticating with VMware ESX/VC server.
-# (string value)
-#vmware_host_password=<None>
-
-# Optional VIM service WSDL Location e.g
-# http://<server>/vimService.wsdl. Optional over-ride to
-# default location for bug work-arounds. (string value)
-#vmware_wsdl_location=<None>
-
-# Number of times VMware ESX/VC server API must be retried
-# upon connection related issues. (integer value)
-#vmware_api_retry_count=10
-
-# The interval (in seconds) for polling remote tasks invoked
-# on VMware ESX/VC server. (floating point value)
-#vmware_task_poll_interval=0.5
-
-# Name for the folder in the VC datacenter that will contain
-# cinder volumes. (string value)
-#vmware_volume_folder=cinder-volumes
-
-# Timeout in seconds for VMDK volume transfer between Cinder
-# and Glance. (integer value)
-#vmware_image_transfer_timeout_secs=7200
-
-# Max number of objects to be retrieved per batch. Query
-# results will be obtained in batches from the server and not
-# in one shot. Server may still limit the count to something
-# less than the configured value. (integer value)
-#vmware_max_objects_retrieval=100
-
-# Optional string specifying the VMware VC server version. The
-# driver attempts to retrieve the version from VMware VC
-# server. Set this configuration only if you want to override
-# the VC server version. (string value)
-#vmware_host_version=<None>
-
-# Directory where virtual disks are stored during volume
-# backup and restore. (string value)
-#vmware_tmp_dir=/tmp
-
-
-#
-# Options defined in cinder.volume.drivers.windows.windows
-#
-
-# Path to store VHD backed volumes (string value)
-#windows_iscsi_lun_path=C:\iSCSIVirtualDisks
-
-
-#
-# Options defined in cinder.volume.drivers.xio
-#
-
-# Default storage pool for volumes. (integer value)
-#ise_storage_pool=1
-
-# Raid level for ISE volumes. (integer value)
-#ise_raid=1
-
-# Number of retries (per port) when establishing connection to
-# ISE management port. (integer value)
-#ise_connection_retries=5
-
-# Interval (secs) between retries. (integer value)
-#ise_retry_interval=1
-
-# Number on retries to get completion status after issuing a
-# command to ISE. (integer value)
-#ise_completion_retries=30
-
-
-#
-# Options defined in cinder.volume.drivers.zfssa.zfssaiscsi
-#
-
-# Storage pool name. (string value)
-#zfssa_pool=<None>
-
-# Project name. (string value)
-#zfssa_project=<None>
-
-# Block size. (string value)
-#zfssa_lun_volblocksize=8k
-
-# Flag to enable sparse (thin-provisioned): True, False.
-# (boolean value)
-#zfssa_lun_sparse=false
-
-# Data compression. (string value)
-#zfssa_lun_compression=off
-
-# Synchronous write bias. (string value)
-#zfssa_lun_logbias=latency
-
-# iSCSI initiator group. (string value)
-#zfssa_initiator_group=
-
-# iSCSI initiator IQNs. (comma separated) (string value)
-#zfssa_initiator=
-
-# iSCSI initiator CHAP user. (string value)
-#zfssa_initiator_user=
-
-# iSCSI initiator CHAP password. (string value)
-#zfssa_initiator_password=
-
-# iSCSI initiators configuration. (string value)
-#zfssa_initiator_config=
-
-# iSCSI target group name. (string value)
-#zfssa_target_group=tgt-grp
-
-# iSCSI target CHAP user. (string value)
-#zfssa_target_user=
-
-# iSCSI target CHAP password. (string value)
-#zfssa_target_password=
-
-# iSCSI target portal (Data-IP:Port, w.x.y.z:3260). (string
-# value)
-#zfssa_target_portal=<None>
-
-# Network interfaces of iSCSI targets. (comma separated)
-# (string value)
-#zfssa_target_interfaces=<None>
-
-# REST connection timeout. (seconds) (integer value)
-#zfssa_rest_timeout=<None>
-
-
-#
-# Options defined in cinder.volume.drivers.zfssa.zfssanfs
-#
-
-# Data path IP address (string value)
-#zfssa_data_ip=<None>
-
-# HTTPS port number (string value)
-#zfssa_https_port=443
-
-# Options to be passed while mounting share over nfs (string
-# value)
-#zfssa_nfs_mount_options=
-
-# Storage pool name. (string value)
-#zfssa_nfs_pool=
-
-# Project name. (string value)
-#zfssa_nfs_project=NFSProject
-
-# Share name. (string value)
-#zfssa_nfs_share=nfs_share
-
-# Data compression. (string value)
-#zfssa_nfs_share_compression=off
-
-# Synchronous write bias-latency, throughput. (string value)
-#zfssa_nfs_share_logbias=latency
-
-# REST connection timeout. (seconds) (integer value)
-#zfssa_rest_timeout=<None>
-
-
-#
-# Options defined in cinder.volume.manager
-#
-
-# Driver to use for volume creation (string value)
-# The local ZFS driver provides direct access to ZFS volumes that it
-# creates. The other listed drivers provide access to ZFS volumes via
-# iSCSI, Fibre Channel, or NFS and are suitable for cases where block storage
-# for Nova compute instances is shared.
-volume_driver=cinder.volume.drivers.solaris.zfs.ZFSVolumeDriver
-#volume_driver=cinder.volume.drivers.solaris.zfs.ZFSISCSIDriver
-#volume_driver=cinder.volume.drivers.solaris.zfs.ZFSFCDriver
-#volume_driver=cinder.volume.drivers.solaris.nfs.ZfsNfsVolumeDriver
-#volume_driver=cinder.volume.drivers.zfssa.zfssaiscsi.ZFSSAISCSIDriver
-
-# Timeout for creating the volume to migrate to when
-# performing volume migration (seconds) (integer value)
-#migration_create_volume_timeout_secs=300
-
-# Offload pending volume delete during volume service startup
-# (boolean value)
-#volume_service_inithost_offload=false
-
-# FC Zoning mode configured (string value)
-#zoning_mode=none
-
-# User defined capabilities, a JSON formatted string
-# specifying key/value pairs. The key/value pairs can be used
-# by the CapabilitiesFilter to select between backends when
-# requests specify volume types. For example, specifying a
-# service level or the geographical location of a backend,
-# then creating a volume type to allow the user to select by
-# these different properties. (string value)
-#extra_capabilities={}
+#backend_host = <None>
 
 
 [BRCD_FABRIC_EXAMPLE]
 
 #
-# Options defined in cinder.zonemanager.drivers.brocade.brcd_fabric_opts
+# From cinder
 #
 
-# Management IP of fabric (string value)
-#fc_fabric_address=
-
-# Fabric user ID (string value)
-#fc_fabric_user=
-
-# Password for user (string value)
-#fc_fabric_password=
-
-# Connecting port (integer value)
-#fc_fabric_port=22
-
-# overridden zoning policy (string value)
-#zoning_policy=initiator-target
-
-# overridden zoning activation state (boolean value)
-#zone_activate=true
-
-# overridden zone name prefix (string value)
-#zone_name_prefix=<None>
-
-# Principal switch WWN of the fabric (string value)
-#principal_switch_wwn=<None>
+# South bound connector for the fabric. (string value)
+# Allowed values: SSH, HTTP, HTTPS
+#fc_southbound_protocol = HTTP
+
+# Management IP of fabric. (string value)
+#fc_fabric_address =
+
+# Fabric user ID. (string value)
+#fc_fabric_user =
+
+# Password for user. (string value)
+#fc_fabric_password =
+
+# Connecting port (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#fc_fabric_port = 22
+
+# Local SSH certificate Path. (string value)
+#fc_fabric_ssh_cert_path =
+
+# Overridden zoning policy. (string value)
+#zoning_policy = initiator-target
+
+# Overridden zoning activation state. (boolean value)
+#zone_activate = true
+
+# Overridden zone name prefix. (string value)
+#zone_name_prefix = openstack
+
+# Virtual Fabric ID. (string value)
+#fc_virtual_fabric_id = <None>
+
+# Principal switch WWN of the fabric. This option is not used anymore. (string
+# value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+#principal_switch_wwn = <None>
 
 
 [CISCO_FABRIC_EXAMPLE]
 
 #
-# Options defined in cinder.zonemanager.drivers.cisco.cisco_fabric_opts
+# From cinder
 #
 
 # Management IP of fabric (string value)
-#cisco_fc_fabric_address=
+#cisco_fc_fabric_address =
 
 # Fabric user ID (string value)
-#cisco_fc_fabric_user=
+#cisco_fc_fabric_user =
 
 # Password for user (string value)
-#cisco_fc_fabric_password=
-
-# Connecting port (integer value)
-#cisco_fc_fabric_port=22
+#cisco_fc_fabric_password =
+
+# Connecting port (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#cisco_fc_fabric_port = 22
 
 # overridden zoning policy (string value)
-#cisco_zoning_policy=initiator-target
+#cisco_zoning_policy = initiator-target
 
 # overridden zoning activation state (boolean value)
-#cisco_zone_activate=true
+#cisco_zone_activate = true
 
 # overridden zone name prefix (string value)
-#cisco_zone_name_prefix=<None>
+#cisco_zone_name_prefix = <None>
 
 # VSAN of the Fabric (string value)
-#cisco_zoning_vsan=<None>
+#cisco_zoning_vsan = <None>
+
+
+[COORDINATION]
+
+#
+# From cinder
+#
+
+# The backend URL to use for distributed coordination. (string value)
+#backend_url = file://$state_path
+
+# Number of seconds between heartbeats for distributed coordination. (floating
+# point value)
+#heartbeat = 1.0
+
+# Initial number of seconds to wait after failed reconnection. (floating point
+# value)
+#initial_reconnect_backoff = 0.1
+
+# Maximum number of seconds between sequential reconnection retries. (floating
+# point value)
+#max_reconnect_backoff = 60.0
+
+
+[FC-ZONE-MANAGER]
+
+#
+# From cinder
+#
+
+# FC Zone Driver responsible for zone management (string value)
+#zone_driver = cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver.BrcdFCZoneDriver
+
+# Zoning policy configured by user; valid values include "initiator-target" or
+# "initiator" (string value)
+#zoning_policy = initiator-target
+
+# Comma separated list of Fibre Channel fabric names. This list of names is
+# used to retrieve other SAN credentials for connecting to each SAN fabric
+# (string value)
+#fc_fabric_names = <None>
+
+# FC SAN Lookup Service (string value)
+#fc_san_lookup_service = cinder.zonemanager.drivers.brocade.brcd_fc_san_lookup_service.BrcdFCSanLookupService
+
+# South bound connector for zoning operation (string value)
+#brcd_sb_connector = HTTP
+
+# Southbound connector for zoning operation (string value)
+#cisco_sb_connector = cinder.zonemanager.drivers.cisco.cisco_fc_zone_client_cli.CiscoFCZoneClientCLI
+
+
+[KEYMGR]
+
+#
+# From cinder
+#
+
+# Authentication url for encryption service. (string value)
+#encryption_auth_url = http://localhost:5000/v3
+
+# Url for encryption service. (string value)
+#encryption_api_url = http://localhost:9311/v1
+
+# The full class name of the key manager API class (string value)
+#api_class = cinder.keymgr.conf_key_mgr.ConfKeyManager
+
+# Fixed key returned by key manager, specified in hex (string value)
+#fixed_key = <None>
+
+
+[cors]
+
+#
+# From oslo.middleware
+#
+
+# Indicate whether this resource may be shared with the domain received in the
+# requests "origin" header. (list value)
+#allowed_origin = <None>
+
+# Indicate that the actual request can include user credentials (boolean value)
+#allow_credentials = true
+
+# Indicate which headers are safe to expose to the API. Defaults to HTTP Simple
+# Headers. (list value)
+#expose_headers = X-Auth-Token,X-Subject-Token,X-Service-Token,X-OpenStack-Request-ID,OpenStack-API-Version
+
+# Maximum cache age of CORS preflight requests. (integer value)
+#max_age = 3600
+
+# Indicate which methods can be used during the actual request. (list value)
+#allow_methods = GET,PUT,POST,DELETE,PATCH,HEAD
+
+# Indicate which header field names may be used during the actual request.
+# (list value)
+#allow_headers = X-Auth-Token,X-Identity-Status,X-Roles,X-Service-Catalog,X-User-Id,X-Tenant-Id,X-OpenStack-Request-ID,X-Trace-Info,X-Trace-HMAC,OpenStack-API-Version
+
+
+[cors.subdomain]
+
+#
+# From oslo.middleware
+#
+
+# Indicate whether this resource may be shared with the domain received in the
+# requests "origin" header. (list value)
+#allowed_origin = <None>
+
+# Indicate that the actual request can include user credentials (boolean value)
+#allow_credentials = true
+
+# Indicate which headers are safe to expose to the API. Defaults to HTTP Simple
+# Headers. (list value)
+#expose_headers = X-Auth-Token,X-Subject-Token,X-Service-Token,X-OpenStack-Request-ID,OpenStack-API-Version
+
+# Maximum cache age of CORS preflight requests. (integer value)
+#max_age = 3600
+
+# Indicate which methods can be used during the actual request. (list value)
+#allow_methods = GET,PUT,POST,DELETE,PATCH,HEAD
+
+# Indicate which header field names may be used during the actual request.
+# (list value)
+#allow_headers = X-Auth-Token,X-Identity-Status,X-Roles,X-Service-Catalog,X-User-Id,X-Tenant-Id,X-OpenStack-Request-ID,X-Trace-Info,X-Trace-HMAC,OpenStack-API-Version
 
 
 [database]
 
 #
-# Options defined in oslo.db
+# From oslo.db
 #
 
 # The file name to use with SQLite. (string value)
-#sqlite_db=oslo.sqlite
+# Deprecated group/name - [DEFAULT]/sqlite_db
+#sqlite_db = oslo.sqlite
 
 # If True, SQLite uses synchronous mode. (boolean value)
-#sqlite_synchronous=true
+# Deprecated group/name - [DEFAULT]/sqlite_synchronous
+#sqlite_synchronous = true
 
 # The back end to use for the database. (string value)
 # Deprecated group/name - [DEFAULT]/db_backend
-#backend=sqlalchemy
-
-# The SQLAlchemy connection string to use to connect to the
-# database. (string value)
+#backend = sqlalchemy
+
+# The SQLAlchemy connection string to use to connect to the database. (string
+# value)
 # Deprecated group/name - [DEFAULT]/sql_connection
 # Deprecated group/name - [DATABASE]/sql_connection
 # Deprecated group/name - [sql]/connection
-connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/cinder
-
-# The SQLAlchemy connection string to use to connect to the
-# slave database. (string value)
-#slave_connection=<None>
-
-# The SQL mode to be used for MySQL sessions. This option,
-# including the default, overrides any server-set SQL mode. To
-# use whatever SQL mode is set by the server configuration,
-# set this to no value. Example: mysql_sql_mode= (string
-# value)
-#mysql_sql_mode=TRADITIONAL
-
-# This configures the MySQL storage engine. This allows for OpenStack to
-# support different storage engines such as InnoDB, NDB, etc. By Default,
-# this value will be set to InnoDB. For MySQL Cluster, set to NDBCLUSTER.
-# Example: mysql_storage_engine=(string value)
-#mysql_storage_engine = InnoDB
-
-# Timeout before idle SQL connections are reaped. (integer
-# value)
+connection = mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/cinder
+
+# The SQLAlchemy connection string to use to connect to the slave database.
+# (string value)
+#slave_connection = <None>
+
+# The SQL mode to be used for MySQL sessions. This option, including the
+# default, overrides any server-set SQL mode. To use whatever SQL mode is set
+# by the server configuration, set this to no value. Example: mysql_sql_mode=
+# (string value)
+#mysql_sql_mode = TRADITIONAL
+
+# Timeout before idle SQL connections are reaped. (integer value)
 # Deprecated group/name - [DEFAULT]/sql_idle_timeout
 # Deprecated group/name - [DATABASE]/sql_idle_timeout
 # Deprecated group/name - [sql]/idle_timeout
-#idle_timeout=3600
-
-# Minimum number of SQL connections to keep open in a pool.
-# (integer value)
+#idle_timeout = 3600
+
+# Minimum number of SQL connections to keep open in a pool. (integer value)
 # Deprecated group/name - [DEFAULT]/sql_min_pool_size
 # Deprecated group/name - [DATABASE]/sql_min_pool_size
-#min_pool_size=1
-
-# Maximum 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)
 # Deprecated group/name - [DEFAULT]/sql_max_pool_size
 # Deprecated group/name - [DATABASE]/sql_max_pool_size
-#max_pool_size=<None>
-
-# Maximum number of database connection retries during
-# startup. Set to -1 to specify an infinite retry count.
-# (integer value)
+#max_pool_size = <None>
+
+# Maximum number of database connection retries during startup. Set to -1 to
+# specify an infinite retry count. (integer value)
 # Deprecated group/name - [DEFAULT]/sql_max_retries
 # Deprecated group/name - [DATABASE]/sql_max_retries
-#max_retries=10
-
-# Interval between retries of opening a SQL connection.
-# (integer value)
+#max_retries = 10
+
+# Interval between retries of opening a SQL connection. (integer value)
 # Deprecated group/name - [DEFAULT]/sql_retry_interval
 # Deprecated group/name - [DATABASE]/reconnect_interval
-#retry_interval=10
-
-# If set, use this value for max_overflow with SQLAlchemy.
-# (integer value)
+#retry_interval = 10
+
+# If set, use this value for max_overflow with SQLAlchemy. (integer value)
 # Deprecated group/name - [DEFAULT]/sql_max_overflow
 # Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
-#max_overflow=<None>
-
-# Verbosity of SQL debugging information: 0=None,
-# 100=Everything. (integer value)
+#max_overflow = 50
+
+# Verbosity of SQL debugging information: 0=None, 100=Everything. (integer
+# value)
 # Deprecated group/name - [DEFAULT]/sql_connection_debug
-#connection_debug=0
-
-# Add Python stack traces to SQL as comment strings. (boolean
-# value)
+#connection_debug = 0
+
+# Add Python stack traces to SQL as comment strings. (boolean value)
 # Deprecated group/name - [DEFAULT]/sql_connection_trace
-#connection_trace=false
-
-# If set, use this value for pool_timeout with SQLAlchemy.
-# (integer value)
+#connection_trace = false
+
+# If set, use this value for pool_timeout with SQLAlchemy. (integer value)
 # Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
-#pool_timeout=<None>
-
-# Enable the experimental use of database reconnect on
-# connection lost. (boolean value)
-#use_db_reconnect=false
-
-# Seconds between retries of a database transaction. (integer
-# value)
-#db_retry_interval=1
-
-# If True, increases the interval between retries of a
-# database operation up to db_max_retry_interval. (boolean
-# value)
-#db_inc_retry_interval=true
-
-# If db_inc_retry_interval is set, the maximum seconds between
-# retries of a database operation. (integer value)
-#db_max_retry_interval=10
-
-# Maximum retries in case of connection error or deadlock
-# error before error is raised. Set to -1 to specify an
-# infinite retry count. (integer value)
-#db_max_retries=20
-
+#pool_timeout = <None>
+
+# Enable the experimental use of database reconnect on connection lost.
+# (boolean value)
+#use_db_reconnect = false
+
+# Seconds between retries of a database transaction. (integer value)
+#db_retry_interval = 1
+
+# If True, increases the interval between retries of a database operation up to
+# db_max_retry_interval. (boolean value)
+#db_inc_retry_interval = true
+
+# If db_inc_retry_interval is set, the maximum seconds between retries of a
+# database operation. (integer value)
+#db_max_retry_interval = 10
+
+# Maximum retries in case of connection error or deadlock error before error is
+# raised. Set to -1 to specify an infinite retry count. (integer value)
+#db_max_retries = 20
 
 #
-# Options defined in oslo.db.concurrency
-#
-
-# Enable the experimental use of thread pooling for all DB API
-# calls (boolean value)
-# Deprecated group/name - [DEFAULT]/dbapi_use_tpool
-#use_tpool=false
-
-
-[fc-zone-manager]
-
-#
-# Options defined in cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver
+# From oslo.db.concurrency
 #
 
-# Southbound connector for zoning operation (string value)
-#brcd_sb_connector=cinder.zonemanager.drivers.brocade.brcd_fc_zone_client_cli.BrcdFCZoneClientCLI
-
-
-#
-# Options defined in cinder.zonemanager.drivers.cisco.cisco_fc_zone_driver
-#
-
-# Southbound connector for zoning operation (string value)
-#cisco_sb_connector=cinder.zonemanager.drivers.cisco.cisco_fc_zone_client_cli.CiscoFCZoneClientCLI
-
-
-#
-# Options defined in cinder.zonemanager.fc_zone_manager
-#
-
-# FC Zone Driver responsible for zone management (string
+# Enable the experimental use of thread pooling for all DB API calls (boolean
 # value)
-#zone_driver=cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver.BrcdFCZoneDriver
-
-# Zoning policy configured by user; valid values include
-# "initiator-target" or "initiator" (string value)
-#zoning_policy=initiator-target
-
-# Comma separated list of Fibre Channel fabric names. This
-# list of names is used to retrieve other SAN credentials for
-# connecting to each SAN fabric (string value)
-#fc_fabric_names=<None>
-
-# FC SAN Lookup Service (string value)
-#fc_san_lookup_service=cinder.zonemanager.drivers.brocade.brcd_fc_san_lookup_service.BrcdFCSanLookupService
-
-
-[keymgr]
-
-#
-# Options defined in cinder.keymgr
-#
-
-# The full class name of the key manager API class (string
-# value)
-#api_class=cinder.keymgr.conf_key_mgr.ConfKeyManager
-
-
-#
-# Options defined in cinder.keymgr.conf_key_mgr
-#
-
-# Fixed key returned by key manager, specified in hex (string
-# value)
-#fixed_key=<None>
-
-
-#
-# Options defined in cinder.keymgr.key_mgr
-#
-
-# Authentication url for encryption service. (string value)
-#encryption_auth_url=http://localhost:5000/v3
-
-# Url for encryption service. (string value)
-#encryption_api_url=http://localhost:9311/v1
+# Deprecated group/name - [DEFAULT]/dbapi_use_tpool
+#use_tpool = false
 
 
 [keystone_authtoken]
 
 #
-# Options defined in keystonemiddleware.auth_token
+# From keystonemiddleware.auth_token
 #
 
 # Complete public Identity API endpoint. (string value)
-auth_uri=http://127.0.0.1:5000/v2.0/
-
-# API version of the admin Identity API endpoint. (string
+auth_uri = http://127.0.0.1:5000/v2.0/
+
+# API version of the admin Identity API endpoint. (string value)
+#auth_version = <None>
+
+# Do not handle authorization requests within the middleware, but delegate the
+# authorization decision to downstream WSGI components. (boolean value)
+#delay_auth_decision = false
+
+# Request timeout value for communicating with Identity API server. (integer
 # value)
-#auth_version=<None>
-
-# Do not handle authorization requests within the middleware,
-# but delegate the authorization decision to downstream WSGI
-# components. (boolean value)
-#delay_auth_decision=false
-
-# Request timeout value for communicating with Identity API
-# server. (integer value)
-#http_connect_timeout=<None>
-
-# How many times are we trying to reconnect when communicating
-# with Identity API Server. (integer value)
-#http_request_max_retries=3
+#http_connect_timeout = <None>
+
+# How many times are we trying to reconnect when communicating with Identity
+# API Server. (integer value)
+#http_request_max_retries = 3
 
 # Env key for the swift cache. (string value)
-#cache=<None>
-
-# Required if identity server requires client certificate
-# (string value)
-#certfile=<None>
-
-# Required if identity server requires client certificate
-# (string value)
-#keyfile=<None>
-
-# A PEM encoded Certificate Authority to use when verifying
-# HTTPs connections. Defaults to system CAs. (string value)
-#cafile=<None>
+#cache = <None>
+
+# Required if identity server requires client certificate (string value)
+#certfile = <None>
+
+# Required if identity server requires client certificate (string value)
+#keyfile = <None>
+
+# A PEM encoded Certificate Authority to use when verifying HTTPs connections.
+# Defaults to system CAs. (string value)
+#cafile = <None>
 
 # Verify HTTPS connections. (boolean value)
-#insecure=false
-
-# Directory used to cache files related to PKI tokens. (string
-# value)
-signing_dir=$state_path/keystone-signing
-
-# Optionally specify a list of memcached server(s) to use for
-# caching. If left undefined, tokens will instead be cached
-# in-process. (list value)
+#insecure = false
+
+# The region in which the identity server can be found. (string value)
+#region_name = <None>
+
+# Directory used to cache files related to PKI tokens. (string value)
+signing_dir = $state_path/keystone-signing
+
+# Optionally specify a list of memcached server(s) to use for caching. If left
+# undefined, tokens will instead be cached in-process. (list value)
 # Deprecated group/name - [DEFAULT]/memcache_servers
-#memcached_servers=<None>
-
-# In order to prevent excessive effort spent validating
-# tokens, the middleware caches previously-seen tokens for a
-# configurable duration (in seconds). Set to -1 to disable
-# caching completely. (integer value)
-#token_cache_time=300
-
-# Determines the frequency at which the list of revoked tokens
-# is retrieved from the Identity service (in seconds). A high
-# number of revocation events combined with a low cache
-# duration may significantly reduce performance. (integer
-# value)
-#revocation_cache_time=10
-
-# (Optional) If defined, indicate whether token data should be
-# authenticated or authenticated and encrypted. Acceptable
-# values are MAC or ENCRYPT.  If MAC, token data is
-# authenticated (with HMAC) in the cache. If ENCRYPT, token
-# data is encrypted and authenticated in the cache. If the
-# value is not one of these options or empty, auth_token will
+#memcached_servers = <None>
+
+# In order to prevent excessive effort spent validating tokens, the middleware
+# caches previously-seen tokens for a configurable duration (in seconds). Set
+# to -1 to disable caching completely. (integer value)
+#token_cache_time = 300
+
+# Determines the frequency at which the list of revoked tokens is retrieved
+# from the Identity service (in seconds). A high number of revocation events
+# combined with a low cache duration may significantly reduce performance.
+# (integer value)
+#revocation_cache_time = 10
+
+# (Optional) If defined, indicate whether token data should be authenticated or
+# authenticated and encrypted. If MAC, token data is authenticated (with HMAC)
+# in the cache. If ENCRYPT, token data is encrypted and authenticated in the
+# cache. If the value is not one of these options or empty, auth_token will
 # raise an exception on initialization. (string value)
-#memcache_security_strategy=<None>
-
-# (Optional, mandatory if memcache_security_strategy is
-# defined) This string is used for key derivation. (string
-# value)
-#memcache_secret_key=<None>
-
-# (Optional) Number of seconds memcached server is considered
-# dead before it is tried again. (integer value)
-#memcache_pool_dead_retry=300
-
-# (Optional) Maximum total number of open connections to every
-# memcached server. (integer value)
-#memcache_pool_maxsize=10
-
-# (Optional) Socket timeout in seconds for communicating with
-# a memcache server. (integer value)
-#memcache_pool_socket_timeout=3
-
-# (Optional) Number of seconds a connection to memcached is
-# held unused in the pool before it is closed. (integer value)
-#memcache_pool_unused_timeout=60
-
-# (Optional) Number of seconds that an operation will wait to
-# get a memcache client connection from the pool. (integer
-# value)
-#memcache_pool_conn_get_timeout=10
-
-# (Optional) Use the advanced (eventlet safe) memcache client
-# pool. The advanced pool will only work under python 2.x.
-# (boolean value)
-#memcache_use_advanced_pool=false
-
-# (Optional) Indicate whether to set the X-Service-Catalog
-# header. If False, middleware will not ask for service
-# catalog on token validation and will not set the X-Service-
-# Catalog header. (boolean value)
-#include_service_catalog=true
-
-# Used to control the use and type of token binding. Can be
-# set to: "disabled" to not check token binding. "permissive"
-# (default) to validate binding information if the bind type
-# is of a form known to the server and ignore it if not.
-# "strict" like "permissive" but if the bind type is unknown
-# the token will be rejected. "required" any form of token
-# binding is needed to be allowed. Finally the name of a
-# binding method that must be present in tokens. (string
-# value)
-#enforce_token_bind=permissive
-
-# If true, the revocation list will be checked for cached
-# tokens. This requires that PKI tokens are configured on the
-# identity server. (boolean value)
-#check_revocations_for_cached=false
-
-# Hash algorithms to use for hashing PKI tokens. This may be a
-# single algorithm or multiple. The algorithms are those
-# supported by Python standard hashlib.new(). The hashes will
-# be tried in the order given, so put the preferred one first
-# for performance. The result of the first hash will be stored
-# in the cache. This will typically be set to multiple values
-# only while migrating from a less secure algorithm to a more
-# secure one. Once all the old tokens are expired this option
-# should be set to a single value for better performance.
-# (list value)
-#hash_algorithms=md5
-
-# Prefix to prepend at the beginning of the path. Deprecated,
-# use identity_uri. (string value)
-#auth_admin_prefix=
-
-# Host providing the admin Identity API endpoint. Deprecated,
-# use identity_uri. (string value)
-#auth_host=127.0.0.1
-
-# Port of the admin Identity API endpoint. Deprecated, use
-# identity_uri. (integer value)
-#auth_port=35357
-
-# Protocol of the admin Identity API endpoint (http or https).
-# Deprecated, use identity_uri. (string value)
-#auth_protocol=https
-
-# Complete admin Identity API endpoint. This should specify
-# the unversioned root endpoint e.g. https://localhost:35357/
+# Allowed values: None, MAC, ENCRYPT
+#memcache_security_strategy = None
+
+# (Optional, mandatory if memcache_security_strategy is defined) This string is
+# used for key derivation. (string value)
+#memcache_secret_key = <None>
+
+# (Optional) Number of seconds memcached server is considered dead before it is
+# tried again. (integer value)
+#memcache_pool_dead_retry = 300
+
+# (Optional) Maximum total number of open connections to every memcached
+# server. (integer value)
+#memcache_pool_maxsize = 10
+
+# (Optional) Socket timeout in seconds for communicating with a memcached
+# server. (integer value)
+#memcache_pool_socket_timeout = 3
+
+# (Optional) Number of seconds a connection to memcached is held unused in the
+# pool before it is closed. (integer value)
+#memcache_pool_unused_timeout = 60
+
+# (Optional) Number of seconds that an operation will wait to get a memcached
+# client connection from the pool. (integer value)
+#memcache_pool_conn_get_timeout = 10
+
+# (Optional) Use the advanced (eventlet safe) memcached client pool. The
+# advanced pool will only work under python 2.x. (boolean value)
+#memcache_use_advanced_pool = false
+
+# (Optional) Indicate whether to set the X-Service-Catalog header. If False,
+# middleware will not ask for service catalog on token validation and will not
+# set the X-Service-Catalog header. (boolean value)
+#include_service_catalog = true
+
+# Used to control the use and type of token binding. Can be set to: "disabled"
+# to not check token binding. "permissive" (default) to validate binding
+# information if the bind type is of a form known to the server and ignore it
+# if not. "strict" like "permissive" but if the bind type is unknown the token
+# will be rejected. "required" any form of token binding is needed to be
+# allowed. Finally the name of a binding method that must be present in tokens.
 # (string value)
-identity_uri=http://127.0.0.1:35357/
-
-# This option is deprecated and may be removed in a future
-# release. Single shared secret with the Keystone
-# configuration used for bootstrapping a Keystone
-# installation, or otherwise bypassing the normal
-# authentication process. This option should not be used, use
-# `admin_user` and `admin_password` instead. (string value)
-#admin_token=<None>
+#enforce_token_bind = permissive
+
+# If true, the revocation list will be checked for cached tokens. This requires
+# that PKI tokens are configured on the identity server. (boolean value)
+#check_revocations_for_cached = false
+
+# Hash algorithms to use for hashing PKI tokens. This may be a single algorithm
+# or multiple. The algorithms are those supported by Python standard
+# hashlib.new(). The hashes will be tried in the order given, so put the
+# preferred one first for performance. The result of the first hash will be
+# stored in the cache. This will typically be set to multiple values only while
+# migrating from a less secure algorithm to a more secure one. Once all the old
+# tokens are expired this option should be set to a single value for better
+# performance. (list value)
+#hash_algorithms = md5
+
+# Authentication type to load (unknown value)
+# Deprecated group/name - [DEFAULT]/auth_plugin
+#auth_type = <None>
+
+# Config Section from which to load plugin specific options (unknown value)
+#auth_section = <None>
+
+# Complete admin Identity API endpoint. This should specify the unversioned
+# root endpoint e.g. https://localhost:35357/ (string value)
+identity_uri = http://127.0.0.1:35357/
 
 # Service username. (string value)
-admin_user=%SERVICE_USER%
+admin_user = %SERVICE_USER%
 
 # Service user password. (string value)
-admin_password=%SERVICE_PASSWORD%
+admin_password = %SERVICE_PASSWORD%
 
 # Service tenant name. (string value)
-admin_tenant_name=%SERVICE_TENANT_NAME%
-
-# Name of the plugin to load (string value)
-#auth_plugin=<None>
-
-# Config Section from which to load plugin specific options
-# (string value)
-#auth_section=<None>
+admin_tenant_name = %SERVICE_TENANT_NAME%
 
 
 [matchmaker_redis]
 
 #
-# Options defined in oslo.messaging
+# From oslo.messaging
 #
 
 # Host to locate redis. (string value)
-#host=127.0.0.1
-
-# Use this port to connect to redis host. (integer value)
-#port=6379
+#host = 127.0.0.1
+
+# Use this port to connect to redis host. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#port = 6379
 
 # Password for Redis server (optional). (string value)
-#password=<None>
-
-
-[matchmaker_ring]
-
-#
-# Options defined in oslo.messaging
-#
-
-# Matchmaker ring file (JSON). (string value)
-# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
-#ringfile=/etc/oslo/matchmaker_ring.json
+#password =
+
+# List of Redis Sentinel hosts (fault tolerance mode) e.g.
+# [host:port, host1:port ... ] (list value)
+#sentinel_hosts =
+
+# Redis replica set name. (string value)
+#sentinel_group_name = oslo-messaging-zeromq
+
+# Time in ms to wait between connection attempts. (integer value)
+#wait_timeout = 500
+
+# Time in ms to wait before the transaction is killed. (integer value)
+#check_timeout = 20000
+
+# Timeout in ms on blocking socket operations (integer value)
+#socket_timeout = 1000
 
 
 [oslo_concurrency]
 
 #
-# Options defined in oslo.concurrency
+# From oslo.concurrency
 #
 
 # Enables or disables inter-process locks. (boolean value)
-#disable_process_locking=false
-
-# Directory to use for lock files.  For security, the
-# specified directory should only be writable by the user
-# running the processes that need locking. Defaults to
-# environment variable OSLO_LOCK_PATH. If external locks are
-# used, a lock path must be set. (string value)
-lock_path=$state_path/lock
+# Deprecated group/name - [DEFAULT]/disable_process_locking
+#disable_process_locking = false
+
+# Directory to use for lock files.  For security, the specified directory
+# should only be writable by the user running the processes that need locking.
+# Defaults to environment variable OSLO_LOCK_PATH. If external locks are used,
+# a lock path must be set. (string value)
+# Deprecated group/name - [DEFAULT]/lock_path
+lock_path = $state_path/lock
 
 
 [oslo_messaging_amqp]
 
 #
-# Options defined in oslo.messaging
+# From oslo.messaging
 #
 
-# address prefix used when sending to a specific server
-# (string value)
-#server_request_prefix=exclusive
-
-# address prefix used when broadcasting to all servers (string
-# value)
-#broadcast_prefix=broadcast
-
-# address prefix when sending to any server in group (string
-# value)
-#group_request_prefix=unicast
+# address prefix used when sending to a specific server (string value)
+# Deprecated group/name - [amqp1]/server_request_prefix
+#server_request_prefix = exclusive
+
+# address prefix used when broadcasting to all servers (string value)
+# Deprecated group/name - [amqp1]/broadcast_prefix
+#broadcast_prefix = broadcast
+
+# address prefix when sending to any server in group (string value)
+# Deprecated group/name - [amqp1]/group_request_prefix
+#group_request_prefix = unicast
 
 # Name for the AMQP container (string value)
-#container_name=<None>
-
-# Timeout for inactive connections (in seconds) (integer
-# value)
-#idle_timeout=0
+# Deprecated group/name - [amqp1]/container_name
+#container_name = <None>
+
+# Timeout for inactive connections (in seconds) (integer value)
+# Deprecated group/name - [amqp1]/idle_timeout
+#idle_timeout = 0
 
 # Debug: dump AMQP frames to stdout (boolean value)
-#trace=false
-
-# CA certificate PEM file for verifing server certificate
-# (string value)
-#ssl_ca_file=
-
-# Identifying certificate PEM file to present to clients
-# (string value)
-#ssl_cert_file=
-
-# Private key PEM file used to sign cert_file certificate
-# (string value)
-#ssl_key_file=
-
-# Password for decrypting ssl_key_file (if encrypted) (string
-# value)
-#ssl_key_password=<None>
+# Deprecated group/name - [amqp1]/trace
+#trace = false
+
+# CA certificate PEM file to verify server certificate (string value)
+# Deprecated group/name - [amqp1]/ssl_ca_file
+#ssl_ca_file =
+
+# Identifying certificate PEM file to present to clients (string value)
+# Deprecated group/name - [amqp1]/ssl_cert_file
+#ssl_cert_file =
+
+# Private key PEM file used to sign cert_file certificate (string value)
+# Deprecated group/name - [amqp1]/ssl_key_file
+#ssl_key_file =
+
+# Password for decrypting ssl_key_file (if encrypted) (string value)
+# Deprecated group/name - [amqp1]/ssl_key_password
+#ssl_key_password = <None>
 
 # Accept clients using either SSL or plain TCP (boolean value)
-#allow_insecure_clients=false
-
-
-[oslo_messaging_qpid]
+# Deprecated group/name - [amqp1]/allow_insecure_clients
+#allow_insecure_clients = false
+
+# Space separated list of acceptable SASL mechanisms (string value)
+# Deprecated group/name - [amqp1]/sasl_mechanisms
+#sasl_mechanisms =
+
+# Path to directory that contains the SASL configuration (string value)
+# Deprecated group/name - [amqp1]/sasl_config_dir
+#sasl_config_dir =
+
+# Name of configuration file (without .conf suffix) (string value)
+# Deprecated group/name - [amqp1]/sasl_config_name
+#sasl_config_name =
+
+# User name for message broker authentication (string value)
+# Deprecated group/name - [amqp1]/username
+#username =
+
+# Password for message broker authentication (string value)
+# Deprecated group/name - [amqp1]/password
+#password =
+
+
+[oslo_messaging_notifications]
 
 #
-# Options defined in oslo.messaging
+# From oslo.messaging
 #
 
-# Use durable queues in AMQP. (boolean value)
-# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
-#amqp_durable_queues=false
-
-# Auto-delete queues in AMQP. (boolean value)
-#amqp_auto_delete=false
-
-# Size of RPC connection pool. (integer value)
-#rpc_conn_pool_size=30
-
-# Qpid broker hostname. (string value)
-#qpid_hostname=localhost
-
-# Qpid broker port. (integer value)
-#qpid_port=5672
-
-# Qpid HA cluster host:port pairs. (list value)
-#qpid_hosts=$qpid_hostname:$qpid_port
-
-# Username for Qpid connection. (string value)
-#qpid_username=
-
-# Password for Qpid connection. (string value)
-#qpid_password=
-
-# Space separated list of SASL mechanisms to use for auth.
-# (string value)
-#qpid_sasl_mechanisms=
-
-# Seconds between connection keepalive heartbeats. (integer
-# value)
-#qpid_heartbeat=60
-
-# Transport to use, either 'tcp' or 'ssl'. (string value)
-#qpid_protocol=tcp
-
-# Whether to disable the Nagle algorithm. (boolean value)
-#qpid_tcp_nodelay=true
-
-# The number of prefetched messages held by receiver. (integer
-# value)
-#qpid_receiver_capacity=1
-
-# The qpid topology version to use.  Version 1 is what was
-# originally used by impl_qpid.  Version 2 includes some
-# backwards-incompatible changes that allow broker federation
-# to work.  Users should update to version 2 when they are
-# able to take everything down, as it requires a clean break.
-# (integer value)
-#qpid_topology_version=1
+# The Drivers(s) to handle sending notifications. Possible values are
+# messaging, messagingv2, routing, log, test, noop (multi valued)
+# Deprecated group/name - [DEFAULT]/notification_driver
+#driver =
+
+# A URL representing the messaging driver to use for notifications. If not set,
+# we fall back to the same configuration used for RPC. (string value)
+# Deprecated group/name - [DEFAULT]/notification_transport_url
+#transport_url = <None>
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+# Deprecated group/name - [DEFAULT]/notification_topics
+#topics = notifications
 
 
 [oslo_messaging_rabbit]
 
 #
-# Options defined in oslo.messaging
+# From oslo.messaging
 #
 
 # Use durable queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/amqp_durable_queues
 # Deprecated group/name - [DEFAULT]/rabbit_durable_queues
-#amqp_durable_queues=false
+#amqp_durable_queues = false
 
 # Auto-delete queues in AMQP. (boolean value)
-#amqp_auto_delete=false
-
-# Size of RPC connection pool. (integer value)
-#rpc_conn_pool_size=30
-
-# SSL version to use (valid only if SSL enabled). Valid values
-# are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may
-# be available on some distributions. (string value)
-#kombu_ssl_version=
+# Deprecated group/name - [DEFAULT]/amqp_auto_delete
+#amqp_auto_delete = false
+
+# SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and
+# SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some
+# distributions. (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_version
+#kombu_ssl_version =
 
 # SSL key file (valid only if SSL enabled). (string value)
-#kombu_ssl_keyfile=
+# Deprecated group/name - [DEFAULT]/kombu_ssl_keyfile
+#kombu_ssl_keyfile =
 
 # SSL cert file (valid only if SSL enabled). (string value)
-#kombu_ssl_certfile=
-
-# SSL certification authority file (valid only if SSL
-# enabled). (string value)
-#kombu_ssl_ca_certs=
-
-# How long to wait before reconnecting in response to an AMQP
-# consumer cancel notification. (floating point value)
-#kombu_reconnect_delay=1.0
-
-# The RabbitMQ broker address where a single node is used.
-# (string value)
-#rabbit_host=localhost
-
-# The RabbitMQ broker port where a single node is used.
-# (integer value)
-#rabbit_port=5672
+# Deprecated group/name - [DEFAULT]/kombu_ssl_certfile
+#kombu_ssl_certfile =
+
+# SSL certification authority file (valid only if SSL enabled). (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_ca_certs
+#kombu_ssl_ca_certs =
+
+# How long to wait before reconnecting in response to an AMQP consumer cancel
+# notification. (floating point value)
+# Deprecated group/name - [DEFAULT]/kombu_reconnect_delay
+#kombu_reconnect_delay = 1.0
+
+# EXPERIMENTAL: Possible values are: gzip, bz2. If not set compression will not
+# be used. This option may notbe available in future versions. (string value)
+#kombu_compression = <None>
+
+# How long to wait a missing client beforce abandoning to send it its replies.
+# This value should not be longer than rpc_response_timeout. (integer value)
+# Deprecated group/name - [DEFAULT]/kombu_reconnect_timeout
+#kombu_missing_consumer_retry_timeout = 60
+
+# Determines how the next RabbitMQ node is chosen in case the one we are
+# currently connected to becomes unavailable. Takes effect only if more than
+# one RabbitMQ node is provided in config. (string value)
+# Allowed values: round-robin, shuffle
+#kombu_failover_strategy = round-robin
+
+# The RabbitMQ broker address where a single node is used. (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_host
+#rabbit_host = localhost
+
+# The RabbitMQ broker port where a single node is used. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+# Deprecated group/name - [DEFAULT]/rabbit_port
+#rabbit_port = 5672
 
 # RabbitMQ HA cluster host:port pairs. (list value)
-#rabbit_hosts=$rabbit_host:$rabbit_port
+# Deprecated group/name - [DEFAULT]/rabbit_hosts
+#rabbit_hosts = $rabbit_host:$rabbit_port
 
 # Connect over SSL for RabbitMQ. (boolean value)
-#rabbit_use_ssl=false
+# Deprecated group/name - [DEFAULT]/rabbit_use_ssl
+#rabbit_use_ssl = false
 
 # The RabbitMQ userid. (string value)
-#rabbit_userid=guest
+# Deprecated group/name - [DEFAULT]/rabbit_userid
+#rabbit_userid = guest
 
 # The RabbitMQ password. (string value)
-#rabbit_password=guest
+# Deprecated group/name - [DEFAULT]/rabbit_password
+#rabbit_password = guest
 
 # The RabbitMQ login method. (string value)
-#rabbit_login_method=AMQPLAIN
+# Deprecated group/name - [DEFAULT]/rabbit_login_method
+#rabbit_login_method = AMQPLAIN
 
 # The RabbitMQ virtual host. (string value)
-#rabbit_virtual_host=/
-
-# How frequently to retry connecting with RabbitMQ. (integer
+# Deprecated group/name - [DEFAULT]/rabbit_virtual_host
+#rabbit_virtual_host = /
+
+# How frequently to retry connecting with RabbitMQ. (integer value)
+#rabbit_retry_interval = 1
+
+# How long to backoff for between retries when connecting to RabbitMQ. (integer
+# value)
+# Deprecated group/name - [DEFAULT]/rabbit_retry_backoff
+#rabbit_retry_backoff = 2
+
+# Maximum interval of RabbitMQ connection retries. Default is 30 seconds.
+# (integer value)
+#rabbit_interval_max = 30
+
+# Maximum number of RabbitMQ connection retries. Default is 0 (infinite retry
+# count). (integer value)
+# Deprecated group/name - [DEFAULT]/rabbit_max_retries
+#rabbit_max_retries = 0
+
+# Try to use HA queues in RabbitMQ (x-ha-policy: all). If you change this
+# option, you must wipe the RabbitMQ database. In RabbitMQ 3.0, queue mirroring
+# is no longer controlled by the x-ha-policy argument when declaring a queue.
+# If you just want to make sure that all queues (except  those with auto-
+# generated names) are mirrored across all nodes, run: "rabbitmqctl set_policy
+# HA '^(?!amq\.).*' '{"ha-mode": "all"}' " (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_ha_queues
+#rabbit_ha_queues = false
+
+# Positive integer representing duration in seconds for queue TTL (x-expires).
+# Queues which are unused for the duration of the TTL are automatically
+# deleted. The parameter affects only reply and fanout queues. (integer value)
+# Minimum value: 1
+#rabbit_transient_queues_ttl = 1800
+
+# Specifies the number of messages to prefetch. Setting to zero allows
+# unlimited messages. (integer value)
+#rabbit_qos_prefetch_count = 0
+
+# Number of seconds after which the Rabbit broker is considered down if
+# heartbeat's keep-alive fails (0 disable the heartbeat). EXPERIMENTAL (integer
+# value)
+#heartbeat_timeout_threshold = 60
+
+# How often times during the heartbeat_timeout_threshold we check the
+# heartbeat. (integer value)
+#heartbeat_rate = 2
+
+# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake (boolean value)
+# Deprecated group/name - [DEFAULT]/fake_rabbit
+#fake_rabbit = false
+
+# Maximum number of channels to allow (integer value)
+#channel_max = <None>
+
+# The maximum byte size for an AMQP frame (integer value)
+#frame_max = <None>
+
+# How often to send heartbeats for consumer's connections (integer value)
+#heartbeat_interval = 1
+
+# Enable SSL (boolean value)
+#ssl = <None>
+
+# Arguments passed to ssl.wrap_socket (dict value)
+#ssl_options = <None>
+
+# Set socket timeout in seconds for connection's socket (floating point value)
+#socket_timeout = 0.25
+
+# Set TCP_USER_TIMEOUT in seconds for connection's socket (floating point
 # value)
-#rabbit_retry_interval=1
-
-# How long to backoff for between retries when connecting to
-# RabbitMQ. (integer value)
-#rabbit_retry_backoff=2
-
-# Maximum number of RabbitMQ connection retries. Default is 0
-# (infinite retry count). (integer value)
-#rabbit_max_retries=0
-
-# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
-# this option, you must wipe the RabbitMQ database. (boolean
+#tcp_user_timeout = 0.25
+
+# Set delay for reconnection to some host which has connection error (floating
+# point value)
+#host_connection_reconnect_delay = 0.25
+
+# Maximum number of connections to keep queued. (integer value)
+#pool_max_size = 10
+
+# Maximum number of connections to create above `pool_max_size`. (integer
+# value)
+#pool_max_overflow = 0
+
+# Default number of seconds to wait for a connections to available (integer
 # value)
-#rabbit_ha_queues=false
-
-# Number of seconds after which the Rabbit broker is
-# considered down if heartbeat's keep-alive fails (0 disables
-# the heartbeat, >0 enables it. Enabling heartbeats requires
-# kombu>=3.0.7 and amqp>=1.4.0). EXPERIMENTAL (integer value)
-#heartbeat_timeout_threshold=0
-
-# How often times during the heartbeat_timeout_threshold we
-# check the heartbeat. (integer value)
-#heartbeat_rate=2
-
-# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
-# (boolean value)
-#fake_rabbit=false
+#pool_timeout = 30
+
+# Lifetime of a connection (since creation) in seconds or None for no
+# recycling. Expired connections are closed on acquire. (integer value)
+#pool_recycle = 600
+
+# Threshold at which inactive (since release) connections are considered stale
+# in seconds or None for no staleness. Stale connections are closed on acquire.
+# (integer value)
+#pool_stale = 60
+
+# Persist notification messages. (boolean value)
+#notification_persistence = false
+
+# Exchange name for for sending notifications (string value)
+#default_notification_exchange = ${control_exchange}_notification
+
+# Max number of not acknowledged message which RabbitMQ can send to
+# notification listener. (integer value)
+#notification_listener_prefetch_count = 100
+
+# Reconnecting retry count in case of connectivity problem during sending
+# notification, -1 means infinite retry. (integer value)
+#default_notification_retry_attempts = -1
+
+# Reconnecting retry delay in case of connectivity problem during sending
+# notification message (floating point value)
+#notification_retry_delay = 0.25
+
+# Time to live for rpc queues without consumers in seconds. (integer value)
+#rpc_queue_expiration = 60
+
+# Exchange name for sending RPC messages (string value)
+#default_rpc_exchange = ${control_exchange}_rpc
+
+# Exchange name for receiving RPC replies (string value)
+#rpc_reply_exchange = ${control_exchange}_rpc_reply
+
+# Max number of not acknowledged message which RabbitMQ can send to rpc
+# listener. (integer value)
+#rpc_listener_prefetch_count = 100
+
+# Max number of not acknowledged message which RabbitMQ can send to rpc reply
+# listener. (integer value)
+#rpc_reply_listener_prefetch_count = 100
+
+# Reconnecting retry count in case of connectivity problem during sending
+# reply. -1 means infinite retry during rpc_timeout (integer value)
+#rpc_reply_retry_attempts = -1
+
+# Reconnecting retry delay in case of connectivity problem during sending
+# reply. (floating point value)
+#rpc_reply_retry_delay = 0.25
+
+# Reconnecting retry count in case of connectivity problem during sending RPC
+# message, -1 means infinite retry. If actual retry attempts in not 0 the rpc
+# request could be processed more then one time (integer value)
+#default_rpc_retry_attempts = -1
+
+# Reconnecting retry delay in case of connectivity problem during sending RPC
+# message (floating point value)
+#rpc_retry_delay = 0.25
 
 
 [oslo_middleware]
 
 #
-# Options defined in oslo.middleware
+# From oslo.middleware
 #
 
-# The maximum body size for each  request, in bytes. (integer
-# value)
+# The maximum body size for each  request, in bytes. (integer value)
 # Deprecated group/name - [DEFAULT]/osapi_max_request_body_size
 # Deprecated group/name - [DEFAULT]/max_request_body_size
-#max_request_body_size=114688
-
-
-[profiler]
+#max_request_body_size = 114688
+
+# The HTTP Header that will be used to determine what the original request
+# protocol scheme was, even if it was hidden by an SSL termination proxy.
+# (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+#secure_proxy_ssl_header = X-Forwarded-Proto
+
+
+[oslo_policy]
+
+#
+# From oslo.policy
+#
+
+# The JSON file that defines policies. (string value)
+# Deprecated group/name - [DEFAULT]/policy_file
+#policy_file = policy.json
+
+# Default rule. Enforced when a requested rule is not found. (string value)
+# Deprecated group/name - [DEFAULT]/policy_default_rule
+#policy_default_rule = default
+
+# Directories where policy configuration files are stored. They can be relative
+# to any directory in the search path defined by the config_dir option, or
+# absolute paths. The file defined by policy_file must exist for these
+# directories to be searched.  Missing or empty directories are ignored. (multi
+# valued)
+# Deprecated group/name - [DEFAULT]/policy_dirs
+#policy_dirs = policy.d
+
+
+[oslo_reports]
 
 #
-# Options defined in cinder.service
+# From oslo.reports
+#
+
+# Path to a log directory where to create a file (string value)
+#log_dir = <None>
+
+
+[oslo_versionedobjects]
+
+#
+# From oslo.versionedobjects
+#
+
+# Make exception message format errors fatal (boolean value)
+#fatal_exception_format_errors = false
+
+
+[ssl]
+
+#
+# From oslo.service.sslutils
 #
 
-# If False fully disable profiling feature. (boolean value)
-#profiler_enabled=false
-
-# If False doesn't trace SQL requests. (boolean value)
-#trace_sqlalchemy=false
-
-
+# CA certificate file to use to verify connecting clients. (string value)
+# Deprecated group/name - [DEFAULT]/ssl_ca_file
+#ca_file = <None>
+
+# Certificate file to use when starting the server securely. (string value)
+# Deprecated group/name - [DEFAULT]/ssl_cert_file
+#cert_file = <None>
+
+# Private key file to use when starting the server securely. (string value)
+# Deprecated group/name - [DEFAULT]/ssl_key_file
+#key_file = <None>
+
+# SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and
+# SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some
+# distributions. (string value)
+#version = <None>
+
+# Sets the list of available ciphers. value should be a string in the OpenSSL
+# cipher list format. (string value)
+#ciphers = <None>
--- a/components/openstack/cinder/files/cinder.exec_attr	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/cinder.exec_attr	Wed Sep 07 14:48:41 2016 -0700
@@ -17,7 +17,7 @@
 
 cinder-volume:solaris:cmd:RO::/usr/sbin/mount:privs=sys_mount,net_privaddr
 
-cinder-volume:solaris:cmd:RO::/usr/sbin/stmfadm:euid=0
+cinder-volume:solaris:cmd:RO::/usr/sbin/stmfadm:uid=0
 
 cinder-volume:solaris:cmd:RO::/usr/sbin/umount:privs=sys_mount,net_privaddr
 
--- a/components/openstack/cinder/files/solaris/nfs.py	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/solaris/nfs.py	Wed Sep 07 14:48:41 2016 -0700
@@ -2,7 +2,7 @@
 # Copyright (c) 2012 OpenStack LLC.
 # All Rights Reserved.
 #
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. 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
@@ -26,7 +26,7 @@
 from oslo_utils import units
 
 from cinder import exception
-from cinder.i18n import _
+from cinder.i18n import _, _LI
 from cinder.volume.drivers import nfs
 
 ZFS_NFS_VERSION = '1.0.0'
@@ -206,6 +206,19 @@
 
         return target_share
 
+    def extend_volume(self, volume, new_size):
+        """Extend an existing volume to the new size."""
+        LOG.info(_LI('Extending volume %s.'), volume['id'])
+        extend_by = int(new_size) - volume['size']
+        if not self._is_share_eligible(volume['provider_location'],
+                                       extend_by):
+            raise exception.ExtendVolumeError(reason='Insufficient space to'
+                                              ' extend volume %s to %sG'
+                                              % (volume['id'], new_size))
+        path = self.local_path(volume)
+        LOG.info(_LI('Resizing file to %sG.'), new_size)
+        self._execute('/usr/bin/truncate', '-s', '%sG' % new_size, path)
+
     def set_nas_security_options(self, is_new_cinder_install):
         """Secure NAS options.
 
--- a/components/openstack/cinder/files/solaris/solarisfc.py	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright (c) 2015, 2016, Oracle and/or its affiliates. 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.
-
-"""Generic Solaris Fibre Channel utilities."""
-
-import os
-import platform
-import time
-
-from oslo_concurrency import processutils as putils
-from oslo_log import log as logging
-
-from cinder.brick import exception
-from cinder.openstack.common.gettextutils import _
-
-LOG = logging.getLogger(__name__)
-
-
-class SolarisFibreChannel(object):
-    def __init__(self, *args, **kwargs):
-        self.execute = putils.execute
-
-    def _get_fc_hbas(self):
-        """Get Fibre Channel HBA information."""
-        out = None
-        try:
-            out, err = self.execute('/usr/sbin/fcinfo', 'hba-port')
-        except putils.ProcessExecutionError as err:
-            return None
-
-        if out is None:
-            LOG.info(_("Cannot find any Fibre Channel HBAs"))
-            return None
-
-        hbas = []
-        hba = {}
-        for line in out.splitlines():
-            line = line.strip()
-            # Collect the following hba-port data:
-            # 1: Port WWN
-            # 2: State (online|offline)
-            # 3: Node WWN
-            if line.startswith("HBA Port WWN:"):
-                # New HBA port entry
-                hba = {}
-                wwpn = line.split()[-1]
-                hba['port_name'] = wwpn
-                continue
-            elif line.startswith("Port Mode:"):
-                mode = line.split()[-1]
-                # Skip Target mode ports
-                if mode != 'Initiator':
-                    break
-            elif line.startswith("State:"):
-                state = line.split()[-1]
-                hba['port_state'] = state
-                continue
-            elif line.startswith("Node WWN:"):
-                wwnn = line.split()[-1]
-                hba['node_name'] = wwnn
-                continue
-            if len(hba) == 3:
-                hbas.append(hba)
-                hba = {}
-        return hbas
-
-    def get_fc_wwnns(self):
-        """Get Fibre Channel WWNNs from the system, if any."""
-        hbas = self._get_fc_hbas()
-        if hbas is None:
-            return None
-
-        wwnns = []
-        for hba in hbas:
-            if hba['port_state'] == 'online':
-                wwnn = hba['node_name']
-                wwnns.append(wwnn)
-        return wwnns
-
-    def get_fc_wwpns(self):
-        """Get Fibre Channel WWPNs from the system, if any."""
-        hbas = self._get_fc_hbas()
-        if hbas is None:
-            return None
-
-        wwpns = []
-        for hba in hbas:
-            if hba['port_state'] == 'online':
-                wwpn = hba['port_name']
-                wwpns.append(wwpn)
-        return wwpns
-
-    def _refresh_connection(self):
-        """Force the link reinitialization to make the LUN present."""
-        wwpns = self.get_fc_wwpns()
-        for wwpn in wwpns:
-            self.execute('/usr/sbin/fcadm', 'force-lip', wwpn)
-
-    def _get_device_path(self, wwn, target_lun):
-        """Get the Device path for the specified LUN.
-
-        The output of CMD below is like this:
-
-        OS Device Name: /dev/rdsk/c0t600C0FF0000000000036223AE73EB705d0s2
-               HBA Port WWN: 210100e08b27a8a1
-                       Remote Port WWN: 256000c0ffc03622
-                               LUN: 0
-                       Remote Port WWN: 216000c0ff803622
-                               LUN: 0
-               HBA Port WWN: 210000e08b07a8a1
-                       Remote Port WWN: 256000c0ffc03622
-                               LUN: 0
-                       Remote Port WWN: 216000c0ff803622
-                               LUN: 0
-               Vendor: SUN
-               Product: StorEdge 3510
-               Device Type: Disk device
-        ......
-        """
-        try:
-            out, err = self.execute('/usr/sbin/fcinfo', 'logical-unit', '-v')
-        except putils.ProcessExecutionError as err:
-            return None
-
-        host_device = None
-        remote_port = None
-        if out is not None:
-            for line in [l.strip() for l in out.splitlines()]:
-                if line.startswith("OS Device Name:"):
-                    host_device = line.split()[-1]
-                if line.startswith("Remote Port WWN:"):
-                    remote_port = line.split()[-1]
-                if line.startswith("LUN:"):
-                    lun = line.split()[-1]
-                    if remote_port.upper() == wwn and \
-                       int(lun) == int(target_lun):
-                        return host_device
-
-        return None
-
-    def connect_volume(self, connection_properties, scan_tries):
-        """Attach the volume to instance_name.
-
-        connection_properties for Fibre Channel must include:
-        target_wwn - Specified port WWNs
-        target_lun - LUN id of the volume
-        """
-        device_info = {'type': 'block'}
-        target_wwn = connection_properties['target_wwn']
-        target_lun = connection_properties['target_lun']
-        wwns = []
-        if isinstance(target_wwn, list):
-            wwns = target_wwn
-        else:
-            wwns.append(target_wwn)
-
-        # The scsi_vhci disk node is not always present immediately.
-        # Sometimes we need to reinitialize the connection to trigger
-        # a refresh.
-        for i in range(1, scan_tries):
-            # initiator needs time to refresh the LU list
-            time.sleep(i * 2)
-            host_device = self._get_device_path(wwns[0], target_lun)
-
-            if host_device is not None and os.path.exists(host_device):
-                break
-            else:
-                self._refresh_connection()
-        else:
-            msg = _("Fibre Channel volume device not found.")
-            LOG.error(msg)
-            raise exception.NoFibreChannelVolumeDeviceFound()
-
-        # Set the label EFI to the disk on SPARC before it is accessed and
-        # make sure the correct device path with slice 0
-        # (like '/dev/rdsk/c0t600xxxd0s0').
-        if platform.processor() == 'sparc':
-            tmp_dev_name = host_device.rsplit('s', 1)
-            disk_name = tmp_dev_name[0].split('/')[-1]
-            (out, _err) = self.execute('/usr/sbin/format', '-L', 'efi', '-d',
-                                       disk_name)
-            host_device = '%ss0' % tmp_dev_name[0]
-
-        device_info['path'] = host_device
-        return device_info
--- a/components/openstack/cinder/files/solaris/solarisiscsi.py	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright (c) 2015, Oracle and/or its affiliates. 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.
-
-"""Generic Solaris iSCSI utilities."""
-
-import os
-import platform
-import time
-
-from oslo_concurrency import processutils as putils
-from oslo_log import log as logging
-
-from cinder.brick import exception
-from cinder.openstack.common.gettextutils import _
-
-LOG = logging.getLogger(__name__)
-
-
-class SolarisiSCSI(object):
-    def __init__(self, *args, **kwargs):
-        self.execute = putils.execute
-
-    def _get_device_path(self, connection_properties):
-        """Get the device path from the target info.
-
-        The output of cmd below is like this:
-        Target: iqn.2010-10.org.openstack:hostname1-tgt-grp-target
-        Alias: -
-        TPGT: 1
-        ISID: 4000002a0000
-        Connections: 1
-        LUN: 1
-             Vendor:  SUN
-             Product: COMSTAR
-             OS Device Name: /dev/rdsk/c0t600144F0FDFAD05D0000563C04030003d0s2
-        LUN: 0
-             Vendor:  SUN
-             Product: COMSTAR
-             OS Device Name: /dev/rdsk/c0t600144F0FDFAD05D0000563C02270002d0s2
-
-        """
-        (out, _err) = self.execute('/usr/sbin/iscsiadm', 'list',
-                                   'target', '-S',
-                                   connection_properties['target_iqn'])
-
-        found = False
-        for line in [l.strip() for l in out.splitlines()]:
-            if line.startswith("LUN:"):
-                lun = line.split()[-1]
-                if int(lun) == int(connection_properties['target_lun']):
-                    found = True
-                    continue
-            if found:
-                if line.startswith("OS Device Name:"):
-                    dev_path = line.split()[-1]
-                    return dev_path
-                elif line.startswith("LUN:"):
-                    found = False
-
-        if not found:
-            LOG.error(_("No device is found for the target %s LUN %s.") %
-                      (connection_properties['target_iqn'],
-                       connection_properties['target_lun']))
-            raise
-
-    def get_initiator(self):
-        """Return the iSCSI initiator node name IQN"""
-        out, err = self.execute('/usr/sbin/iscsiadm', 'list', 'initiator-node')
-
-        # Sample first line of command output:
-        # Initiator node name: iqn.1986-03.com.sun:01:e00000000000.4f757217
-        initiator_name_line = out.splitlines()[0]
-        return initiator_name_line.rsplit(' ', 1)[1]
-
-    def _connect_to_iscsi_portal(self, connection_properties):
-        # TODO(Strony): handle the CHAP authentication
-        target_ip = connection_properties['target_portal'].split(":")[0]
-        self.execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
-                     target_ip)
-        self.execute('/usr/sbin/iscsiadm', 'modify', 'discovery',
-                     '--sendtargets', 'enable')
-        (out, _err) = self.execute('/usr/sbin/iscsiadm', 'list',
-                                   'discovery-address', '-v',
-                                   target_ip)
-
-        lines = out.splitlines()
-        if not lines[0].strip().startswith('Discovery Address: ') or \
-                lines[1].strip().startswith('Unable to get targets.'):
-            msg = _("No iSCSI target is found.")
-            LOG.error(msg)
-            raise
-
-        target_iqn = connection_properties['target_iqn']
-        for line in [l.strip() for l in lines]:
-            if line.startswith("Target name:") and \
-                    line.split()[-1] == target_iqn:
-                return
-        else:
-            LOG.error(_("No active session is found for the target %s.") %
-                      target_iqn)
-            raise
-
-    def connect_volume(self, connection_properties, scan_tries):
-        """Attach the volume to instance_name.
-
-        connection_properties for iSCSI must include:
-        target_portal - ip and optional port
-        target_iqn - iSCSI Qualified Name
-        target_lun - LUN id of the volume
-        """
-        device_info = {'type': 'block'}
-
-        # TODO(Strony): support the iSCSI multipath on Solaris.
-        self._connect_to_iscsi_portal(connection_properties)
-
-        host_device = self._get_device_path(connection_properties)
-
-        # check if it is a valid device path.
-        for i in range(1, scan_tries):
-            if os.path.exists(host_device):
-                break
-            else:
-                time.sleep(i ** 2)
-        else:
-            raise exception.VolumeDeviceNotFound(device=host_device)
-
-        # Set the label EFI to the disk on SPARC before it is accessed and
-        # make sure the correct device path with slice 0
-        # (like '/dev/rdsk/c0t600xxxd0s0').
-        if platform.processor() == 'sparc':
-            tmp_dev_name = host_device.rsplit('s', 1)
-            disk_name = tmp_dev_name[0].split('/')[-1]
-            (out, _err) = self.execute('/usr/sbin/format', '-L', 'efi', '-d',
-                                       disk_name)
-            host_device = '%ss0' % tmp_dev_name[0]
-
-        device_info['path'] = host_device
-        return device_info
--- a/components/openstack/cinder/files/solaris/zfs.py	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/files/solaris/zfs.py	Wed Sep 07 14:48:41 2016 -0700
@@ -25,6 +25,8 @@
 import subprocess
 import time
 
+from eventlet.green.OpenSSL import SSL
+from eventlet.green import socket
 from oslo_concurrency import processutils
 from oslo_config import cfg
 from oslo_log import log as logging
@@ -36,17 +38,13 @@
 from cinder.volume import driver
 from cinder.volume.drivers.san.san import SanDriver
 
-from eventlet.green import socket
-from eventlet.green.OpenSSL import SSL
-
+import rad.auth as rada
+import rad.bindings.com.oracle.solaris.rad.zfsmgr_1 as zfsmgr
 import rad.client as radc
 import rad.connect as radcon
-import rad.bindings.com.oracle.solaris.rad.zfsmgr_1 as zfsmgr
-import rad.auth as rada
-
 from solaris_install.target.size import Size
 
-FLAGS = cfg.CONF
+CONF = cfg.CONF
 LOG = logging.getLogger(__name__)
 
 solaris_zfs_opts = [
@@ -57,7 +55,7 @@
                default='tgt-grp',
                help='iSCSI target group name.'), ]
 
-FLAGS.register_opts(solaris_zfs_opts)
+CONF.register_opts(solaris_zfs_opts)
 
 
 def connect_tls(host, port=12302, locale=None, ca_certs=None):
@@ -103,10 +101,12 @@
         1.2.2 - Introduce the ZFS RAD for volume migration enhancement
         1.2.3 - Replace volume-specific targets with one shared target in
                 the ZFSISCSIDriver
+        1.3.0 - Support the option iscsi_secondary_ip_addresses and then
+                return target_iqns, target_portals, target_luns in Mitaka
 
     """
 
-    version = "1.2.3"
+    version = "1.3.0"
     protocol = 'local'
 
     def __init__(self, *args, **kwargs):
@@ -224,7 +224,7 @@
         """Synchronously recreate an export for a logical volume."""
         pass
 
-    def create_export(self, context, volume):
+    def create_export(self, context, volume, connector):
         """Export the volume."""
         pass
 
@@ -398,60 +398,64 @@
         # Create the temporary snapshot of src volume
         self.create_snapshot(src_snapshot)
 
-        src_rc = self._get_rc_connect()
-        dst_rc = self._get_rc_connect(dst_san_info)
+        try:
+            src_rc = self._get_rc_connect()
+            dst_rc = self._get_rc_connect(dst_san_info)
 
-        src_pat = self._get_zfs_volume_name(src['name'])
-        src_vol_obj = src_rc.get_object(zfsmgr.ZfsDataset(),
-                                        radc.ADRGlobPattern({"name": src_pat}))
-        dst_pat = dst.rsplit('/', 1)[0]
-        dst_vol_obj = dst_rc.get_object(zfsmgr.ZfsDataset(),
-                                        radc.ADRGlobPattern({"name": dst_pat}))
+            src_pat = self._get_zfs_volume_name(src['name'])
+            src_vol_obj = src_rc.get_object(zfsmgr.ZfsDataset(),
+                                            radc.ADRGlobPattern({"name":
+                                                                src_pat}))
+            dst_pat = dst.rsplit('/', 1)[0]
+            dst_vol_obj = dst_rc.get_object(zfsmgr.ZfsDataset(),
+                                            radc.ADRGlobPattern({"name":
+                                                                dst_pat}))
 
-        send_sock_info = src_vol_obj.get_send_socket(
-            name=src_snapshot_name, socket_type=zfsmgr.SocketType.AF_INET)
-        send_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        send_sock.connect((self.hostname, int(send_sock_info.socket)))
+            send_sock_info = src_vol_obj.get_send_socket(
+                name=src_snapshot_name, socket_type=zfsmgr.SocketType.AF_INET)
+            send_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            send_sock.connect((self.hostname, int(send_sock_info.socket)))
 
-        dst_san_ip = dst_san_info.split(';')[0]
-        remote_host, alias, addresslist = socket.gethostbyaddr(dst_san_ip)
+            dst_san_ip = dst_san_info.split(';')[0]
+            remote_host, alias, addresslist = socket.gethostbyaddr(dst_san_ip)
 
-        recv_sock_info = dst_vol_obj.get_receive_socket(
-            name=dst, socket_type=zfsmgr.SocketType.AF_INET,
-            name_options=zfsmgr.ZfsRecvNameOptions.use_provided_name)
-        recv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        recv_sock.connect((remote_host, int(recv_sock_info.socket)))
+            recv_sock_info = dst_vol_obj.get_receive_socket(
+                name=dst, socket_type=zfsmgr.SocketType.AF_INET,
+                name_options=zfsmgr.ZfsRecvNameOptions.use_provided_name)
+            recv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            recv_sock.connect((remote_host, int(recv_sock_info.socket)))
 
-        # Set 4mb buffer size
-        buf_size = 4194304
-        while True:
-            # Read the data from the send stream
-            buf = send_sock.recv(buf_size)
-            if not buf:
-                break
-            # Write the data to the receive steam
-            recv_sock.send(buf)
+            # Set 4mb buffer size
+            buf_size = 4194304
+            while True:
+                # Read the data from the send stream
+                buf = send_sock.recv(buf_size)
+                if not buf:
+                    break
+                # Write the data to the receive steam
+                recv_sock.send(buf)
 
-        recv_sock.close()
-        send_sock.close()
-        time.sleep(1)
+            recv_sock.close()
+            send_sock.close()
+            time.sleep(1)
 
-        # Delete the temporary dst snapshot
-        pat = radc.ADRGlobPattern({"name": dst})
-        dst_zvol_obj = dst_rc.get_object(zfsmgr.ZfsDataset(), pat)
-        snapshot_list = dst_zvol_obj.get_snapshots()
-        for snap in snapshot_list:
-            if 'tmp-send-snapshot'in snap:
-                dst_zvol_obj.destroy_snapshot(snap)
-                break
+            # Delete the temporary dst snapshot
+            pat = radc.ADRGlobPattern({"name": dst})
+            dst_zvol_obj = dst_rc.get_object(zfsmgr.ZfsDataset(), pat)
+            snapshot_list = dst_zvol_obj.get_snapshots()
+            for snap in snapshot_list:
+                if 'tmp-send-snapshot'in snap:
+                    dst_zvol_obj.destroy_snapshot(snap)
+                    break
 
-        # Delete the temporary src snapshot
-        self.delete_snapshot(src_snapshot)
-        LOG.debug(("Transfered src stream'%s' to dst'%s' on the host'%s'") %
-                  (src_snapshot_name, dst, self.hostname))
+        finally:
+            # Delete the temporary src snapshot
+            self.delete_snapshot(src_snapshot)
+            LOG.debug(("Transfered src'%s' to dst'%s' on the host'%s'") %
+                      (src_snapshot_name, dst, self.hostname))
 
-        src_rc.close()
-        dst_rc.close()
+            src_rc.close()
+            dst_rc.close()
 
     def _get_zvol_path(self, volume):
         """Get the ZFS volume path."""
@@ -651,6 +655,12 @@
                            % (target, error.stderr))
         raise exception.VolumeBackendAPIException(data=err_msg)
 
+    def _online_target(self, target, protocol):
+        """Online the target in the offline state."""
+        self._execute('/usr/sbin/stmfadm', 'online-target',
+                      target)
+        assert self._check_target(target, protocol) == 'Online'
+
     def _check_tg(self, tg):
         """Check if the target group exists."""
         try:
@@ -751,35 +761,117 @@
 
         return status
 
+    def _add_tg_member(self, target, tg, tpg):
+        """Create the target and then add it to the target group."""
+        self._stmf_execute('/usr/sbin/itadm', 'create-target', '-n',
+                           target, '-t', tpg)
+        self._stmf_execute('/usr/sbin/stmfadm', 'offline-target',
+                           target)
+        self._stmf_execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
+                           tg, target)
+
+    def _get_target_portal(self, target):
+        """Get the current target IP address."""
+        (out, _err) = self._execute('/usr/sbin/itadm', 'list-target',
+                                    '-v', target)
+        portal = None
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Target Address:"):
+                portal = line.split()[-1]
+                break
+        return portal
+
+    def _check_tpg(self, tpg):
+        """Verify the tpg."""
+        try:
+            (out, _err) = self._execute('/usr/sbin/itadm', 'list-tpg',
+                                        '-v', tpg)
+            return True
+        except processutils.ProcessExecutionError as error:
+            if 'not found' in error.stderr:
+                return False
+            else:
+                err_msg = (_("Failed to list the tpg '%s': '%s'")
+                           % (tpg, error.stderr))
+            raise exception.VolumeBackendAPIException(data=err_msg)
+
+    def _create_tpg(self, tpg, ip):
+        """Create the TPG for the IP address."""
+        try:
+            self._execute('/usr/sbin/itadm', 'create-tpg', tpg, ip)
+        except processutils.ProcessExecutionError as error:
+            err_msg = (_("Failed to create the tpg '%s': '%s'") %
+                        (tpg, error.stderr))
+            raise exception.VolumeBackendAPIException(data=err_msg)
+
+    def _setup_targets(self, target_ips, target_group):
+        """Setup targets for the IP addresses."""
+        for ip in target_ips:
+            tpg_name = "tpg-%s" % ip
+            if not self._check_tpg(tpg_name):
+                self._create_tpg(tpg_name, ip)
+            target_name = '%s%s-%s-%s-target' % \
+                          (self.configuration.iscsi_target_prefix,
+                           self.hostname,
+                           tpg_name,
+                           target_group)
+            target_status = self._check_target(target_name, 'iSCSI')
+            if target_status == 'Online':
+                continue
+            if target_status is None:
+                self._add_tg_member(target_name, target_group, tpg_name)
+            self._online_target(target_name, 'iSCSI')
+
     def do_setup(self, context):
         """Setup the target and target group."""
         target_group = self.configuration.zfs_target_group
+
+        if not self._check_tg(target_group):
+            self._stmf_execute('/usr/sbin/stmfadm', 'create-tg', target_group)
         target_name = '%s%s-%s-target' % \
                       (self.configuration.iscsi_target_prefix,
                        self.hostname,
                        target_group)
-
-        if not self._check_tg(target_group):
-            self._stmf_execute('/usr/sbin/stmfadm', 'create-tg', target_group)
         target_status = self._check_target(target_name, 'iSCSI')
-        if target_status == 'Online':
+        secondary_interfaces = self.configuration.iscsi_secondary_ip_addresses
+        if target_status == 'Online' and not secondary_interfaces:
             return
-
         if target_status is None:
-            # Create and add the target into the target group
-            self._stmf_execute('/usr/sbin/itadm', 'create-target', '-n',
-                               target_name)
-            self._stmf_execute('/usr/sbin/stmfadm', 'offline-target',
-                               target_name)
-            self._stmf_execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
-                               target_group, target_name)
+            # Create the primary target
+            if self.configuration.san_is_local:
+                primary_ip = self.configuration.iscsi_ip_address
+            else:
+                primary_ip = self.configuration.san_ip
+            tpg_name = "tpg-%s" % primary_ip
+            if not self._check_tpg(tpg_name):
+                self._create_tpg(tpg_name, primary_ip)
+            self._add_tg_member(target_name, target_group, tpg_name)
 
         # Online the target from the 'Offline' status
-        self._stmf_execute('/usr/sbin/stmfadm', 'online-target',
-                           target_name)
-        assert self._check_target(target_name, 'iSCSI') == 'Online'
+        self._online_target(target_name, 'iSCSI')
+
+        if secondary_interfaces:
+            secondary_ips = [ip for ip in secondary_interfaces if ip.strip()]
+            self._setup_targets(secondary_ips, target_group)
 
-    def create_export(self, context, volume):
+    def _get_tg_secondary_members(self, primary_target):
+        """Get target members of the target group."""
+        tg = self.configuration.zfs_target_group
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg', '-v', tg)
+        targets = []
+        target_portals = []
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Member:"):
+                target = line.split()[-1]
+                if target == primary_target:
+                    continue
+                targets.append(target)
+                target_portal = self._get_target_portal(target)
+                if target_portal:
+                    target_portals.append(target_portal)
+        return targets, target_portals
+
+    def create_export(self, context, volume, conncetor):
         """Export the volume."""
         # If the volume is already exported there is nothing to do, as we
         # simply export volumes and they are universally available.
@@ -850,12 +942,18 @@
             the authentication details. Right now, either auth_method is not
             present meaning no authentication, or auth_method == `CHAP`
             meaning use CHAP with the specified credentials.
+
+        If multiple IP addresses are configured, the returns will include
+        :target_iqns, :target_portals, :target_luns, which contain lists of
+        multiple values. The main portal information is also returned in
+        :target_iqn, :target_portal, :target_lun for backward compatibility.
         """
         luid = self._get_luid(volume)
         if not luid:
             msg = (_("Failed to get LU for volume '%s'") % volume['name'])
             raise exception.VolumeBackendAPIException(data=msg)
 
+        old_target_name = True
         target_name = '%s%s' % (self.configuration.iscsi_target_prefix,
                                 volume['name'])
         if self._check_target(target_name, 'iSCSI') is None:
@@ -863,6 +961,7 @@
                           (self.configuration.iscsi_target_prefix,
                            self.hostname,
                            self.configuration.zfs_target_group)
+            old_target_name = False
 
         properties = {}
 
@@ -883,6 +982,21 @@
             properties['target_lun'] = view_lun['lun']
         properties['volume_id'] = volume['id']
 
+        secondary_ifs = self.configuration.iscsi_secondary_ip_addresses
+        # The multipathing doesn't apply to the old volume-specific target
+        if not old_target_name and secondary_ifs:
+            target_portals = []
+            target_iqns = []
+            target_luns = []
+            target_portals.append(properties['target_portal'])
+            target_iqns.append(properties['target_iqn'])
+            target_luns.append(properties['target_lun'])
+            secondary_iqns, secondary_portals = self._get_tg_secondary_members(
+                                                target_name)
+            properties['target_portals'] = target_portals + secondary_portals
+            properties['target_iqns'] = target_iqns + secondary_iqns
+            properties['target_luns'] = (len(secondary_iqns) + 1) * target_luns
+
         auth = volume['provider_auth']
         if auth:
             (auth_method, auth_username, auth_secret) = auth.split()
@@ -1016,10 +1130,7 @@
                                        target_wwn)
                     self._stmf_execute('/usr/sbin/stmfadm', 'add-tg-member',
                                        '-g', tg, target_wwn)
-                    self._stmf_execute('/usr/sbin/stmfadm', 'online-target',
-                                       target_wwn)
-                    assert self._check_target(wwn, 'Channel') == 'Online'
-
+                    self._online_target(target_wwn, 'Channel')
                 except:
                     LOG.error(_LE("Failed to add and online the target '%s'.")
                               % (target_wwn))
@@ -1068,7 +1179,7 @@
         for target_wwn in target_wwns:
             self._stmf_execute('/usr/sbin/fcadm', 'force-lip', target_wwn)
 
-    def create_export(self, context, volume):
+    def create_export(self, context, volume, connector):
         """Export the volume."""
         # If the volume is already exported there is nothing to do, as we
         # simply export volumes and they are universally available.
--- a/components/openstack/cinder/files/zfssa/zfssaiscsi.py	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,466 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. 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.
-"""
-ZFS Storage Appliance Cinder Volume Driver
-"""
-import ast
-import base64
-
-from oslo_config import cfg
-from oslo_log import log
-from oslo_utils import units
-
-from cinder import exception
-from cinder.i18n import _, _LE, _LW
-from cinder.volume import driver
-from cinder.volume.drivers.san import san
-from cinder.volume.drivers.zfssa import zfssarest
-from cinder.volume import volume_types
-
-CONF = cfg.CONF
-LOG = log.getLogger(__name__)
-
-ZFSSA_OPTS = [
-    cfg.StrOpt('zfssa_pool',
-               help='Storage pool name.'),
-    cfg.StrOpt('zfssa_project',
-               help='Project name.'),
-    cfg.StrOpt('zfssa_lun_volblocksize', default='8k',
-               choices=['512', '1k', '2k', '4k', '8k', '16k', '32k', '64k',
-                        '128k'],
-               help='Block size.'),
-    cfg.BoolOpt('zfssa_lun_sparse', default=False,
-                help='Flag to enable sparse (thin-provisioned): True, False.'),
-    cfg.StrOpt('zfssa_lun_compression', default='off',
-               choices=['off', 'lzjb', 'gzip-2', 'gzip', 'gzip-9'],
-               help='Data compression.'),
-    cfg.StrOpt('zfssa_lun_logbias', default='latency',
-               choices=['latency', 'throughput'],
-               help='Synchronous write bias.'),
-    cfg.StrOpt('zfssa_initiator_group', default='',
-               help='iSCSI initiator group.'),
-    cfg.StrOpt('zfssa_initiator', default='',
-               help='iSCSI initiator IQNs. (comma separated)'),
-    cfg.StrOpt('zfssa_initiator_user', default='',
-               help='iSCSI initiator CHAP user.'),
-    cfg.StrOpt('zfssa_initiator_password', default='',
-               help='iSCSI initiator CHAP password.', secret=True),
-    cfg.StrOpt('zfssa_initiator_config', default='',
-               help='iSCSI initiators configuration.'),
-    cfg.StrOpt('zfssa_target_group', default='tgt-grp',
-               help='iSCSI target group name.'),
-    cfg.StrOpt('zfssa_target_user', default='',
-               help='iSCSI target CHAP user.'),
-    cfg.StrOpt('zfssa_target_password', default='',
-               help='iSCSI target CHAP password.', secret=True),
-    cfg.StrOpt('zfssa_target_portal',
-               help='iSCSI target portal (Data-IP:Port, w.x.y.z:3260).'),
-    cfg.StrOpt('zfssa_target_interfaces',
-               help='Network interfaces of iSCSI targets. (comma separated)'),
-    cfg.IntOpt('zfssa_rest_timeout',
-               help='REST connection timeout. (seconds)')
-
-]
-
-CONF.register_opts(ZFSSA_OPTS)
-
-ZFSSA_LUN_SPECS = {'zfssa:volblocksize',
-                   'zfssa:sparse',
-                   'zfssa:compression',
-                   'zfssa:logbias'}
-
-
-def factory_zfssa():
-    return zfssarest.ZFSSAApi()
-
-
-class ZFSSAISCSIDriver(driver.ISCSIDriver):
-    """ZFSSA Cinder volume driver"""
-
-    VERSION = '1.0.0'
-    protocol = 'iSCSI'
-
-    def __init__(self, *args, **kwargs):
-        super(ZFSSAISCSIDriver, self).__init__(*args, **kwargs)
-        self.configuration.append_config_values(ZFSSA_OPTS)
-        self.configuration.append_config_values(san.san_opts)
-        self.zfssa = None
-        self._stats = None
-
-    def _get_target_alias(self):
-        """return target alias"""
-        return self.configuration.zfssa_target_group
-
-    def do_setup(self, context):
-        """Setup - create multiple elements.
-
-        Project, initiators, initiatorgroup, target and targetgroup.
-        """
-        lcfg = self.configuration
-        msg = (_('Connecting to host: %s.') % lcfg.san_ip)
-        LOG.info(msg)
-        self.zfssa = factory_zfssa()
-        self.zfssa.set_host(lcfg.san_ip, timeout=lcfg.zfssa_rest_timeout)
-        auth_str = base64.encodestring('%s:%s' %
-                                       (lcfg.san_login,
-                                        lcfg.san_password))[:-1]
-        self.zfssa.login(auth_str)
-        self.zfssa.create_project(lcfg.zfssa_pool, lcfg.zfssa_project,
-                                  compression=lcfg.zfssa_lun_compression,
-                                  logbias=lcfg.zfssa_lun_logbias)
-
-        if (lcfg.zfssa_initiator_config != ''):
-            initiator_config = ast.literal_eval(lcfg.zfssa_initiator_config)
-            for initiator_group in initiator_config:
-                zfssa_initiator_group = initiator_group
-                for zfssa_initiator in initiator_config[zfssa_initiator_group]:
-                    self.zfssa.create_initiator(zfssa_initiator['iqn'],
-                                                zfssa_initiator_group + '-' +
-                                                zfssa_initiator['iqn'],
-                                                chapuser=
-                                                zfssa_initiator['user'],
-                                                chapsecret=
-                                                zfssa_initiator['password'])
-                    if (zfssa_initiator_group != 'default'):
-                        self.zfssa.add_to_initiatorgroup(
-                            zfssa_initiator['iqn'],
-                            zfssa_initiator_group)
-        else:
-            LOG.warning(_LW('zfssa_initiator_config not found. '
-                            'Using deprecated configuration options.'))
-            if (lcfg.zfssa_initiator != '' and
-                (lcfg.zfssa_initiator_group == '' or
-                 lcfg.zfssa_initiator_group == 'default')):
-                LOG.warning(_LW('zfssa_initiator: %(ini)s'
-                                ' wont be used on '
-                                'zfssa_initiator_group= %(inigrp)s.')
-                            % {'ini': lcfg.zfssa_initiator,
-                               'inigrp': lcfg.zfssa_initiator_group})
-
-            # Setup initiator and initiator group
-            if (lcfg.zfssa_initiator != '' and
-               lcfg.zfssa_initiator_group != '' and
-               lcfg.zfssa_initiator_group != 'default'):
-                for initiator in lcfg.zfssa_initiator.split(','):
-                    self.zfssa.create_initiator(
-                        initiator, lcfg.zfssa_initiator_group + '-' +
-                        initiator, chapuser=lcfg.zfssa_initiator_user,
-                        chapsecret=lcfg.zfssa_initiator_password)
-                    self.zfssa.add_to_initiatorgroup(
-                        initiator, lcfg.zfssa_initiator_group)
-
-        # Parse interfaces
-        interfaces = []
-        for interface in lcfg.zfssa_target_interfaces.split(','):
-            if interface == '':
-                continue
-            interfaces.append(interface)
-
-        # Setup target and target group
-        iqn = self.zfssa.create_target(
-            self._get_target_alias(),
-            interfaces,
-            tchapuser=lcfg.zfssa_target_user,
-            tchapsecret=lcfg.zfssa_target_password)
-
-        self.zfssa.add_to_targetgroup(iqn, lcfg.zfssa_target_group)
-
-    def check_for_setup_error(self):
-        """Check that driver can login.
-
-        Check also pool, project, initiators, initiatorgroup, target and
-        targetgroup.
-        """
-        lcfg = self.configuration
-
-        self.zfssa.verify_pool(lcfg.zfssa_pool)
-        self.zfssa.verify_project(lcfg.zfssa_pool, lcfg.zfssa_project)
-
-        if (lcfg.zfssa_initiator_config != ''):
-            initiator_config = ast.literal_eval(lcfg.zfssa_initiator_config)
-            for initiator_group in initiator_config:
-                zfssa_initiator_group = initiator_group
-                for zfssa_initiator in initiator_config[zfssa_initiator_group]:
-                    self.zfssa.verify_initiator(zfssa_initiator['iqn'])
-        else:
-            if (lcfg.zfssa_initiator != '' and
-               lcfg.zfssa_initiator_group != '' and
-               lcfg.zfssa_initiator_group != 'default'):
-                for initiator in lcfg.zfssa_initiator.split(','):
-                    self.zfssa.verify_initiator(initiator)
-
-            self.zfssa.verify_target(self._get_target_alias())
-
-    def _get_provider_info(self, volume):
-        """return provider information"""
-        lcfg = self.configuration
-        lun = self.zfssa.get_lun(lcfg.zfssa_pool,
-                                 lcfg.zfssa_project, volume['name'])
-        iqn = self.zfssa.get_target(self._get_target_alias())
-        loc = "%s %s %s" % (lcfg.zfssa_target_portal, iqn, lun['number'])
-        LOG.debug('_get_provider_info: provider_location: %s' % loc)
-        provider = {'provider_location': loc}
-        if lcfg.zfssa_target_user != '' and lcfg.zfssa_target_password != '':
-            provider['provider_auth'] = ('CHAP %s %s' %
-                                         lcfg.zfssa_target_user,
-                                         lcfg.zfssa_target_password)
-
-        return provider
-
-    def create_volume(self, volume):
-        """Create a volume on ZFSSA"""
-        LOG.debug('zfssa.create_volume: volume=' + volume['name'])
-        lcfg = self.configuration
-        volsize = str(volume['size']) + 'g'
-        specs = self._get_voltype_specs(volume)
-        self.zfssa.create_lun(lcfg.zfssa_pool,
-                              lcfg.zfssa_project,
-                              volume['name'],
-                              volsize,
-                              lcfg.zfssa_target_group,
-                              specs)
-
-    def delete_volume(self, volume):
-        """Deletes a volume with the given volume['name']."""
-        LOG.debug('zfssa.delete_volume: name=' + volume['name'])
-        lcfg = self.configuration
-        lun2del = self.zfssa.get_lun(lcfg.zfssa_pool,
-                                     lcfg.zfssa_project,
-                                     volume['name'])
-        # Delete clone temp snapshot. see create_cloned_volume()
-        if 'origin' in lun2del and 'id' in volume:
-            if lun2del['nodestroy']:
-                self.zfssa.set_lun_props(lcfg.zfssa_pool,
-                                         lcfg.zfssa_project,
-                                         volume['name'],
-                                         nodestroy=False)
-
-            tmpsnap = 'tmp-snapshot-%s' % volume['id']
-            if lun2del['origin']['snapshot'] == tmpsnap:
-                self.zfssa.delete_snapshot(lcfg.zfssa_pool,
-                                           lcfg.zfssa_project,
-                                           lun2del['origin']['share'],
-                                           lun2del['origin']['snapshot'])
-                return
-
-        self.zfssa.delete_lun(pool=lcfg.zfssa_pool,
-                              project=lcfg.zfssa_project,
-                              lun=volume['name'])
-
-    def create_snapshot(self, snapshot):
-        """Creates a snapshot with the given snapshot['name'] of the
-           snapshot['volume_name']
-        """
-        LOG.debug('zfssa.create_snapshot: snapshot=' + snapshot['name'])
-        lcfg = self.configuration
-        self.zfssa.create_snapshot(lcfg.zfssa_pool,
-                                   lcfg.zfssa_project,
-                                   snapshot['volume_name'],
-                                   snapshot['name'])
-
-    def delete_snapshot(self, snapshot):
-        """Deletes a snapshot."""
-        LOG.debug('zfssa.delete_snapshot: snapshot=' + snapshot['name'])
-        lcfg = self.configuration
-        has_clones = self.zfssa.has_clones(lcfg.zfssa_pool,
-                                           lcfg.zfssa_project,
-                                           snapshot['volume_name'],
-                                           snapshot['name'])
-        if has_clones:
-            LOG.error(_LE('Snapshot %s: has clones') % snapshot['name'])
-            raise exception.SnapshotIsBusy(snapshot_name=snapshot['name'])
-
-        self.zfssa.delete_snapshot(lcfg.zfssa_pool,
-                                   lcfg.zfssa_project,
-                                   snapshot['volume_name'],
-                                   snapshot['name'])
-
-    def create_volume_from_snapshot(self, volume, snapshot):
-        """Creates a volume from a snapshot - clone a snapshot"""
-        LOG.debug('zfssa.create_volume_from_snapshot: volume=' +
-                  volume['name'])
-        LOG.debug('zfssa.create_volume_from_snapshot: snapshot=' +
-                  snapshot['name'])
-        if not self._verify_clone_size(snapshot, volume['size'] * units.Gi):
-            exception_msg = (_('Error verifying clone size on '
-                               'Volume clone: %(clone)s '
-                               'Size: %(size)d on'
-                               'Snapshot: %(snapshot)s')
-                             % {'clone': volume['name'],
-                                'size': volume['size'],
-                                'snapshot': snapshot['name']})
-            LOG.error(exception_msg)
-            raise exception.InvalidInput(reason=exception_msg)
-
-        lcfg = self.configuration
-        self.zfssa.clone_snapshot(lcfg.zfssa_pool,
-                                  lcfg.zfssa_project,
-                                  snapshot['volume_name'],
-                                  snapshot['name'],
-                                  volume['name'])
-
-    def _update_volume_status(self):
-        """Retrieve status info from volume group."""
-        LOG.debug("Updating volume status")
-        self._stats = None
-        data = {}
-        backend_name = self.configuration.safe_get('volume_backend_name')
-        data["volume_backend_name"] = backend_name or self.__class__.__name__
-        data["vendor_name"] = 'Oracle'
-        data["driver_version"] = self.VERSION
-        data["storage_protocol"] = self.protocol
-
-        lcfg = self.configuration
-        (avail, total) = self.zfssa.get_pool_stats(lcfg.zfssa_pool)
-        if avail is None or total is None:
-            return
-
-        data['total_capacity_gb'] = int(total) / units.Gi
-        data['free_capacity_gb'] = int(avail) / units.Gi
-        data['reserved_percentage'] = 0
-        data['QoS_support'] = False
-        self._stats = data
-
-    def get_volume_stats(self, refresh=False):
-        """Get volume status.
-           If 'refresh' is True, run update the stats first.
-        """
-        if refresh:
-            self._update_volume_status()
-        return self._stats
-
-    def create_export(self, context, volume):
-        pass
-
-    def remove_export(self, context, volume):
-        pass
-
-    def ensure_export(self, context, volume):
-        pass
-
-    def copy_image_to_volume(self, context, volume, image_service, image_id):
-        self.ensure_export(context, volume)
-        super(ZFSSAISCSIDriver, self).copy_image_to_volume(
-            context, volume, image_service, image_id)
-
-    def extend_volume(self, volume, new_size):
-        """Driver entry point to extent volume size."""
-        LOG.debug('extend_volume: volume name: %s' % volume['name'])
-        lcfg = self.configuration
-        self.zfssa.set_lun_props(lcfg.zfssa_pool,
-                                 lcfg.zfssa_project,
-                                 volume['name'],
-                                 volsize=new_size * units.Gi)
-
-    def create_cloned_volume(self, volume, src_vref):
-        """Create a clone of the specified volume."""
-        zfssa_snapshot = {'volume_name': src_vref['name'],
-                          'name': 'tmp-snapshot-%s' % volume['id']}
-        self.create_snapshot(zfssa_snapshot)
-        try:
-            self.create_volume_from_snapshot(volume, zfssa_snapshot)
-        except exception.VolumeBackendAPIException:
-            LOG.error(_LE('Clone Volume:'
-                          '%(volume)s failed from source volume:'
-                          '%(src_vref)s')
-                      % {'volume': volume['name'],
-                         'src_vref': src_vref['name']})
-            # Cleanup snapshot
-            self.delete_snapshot(zfssa_snapshot)
-
-    def local_path(self, volume):
-        """Not implemented"""
-        pass
-
-    def backup_volume(self, context, backup, backup_service):
-        """Not implemented"""
-        pass
-
-    def restore_backup(self, context, backup, volume, backup_service):
-        """Not implemented"""
-        pass
-
-    def _verify_clone_size(self, snapshot, size):
-        """Check whether the clone size is the same as the parent volume"""
-        lcfg = self.configuration
-        lun = self.zfssa.get_lun(lcfg.zfssa_pool,
-                                 lcfg.zfssa_project,
-                                 snapshot['volume_name'])
-        return lun['size'] == size
-
-    def initialize_connection(self, volume, connector):
-        lcfg = self.configuration
-        init_groups = self.zfssa.get_initiator_initiatorgroup(
-            connector['initiator'])
-        for initiator_group in init_groups:
-            self.zfssa.set_lun_initiatorgroup(lcfg.zfssa_pool,
-                                              lcfg.zfssa_project,
-                                              volume['name'],
-                                              initiator_group)
-        iscsi_properties = {}
-        provider = self._get_provider_info(volume)
-        (target_portal, iqn, lun) = provider['provider_location'].split()
-        iscsi_properties['target_discovered'] = False
-        iscsi_properties['target_portal'] = target_portal
-        iscsi_properties['target_iqn'] = iqn
-        iscsi_properties['target_lun'] = lun
-        iscsi_properties['volume_id'] = volume['id']
-
-        if 'provider_auth' in provider:
-            (auth_method, auth_username, auth_password) = provider[
-                'provider_auth'].split()
-            iscsi_properties['auth_method'] = auth_method
-            iscsi_properties['auth_username'] = auth_username
-            iscsi_properties['auth_password'] = auth_password
-
-        return {
-            'driver_volume_type': 'iscsi',
-            'data': iscsi_properties
-        }
-
-    def terminate_connection(self, volume, connector, **kwargs):
-        """Driver entry point to terminate a connection for a volume."""
-        LOG.debug('terminate_connection: volume name: %s.' % volume['name'])
-        lcfg = self.configuration
-        self.zfssa.set_lun_initiatorgroup(lcfg.zfssa_pool,
-                                          lcfg.zfssa_project,
-                                          volume['name'],
-                                          '')
-
-    def _get_voltype_specs(self, volume):
-        """Get specs suitable for volume creation."""
-        vtype = volume.get('volume_type_id', None)
-        extra_specs = None
-        if vtype:
-            extra_specs = volume_types.get_volume_type_extra_specs(vtype)
-
-        return self._get_specs(extra_specs)
-
-    def _get_specs(self, xspecs):
-        """Return a dict with extra specs and/or config values."""
-        result = {}
-        for spc in ZFSSA_LUN_SPECS:
-            val = None
-            prop = spc.split(':')[1]
-            cfg = 'zfssa_lun_' + prop
-            if xspecs:
-                val = xspecs.pop(spc, None)
-
-            if val is None:
-                val = self.configuration.safe_get(cfg)
-
-            if val is not None and val != '':
-                result.update({prop: val})
-
-        return result
--- a/components/openstack/cinder/patches/01-requirements.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/01-requirements.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -1,89 +1,35 @@
 In-house patch to remove unnecessary dependencies from Cinder's
 requirements files. The specific reasons are as follows:
 
-anyjson		Not applicable
-
-kombu		Not applicable
-
 oslo.rootwrap	Not applicable to Solaris
 
 pycrypto	Not applicable to Solaris (various drivers specific)
 
 rtslib-fb	Not applicable to Solaris (Linux iSCSI specific)
 
---- cinder-2015.1.2/cinder.egg-info/requires.txt.~1~	2015-10-13 09:30:55.000000000 -0700
-+++ cinder-2015.1.2/cinder.egg-info/requires.txt	2016-01-30 21:00:52.192406009 -0800
-@@ -1,11 +1,9 @@
- pbr!=0.7,<1.0,>=0.6
--anyjson>=0.3.3
- Babel>=1.3
- eventlet!=0.17.0,>=0.16.1
- greenlet>=0.3.2
- iso8601>=0.1.9
- keystonemiddleware<1.6.0,>=1.5.0
--kombu>=2.5.0
- lxml>=2.3
- netaddr>=0.7.12
- oslo.config<1.10.0,>=1.9.3 # Apache-2.0
-@@ -15,14 +13,12 @@ oslo.db<1.8.0,>=1.7.0 # Apache-2.0
- oslo.log<1.1.0,>=1.0.0 # Apache-2.0
- oslo.messaging<1.9.0,>=1.8.0 # Apache-2.0
- oslo.middleware<1.1.0,>=1.0.0 # Apache-2.0
--oslo.rootwrap<1.7.0,>=1.6.0 # Apache-2.0
- oslo.serialization<1.5.0,>=1.4.0 # Apache-2.0
- oslo.utils!=1.4.1,<1.5.0,>=1.4.0 # Apache-2.0
- osprofiler>=0.3.0 # Apache-2.0
- paramiko>=1.13.0
- Paste
- PasteDeploy>=1.5.0
--pycrypto>=2.6
- pyparsing>=2.0.1
- python-barbicanclient<3.1.0,>=3.0.1
- python-glanceclient<0.18.0,>=0.15.0
-@@ -32,7 +28,6 @@ requests!=2.4.0,>=2.2.0
- retrying!=1.3.0,>=1.2.3 # Apache-2.0
- Routes!=2.0,>=1.12.3
- taskflow<0.8.0,>=0.7.1
--rtslib-fb>=2.1.41
- six>=1.9.0
- SQLAlchemy<=0.9.99,>=0.9.7
- sqlalchemy-migrate!=0.9.8,<0.10.0,>=0.9.5
---- cinder-2015.1.2/requirements.txt.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/requirements.txt	2016-01-30 21:01:27.270741292 -0800
-@@ -3,13 +3,11 @@
- # process, which may cause wedges in the gate later.
- 
- pbr!=0.7,<1.0,>=0.6
--anyjson>=0.3.3
- Babel>=1.3
- eventlet!=0.17.0,>=0.16.1
- greenlet>=0.3.2
- iso8601>=0.1.9
- keystonemiddleware<1.6.0,>=1.5.0
--kombu>=2.5.0
- lxml>=2.3
- netaddr>=0.7.12
- oslo.config<1.10.0,>=1.9.3 # Apache-2.0
-@@ -19,14 +17,12 @@ oslo.db<1.8.0,>=1.7.0 # Apache-2.0
- oslo.log<1.1.0,>=1.0.0 # Apache-2.0
- oslo.messaging<1.9.0,>=1.8.0 # Apache-2.0
- oslo.middleware<1.1.0,>=1.0.0 # Apache-2.0
--oslo.rootwrap<1.7.0,>=1.6.0 # Apache-2.0
- oslo.serialization<1.5.0,>=1.4.0 # Apache-2.0
- oslo.utils!=1.4.1,<1.5.0,>=1.4.0 # Apache-2.0
- osprofiler>=0.3.0 # Apache-2.0
- paramiko>=1.13.0
- Paste
- PasteDeploy>=1.5.0
--pycrypto>=2.6
- pyparsing>=2.0.1
- python-barbicanclient<3.1.0,>=3.0.1
- python-glanceclient<0.18.0,>=0.15.0
-@@ -36,7 +32,6 @@ requests!=2.4.0,>=2.2.0
- retrying!=1.3.0,>=1.2.3 # Apache-2.0
- Routes!=2.0,>=1.12.3
- taskflow<0.8.0,>=0.7.1
--rtslib-fb>=2.1.41
- six>=1.9.0
- SQLAlchemy<=0.9.99,>=0.9.7
- sqlalchemy-migrate!=0.9.8,<0.10.0,>=0.9.5
+--- cinder-8.0.0.0rc2/requirements.txt.~1~	2016-03-29 06:02:44.000000000 -0700
++++ cinder-8.0.0.0rc2/requirements.txt	2016-03-30 02:08:26.568745142 -0700
+@@ -22,7 +22,6 @@ oslo.messaging>=4.0.0 # Apache-2.0
+ oslo.middleware>=3.0.0 # Apache-2.0
+ oslo.policy>=0.5.0 # Apache-2.0
+ oslo.reports>=0.6.0 # Apache-2.0
+-oslo.rootwrap>=2.0.0 # Apache-2.0
+ oslo.serialization>=1.10.0 # Apache-2.0
+ oslo.service>=1.0.0 # Apache-2.0
+ oslo.utils>=3.5.0 # Apache-2.0
+@@ -31,7 +30,6 @@ osprofiler>=1.1.0 # Apache-2.0
+ paramiko>=1.16.0 # LGPL
+ Paste # MIT
+ PasteDeploy>=1.5.0 # MIT
+-pycrypto>=2.6 # Public Domain
+ pyparsing>=2.0.1 # MIT
+ python-barbicanclient>=3.3.0 # Apache-2.0
+ python-glanceclient>=2.0.0 # Apache-2.0
+@@ -44,7 +42,6 @@ retrying!=1.3.0,>=1.2.3 # Apache-2.0
+ Routes!=2.0,!=2.1,>=1.12.3;python_version=='2.7' # MIT
+ Routes!=2.0,>=1.12.3;python_version!='2.7' # MIT
+ taskflow>=1.26.0 # Apache-2.0
+-rtslib-fb>=2.1.41 # Apache-2.0
+ simplejson>=2.2.0 # MIT
+ six>=1.9.0 # MIT
+ SQLAlchemy<1.1.0,>=1.0.10 # MIT
--- a/components/openstack/cinder/patches/02-nopycrypto.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/02-nopycrypto.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -1,19 +1,18 @@
 In-house removal of PyCrypto dependency in Cinder. This patch is
 Solaris-specific and not suitable for upstream.
 
---- cinder-2015.1.2/cinder/volume/utils.py.orig	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/volume/utils.py	2016-01-30 23:52:30.088107306 -0800
-@@ -16,8 +16,8 @@
- 
- 
- import math
-+from random import SystemRandom
+--- cinder-8.0.0/cinder/volume/utils.py.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/cinder/volume/utils.py	2016-06-10 14:42:17.155596130 -0700
+@@ -21,7 +21,7 @@ import re
+ import time
+ import uuid
  
 -from Crypto.Random import random
++from random import SystemRandom
+ import eventlet
+ from eventlet import tpool
  from oslo_concurrency import processutils
- from oslo_config import cfg
- from oslo_log import log as logging
-@@ -419,6 +419,7 @@ def generate_password(length=16, symbolg
+@@ -551,6 +551,7 @@ def generate_password(length=16, symbolg
      # NOTE(jerdfelt): Some password policies require at least one character
      # from each group of symbols, so start off with one random character
      # from each symbol group
--- a/components/openstack/cinder/patches/03-emc_vmax_iscsi.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/03-emc_vmax_iscsi.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -1,8 +1,8 @@
 In-house patch to adopt EMC driver to use Solaris' iscsiadm(1M) rather
 than that from Linux. Patch has not yet been submitted upstream.
 
---- cinder-2015.1.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py.~1~	2016-01-30 23:55:52.360305136 -0800
-+++ cinder-2015.1.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py	2016-01-31 00:03:10.160731018 -0800
+--- cinder-8.0.0/cinder/volume/drivers/emc/emc_vmax_iscsi.py.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/cinder/volume/drivers/emc/emc_vmax_iscsi.py	2016-06-10 14:32:40.533787510 -0700
 @@ -17,6 +17,7 @@ ISCSI Drivers for EMC VMAX arrays based
  
  """
@@ -11,30 +11,31 @@
  
  from oslo_log import log as logging
  import six
-@@ -162,17 +163,43 @@ class EMCVMAXISCSIDriver(driver.ISCSIDri
-             LOG.error(_LE(
-                 "You must set your iscsi_ip_address in cinder.conf."))
+@@ -185,14 +186,48 @@ class EMCVMAXISCSIDriver(driver.ISCSIDri
  
--        (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
--                                    '-t', 'sendtargets', '-p',
--                                    self.configuration.iscsi_ip_address,
--                                    run_as_root=True)
--
--        LOG.info(_LI(
--            "smis_do_iscsi_discovery is: %(out)s."),
--            {'out': out})
-         targets = []
--        for target in out.splitlines():
--            targets.append(target)
+     def _call_iscsiadm(self, iscsi_ip_address):
+         """Calls iscsiadm with iscsi ip address"""
+-        try:
+-            (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
+-                                        '-t', 'sendtargets', '-p',
+-                                        iscsi_ip_address,
+-                                        run_as_root=True)
+-            return out, _err, False, None
+-        except Exception as ex:
+-            return None, None, True, ex
 +        if sys.platform == 'sunos5':
 +            data = _("Unexpected response while retrieving discovery-address "
 +                     "objects for volume '%s'") % volume["name"]
 +
-+            self._execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
-+                          self.configuration.iscsi_ip_address)
-+            (out, _err) = self._execute('/usr/sbin/iscsiadm', 'list',
-+                                        'discovery-address', '-v',
-+                                        self.configuration.iscsi_ip_address)
++            try:
++                self._execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
++                              self.configuration.iscsi_ip_address)
++                (out, _err) = self._execute('/usr/sbin/iscsiadm', 'list',
++                                            'discovery-address', '-v',
++                                            self.configuration.iscsi_ip_address)
++            except Exception as ex:
++                return None, None, True, ex
++            targets = ""
 +            lines = out.splitlines()
 +            if not lines[0].strip().startswith('Discovery Address: '):
 +                raise exception.VolumeBackendAPIException(data=data)
@@ -50,18 +51,20 @@
 +                    raise exception.VolumeBackendAPIException(data=data)
 +                (_, _, address, tpgt) = address.split()
 +                target = address + tpgt + ' ' + name
-+                targets.append(target)
++                targets += target + "\n"
++
++            return targets, _err, False, None
++
 +        else:
-+            (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
-+                                        '-t', 'sendtargets', '-p',
-+                                        self.configuration.iscsi_ip_address,
-+                                        run_as_root=True)
 +
-+            LOG.info(_LI(
-+                "smis_do_iscsi_discovery is: %(out)s."),
-+                {'out': out})
-+            for target in out.splitlines():
-+                targets.append(target)
++            try:
++                (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
++                                            '-t', 'sendtargets', '-p',
++                                            iscsi_ip_address,
++                                            run_as_root=True)
++                return out, _err, False, None
++            except Exception as ex:
++                return None, None, True, ex
  
-         return targets
- 
+     def smis_do_iscsi_discovery(self, volume):
+         """Calls iscsiadm with each iscsi ip address in the list"""
--- a/components/openstack/cinder/patches/04-volume-backup.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/04-volume-backup.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -2,144 +2,9 @@
 the Cinder Brick code to support Cinder backup on Solaris. Patch has
 not yet been submitted upstream.
 
---- cinder-2015.1.2/cinder/brick/initiator/connector.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/brick/initiator/connector.py	2016-01-31 00:12:30.729547660 -0800
-@@ -32,6 +32,8 @@ from cinder.brick.initiator import host_
- from cinder.brick.initiator import linuxfc
- from cinder.brick.initiator import linuxscsi
- from cinder.brick.remotefs import remotefs
-+from cinder.brick.initiator import solarisfc
-+from cinder.brick.initiator import solarisiscsi
- from cinder.i18n import _, _LE, _LW
- from cinder.openstack.common import loopingcall
- 
-@@ -72,7 +74,10 @@ def get_connector_properties(root_helper
-     """
- 
-     iscsi = ISCSIConnector(root_helper=root_helper)
--    fc = linuxfc.LinuxFibreChannel(root_helper=root_helper)
-+    if sys.platform == 'sunos5':
-+        fc = solarisfc.SolarisFibreChannel()
-+    else:
-+        fc = linuxfc.LinuxFibreChannel(root_helper=root_helper)
- 
-     props = {}
-     props['ip'] = my_ip
-@@ -188,8 +193,11 @@ class InitiatorConnector(executor.Execut
-                'of=/dev/null', 'count=1')
-         out, info = None, None
-         try:
--            out, info = self._execute(*cmd, run_as_root=run_as_root,
--                                      root_helper=self._root_helper)
-+            if sys.platform == 'sunos5':
-+                out, info = self._execute(*cmd)
-+            else:
-+                out, info = self._execute(*cmd, run_as_root=run_as_root,
-+                                          root_helper=self._root_helper)
-         except putils.ProcessExecutionError as e:
-             LOG.error(_LE("Failed to access the device on the path "
-                           "%(path)s: %(error)s %(info)s.") %
-@@ -225,7 +233,10 @@ class ISCSIConnector(InitiatorConnector)
-                  execute=putils.execute, use_multipath=False,
-                  device_scan_attempts=DEVICE_SCAN_ATTEMPTS_DEFAULT,
-                  *args, **kwargs):
--        self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
-+        if sys.platform == 'sunos5':
-+            self._solarisiscsi = solarisiscsi.SolarisiSCSI()
-+        else:
-+            self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
-         super(ISCSIConnector, self).__init__(root_helper, driver=driver,
-                                              execute=execute,
-                                              device_scan_attempts=
-@@ -235,6 +246,8 @@ class ISCSIConnector(InitiatorConnector)
- 
-     def set_execute(self, execute):
-         super(ISCSIConnector, self).set_execute(execute)
-+        if sys.platform == 'sunos5':
-+            return
-         self._linuxscsi.set_execute(execute)
- 
-     def _iterate_all_targets(self, connection_properties):
-@@ -289,6 +302,9 @@ class ISCSIConnector(InitiatorConnector)
-         Note that plural keys may be used when use_multipath=True
-         """
- 
-+        if sys.platform == 'sunos5':
-+            return self._solarisiscsi.connect_volume(connection_properties,
-+                                                     self.device_scan_attempts)
-         device_info = {'type': 'block'}
- 
-         if self.use_multipath:
-@@ -365,6 +381,8 @@ class ISCSIConnector(InitiatorConnector)
-         target_iqn(s) - iSCSI Qualified Name
-         target_lun(s) - LUN id of the volume
-         """
-+        if sys.platform == 'sunos5':
-+            return
-         # Moved _rescan_iscsi and _rescan_multipath
-         # from _disconnect_volume_multipath_iscsi to here.
-         # Otherwise, if we do rescan after _linuxscsi.remove_multipath_device
-@@ -431,6 +449,9 @@ class ISCSIConnector(InitiatorConnector)
- 
-     def get_initiator(self):
-         """Secure helper to read file as root."""
-+        if sys.platform == 'sunos5':
-+            return self._solarisiscsi.get_initiator()
-+
-         file_path = '/etc/iscsi/initiatorname.iscsi'
-         try:
-             lines, _err = self._execute('cat', file_path, run_as_root=True,
-@@ -674,8 +695,11 @@ class FibreChannelConnector(InitiatorCon
-                  execute=putils.execute, use_multipath=False,
-                  device_scan_attempts=DEVICE_SCAN_ATTEMPTS_DEFAULT,
-                  *args, **kwargs):
--        self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
--        self._linuxfc = linuxfc.LinuxFibreChannel(root_helper, execute)
-+        if sys.platform == 'sunos5':
-+            self._solarisfc = solarisfc.SolarisFibreChannel()
-+        else:
-+            self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
-+            self._linuxfc = linuxfc.LinuxFibreChannel(root_helper, execute)
-         super(FibreChannelConnector, self).__init__(root_helper, driver=driver,
-                                                     execute=execute,
-                                                     device_scan_attempts=
-@@ -685,6 +709,8 @@ class FibreChannelConnector(InitiatorCon
- 
-     def set_execute(self, execute):
-         super(FibreChannelConnector, self).set_execute(execute)
-+        if sys.platform == 'sunos5':
-+            return
-         self._linuxscsi.set_execute(execute)
-         self._linuxfc.set_execute(execute)
- 
-@@ -697,6 +723,10 @@ class FibreChannelConnector(InitiatorCon
-         target_iqn - iSCSI Qualified Name
-         target_lun - LUN id of the volume
-         """
-+        if sys.platform == 'sunos5':
-+            return self._solarisfc.connect_volume(connection_properties,
-+                                                  self.device_scan_attempts)
-+
-         LOG.debug("execute = %s" % self._execute)
-         device_info = {'type': 'block'}
- 
-@@ -830,6 +860,13 @@ class FibreChannelConnector(InitiatorCon
-         target_wwn - iSCSI Qualified Name
-         target_lun - LUN id of the volume
-         """
-+        if sys.platform == 'sunos5':
-+            # There is some latency before the next time connection happens.
-+            # The best practice is to offline the state of the switch now
-+            # and online it at the next connection.
-+            # But now, we just return without any operation.
-+            return
-+
-         devices = device_info['devices']
- 
-         # If this is a multipath device, we need to search again
---- cinder-2015.1.2/cinder/utils.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/utils.py	2016-01-31 00:12:30.730160694 -0800
-@@ -138,8 +138,12 @@ def check_exclusive_options(**kwargs):
+--- cinder-8.0.0/cinder/utils.py.~1~	2016-04-07 00:30:55.000000000 -0700
++++ cinder-8.0.0/cinder/utils.py	2016-06-10 14:39:00.866171230 -0700
+@@ -143,8 +143,12 @@ def check_exclusive_options(**kwargs):
  
  def execute(*cmd, **kwargs):
      """Convenience wrapper around oslo's execute() method."""
--- a/components/openstack/cinder/patches/05-launchpad-1479342.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-commit 075ff30d7d8bbeca1af634718f3cb19099bc44b3
-Author: Abhiram Moturi <[email protected]>
-Date:   Mon Aug 10 14:23:09 2015 +0000
-
-    ZFSSA driver to return project 'available' space
-    
-    This fix allows the iSCSI driver to return the 'available' space
-    property at project level instead of the pool level which is more
-    accurate in cases when storage is not thin provisioned.
-    
-    Change-Id: I52dec5e527eab393fd464fbc7f4f910fafb67268
-    Closes-Bug: #1479342
-
---- cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssaiscsi.py.~1~	2016-02-01 00:58:28.817737350 -0800
-+++ cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssaiscsi.py	2016-02-01 00:58:28.883666429 -0800
-@@ -322,7 +322,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
-         data["storage_protocol"] = self.protocol
- 
-         lcfg = self.configuration
--        (avail, total) = self.zfssa.get_pool_stats(lcfg.zfssa_pool)
-+        (avail, total) = self.zfssa.get_project_stats(lcfg.zfssa_pool,
-+                                                      lcfg.zfssa_project)
-         if avail is None or total is None:
-             return
- 
---- cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssarest.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssarest.py	2016-02-01 00:59:32.842959922 -0800
-@@ -69,36 +69,30 @@ class ZFSSAApi(object):
-         if self.rclient and not self.rclient.islogin():
-             self.rclient.login(auth_str)
- 
--    def get_pool_stats(self, pool):
--        """Get space available and total properties of a pool
-+    def get_project_stats(self, pool, project):
-+        """Get project stats.
-+
-+           Get available space and total space of a project
-            returns (avail, total).
-         """
--        svc = '/api/storage/v1/pools/' + pool
-+        svc = '/api/storage/v1/pools/%s/projects/%s' % (pool, project)
-         ret = self.rclient.get(svc)
-         if ret.status != restclient.Status.OK:
--            exception_msg = (_('Error Getting Pool Stats: '
-+            exception_msg = (_('Error Getting Project Stats: '
-                                'Pool: %(pool)s '
-+                               'Project: %(project)s '
-                                'Return code: %(ret.status)d '
-                                'Message: %(ret.data)s.')
-                              % {'pool': pool,
-+                                'project': project,
-                                 'ret.status': ret.status,
-                                 'ret.data': ret.data})
-             LOG.error(exception_msg)
--            raise exception.InvalidVolume(reason=exception_msg)
-+            raise exception.VolumeBackendAPIException(data=exception_msg)
- 
-         val = json.loads(ret.data)
--
--        if not self._is_pool_owned(val):
--            exception_msg = (_('Error Pool ownership: '
--                               'Pool %(pool)s is not owned '
--                               'by %(host)s.')
--                             % {'pool': pool,
--                                'host': self.host})
--            LOG.error(exception_msg)
--            raise exception.InvalidInput(reason=pool)
--
--        avail = val['pool']['usage']['available']
--        total = val['pool']['usage']['total']
-+        avail = val['project']['space_available']
-+        total = avail + val['project']['space_total']
- 
-         return avail, total
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/05-opts.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -0,0 +1,99 @@
+In-house patch to adjust cinder/opts.py to omit drivers that have
+unresolved dependencies and to add the Solaris NFS and ZFS drivers, as
+well as some missing common components.  This patch is not suitable for
+pushing upstream.
+
+--- cinder-8.0.0/cinder/config/cinder-config-generator.conf.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/cinder/config/cinder-config-generator.conf	2016-07-25 17:19:20.950619120 -0700
+@@ -22,3 +22,4 @@ namespace = oslo.service.wsgi
+ namespace = oslo.utils
+ namespace = oslo.versionedobjects
+ namespace = oslo.vmware
++namespace = oslo.db.concurrency
+--- cinder-8.0.0/cinder/opts.py.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/cinder/opts.py	2016-07-25 15:02:28.185268715 -0700
+@@ -23,7 +23,6 @@ from cinder.backup import chunkeddriver
+ from cinder.backup import driver as cinder_backup_driver
+ from cinder.backup.drivers import ceph as cinder_backup_drivers_ceph
+ from cinder.backup.drivers import glusterfs as cinder_backup_drivers_glusterfs
+-from cinder.backup.drivers import google as cinder_backup_drivers_google
+ from cinder.backup.drivers import nfs as cinder_backup_drivers_nfs
+ from cinder.backup.drivers import posix as cinder_backup_drivers_posix
+ from cinder.backup.drivers import swift as cinder_backup_drivers_swift
+@@ -31,6 +30,7 @@ from cinder.backup.drivers import tsm as
+ from cinder.backup import manager as cinder_backup_manager
+ from cinder.cmd import all as cinder_cmd_all
+ from cinder.cmd import volume as cinder_cmd_volume
++from cinder.cmd import volume_usage_audit as cinder_cmd_volumeusageaudit
+ from cinder.common import config as cinder_common_config
+ import cinder.compute
+ from cinder.compute import nova as cinder_compute_nova
+@@ -146,6 +146,10 @@ from cinder.volume.drivers.san import sa
+ from cinder.volume.drivers import scality as cinder_volume_drivers_scality
+ from cinder.volume.drivers import sheepdog as cinder_volume_drivers_sheepdog
+ from cinder.volume.drivers import smbfs as cinder_volume_drivers_smbfs
++from cinder.volume.drivers.solaris import nfs as \
++    cinder_volume_drivers_solaris_nfs
++from cinder.volume.drivers.solaris import zfs as \
++    cinder_volume_drivers_solaris_zfs
+ from cinder.volume.drivers import solidfire as cinder_volume_drivers_solidfire
+ from cinder.volume.drivers import tegile as cinder_volume_drivers_tegile
+ from cinder.volume.drivers import tintri as cinder_volume_drivers_tintri
+@@ -154,8 +158,6 @@ from cinder.volume.drivers.violin import
+ from cinder.volume.drivers.vmware import vmdk as \
+     cinder_volume_drivers_vmware_vmdk
+ from cinder.volume.drivers import vzstorage as cinder_volume_drivers_vzstorage
+-from cinder.volume.drivers.windows import windows as \
+-    cinder_volume_drivers_windows_windows
+ from cinder.volume.drivers import xio as cinder_volume_drivers_xio
+ from cinder.volume.drivers.zfssa import zfssaiscsi as \
+     cinder_volume_drivers_zfssa_zfssaiscsi
+@@ -199,6 +201,7 @@ def list_opts():
+                 cinder_volume_drivers_san_san.san_opts,
+                 cinder_volume_drivers_hitachi_hnasnfs.NFS_OPTS,
+                 cinder_wsgi_eventletserver.socket_opts,
++                cinder_volume_drivers_solaris_nfs.solaris_zfs_nfs_opts,
+                 cinder_sshutils.ssh_opts,
+                 cinder_volume_drivers_netapp_options.netapp_proxy_opts,
+                 cinder_volume_drivers_netapp_options.netapp_connection_opts,
+@@ -218,6 +221,7 @@ def list_opts():
+                 cinder_volume_drivers_fujitsu_eternusdxcommon.
+                 FJ_ETERNUS_DX_OPT_opts,
+                 cinder_volume_drivers_ibm_gpfs.gpfs_opts,
++                cinder_volume_drivers_solaris_zfs.solaris_zfs_opts,
+                 cinder_volume_drivers_violin_v7000common.violin_opts,
+                 cinder_volume_drivers_nexenta_options.NEXENTA_CONNECTION_OPTS,
+                 cinder_volume_drivers_nexenta_options.NEXENTA_ISCSI_OPTS,
+@@ -226,6 +230,8 @@ def list_opts():
+                 cinder_volume_drivers_nexenta_options.NEXENTA_RRMGR_OPTS,
+                 cinder_volume_drivers_nexenta_options.NEXENTA_EDGE_OPTS,
+                 cinder_exception.exc_log_opts,
++                cinder_common_config.core_opts,
++                cinder_common_config.debug_opts,
+                 cinder_common_config.global_opts,
+                 cinder_scheduler_weights_capacity.capacity_weight_opts,
+                 cinder_volume_drivers_sheepdog.sheepdog_opts,
+@@ -271,7 +277,6 @@ def list_opts():
+                 cinder_volume_driver.iser_opts,
+                 cinder_api_views_versions.versions_opts,
+                 cinder_volume_drivers_nimble.nimble_opts,
+-                cinder_volume_drivers_windows_windows.windows_opts,
+                 cinder_volume_drivers_san_hp_hpmsacommon.common_opts,
+                 cinder_volume_drivers_san_hp_hpmsacommon.iscsi_opts,
+                 cinder_image_glance.glance_opts,
+@@ -282,7 +287,6 @@ def list_opts():
+                 cinder_volume_drivers_remotefs.nas_opts,
+                 cinder_volume_drivers_remotefs.volume_opts,
+                 cinder_volume_drivers_emc_xtremio.XTREMIO_OPTS,
+-                cinder_backup_drivers_google.gcsbackup_service_opts,
+                 [cinder_api_middleware_auth.use_forwarded_for_opt],
+                 cinder_volume_drivers_hitachi_hbsdcommon.volume_opts,
+                 cinder_volume_drivers_infortrend_eonstor_ds_cli_commoncli.
+@@ -335,6 +339,7 @@ def list_opts():
+                 cinder_volume_drivers_quobyte.volume_opts,
+                 cinder_volume_drivers_vzstorage.vzstorage_opts,
+                 cinder_volume_drivers_nfs.nfs_opts,
++                cinder_cmd_volumeusageaudit.script_opts,
+             )),
+         ('CISCO_FABRIC_EXAMPLE',
+             itertools.chain(
--- a/components/openstack/cinder/patches/06-enable-dd.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/06-enable-dd.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -2,9 +2,9 @@
 run on Solaris. This patch is Solaris-specific and not suitable for
 upstream.
 
---- cinder-2015.1.2/cinder/volume/utils.py.orig	2015-11-17 18:29:59.168650488 -0800
-+++ cinder-2015.1.2/cinder/volume/utils.py	2015-11-17 18:30:21.197972544 -0800
-@@ -267,6 +267,7 @@
+--- cinder-8.0.0/cinder/volume/utils.py.~2~	2016-06-10 14:42:55.143866680 -0700
++++ cinder-8.0.0/cinder/volume/utils.py	2016-06-10 14:42:55.188129865 -0700
+@@ -291,6 +291,7 @@ def _calculate_count(size_in_m, blocksiz
          bs = strutils.string_to_bytes('%sB' % blocksize)
  
      count = math.ceil(size_in_m * units.Mi / bs)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/07-entry_points.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -0,0 +1,36 @@
+This upstream patch addresses an issue with Cinder that can cause
+oslo-config-generator to fail to recognize valid namespaces. It has
+been integrated into Newton but not yet backported to Mitaka.
+
+commit 91e4fe7d0504cfded97d680832226d8ad7c68b9f
+Author: Kendall Nelson <[email protected]>
+Date:   Wed Jan 27 09:03:29 2016 -0600
+
+    Remove entry_points from setup.cfg
+    
+    The keystonemiddleware entry_point and the oslo_concurrency,
+    oslo_db_concurrency and oslo_messaging entry_points are not
+    owned by Cinder so it is possible that Keystone and Oslo could
+    move or rename the list_opts methods causing our sample
+    configuration generator to break.
+    
+    This patch removes the lines that register the entry_points since
+    they aren't actually adding anything to the sample list of
+    configuration options because the options are being added to the
+    sample file elsewhere.
+    
+    Change-Id: I186d4d9e8e565dad836543b5f6a96af1a53d4a83
+
+--- cinder-8.0.0/setup.cfg.~1~	2016-07-23 23:54:40.131686330 -0700
++++ cinder-8.0.0/setup.cfg	2016-07-23 23:55:33.014428535 -0700
+@@ -43,10 +43,6 @@ cinder.scheduler.weights =
+ 	VolumeNumberWeigher = cinder.scheduler.weights.volume_number:VolumeNumberWeigher
+ oslo.config.opts = 
+ 	cinder = cinder.opts:list_opts
+-	keystonemiddleware = keystonemiddleware.auth_token:list_opts
+-	oslo_concurrency = oslo_concurrency.opts:list_opts
+-	oslo.messaging = oslo_messaging.opts:list_opts
+-	oslo.db.concurrency = oslo.db.concurrency:list_opts
+ oslo.config.opts.defaults = 
+ 	cinder = cinder.common.config:set_middleware_defaults
+ console_scripts = 
--- a/components/openstack/cinder/patches/07-launchpad-1460156.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-This patch is to work-around the fact that Python 2.7.9 and beyond have
-implemented PEP 476 which enabled certificate verification by default
-and ZFSSAs may not be deployed with a valid, CA-signed certificate.
-
-commit 814cbb8a937e2a01f2c8814dd032c0f12baa6fd4
-Author: Diem Tran <[email protected]>
-Date:   Wed Jul 1 21:12:48 2015 +0000
-
-    Fix PEP476 & format message of Oracle ZFSSA drivers
-    
-    * Handles the PEP 476 by opting out certificate verification.
-    * Fix debug format messages in restclient.py
-    
-    Change-Id: Iaf9e546f0aed6b57fe9c2bf43aa2ce003a05ddf8
-    Closes-Bug: #1460156
-
---- cinder-2015.1.2/cinder/volume/drivers/zfssa/restclient.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/volume/drivers/zfssa/restclient.py	2016-01-31 00:56:12.410126083 -0800
-@@ -1,4 +1,4 @@
--# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. 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
-@@ -17,6 +17,7 @@ ZFS Storage Appliance REST API Client Pr
- 
- import httplib
- import json
-+import ssl
- import StringIO
- import time
- import urllib2
-@@ -268,14 +269,27 @@ class RestClientURL(object):
-         retry = 0
-         response = None
- 
--        LOG.debug('Request: %s %s' % (request, zfssaurl))
-+        LOG.debug('Request: %(request)s %(url)s',
-+                  {'request': request, 'url': zfssaurl})
-         LOG.debug('Out headers: %s' % out_hdrs)
-         if body and body != '':
-             LOG.debug('Body: %s' % body)
- 
-+        context = None
-+        if hasattr(ssl, '_create_unverified_context'):
-+            context = ssl._create_unverified_context()
-+        else:
-+            context = None
-+
-         while retry < maxreqretries:
-             try:
--                response = urllib2.urlopen(req, timeout=self.timeout)
-+                if context:
-+                    response = urllib2.urlopen(req,
-+                                               timeout=self.timeout,
-+                                               context=context)
-+                else:
-+                    response = urllib2.urlopen(req,
-+                                               timeout=self.timeout)
-             except urllib2.HTTPError as err:
-                 if err.code == httplib.NOT_FOUND:
-                     LOG.debug('REST Not Found: %s' % err.code)
-@@ -315,8 +329,9 @@ class RestClientURL(object):
- 
-             break
- 
--        if response and response.getcode() == httplib.SERVICE_UNAVAILABLE and \
--           retry >= maxreqretries:
-+        if (response and
-+            (response.getcode() == httplib.SERVICE_UNAVAILABLE and
-+                retry >= maxreqretries)):
-             raise RestClientError(response.getcode(), name="ERR_HTTPError",
-                                   message="REST Not Available: Disabled")
- 
--- a/components/openstack/cinder/patches/08-zfssa-target_lun.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-This patch addresses 22554075 which has also been filed in Launchpad
-under 1538582.
-
---- cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssaiscsi.py.~2~	2016-01-31 17:10:27.739412163 -0800
-+++ cinder-2015.1.2/cinder/volume/drivers/zfssa/zfssaiscsi.py	2016-01-31 17:11:03.123083242 -0800
-@@ -1,4 +1,4 @@
--# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. 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
-@@ -415,7 +415,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
-         iscsi_properties['target_discovered'] = False
-         iscsi_properties['target_portal'] = target_portal
-         iscsi_properties['target_iqn'] = iqn
--        iscsi_properties['target_lun'] = lun
-+        iscsi_properties['target_lun'] = int(lun)
-         iscsi_properties['volume_id'] = volume['id']
- 
-         if 'provider_auth' in provider:
--- a/components/openstack/cinder/patches/09-nfs-mount.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/09-nfs-mount.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -3,8 +3,8 @@
 
 Patch may be suitable for pushing upsteam.
 
---- cinder-2014.2.2/cinder/volume/drivers/nfs.py.orig	2015-10-12 16:43:35.188157478 -0700
-+++ cinder-2014.2.2/cinder/volume/drivers/nfs.py	2015-10-13 09:35:07.871595794 -0700
+--- cinder-a99d1658a55f818a7e136d48d44d893406eae3e1/cinder/volume/drivers/nfs.py.~9~	2016-02-18 02:41:52.000000000 -0800
++++ cinder-a99d1658a55f818a7e136d48d44d893406eae3e1/cinder/volume/drivers/nfs.py	2016-02-18 03:23:26.380963052 -0800
 @@ -15,6 +15,7 @@
  
  import errno
@@ -12,8 +12,8 @@
 +import platform
  import time
  
- from oslo_concurrency import processutils as putils
-@@ -86,7 +87,10 @@ class NfsDriver(remotefs.RemoteFSDriver)
+ from os_brick.remotefs import remotefs as remotefs_brick
+@@ -78,7 +79,10 @@ class NfsDriver(driver.ExtendVD, remotef
          self._remotefsclient = None
          super(NfsDriver, self).__init__(*args, **kwargs)
          self.configuration.append_config_values(nfs_opts)
@@ -25,35 +25,37 @@
          # base bound to instance is used in RemoteFsConnector.
          self.base = getattr(self.configuration,
                              'nfs_mount_point_base',
-@@ -144,18 +148,19 @@ class NfsDriver(remotefs.RemoteFSDriver)
+@@ -123,19 +127,20 @@ class NfsDriver(driver.ExtendVD, remotef
  
          self.shares = {}  # address : options
  
--        # Check if mount.nfs is installed on this system; note that we don't
--        # need to be root to see if the package is installed.
+-        # Check if mount.nfs is installed on this system; note that we
+-        # need to be root, to also find mount.nfs on distributions, where
+-        # it is not located in an unprivileged users PATH (e.g. /sbin).
 -        package = 'mount.nfs'
 -        try:
 -            self._execute(package, check_exit_code=False,
--                          run_as_root=False)
+-                          run_as_root=True)
 -        except OSError as exc:
 -            if exc.errno == errno.ENOENT:
 -                msg = _('%s is not installed') % package
 -                raise exception.NfsException(msg)
 -            else:
--                raise exc
+-                raise
 +        if platform.system() != "SunOS":
-+            # Check if mount.nfs is installed on this system; note that we don't
-+            # need to be root to see if the package is installed.
++            # Check if mount.nfs is installed on this system; note that we
++            # need to be root, to also find mount.nfs on distributions, where
++            # it is not located in an unprivileged users PATH (e.g. /sbin).
 +            package = 'mount.nfs'
 +            try:
 +                self._execute(package, check_exit_code=False,
-+                              run_as_root=False)
++                              run_as_root=True)
 +            except OSError as exc:
 +                if exc.errno == errno.ENOENT:
 +                    msg = _('%s is not installed') % package
 +                    raise exception.NfsException(msg)
 +                else:
-+                    raise exc
++                    raise
  
          # Now that all configuration data has been loaded (shares),
          # we can "set" our final NAS file security options.
--- a/components/openstack/cinder/patches/10-remotefs.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-In-house patch to adapt Linux specific commands and command output
-parsing to Solaris.
-
-Patch may be suitable for pushing upsteam.
-
---- cinder-2015.1.0/cinder/brick/remotefs/remotefs.py.orig	2015-10-13 13:33:37.708165135 -0700
-+++ cinder-2015.1.0/cinder/brick/remotefs/remotefs.py	2015-10-13 13:42:40.978353719 -0700
-@@ -17,6 +17,7 @@
- 
- import hashlib
- import os
-+import platform
- import re
- 
- from oslo_concurrency import processutils as putils
-@@ -77,14 +78,21 @@ class RemoteFsClient(object):
-                             self._get_hash_str(device_name))
- 
-     def _read_mounts(self):
--        (out, _err) = self._execute('mount', check_exit_code=0)
-+        if platform.system() == "SunOS":
-+            (out, _err) = self._execute('/usr/sbin/mount', check_exit_code=0)
-+        else:
-+            (out, _err) = self._execute('mount', check_exit_code=0)
-         lines = out.split('\n')
-         mounts = {}
-         for line in lines:
-             tokens = line.split()
-             if 2 < len(tokens):
--                device = tokens[0]
--                mnt_point = tokens[2]
-+                if platform.system() == "SunOS":
-+                    device = tokens[2]
-+                    mnt_point = tokens[0]
-+                else:
-+                    device = tokens[0]
-+                    mnt_point = tokens[2]
-                 mounts[mnt_point] = device
-         return mounts
- 
-@@ -96,8 +104,12 @@ class RemoteFsClient(object):
-             LOG.info(_LI('Already mounted: %s') % mount_path)
-             return
- 
--        self._execute('mkdir', '-p', mount_path, check_exit_code=0)
--        if self._mount_type == 'nfs':
-+        if platform.system() == "SunOS":
-+            self._execute('/usr/bin/mkdir', '-p', mount_path,
-+                          check_exit_code=0)
-+        else:
-+            self._execute('mkdir', '-p', mount_path, check_exit_code=0)
-+        if self._mount_type == 'nfs' and platform.system() != "SunOS":
-             self._mount_nfs(share, mount_path, flags)
-         else:
-             self._do_mount(self._mount_type, share, mount_path,
-@@ -106,15 +118,21 @@ class RemoteFsClient(object):
-     def _do_mount(self, mount_type, share, mount_path, mount_options=None,
-                   flags=None):
-         """Mounts share based on the specified params."""
--        mnt_cmd = ['mount', '-t', mount_type]
-+        if platform.system() == "SunOS":
-+            mnt_cmd = ['/usr/sbin/mount', '-F', mount_type]
-+        else:
-+            mnt_cmd = ['mount', '-t', mount_type]
-         if mount_options is not None:
-             mnt_cmd.extend(['-o', mount_options])
-         if flags is not None:
-             mnt_cmd.extend(flags)
-         mnt_cmd.extend([share, mount_path])
- 
--        self._execute(*mnt_cmd, root_helper=self.root_helper,
--                      run_as_root=True, check_exit_code=0)
-+        if platform.system() == "SunOS":
-+            self._execute(*mnt_cmd, check_exit_code=0)
-+        else:
-+            self._execute(*mnt_cmd, root_helper=self.root_helper,
-+                          run_as_root=True, check_exit_code=0)
- 
-     def _mount_nfs(self, nfs_share, mount_path, flags=None):
-         """Mount nfs share using present mount types."""
-
--- a/components/openstack/cinder/patches/11-nfs-backup.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/11-nfs-backup.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -2,10 +2,10 @@
 
 Patch may be suitable for pushing upsteam.
 
---- cinder-2015.1.0/cinder/backup/drivers/nfs.py.orig	2015-11-24 11:49:37.670852276 -0700
-+++ cinder-2015.1.0/cinder/backup/drivers/nfs.py	2015-11-24 13:31:57.282595085 -0700
-@@ -137,9 +137,21 @@ class NFSBackupDriver(chunkeddriver.Chun
-         return open(path, 'r')
+--- cinder-8.0.0/cinder/backup/drivers/posix.py.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/cinder/backup/drivers/posix.py	2016-06-10 14:44:19.856054005 -0700
+@@ -122,9 +122,21 @@ class PosixBackupDriver(chunkeddriver.Ch
+         return open(path, 'rb')
  
      def delete_object(self, container, object_name):
 -        # TODO(tbarron):  clean up the container path if it is empty
--- a/components/openstack/cinder/patches/12-generate_sample.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-In-house patch to update the generate_sample script and related data
-files for use with Solaris.
-
---- cinder-2015.1.2/tools/config/generate_sample.sh.orig	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/tools/config/generate_sample.sh	2016-01-31 22:28:46.003791619 -0800
-@@ -1,5 +1,7 @@
- #!/usr/bin/env bash
- 
-+PATH=/usr/gnu/bin:/usr/bin
-+
- # Generate sample configuration for your project.
- #
- # Aside from the command line flags, it also respects a config file which
-@@ -97,6 +99,7 @@ fi
- BASEDIRESC=`echo $BASEDIR | sed -e 's/\//\\\\\//g'`
- find $TARGETDIR -type f -name "*.pyc" -delete
- FILES=$(find $TARGETDIR -type f -name "*.py" ! -path "*/tests/*" \
-+        ! -name test.py \
-         -exec grep -l "Opt(" {} + | sed -e "s/^$BASEDIRESC\///g" | sort -u)
- 
- RC_FILE="`dirname $0`/oslo.config.generator.rc"
-@@ -136,9 +139,3 @@ CONCAT_FILES=$(ls $BASEDIR/tools/config/
- for CONCAT_FILE in $CONCAT_FILES; do
-     cat $CONCAT_FILE >> $OUTPUTFILE
- done
--
--# Now we need to get externals
--oslo-config-generator \
----namespace oslo_concurrency --namespace oslo_db \
----namespace oslo_messaging --namespace policy \
----namespace keystonemiddleware.auth_token  >> $OUTPUTFILE
---- cinder-2015.1.2/tools/config/oslo.config.generator.rc.orig	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/tools/config/oslo.config.generator.rc	2016-01-31 22:29:40.025594671 -0800
-@@ -1,2 +1,9 @@
--export CINDER_CONFIG_GENERATOR_EXTRA_MODULES="keystonemiddleware.auth_token"
--export CINDER_CONFIG_GENERATOR_EXTRA_LIBRARIES="oslo_concurrency oslo.messaging oslo_db oslo.db.concurrency"
-+export CINDER_CONFIG_GENERATOR_EXTRA_LIBRARIES=" \
-+    keystonemiddleware.auth_token \
-+    oslo.concurrency \
-+    oslo.db \
-+    oslo.db.concurrency \
-+    oslo.log \
-+    oslo.messaging \
-+    oslo.middleware \
-+"
--- a/components/openstack/cinder/patches/13-launchpad-1482873.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-This patch has been integrated into Mitaka but has not yet been
-back-ported to Kilo.
-
-commit 000aeb9df77dc61df9f597421a10a77c32bd89b0
-Author: Yusuke Hayashi <[email protected]>
-Date:   Sat Aug 8 23:12:18 2015 +0900
-
-    Update deprecated version of novaclient
-    
-    Update novaclient v1.1 to v2
-    because warning messages are shown as below when executing run_test.sh:
-    
-    UserWarning: Module novaclient.v1_1 is deprecated
-    (taken as a basis for novaclient.v2).
-    The preferable way to get client class or object
-    you can find in novaclient.client module.
-    
-    Change-Id: I26602aceadac9a43d4fbaa14791bf6756eef9874
-    Partial-Bug: #1482873
-
---- cinder-2015.1.2/cinder/compute/nova.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/compute/nova.py	2016-03-03 19:10:27.797293767 -0800
-@@ -20,9 +20,9 @@ Handles all requests to Nova.
- from novaclient import exceptions as nova_exceptions
- from novaclient import extension
- from novaclient import service_catalog
--from novaclient.v1_1 import client as nova_client
--from novaclient.v1_1.contrib import assisted_volume_snapshots
--from novaclient.v1_1.contrib import list_extensions
-+from novaclient.v2 import client as nova_client
-+from novaclient.v2.contrib import assisted_volume_snapshots
-+from novaclient.v2.contrib import list_extensions
- from oslo_config import cfg
- from oslo_log import log as logging
- from requests import exceptions as request_exceptions
-@@ -175,6 +175,7 @@ class API(base.Base):
-     def create_volume_snapshot(self, context, volume_id, create_info):
-         nova = novaclient(context, admin_endpoint=True, privileged_user=True)
- 
-+        # pylint: disable-msg=E1101
-         nova.assisted_volume_snapshots.create(
-             volume_id,
-             create_info=create_info)
-@@ -182,6 +183,7 @@ class API(base.Base):
-     def delete_volume_snapshot(self, context, snapshot_id, delete_info):
-         nova = novaclient(context, admin_endpoint=True, privileged_user=True)
- 
-+        # pylint: disable-msg=E1101
-         nova.assisted_volume_snapshots.delete(
-             snapshot_id,
-             delete_info=delete_info)
---- cinder-2015.1.2/cinder/tests/compute/test_nova.py.~1~	2015-10-13 09:27:35.000000000 -0700
-+++ cinder-2015.1.2/cinder/tests/compute/test_nova.py	2016-03-03 19:10:48.985988475 -0800
-@@ -38,7 +38,7 @@ class NovaClientTestCase(test.TestCase):
-         self.override_config('os_privileged_user_name', 'adminuser')
-         self.override_config('os_privileged_user_password', 'strongpassword')
- 
--    @mock.patch('novaclient.v1_1.client.Client')
-+    @mock.patch('novaclient.v2.client.Client')
-     def test_nova_client_regular(self, p_client):
-         nova.novaclient(self.ctx)
-         p_client.assert_called_once_with(
-@@ -47,7 +47,7 @@ class NovaClientTestCase(test.TestCase):
-             insecure=False, endpoint_type='publicURL', cacert=None,
-             timeout=None, extensions=nova.nova_extensions)
- 
--    @mock.patch('novaclient.v1_1.client.Client')
-+    @mock.patch('novaclient.v2.client.Client')
-     def test_nova_client_admin_endpoint(self, p_client):
-         nova.novaclient(self.ctx, admin_endpoint=True)
-         p_client.assert_called_once_with(
-@@ -56,7 +56,7 @@ class NovaClientTestCase(test.TestCase):
-             insecure=False, endpoint_type='adminURL', cacert=None,
-             timeout=None, extensions=nova.nova_extensions)
- 
--    @mock.patch('novaclient.v1_1.client.Client')
-+    @mock.patch('novaclient.v2.client.Client')
-     def test_nova_client_privileged_user(self, p_client):
-         nova.novaclient(self.ctx, privileged_user=True)
-         p_client.assert_called_once_with(
-@@ -65,7 +65,7 @@ class NovaClientTestCase(test.TestCase):
-             insecure=False, endpoint_type='publicURL', cacert=None,
-             timeout=None, extensions=nova.nova_extensions)
- 
--    @mock.patch('novaclient.v1_1.client.Client')
-+    @mock.patch('novaclient.v2.client.Client')
-     def test_nova_client_custom_region(self, p_client):
-         self.override_config('os_region_name', 'farfaraway')
-         nova.novaclient(self.ctx)
--- a/components/openstack/cinder/patches/14-launchpad-1499921.patch	Wed Sep 07 14:48:41 2016 -0700
+++ b/components/openstack/cinder/patches/14-launchpad-1499921.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -2,9 +2,9 @@
 Launchpad bug 1499921. A similar upstream patch was abadoned although
 the issue still remains as of Mitaka.
 
---- cinder-2015.1.2/etc/cinder/api-paste.ini.~1~	2015-10-13 09:27:32.000000000 -0700
-+++ cinder-2015.1.2/etc/cinder/api-paste.ini	2016-05-28 20:05:58.568790609 -0700
-@@ -35,7 +35,7 @@ enabled = yes
+--- cinder-8.0.0/etc/cinder/api-paste.ini.~1~	2016-04-07 00:30:48.000000000 -0700
++++ cinder-8.0.0/etc/cinder/api-paste.ini	2016-06-27 18:43:27.373542175 -0700
+@@ -44,7 +44,7 @@ paste.filter_factory = osprofiler.web:Ws
  paste.filter_factory = cinder.api.middleware.auth:NoAuthMiddleware.factory
  
  [filter:sizelimit]
--- a/components/openstack/cinder/patches/15-mysql_cluster_support.patch	Wed Sep 07 14:48:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,758 +0,0 @@
-This patchset is for bug:
-
-22725850 - Cinder needs to support MySQL Cluster
-
-This fixes the following aspects of Cinder:
-1. Implementation of an oslo.db configuration parameter to specify the MySQL
-   storage engine (mysql_storage_engine).
-2. Replacement of hardcoded SQL statements that set the engine to "InnoDB"
-   to the above configuration value.
-3. Logic to handle SQL differences between MySQL InnoDB and MySQL Cluster (NDB).
-   This includes column lengths, constraints, foreign keys, and indexes.
-
-This has not been committed upstream, but has been filed in launchpad:
-
-https://bugs.launchpad.net/cinder/+bug/1564110 
-
-
---- cinder-2015.1.2/cinder/tests/test_migrations.py.orig	2016-07-29 11:00:01.187925033 -0600
-+++ cinder-2015.1.2/cinder/tests/test_migrations.py	2016-07-29 11:04:05.631912887 -0600
-@@ -24,6 +24,7 @@ import uuid
- 
- from migrate.versioning import api as migration_api
- from migrate.versioning import repository
-+from oslo_config import cfg
- from oslo_db.sqlalchemy import test_base
- from oslo_db.sqlalchemy import test_migrations
- from oslo_db.sqlalchemy import utils as db_utils
-@@ -32,6 +33,7 @@ import sqlalchemy
- from cinder.db import migration
- import cinder.db.sqlalchemy.migrate_repo
- 
-+CONF = cfg.CONF
- 
- class MigrationsMixin(test_migrations.WalkVersionsMixin):
-     """Test sqlalchemy-migrate migrations."""
-@@ -850,8 +852,9 @@ class TestMysqlMigrations(test_base.MySQ
-             "SELECT count(*) "
-             "from information_schema.TABLES "
-             "where TABLE_SCHEMA='openstack_citest' "
--            "and ENGINE!='InnoDB' "
--            "and TABLE_NAME!='migrate_version'")
-+            "and ENGINE!='%(mysql_storage_engine)s' "
-+            "and TABLE_NAME!='migrate_version'" %
-+             dict(mysql_storage_engine=CONF.database.mysql_storage_engine))
-         count = noninnodb.scalar()
-         self.assertEqual(count, 0, "%d non InnoDB tables created" % count)
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/models.py.orig	2016-07-29 11:00:10.501447650 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/models.py	2016-07-28 13:42:21.527353348 -0600
-@@ -36,7 +36,7 @@ class CinderBase(models.TimestampMixin,
-                  models.ModelBase):
-     """Base class for Cinder Models."""
- 
--    __table_args__ = {'mysql_engine': 'InnoDB'}
-+    __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine }
- 
-     # TODO(rpodolyaka): reuse models.SoftDeleteMixin in the next stage
-     #                   of implementing of BP db-cleanup
-@@ -488,7 +488,7 @@ class IscsiTarget(BASE, CinderBase):
-     """Represents an iscsi target for a given host."""
-     __tablename__ = 'iscsi_targets'
-     __table_args__ = (schema.UniqueConstraint("target_num", "host"),
--                      {'mysql_engine': 'InnoDB'})
-+                      {'mysql_engine': CONF.database.mysql_storage_engine })
-     id = Column(Integer, primary_key=True)
-     target_num = Column(Integer)
-     host = Column(String(255))
-@@ -576,7 +576,7 @@ class DriverInitiatorData(BASE, models.T
-     __tablename__ = 'driver_initiator_data'
-     __table_args__ = (
-         schema.UniqueConstraint("initiator", "namespace", "key"),
--        {'mysql_engine': 'InnoDB'}
-+        {'mysql_engine': CONF.database.mysql_storage_engine }
-     )
-     id = Column(Integer, primary_key=True, nullable=False)
-     initiator = Column(String(255), index=True, nullable=False)
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/038_add_driver_initiator_data_table.py.orig	2016-07-29 11:00:18.420463823 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/038_add_driver_initiator_data_table.py	2016-07-29 11:05:16.443295143 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Column, DateTime, Integer
- from sqlalchemy import MetaData, String, Table, UniqueConstraint
-@@ -18,6 +19,7 @@ from cinder.i18n import _LE
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -34,7 +36,7 @@ def upgrade(migrate_engine):
-         Column('key', String(length=255), nullable=False),
-         Column('value', String(length=255)),
-         UniqueConstraint('initiator', 'namespace', 'key'),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/020_add_volume_admin_metadata_table.py.orig	2016-07-29 11:00:26.045131176 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/020_add_volume_admin_metadata_table.py	2016-07-29 11:05:59.377263934 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
- from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
-@@ -18,6 +19,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -37,7 +39,7 @@ def upgrade(migrate_engine):
-                nullable=False),
-         Column('key', String(length=255)),
-         Column('value', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py.orig	2016-07-29 11:00:33.982622176 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py	2016-07-29 11:06:48.928094250 -0600
-@@ -16,6 +16,7 @@
- import datetime
- import uuid
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- import six
- from sqlalchemy import Boolean, Column, DateTime
-@@ -27,6 +28,7 @@ LOG = logging.getLogger(__name__)
- 
- CREATED_AT = datetime.datetime.now()  # noqa
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     """Add volume multi attachment table."""
-@@ -56,7 +58,7 @@ def upgrade(migrate_engine):
-         Column('detach_time', DateTime),
-         Column('attach_mode', String(length=36)),
-         Column('attach_status', String(length=255)),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     try:
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py.orig	2016-07-29 11:00:44.515262427 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py	2016-07-29 11:07:29.288662336 -0600
-@@ -12,6 +12,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Column, DateTime, Text, Boolean
- from sqlalchemy import MetaData, Integer, String, Table, ForeignKey
-@@ -20,6 +21,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -31,11 +33,11 @@ def upgrade(migrate_engine):
-     Table('volumes',
-           meta,
-           Column('id', Integer(), primary_key=True, nullable=False),
--          mysql_engine='InnoDB')
-+          mysql_engine=CONF.database.mysql_storage_engine)
-     Table('snapshots',
-           meta,
-           Column('id', Integer(), primary_key=True, nullable=False),
--          mysql_engine='InnoDB')
-+          mysql_engine=CONF.database.mysql_storage_engine)
-     # Create new table
-     volume_glance_metadata = Table(
-         'volume_glance_metadata',
-@@ -50,7 +52,7 @@ def upgrade(migrate_engine):
-                ForeignKey('snapshots.id')),
-         Column('key', String(255)),
-         Column('value', Text),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     try:
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py.orig	2016-07-29 11:00:53.408609592 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py	2016-07-29 11:07:52.389988927 -0600
-@@ -13,6 +13,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
- from sqlalchemy import MetaData, Integer, String, Table
-@@ -21,6 +22,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -48,7 +50,7 @@ def upgrade(migrate_engine):
-         Column('service', String(length=255)),
-         Column('size', Integer()),
-         Column('object_count', Integer()),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     try:
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/015_drop_migrations_table.py.orig	2016-07-29 11:01:00.740311806 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/015_drop_migrations_table.py	2016-07-29 11:08:17.460343611 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime, Integer
- from sqlalchemy import MetaData, String, Table
-@@ -18,6 +19,7 @@ from cinder.i18n import _LE
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- TABLE_NAME = 'migrations'
- 
-@@ -52,7 +54,7 @@ def downgrade(migrate_engine):
-         Column('new_instance_type_id', Integer),
-         Column('instance_uuid', String(length=255), nullable=True),
-         Column('status', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py.orig	2016-07-29 11:01:06.931319374 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py	2016-07-29 11:08:57.529967194 -0600
-@@ -13,6 +13,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from migrate import ForeignKeyConstraint
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
-@@ -22,6 +23,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -43,7 +45,7 @@ def upgrade(migrate_engine):
-         Column('description', String(length=255)),
-         Column('volume_type_id', String(length=255)),
-         Column('status', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8',
-     )
- 
-@@ -69,7 +71,7 @@ def upgrade(migrate_engine):
-         Column('name', String(length=255)),
-         Column('description', String(length=255)),
-         Column('status', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8',
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py.orig	2016-07-29 11:01:13.333257167 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py	2016-07-29 11:09:26.907320861 -0600
-@@ -12,6 +12,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from migrate import ForeignKeyConstraint
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
-@@ -21,6 +22,7 @@ from cinder.i18n import _LE
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -40,7 +42,7 @@ def upgrade(migrate_engine):
-                           Column('resource',
-                                  String(length=255)),
-                           Column('hard_limit', Integer(), nullable=True),
--                          mysql_engine='InnoDB',
-+                          mysql_engine=CONF.database.mysql_storage_engine,
-                           mysql_charset='utf8',
-                           )
- 
-@@ -65,7 +67,7 @@ def upgrade(migrate_engine):
-                          Column('in_use', Integer(), nullable=False),
-                          Column('reserved', Integer(), nullable=False),
-                          Column('until_refresh', Integer(), nullable=True),
--                         mysql_engine='InnoDB',
-+                         mysql_engine=CONF.database.mysql_storage_engine,
-                          mysql_charset='utf8',
-                          )
- 
-@@ -96,7 +98,7 @@ def upgrade(migrate_engine):
-                                 String(length=255)),
-                          Column('delta', Integer(), nullable=False),
-                          Column('expire', DateTime(timezone=False)),
--                         mysql_engine='InnoDB',
-+                         mysql_engine=CONF.database.mysql_storage_engine,
-                          mysql_charset='utf8',
-                          )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py.orig	2016-07-29 11:01:19.787463555 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py	2016-07-29 11:09:52.305137688 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime, UniqueConstraint
- from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
-@@ -18,6 +19,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -44,7 +46,7 @@ def upgrade(migrate_engine):
-         Column('project_id', String(length=255)),
-         Column('deleted', Boolean(create_constraint=True, name=None)),
-         UniqueConstraint('volume_type_id', 'project_id', 'deleted'),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-     )
- 
-     try:
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/016_drop_sm_tables.py.orig	2016-07-29 11:01:27.964276573 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/016_drop_sm_tables.py	2016-07-29 11:10:16.404751177 -0600
-@@ -12,6 +12,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime, ForeignKey
- from sqlalchemy import Integer, MetaData, String, Table
-@@ -20,6 +21,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -58,7 +60,7 @@ def downgrade(migrate_engine):
-         Column('sr_uuid', String(length=255)),
-         Column('sr_type', String(length=255)),
-         Column('config_params', String(length=2047)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
-@@ -71,7 +73,7 @@ def downgrade(migrate_engine):
-         Column('id', Integer, primary_key=True, nullable=False),
-         Column('label', String(length=255)),
-         Column('description', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
-@@ -88,7 +90,7 @@ def downgrade(migrate_engine):
-         Column('backend_id', Integer, ForeignKey('sm_backend_config.id'),
-                nullable=False),
-         Column('vdi_uuid', String(length=255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py.orig	2016-07-29 11:01:37.572002193 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py	2016-07-29 11:10:53.099824733 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
- from sqlalchemy import MetaData, String, Table, ForeignKey
-@@ -18,6 +19,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -39,7 +41,7 @@ def upgrade(migrate_engine):
-         Column('salt', String(length=255)),
-         Column('crypt_hash', String(length=255)),
-         Column('expires_at', DateTime(timezone=False)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py.orig	2016-07-29 11:01:45.740057328 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py	2016-07-29 11:11:37.227187391 -0600
-@@ -10,6 +10,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
- from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
-@@ -18,6 +19,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData()
-@@ -37,7 +39,7 @@ def upgrade(migrate_engine):
-                nullable=False),
-         Column('key', String(length=255)),
-         Column('value', String(length=255)),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     try:
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py.orig	2016-07-29 11:01:52.386692827 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py	2016-07-29 11:12:05.698971502 -0600
-@@ -14,6 +14,7 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime
- from sqlalchemy import ForeignKey, MetaData, String, Table
-@@ -23,6 +24,7 @@ from cinder.i18n import _
- 
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     """Add volume_type_rate_limit table."""
-@@ -40,7 +42,7 @@ def upgrade(migrate_engine):
-                ForeignKey('quality_of_service_specs.id')),
-         Column('key', String(255)),
-         Column('value', String(255)),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py.orig	2016-07-29 11:01:59.835986722 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py	2016-07-29 11:12:38.107548537 -0600
-@@ -13,15 +13,16 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Column, ForeignKey, MetaData, Table
- from sqlalchemy import Boolean, DateTime, Integer, String
- 
- from cinder.i18n import _
- 
--
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
- 
- def upgrade(migrate_engine):
-     meta = MetaData(bind=migrate_engine)
-@@ -69,9 +70,9 @@ def upgrade(migrate_engine):
-         # scheme unless each volume type is associated with at most one
-         # encryption scheme.
-         Column('volume_type_id', String(length=36),
--               ForeignKey(volume_types.c.id),
-+               ForeignKey(volume_types.c.id, name='encryption_ibfk_1'),
-                primary_key=True, nullable=False),
--        mysql_engine='InnoDB',
-+        mysql_engine=CONF.database.mysql_storage_engine,
-         mysql_charset='utf8'
-     )
- 
---- cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py.orig	2016-07-29 11:02:08.740069069 -0600
-+++ cinder-2015.1.2/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py	2016-07-29 11:13:11.172896165 -0600
-@@ -12,15 +12,21 @@
- #    License for the specific language governing permissions and limitations
- #    under the License.
- 
-+from oslo_config import cfg
- from oslo_log import log as logging
- from sqlalchemy import Boolean, Column, DateTime, ForeignKey
- from sqlalchemy import Integer, MetaData, String, Table
- 
- from cinder.i18n import _
- 
--
- LOG = logging.getLogger(__name__)
- 
-+CONF = cfg.CONF
-+
-+if CONF.database.mysql_storage_engine == "NDBCLUSTER":
-+    db_string_length = 128
-+else:
-+    db_string_length = 255
- 
- def define_tables(meta):
-     migrations = Table(
-@@ -30,14 +36,14 @@ def define_tables(meta):
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
-         Column('id', Integer, primary_key=True, nullable=False),
--        Column('source_compute', String(length=255)),
--        Column('dest_compute', String(length=255)),
--        Column('dest_host', String(length=255)),
--        Column('status', String(length=255)),
--        Column('instance_uuid', String(length=255)),
-+        Column('source_compute', String(length=db_string_length)),
-+        Column('dest_compute', String(length=db_string_length)),
-+        Column('dest_host', String(length=db_string_length)),
-+        Column('status', String(length=db_string_length)),
-+        Column('instance_uuid', String(length=db_string_length)),
-         Column('old_instance_type_id', Integer),
-         Column('new_instance_type_id', Integer),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     services = Table(
-@@ -47,13 +53,13 @@ def define_tables(meta):
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
-         Column('id', Integer, primary_key=True, nullable=False),
--        Column('host', String(length=255)),
--        Column('binary', String(length=255)),
--        Column('topic', String(length=255)),
-+        Column('host', String(length=db_string_length)),
-+        Column('binary', String(length=db_string_length)),
-+        Column('topic', String(length=db_string_length)),
-         Column('report_count', Integer, nullable=False),
-         Column('disabled', Boolean),
--        Column('availability_zone', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('availability_zone', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     sm_flavors = Table(
-@@ -63,9 +69,9 @@ def define_tables(meta):
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
-         Column('id', Integer, primary_key=True, nullable=False),
--        Column('label', String(length=255)),
--        Column('description', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('label', String(length=db_string_length)),
-+        Column('description', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     sm_backend_config = Table(
-@@ -77,10 +83,10 @@ def define_tables(meta):
-         Column('id', Integer, primary_key=True, nullable=False),
-         Column('flavor_id', Integer, ForeignKey('sm_flavors.id'),
-                nullable=False),
--        Column('sr_uuid', String(length=255)),
--        Column('sr_type', String(length=255)),
-+        Column('sr_uuid', String(length=db_string_length)),
-+        Column('sr_type', String(length=db_string_length)),
-         Column('config_params', String(length=2047)),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     sm_volume = Table(
-@@ -95,8 +101,8 @@ def define_tables(meta):
-                nullable=False),
-         Column('backend_id', Integer, ForeignKey('sm_backend_config.id'),
-                nullable=False),
--        Column('vdi_uuid', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('vdi_uuid', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     snapshots = Table(
-@@ -107,15 +113,15 @@ def define_tables(meta):
-         Column('deleted', Boolean),
-         Column('id', String(length=36), primary_key=True, nullable=False),
-         Column('volume_id', String(length=36), nullable=False),
--        Column('user_id', String(length=255)),
--        Column('project_id', String(length=255)),
--        Column('status', String(length=255)),
--        Column('progress', String(length=255)),
-+        Column('user_id', String(length=db_string_length)),
-+        Column('project_id', String(length=db_string_length)),
-+        Column('status', String(length=db_string_length)),
-+        Column('progress', String(length=db_string_length)),
-         Column('volume_size', Integer),
-         Column('scheduled_at', DateTime),
--        Column('display_name', String(length=255)),
--        Column('display_description', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('display_name', String(length=db_string_length)),
-+        Column('display_description', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     volume_types = Table(
-@@ -125,8 +131,8 @@ def define_tables(meta):
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
-         Column('id', Integer, primary_key=True, nullable=False),
--        Column('name', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('name', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     volume_metadata = Table(
-@@ -138,9 +144,9 @@ def define_tables(meta):
-         Column('id', Integer, primary_key=True, nullable=False),
-         Column('volume_id', String(length=36), ForeignKey('volumes.id'),
-                nullable=False),
--        Column('key', String(length=255)),
--        Column('value', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('key', String(length=db_string_length)),
-+        Column('value', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     volume_type_extra_specs = Table(
-@@ -152,9 +158,9 @@ def define_tables(meta):
-         Column('id', Integer, primary_key=True, nullable=False),
-         Column('volume_type_id', Integer, ForeignKey('volume_types.id'),
-                nullable=False),
--        Column('key', String(length=255)),
--        Column('value', String(length=255)),
--        mysql_engine='InnoDB'
-+        Column('key', String(length=db_string_length)),
-+        Column('value', String(length=db_string_length)),
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     volumes = Table(
-@@ -164,27 +170,27 @@ def define_tables(meta):
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
-         Column('id', String(length=36), primary_key=True, nullable=False),
--        Column('ec2_id', String(length=255)),
--        Column('user_id', String(length=255)),
--        Column('project_id', String(length=255)),
--        Column('host', String(length=255)),
-+        Column('ec2_id', String(length=db_string_length)),
-+        Column('user_id', String(length=db_string_length)),
-+        Column('project_id', String(length=db_string_length)),
-+        Column('host', String(length=db_string_length)),
-         Column('size', Integer),
--        Column('availability_zone', String(length=255)),
-+        Column('availability_zone', String(length=db_string_length)),
-         Column('instance_uuid', String(length=36)),
--        Column('mountpoint', String(length=255)),
--        Column('attach_time', String(length=255)),
--        Column('status', String(length=255)),
--        Column('attach_status', String(length=255)),
-+        Column('mountpoint', String(length=db_string_length)),
-+        Column('attach_time', String(length=db_string_length)),
-+        Column('status', String(length=db_string_length)),
-+        Column('attach_status', String(length=db_string_length)),
-         Column('scheduled_at', DateTime),
-         Column('launched_at', DateTime),
-         Column('terminated_at', DateTime),
--        Column('display_name', String(length=255)),
--        Column('display_description', String(length=255)),
-+        Column('display_name', String(length=db_string_length)),
-+        Column('display_description', String(length=db_string_length)),
-         Column('provider_location', String(length=256)),
-         Column('provider_auth', String(length=256)),
-         Column('snapshot_id', String(length=36)),
-         Column('volume_type_id', Integer),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     quotas = Table(
-@@ -194,10 +200,10 @@ def define_tables(meta):
-         Column('updated_at', DateTime),
-         Column('deleted_at', DateTime),
-         Column('deleted', Boolean),
--        Column('project_id', String(length=255)),
--        Column('resource', String(length=255), nullable=False),
-+        Column('project_id', String(length=db_string_length)),
-+        Column('resource', String(length=db_string_length), nullable=False),
-         Column('hard_limit', Integer),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
- 
-     iscsi_targets = Table(
-@@ -208,10 +214,10 @@ def define_tables(meta):
-         Column('deleted', Boolean),
-         Column('id', Integer, primary_key=True, nullable=False),
-         Column('target_num', Integer),
--        Column('host', String(length=255)),
-+        Column('host', String(length=db_string_length)),
-         Column('volume_id', String(length=36), ForeignKey('volumes.id'),
-                nullable=True),
--        mysql_engine='InnoDB'
-+        mysql_engine=CONF.database.mysql_storage_engine
-     )
-     return [sm_flavors,
-             sm_backend_config,
-@@ -266,7 +272,8 @@ def upgrade(migrate_engine):
-         migrate_engine.execute(
-             "ALTER DATABASE %s DEFAULT CHARACTER SET utf8" %
-             migrate_engine.url.database)
--        migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % table)
-+        migrate_engine.execute("ALTER TABLE %(db_table)s Engine=%(mysql_storage_engine)s" % 
-+                               dict(db_table=table, mysql_storage_engine=CONF.database.mysql_storage_engine))
- 
- 
- def downgrade(migrate_engine):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/15-zfssa-iscsi-config.patch	Wed Sep 07 14:48:41 2016 -0700
@@ -0,0 +1,180 @@
+This patch fixes the zfssa_initator config logic around using the
+default initiator group. The patch has been submitted upstream and this
+file should be removed once Launchpad bug 1609517 is fixed.
+
+--- cinder-8.0.0/cinder/volume/drivers/zfssa/zfssaiscsi.py.~1~	2016-04-07 00:30:48.000000000 +0000
++++ cinder-8.0.0/cinder/volume/drivers/zfssa/zfssaiscsi.py	2016-09-06 16:36:32.014258306 +0000
+@@ -174,13 +174,13 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+             for initiator_group in initiator_config:
+                 zfssa_initiator_group = initiator_group
+                 for zfssa_initiator in initiator_config[zfssa_initiator_group]:
+-                    self.zfssa.create_initiator(zfssa_initiator['iqn'],
+-                                                zfssa_initiator_group + '-' +
+-                                                zfssa_initiator['iqn'],
+-                                                chapuser=
+-                                                zfssa_initiator['user'],
+-                                                chapsecret=
+-                                                zfssa_initiator['password'])
++                    self.zfssa.create_initiator(
++                        zfssa_initiator['iqn'],
++                        zfssa_initiator_group + '-' +
++                        zfssa_initiator['iqn'],
++                        chapuser=zfssa_initiator['user'],
++                        chapsecret=zfssa_initiator['password'])
++
+                     if (zfssa_initiator_group != 'default'):
+                         self.zfssa.add_to_initiatorgroup(
+                             zfssa_initiator['iqn'],
+@@ -188,36 +188,37 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+         else:
+             LOG.warning(_LW('zfssa_initiator_config not found. '
+                             'Using deprecated configuration options.'))
++
++            if not lcfg.zfssa_initiator_group:
++                LOG.error(_LE('zfssa_initiator_group cannot be empty. '
++                              'Explicitly set the value "default" to use '
++                              'the the default initiator group.'))
++                raise exception.InvalidConfigurationValue(
++                    value='', option='zfssa_initiator_group')
++
+             if (not lcfg.zfssa_initiator and
+-                (not lcfg.zfssa_initiator_group and
+-                 lcfg.zfssa_initiator_group != 'default')):
++               lcfg.zfssa_initiator_group != 'default'):
+                 LOG.error(_LE('zfssa_initiator cannot be empty when '
+                               'creating a zfssa_initiator_group.'))
+                 raise exception.InvalidConfigurationValue(
+-                    value='',
+-                    option='zfssa_initiator')
+-
+-            if (lcfg.zfssa_initiator != '' and
+-                (lcfg.zfssa_initiator_group == '' or
+-                 lcfg.zfssa_initiator_group == 'default')):
+-                LOG.warning(_LW('zfssa_initiator: %(ini)s'
+-                                ' wont be used on '
+-                                'zfssa_initiator_group= %(inigrp)s.'),
+-                            {'ini': lcfg.zfssa_initiator,
+-                             'inigrp': lcfg.zfssa_initiator_group})
++                    value='', option='zfssa_initiator')
+ 
+-            # Setup initiator and initiator group
+-            if (lcfg.zfssa_initiator != '' and
+-               lcfg.zfssa_initiator_group != '' and
+-               lcfg.zfssa_initiator_group != 'default'):
+-                for initiator in lcfg.zfssa_initiator.split(','):
+-                    initiator = initiator.strip()
+-                    self.zfssa.create_initiator(
+-                        initiator, lcfg.zfssa_initiator_group + '-' +
+-                        initiator, chapuser=lcfg.zfssa_initiator_user,
+-                        chapsecret=lcfg.zfssa_initiator_password)
+-                    self.zfssa.add_to_initiatorgroup(
+-                        initiator, lcfg.zfssa_initiator_group)
++            if lcfg.zfssa_initiator != '':
++                if lcfg.zfssa_initiator_group == 'default':
++                    LOG.warning(_LW('zfssa_initiator: %(ini)s wont be used '
++                                    'on the default initiator group.'),
++                                {'ini': lcfg.zfssa_initiator})
++
++                # Setup initiator and initiator group
++                else:
++                    for initiator in lcfg.zfssa_initiator.split(','):
++                        initiator = initiator.strip()
++                        self.zfssa.create_initiator(
++                            initiator, lcfg.zfssa_initiator_group + '-' +
++                            initiator, chapuser=lcfg.zfssa_initiator_user,
++                            chapsecret=lcfg.zfssa_initiator_password)
++                        self.zfssa.add_to_initiatorgroup(
++                            initiator, lcfg.zfssa_initiator_group)
+ 
+         # Parse interfaces
+         interfaces = []
+@@ -236,8 +237,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+         self.zfssa.add_to_targetgroup(iqn, lcfg.zfssa_target_group)
+ 
+         if lcfg.zfssa_manage_policy not in ("loose", "strict"):
+-            err_msg = (_("zfssa_manage_policy property needs to be set to"
+-                         " 'strict' or 'loose'. Current value is: %s.") %
++            err_msg = (_("zfssa_manage_policy property needs to be set to "
++                         "'strict' or 'loose'. Current value is: %s.") %
+                        lcfg.zfssa_manage_policy)
+             LOG.error(err_msg)
+             raise exception.InvalidInput(reason=err_msg)
+@@ -394,7 +395,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+         if not self._verify_clone_size(snapshot, volume['size'] * units.Gi):
+             exception_msg = (_('Error verifying clone size on '
+                                'Volume clone: %(clone)s '
+-                               'Size: %(size)d on'
++                               'Size: %(size)d on '
+                                'Snapshot: %(snapshot)s')
+                              % {'clone': volume['name'],
+                                 'size': volume['size'],
+@@ -489,8 +490,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+         try:
+             self.create_volume_from_snapshot(volume, zfssa_snapshot)
+         except exception.VolumeBackendAPIException:
+-            LOG.error(_LE('Clone Volume:'
+-                          '%(volume)s failed from source volume:'
++            LOG.error(_LE('Clone Volume: '
++                          '%(volume)s failed from source volume: '
+                           '%(src_vref)s'),
+                       {'volume': volume['name'],
+                        'src_vref': src_vref['name']})
+@@ -596,7 +597,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+         cachevol_props.update(cachevol_meta)
+         cache_vol, cache_snap = None, None
+         updated_at = six.text_type(img_meta['updated_at'].isoformat())
+-        LOG.debug('Verifying cache volume %s:', cachevol_name)
++        LOG.debug('Verifying cache volume: %s', cachevol_name)
+ 
+         try:
+             cache_vol = self.zfssa.get_lun(lcfg.zfssa_pool,
+@@ -621,7 +622,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+                                              specs,
+                                              cachevol_props)
+         except exception.SnapshotNotFound:
+-            exception_msg = (_('Cache volume %(cache_vol)s'
++            exception_msg = (_('Cache volume %(cache_vol)s '
+                                'does not have snapshot %(cache_snap)s.'),
+                              {'cache_vol': cachevol_name,
+                               'cache_snap': cachesnap_name})
+@@ -929,7 +930,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+                                         'tgt_zfssa': self.tgt_zfssa,
+                                         'tgt_pool': tgt_pool,
+                                         'tgt_project': tgt_project,
+-                                        'volume': volume, 'tgt_asn': tgt_asn,
++                                        'volume': volume,
++                                        'tgt_asn': tgt_asn,
+                                         'src_zfssa': self.zfssa,
+                                         'src_asn': src_asn,
+                                         'src_pool': src_pool,
+@@ -1011,7 +1013,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+                                       lcfg.zfssa_cache_project,
+                                       cache['share'])
+             except exception.VolumeBackendAPIException:
+-                LOG.warning(_LW("Volume %s exists but can't be deleted"),
++                LOG.warning(_LW("Volume %s exists but can't be deleted."),
+                             cache['share'])
+ 
+     def manage_existing(self, volume, existing_ref):
+@@ -1063,8 +1065,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+                                      schema={"custom:cinder_managed": False})
+         except exception.VolumeBackendAPIException:
+             with excutils.save_and_reraise_exception():
+-                LOG.error(_LE("Failed to rename volume %(existing)s to"
+-                              " %(new)s. Volume unmanage failed."),
++                LOG.error(_LE("Failed to rename volume %(existing)s to "
++                              "%(new)s. Volume unmanage failed."),
+                           {'existing': volume['name'],
+                            'new': new_name})
+         return None
+@@ -1080,8 +1082,8 @@ class ZFSSAISCSIDriver(driver.ISCSIDrive
+             err_msg = (_("Unknown if the volume: %s to be managed is "
+                          "already being managed by Cinder. Aborting manage "
+                          "volume. Please add 'cinder_managed' custom schema "
+-                         "property to the volume and set its value to False."
+-                         " Alternatively, set the value of cinder config "
++                         "property to the volume and set its value to False. "
++                         "Alternatively, set the value of cinder config "
+                          "policy 'zfssa_manage_policy' to 'loose' to "
+                          "remove this restriction.") % vol_name)
+             LOG.error(err_msg)