PSARC/2014/207 OpenStack Glance Update to Havana s11-update
authorDrew Fisher <drew.fisher@oracle.com>
Fri, 13 Jun 2014 09:10:23 -0700
branchs11-update
changeset 3178 77584387a894
parent 3175 1ff833d174d4
child 3179 07c03b663108
PSARC/2014/207 OpenStack Glance Update to Havana PSARC/2014/208 OpenStack Cinder Update to Havana PSARC/2014/209 OpenStack Keystone Update to Havana PSARC/2014/210 OpenStack Nova Update to Havana 18416146 Neutron agents (L3 and DHCP) should cleanup resources when they are disabled 18562372 Failed to create a new project under Horizon 18645763 ZFSSA Cinder Driver support 18686327 evs agent silently ignores user-specified pool allocation ranges 18702697 fibre channel volumes should be supported in the cinder volume driver 18734289 nova won't terminate failed kz deployments 18738371 cinder-volume:setup should account for commented-out zfs_volume_base 18738374 cinder-volume:setup should check for existence of configuration file 18826190 nova-compute fails due to nova.utils.to_bytes 18855698 Update OpenStack to Havana 2013.2.3 18855710 Update python-cinderclient to 1.0.9 18855743 Update python-keystoneclient to 0.8.0 18855754 Update python-neutronclient to 2.3.4 18855764 Update python-novaclient to 2.17.0 18855793 Update python-swiftclient to 2.1.0 18856992 External networks can be deleted even when floating IP addresses are in use 18857784 bake in some more openstack configuration 18884923 Incorrect locale facets in python modules for openstack 18913890 the error in _get_view_and_lun may cause the failure of deleting volumes 18943044 Disable 'Security Groups' tab in Horizon dashboard 18969275 problem in SERVICE/KEYSTONE
components/openstack/cinder/Makefile
components/openstack/cinder/cinder.p5m
components/openstack/cinder/files/api-paste.ini
components/openstack/cinder/files/cinder-api.xml
components/openstack/cinder/files/cinder-backup.xml
components/openstack/cinder/files/cinder-db.xml
components/openstack/cinder/files/cinder-scheduler.xml
components/openstack/cinder/files/cinder-volume-setup
components/openstack/cinder/files/cinder-volume.xml
components/openstack/cinder/files/cinder.conf
components/openstack/cinder/files/cinder.exec_attr
components/openstack/cinder/files/cinder.prof_attr
components/openstack/cinder/files/solaris/zfs.py
components/openstack/cinder/files/zfssa/__init__.py
components/openstack/cinder/files/zfssa/cinder.akwf
components/openstack/cinder/files/zfssa/restclient.py
components/openstack/cinder/files/zfssa/zfssaiscsi.py
components/openstack/cinder/files/zfssa/zfssarest.py
components/openstack/cinder/patches/01-noamqplib.patch
components/openstack/cinder/patches/01-requirements.patch
components/openstack/cinder/patches/02-noparamiko.patch
components/openstack/cinder/patches/03-emc_smis_iscsi.patch
components/openstack/cinder/patches/04-launchpad-1236459.patch
components/openstack/cinder/patches/05-launchpad-1252512.patch
components/openstack/cinder/patches/06-launchpad-1233763.patch
components/openstack/cinder/resolve.deps
components/openstack/common/Makefile
components/openstack/common/openstack.p5m
components/openstack/glance/Makefile
components/openstack/glance/files/glance-api.conf
components/openstack/glance/files/glance-api.xml
components/openstack/glance/files/glance-db.xml
components/openstack/glance/files/glance-registry.conf
components/openstack/glance/files/glance-registry.xml
components/openstack/glance/files/glance-scrubber.conf
components/openstack/glance/files/glance-scrubber.xml
components/openstack/glance/files/glance.prof_attr
components/openstack/glance/glance.p5m
components/openstack/glance/patches/01-nopycrypto.patch
components/openstack/glance/patches/02-zfs-uar-formats.patch
components/openstack/glance/patches/03-CVE-2014-0162.patch
components/openstack/glance/patches/04-requirements.patch
components/openstack/glance/patches/05-launchpad-1255556.patch
components/openstack/horizon/Makefile
components/openstack/horizon/files/branding/css/solaris.css
components/openstack/horizon/files/local_settings.py
components/openstack/horizon/files/overrides.py
components/openstack/horizon/horizon.p5m
components/openstack/horizon/patches/01-CVE-2014-0157.patch
components/openstack/horizon/patches/01-remove-nodejs.patch
components/openstack/horizon/patches/02-launchpad-1264228.patch
components/openstack/horizon/patches/02-update-flavor-form-length.patch
components/openstack/horizon/patches/03-CVE-2013-6858.patch
components/openstack/horizon/patches/03-launchpad-1254694.patch
components/openstack/horizon/patches/04-blue-piechart.patch
components/openstack/horizon/patches/04-lauchpad-1187129.patch
components/openstack/horizon/resolve.deps
components/openstack/keystone/Makefile
components/openstack/keystone/files/keystone.conf
components/openstack/keystone/files/keystone.prof_attr
components/openstack/keystone/files/keystone.xml
components/openstack/keystone/keystone.p5m
components/openstack/keystone/patches/01-ec2_token-import-only.patch
components/openstack/keystone/patches/01-launchpad-1244304.patch
components/openstack/keystone/patches/02-launchpad-1178740.patch
components/openstack/keystone/patches/02-remove-nova-depend.patch
components/openstack/keystone/patches/03-CVE-2013-6391.patch
components/openstack/keystone/patches/03-sample-data-sh.patch
components/openstack/keystone/patches/04-CVE-2013-4477.patch
components/openstack/keystone/patches/04-CVE-2014-2828.patch
components/openstack/keystone/patches/05-CVE-2014-2237.patch
components/openstack/keystone/patches/05-requirements.patch
components/openstack/keystone/patches/06-CVE-2014-3476.patch
components/openstack/keystone/patches/06-sample-data-sh.patch
components/openstack/keystone/patches/07-CVE-2014-2828.patch
components/openstack/keystone/resolve.deps
components/openstack/neutron/Makefile
components/openstack/neutron/files/agent/evs_l3_agent.py
components/openstack/neutron/files/agent/linux/device.py
components/openstack/neutron/files/agent/solaris/device.py
components/openstack/neutron/files/agent/solaris/dhcp.py
components/openstack/neutron/files/agent/solaris/interface.py
components/openstack/neutron/files/agent/solaris/ipfilters_manager.py
components/openstack/neutron/files/agent/solaris/net_lib.py
components/openstack/neutron/files/dhcp_agent.ini
components/openstack/neutron/files/evs/db/api.py
components/openstack/neutron/files/evs/db/l3nat.py
components/openstack/neutron/files/evs/db/quotas_db.py
components/openstack/neutron/files/evs/plugin.py
components/openstack/neutron/files/evs_plugin.ini
components/openstack/neutron/files/l3_agent.ini
components/openstack/neutron/files/neutron-dhcp-agent
components/openstack/neutron/files/neutron-dhcp-agent.xml
components/openstack/neutron/files/neutron-l3-agent
components/openstack/neutron/files/neutron-l3-agent.xml
components/openstack/neutron/files/neutron-server.xml
components/openstack/neutron/files/neutron.conf
components/openstack/neutron/files/neutron.prof_attr
components/openstack/neutron/files/quantum.conf
components/openstack/neutron/neutron.p5m
components/openstack/neutron/patches/01-dhcp-agent-add-solaris.patch
components/openstack/neutron/patches/01-neutron-no-pyudev.patch
components/openstack/neutron/patches/02-dhcp-agent-add-solaris.patch
components/openstack/neutron/patches/02-l3-agent-add-solaris.patch
components/openstack/neutron/patches/03-CVE-2014-0187.patch
components/openstack/neutron/patches/03-l3-agent-add-solaris.patch
components/openstack/neutron/patches/04-CVE-2013-6419.patch
components/openstack/neutron/patches/04-requirements.patch
components/openstack/neutron/patches/05-launchpad-1210121.patch
components/openstack/neutron/patches/06-launchpad-1255441.patch
components/openstack/neutron/resolve.deps
components/openstack/nova/Makefile
components/openstack/nova/files/api-paste.ini
components/openstack/nova/files/nova-api-ec2.xml
components/openstack/nova/files/nova-api-metadata.xml
components/openstack/nova/files/nova-api-osapi-compute.xml
components/openstack/nova/files/nova-cert.xml
components/openstack/nova/files/nova-compute.xml
components/openstack/nova/files/nova-conductor.xml
components/openstack/nova/files/nova-consoleauth.xml
components/openstack/nova/files/nova-novncproxy.xml
components/openstack/nova/files/nova-objectstore.xml
components/openstack/nova/files/nova-scheduler.xml
components/openstack/nova/files/nova.conf
components/openstack/nova/files/nova.exec_attr
components/openstack/nova/files/nova.prof_attr
components/openstack/nova/files/release
components/openstack/nova/files/solariszones/driver.py
components/openstack/nova/nova.p5m
components/openstack/nova/patches/02-noamqplib.patch
components/openstack/nova/patches/02-requirements.patch
components/openstack/nova/patches/03-Solaris-flavors.patch
components/openstack/nova/patches/04-CVE-2013-4497.patch
components/openstack/nova/patches/04-CVE-2014-0134-partial.patch
components/openstack/nova/patches/05-CVE-2013-4463.patch
components/openstack/nova/patches/05-CVE-2014-0167.patch
components/openstack/nova/patches/06-CVE-2013-6419.patch
components/openstack/nova/patches/06-CVE-2014-2573.patch
components/openstack/nova/patches/07-CVE-2013-7048.patch
components/openstack/nova/patches/08-CVE-2013-7130.patch
components/openstack/nova/resolve.deps
components/openstack/swift/Makefile
components/openstack/swift/files/proxy-server.conf
components/openstack/swift/files/swift-account-auditor.xml
components/openstack/swift/files/swift-account-reaper.xml
components/openstack/swift/files/swift-account-replicator.xml
components/openstack/swift/files/swift-account-server.xml
components/openstack/swift/files/swift-container-auditor.xml
components/openstack/swift/files/swift-container-replicator.xml
components/openstack/swift/files/swift-container-server.xml
components/openstack/swift/files/swift-container-sync.xml
components/openstack/swift/files/swift-container-updater.xml
components/openstack/swift/files/swift-object-auditor.xml
components/openstack/swift/files/swift-object-expirer.xml
components/openstack/swift/files/swift-object-replicator.xml
components/openstack/swift/files/swift-object-server.xml
components/openstack/swift/files/swift-object-updater.xml
components/openstack/swift/files/swift-proxy-server.xml
components/openstack/swift/files/swift-replicator-rsync
components/openstack/swift/files/swift-replicator-rsync.xml
components/openstack/swift/files/swift-smf-method
components/openstack/swift/files/swift.prof_attr
components/openstack/swift/patches/01-CVE-2013-4155.patch
components/openstack/swift/patches/01-CVE-2014-0006.patch
components/openstack/swift/patches/02-CVE-2014-0006.patch
components/openstack/swift/patches/02-requirements.patch
components/openstack/swift/patches/03-CVE-2013-2161.patch
components/openstack/swift/patches/manager.patch
components/openstack/swift/patches/manpages.patch
components/openstack/swift/patches/orphans.patch
components/openstack/swift/patches/recon.patch
components/openstack/swift/patches/test.patch
components/openstack/swift/resolve.deps
components/openstack/swift/swift.p5m
components/python/cinderclient/Makefile
components/python/cinderclient/cinderclient-PYVER.p5m
components/python/keystoneclient/Makefile
components/python/keystoneclient/keystoneclient-PYVER.p5m
components/python/neutronclient/Makefile
components/python/neutronclient/neutronclient-PYVER.p5m
components/python/novaclient/Makefile
components/python/novaclient/novaclient-PYVER.p5m
components/python/swiftclient/Makefile
components/python/swiftclient/swiftclient-PYVER.p5m
--- a/components/openstack/cinder/Makefile	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/Makefile	Fri Jun 13 09:10:23 2014 -0700
@@ -25,12 +25,12 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cinder
-COMPONENT_CODENAME=	grizzly
-COMPONENT_VERSION=	2013.1.4
+COMPONENT_CODENAME=	havana
+COMPONENT_VERSION=	2013.2.3
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:b3466dbc2ea88eef67f73db2b12ec2e8b66047b2bfa0eea31392e155657bee00
+    sha256:a2740f0a0481139ae21cdb0868bebcce01b9f19832439b7f3056435e75791194
 COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUGDB=	service/cinder
@@ -60,7 +60,13 @@
          $(CP) files/cinder-volume.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack/; \
          $(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/solaris; \
 	 $(TOUCH) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/solaris/__init__.py; \
-	 $(CP) files/solaris/zfs.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/solaris); \
+	 $(CP) files/solaris/zfs.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/solaris; \
+         $(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa; \
+         $(CP) files/zfssa/__init__.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa; \
+         $(CP) files/zfssa/cinder.akwf $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa; \
+         $(CP) files/zfssa/restclient.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa; \
+         $(CP) files/zfssa/zfssaiscsi.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa; \
+         $(CP) files/zfssa/zfssarest.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/volume/drivers/zfssa); \
 	 $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
 
 # common targets
--- a/components/openstack/cinder/cinder.p5m	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/cinder.p5m	Fri Jun 13 09:10:23 2014 -0700
@@ -28,10 +28,10 @@
 set name=pkg.summary value="OpenStack Cinder"
 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="Grizzly $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Cinder, the OpenStack block storage service"
-set name=com.oracle.info.tpno value=16268
+set name=com.oracle.info.tpno value=17714
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -40,20 +40,18 @@
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream value="OpenStack <[email protected]>"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
-set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/054
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/054 \
+    value=PSARC/2014/208
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 dir  path=etc/cinder owner=cinder group=cinder mode=0700
-file path=etc/cinder/api-paste.ini owner=cinder group=cinder mode=0644 \
-    overlay=allow preserve=true
+file files/api-paste.ini path=etc/cinder/api-paste.ini owner=cinder \
+    group=cinder mode=0644 overlay=allow preserve=renamenew
 file files/cinder.conf path=etc/cinder/cinder.conf owner=cinder group=cinder \
-    mode=0644 overlay=allow preserve=true
-file cinder/volume/drivers/emc/cinder_emc_config.xml.sample \
-    path=etc/cinder/cinder_emc_config.xml owner=cinder group=cinder mode=0644 \
-    overlay=allow preserve=true
+    mode=0644 overlay=allow preserve=renamenew
 file etc/cinder/logging_sample.conf path=etc/cinder/logging.conf owner=cinder \
-    group=cinder mode=0644 overlay=allow preserve=true
+    group=cinder mode=0644 overlay=allow preserve=renamenew
 file path=etc/cinder/policy.json owner=cinder group=cinder mode=0644 \
-    overlay=allow preserve=true
+    overlay=allow preserve=renamenew
 file files/cinder.auth_attr \
     path=etc/security/auth_attr.d/cloud:openstack:cinder group=sys
 file files/cinder.exec_attr \
@@ -84,6 +82,7 @@
 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
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/__init__.py
@@ -92,19 +91,27 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/__init__.py
 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/extended_snapshot_attributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/hosts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/image_create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/qos_specs_manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/quota_classes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/scheduler_hints.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/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/volume_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_encryption_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_host_attribute.py
 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_mig_status_attribute.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_encryption.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/extensions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/auth.py
@@ -138,24 +145,50 @@
 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/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/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/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/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
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/xmlutil.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/api.py
+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/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/backup/services/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/services/swift.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/iscsi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/iscsi/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/iser/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/iser/iser.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/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/sqlalchemyutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/aggregate_states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/nova.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/context.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
@@ -178,40 +211,95 @@
 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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/019_add_migration_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/020_add_volume_admin_metadata_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/021_add_default_quota_class.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/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/session.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/flags.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/__init__.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/conf_key_mgr.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/key.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/key_mgr.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/keymgr/not_implemented_key_mgr.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ar/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/bg_BG/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/bs/LC_MESSAGES/cinder.po
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/cinder.pot
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ca/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/cs/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/da/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/de/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/en_AU/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/en_GB/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/en_US/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/es/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/es_MX/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/fi_FI/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/fil/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/fr/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/hi/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/hr/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/hu/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/id/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/it/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/it_IT/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ja/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ka_GE/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/kn/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ko/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ko_KR/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ms/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/nb/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ne/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/nl_NL/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/pl_PL/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/pt/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/pt_BR/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ro/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ru/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/ru_RU/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/sk/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/sl_SI/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/sw_KE/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/tl/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/tl_PH/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/tr/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/tr_TR/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/uk/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/vi_VN/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/zh_CN/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/zh_HK/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/zh_TW/LC_MESSAGES/cinder.po
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/manager.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/context.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/db/sqlalchemy/utils.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/excutils.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
@@ -220,6 +308,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/local.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/log.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/network_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/api.py
@@ -229,8 +318,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/rpc_notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/rpc_notifier2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/test_notifier.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/processutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rootwrap/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rootwrap/cmd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rootwrap/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rootwrap/wrapper.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/__init__.py
@@ -245,6 +337,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/matchmaker_redis.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/proxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/zmq_receiver.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/filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/__init__.py
@@ -254,11 +347,11 @@
 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/weight.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/setup.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/strutils.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/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/uuidutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/version.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/scheduler/__init__.py
@@ -276,7 +369,19 @@
 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/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/decorators.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/patterns/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/patterns/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/patterns/linear_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/task.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/taskflow/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/test.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/transfer/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/transfer/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/units.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/__init__.py
@@ -284,20 +389,36 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/configuration.py
 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/emc/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_smis_common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_smis_iscsi.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/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/iscsi.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/ssc_utils.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/jsonrpc.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/nexenta/volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solaris/__init__.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/zadara.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/iscsi.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zfssa/restclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zfssa/zfssaiscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zfssa/zfssarest.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/create_volume/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/utils.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
 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
@@ -312,6 +433,9 @@
 # flush this out.
 depend type=group fmri=library/python-2/anyjson-26
 
+# force a dependency on package delivering fcinfo(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/fcinfo
+
 # force a dependency on package delivering itadm(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/itadm
 
@@ -321,12 +445,12 @@
 # force a dependency on package delivering zfs(1M)
 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-2/babel-26
+
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/greenlet-26
 
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/iso8601-26
-
 # force a dependency on kombu; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/kombu-26
 
@@ -350,13 +474,12 @@
 # force a dependency on setuptools; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/setuptools-26
 
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/sqlalchemy-26
+
 # force a dependency on stevedore; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/stevedore-26
 
-# force a dependency on suds; pkgdepend work is needed to flush this out.
-# (dependency is for NetApp volume driver)
-depend type=require fmri=library/python-2/suds-26
-
 # force a dependency on webob; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/webob-26
 
@@ -364,5 +487,20 @@
 # out.
 depend type=require fmri=library/python/glanceclient-26
 
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-26
+
+# force a dependency on keystoneclient; used via a paste.deploy filter
+depend type=require fmri=library/python/keystoneclient-26
+
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-26
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-26
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-26
+
 # force a dependency on swiftclient; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/swiftclient-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/api-paste.ini	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,61 @@
+#############
+# OpenStack #
+#############
+
+[composite:osapi_volume]
+use = call:cinder.api:root_app_factory
+/: apiversions
+/v1: openstack_volume_api_v1
+/v2: openstack_volume_api_v2
+
+[composite:openstack_volume_api_v1]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = faultwrap sizelimit noauth apiv1
+keystone = faultwrap sizelimit authtoken keystonecontext apiv1
+keystone_nolimit = faultwrap sizelimit authtoken keystonecontext apiv1
+
+[composite:openstack_volume_api_v2]
+use = call:cinder.api.middleware.auth:pipeline_factory
+noauth = faultwrap sizelimit noauth apiv2
+keystone = faultwrap sizelimit authtoken keystonecontext apiv2
+keystone_nolimit = faultwrap sizelimit authtoken keystonecontext apiv2
+
+[filter:faultwrap]
+paste.filter_factory = cinder.api.middleware.fault:FaultWrapper.factory
+
+[filter:noauth]
+paste.filter_factory = cinder.api.middleware.auth:NoAuthMiddleware.factory
+
+[filter:sizelimit]
+paste.filter_factory = cinder.api.middleware.sizelimit:RequestBodySizeLimiter.factory
+
+[app:apiv1]
+paste.app_factory = cinder.api.v1.router:APIRouter.factory
+
+[app:apiv2]
+paste.app_factory = cinder.api.v2.router:APIRouter.factory
+
+[pipeline:apiversions]
+pipeline = faultwrap osvolumeversionapp
+
+[app:osvolumeversionapp]
+paste.app_factory = cinder.api.versions:Versions.factory
+
+##########
+# Shared #
+##########
+
+[filter:keystonecontext]
+paste.filter_factory = cinder.api.middleware.auth:CinderKeystoneContext.factory
+
+[filter:authtoken]
+paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
+auth_uri = http://127.0.0.1:5000/v2.0
+identity_uri = http://127.0.0.1:35357
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+# signing_dir is configurable, but the default behavior of the authtoken
+# middleware should be sufficient.  It will create a temporary directory
+# in the home directory for the user the cinder process is running as.
+#signing_dir = /var/lib/cinder/keystone-signing
--- a/components/openstack/cinder/files/cinder-api.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-api.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -37,6 +37,13 @@
       <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/cinder-api %m">
       <method_context>
--- a/components/openstack/cinder/files/cinder-backup.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-backup.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -37,6 +37,13 @@
       <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/cinder-backup %m">
       <method_context>
--- a/components/openstack/cinder/files/cinder-db.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-db.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -30,6 +30,13 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/usr/bin/cinder-manage db sync">
       <method_context>
--- a/components/openstack/cinder/files/cinder-scheduler.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-scheduler.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -37,6 +37,13 @@
       <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/cinder-scheduler %m">
       <method_context>
--- a/components/openstack/cinder/files/cinder-volume-setup	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-volume-setup	Fri Jun 13 09:10:23 2014 -0700
@@ -28,11 +28,19 @@
     order to set it up properly for Cinder to use.
 
     """
-    parser = ConfigParser.ConfigParser()
-    parser.read("/etc/cinder/cinder.conf")
+    cinder_conf = "/etc/cinder/cinder.conf"
+    if not os.path.exists(cinder_conf):
+        print "%s doesn't exist" % cinder_conf
+        return smf_include.SMF_EXIT_ERR_CONFIG
 
-    # set up the top-level dataset with the proper permissions for cinder
-    top_ds = parser.get("DEFAULT", "zfs_volume_base")
+    parser = ConfigParser.ConfigParser()
+    parser.read(cinder_conf)
+
+    # retrieve the top-level dataset or just get the default (rpool/cinder)
+    try:
+        top_ds = parser.get("DEFAULT", "zfs_volume_base")
+    except ConfigParser.NoOptionError:
+        top_ds = "rpool/cinder"
 
     # look to see if the dataset exists
     cmd = ["/usr/sbin/zfs", "list", top_ds]
--- a/components/openstack/cinder/files/cinder-volume.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder-volume.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -42,6 +42,8 @@
       <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
     </dependency>
 
+    <logfile_attributes permissions='600'/>
+
     <instance name='setup' enabled='false'>
 
       <exec_method timeout_seconds="60" type="method" name="start"
@@ -62,6 +64,11 @@
         <service_fmri value='svc:/application/openstack/cinder/cinder-volume:setup' />
       </dependency>
 
+      <dependency name='ntp' grouping='optional_all' restart_on='none'
+        type='service'>
+        <service_fmri value='svc:/network/ntp'/>
+      </dependency>
+
       <exec_method timeout_seconds="60" type="method" name="start"
         exec="/lib/svc/method/cinder-volume %m">
         <method_context>
--- a/components/openstack/cinder/files/cinder.conf	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder.conf	Fri Jun 13 09:10:23 2014 -0700
@@ -5,49 +5,6 @@
 [DEFAULT]
 
 #
-# Options defined in cinder.openstack.common.cfg:CommonConfigOpts
-#
-
-# Print debugging output (boolean value)
-#debug=false
-
-# Print more verbose output (boolean value)
-#verbose=false
-
-# If this option is specified, the logging configuration file
-# specified is used and overrides any other logging options
-# specified. Please see the Python logging module
-# documentation for details on logging configuration files.
-# (string value)
-#log_config=<None>
-
-# A logging.Formatter log message format string which may use
-# any of the available logging.LogRecord attributes. Default:
-# %(default)s (string value)
-#log_format=%(asctime)s %(levelname)8s [%(name)s] %(message)s
-
-# Format string for %%(asctime)s in log records. Default:
-# %(default)s (string value)
-#log_date_format=%Y-%m-%d %H:%M:%S
-
-# (Optional) Name of log file to output to. If not set,
-# logging will go to stdout. (string value)
-#log_file=<None>
-
-# (Optional) The directory to keep log files in (will be
-# prepended to --log-file) (string value)
-#log_dir=<None>
-
-# Use syslog for logging. (boolean value)
-#use_syslog=false
-
-# syslog facility to receive log lines (string value)
-#syslog_log_facility=LOG_USER
-
-# Do not count snapshots against gigabytes quota (bool value)
-#no_snapshot_gb_quota=False
-
-#
 # Options defined in cinder.exception
 #
 
@@ -56,161 +13,6 @@
 
 
 #
-# Options defined in cinder.flags
-#
-
-# Virtualization api connection type : libvirt, xenapi, or
-# fake (string value)
-#connection_type=<None>
-
-# The SQLAlchemy connection string used to connect to the
-# database (string value)
-#sql_connection=sqlite:///$state_path/$sqlite_db
-
-# Verbosity of SQL debugging information. 0=None,
-# 100=Everything (integer value)
-#sql_connection_debug=0
-
-# File name for the paste.deploy config for cinder-api (string
-# value)
-#api_paste_config=api-paste.ini
-
-# Directory where the cinder python module is installed
-# (string value)
-#pybasedir=/usr/lib/python2.6/vendor-packages
-
-# Directory where cinder binaries are installed (string value)
-bindir=/usr/bin
-
-# Top-level directory for maintaining cinder's state (string
-# value)
-#state_path=$pybasedir
-
-# ip address of this host (string value)
-#my_ip=10.0.0.1
-
-# default glance hostname or ip (string value)
-#glance_host=$my_ip
-
-# default glance port (integer value)
-#glance_port=9292
-
-# A list of the glance api servers available to cinder
-# ([hostname|ip]:port) (list value)
-#glance_api_servers=$glance_host:$glance_port
-
-# default version of the glance api to use
-#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
-
-# the topic scheduler nodes listen on (string value)
-#scheduler_topic=cinder-scheduler
-
-# the topic volume nodes listen on (string value)
-#volume_topic=cinder-volume
-
-# Deploy v1 of the Cinder API.  (boolean value)
-#enable_v1_api=true
-
-# Deploy v2 of the Cinder API.  (boolean value)
-#enable_v2_api=true
-
-# whether to rate limit the api (boolean value)
-#api_rate_limit=true
-
-# Specify list of extensions to load when using
-# osapi_volume_extension option with
-# cinder.api.contrib.select_extensions (list value)
-#osapi_volume_ext_list=
-
-# osapi volume extension to load (multi valued)
-#osapi_volume_extension=cinder.api.contrib.standard_extensions
-
-# Base URL that will be presented to users in links to the
-# OpenStack Volume API (string value)
-#osapi_volume_base_URL=<None>
-
-# the maximum number of items returned in a single response
-# from a collection resource (integer value)
-#osapi_max_limit=1000
-
-# the filename to use with sqlite (string value)
-#sqlite_db=cinder.sqlite
-
-# If passed, use synchronous mode for sqlite (boolean value)
-#sqlite_synchronous=true
-
-# timeout before idle sql connections are reaped (integer
-# value)
-#sql_idle_timeout=3600
-
-# maximum db connection retries during startup. (setting -1
-# implies an infinite retry count) (integer value)
-#sql_max_retries=10
-
-# interval between retries of opening a sql connection
-# (integer value)
-#sql_retry_interval=10
-
-# full class name for the Manager for volume (string value)
-#volume_manager=cinder.volume.manager.VolumeManager
-
-# full class name for the Manager for scheduler (string value)
-#scheduler_manager=cinder.scheduler.manager.SchedulerManager
-
-# Name of this node.  This can be an opaque identifier.  It is
-# not necessarily a hostname, FQDN, or IP address. (string
-# value)
-#host=cinder
-
-# availability zone of this node (string value)
-#storage_availability_zone=nova
-
-# Memcached servers or None for in process cache. (list value)
-#memcached_servers=<None>
-
-# default volume type to use (string value)
-#default_volume_type=<None>
-
-# time period to generate volume usages for.  Time period must
-# be hour, day, month or year (string value)
-#volume_usage_audit_period=month
-
-# Path to the rootwrap configuration file to use for running
-# commands as root (string value)
-#rootwrap_config=/etc/cinder/rootwrap.conf
-
-# Whether to log monkey patching (boolean value)
-#monkey_patch=false
-
-# List of modules/decorators to monkey patch (list value)
-#monkey_patch_modules=
-
-# maximum time since last check-in for up service (integer
-# value)
-#service_down_time=60
-
-# The full class name of the volume API class to use (string
-# value)
-#volume_api_class=cinder.volume.api.API
-
-# The strategy to use for auth. Supports noauth, keystone, and
-# deprecated. (string value)
-#auth_strategy=noauth
-
-# AMQP exchange to connect to if using RabbitMQ or Qpid
-# (string value)
-#control_exchange=cinder
-
-
-#
 # Options defined in cinder.policy
 #
 
@@ -228,11 +30,12 @@
 # number of volumes allowed per project (integer value)
 #quota_volumes=10
 
-# number of volume snapshots allowed per project (integer value)
+# number of volume snapshots allowed per project (integer
+# value)
 #quota_snapshots=10
 
-# number of volume and snapshot gigabytes allowed per project (integer
-# value)
+# number of volume gigabytes (snapshots are also included)
+# allowed per project (integer value)
 #quota_gigabytes=1000
 
 # number of seconds until a reservation expires (integer
@@ -250,6 +53,10 @@
 # default driver to use for quota checks (string value)
 #quota_driver=cinder.quota.DbQuotaDriver
 
+# whether to use default quota class for default quota
+# (boolean value)
+#use_default_quota_class=true
+
 
 #
 # Options defined in cinder.service
@@ -311,6 +118,19 @@
 
 
 #
+# Options defined in cinder.api.common
+#
+
+# the maximum number of items returned in a single response
+# from a collection resource (integer value)
+#osapi_max_limit=1000
+
+# Base URL that will be presented to users in links to the
+# OpenStack Volume API (string value)
+#osapi_volume_base_URL=<None>
+
+
+#
 # Options defined in cinder.api.middleware.auth
 #
 
@@ -328,11 +148,297 @@
 
 
 #
-# Options defined in cinder.common.deprecated
+# Options defined in cinder.backup.drivers.ceph
+#
+
+# Ceph config file to use. (string value)
+#backup_ceph_conf=/etc/ceph/ceph.conf
+
+# the Ceph user to connect with (string value)
+#backup_ceph_user=cinder
+
+# the chunk size in bytes that a backup will be broken into
+# before transfer to backup store (integer value)
+#backup_ceph_chunk_size=134217728
+
+# the Ceph pool to backup to (string value)
+#backup_ceph_pool=backups
+
+# RBD stripe unit to use when creating a backup image (integer
+# value)
+#backup_ceph_stripe_unit=0
+
+# RBD stripe count to use when creating a backup image
+# (integer value)
+#backup_ceph_stripe_count=0
+
+# If True, always discard excess bytes when restoring volumes.
+# (boolean value)
+#restore_discard_excess_bytes=true
+
+
+#
+# Options defined in cinder.backup.drivers.swift
+#
+
+# The URL of the Swift endpoint (string value)
+#backup_swift_url=http://localhost:8080/v1/AUTH_
+
+# Swift authentication mechanism (string value)
+#backup_swift_auth=per_user
+
+# Swift user name (string value)
+#backup_swift_user=<None>
+
+# Swift key for authentication (string value)
+#backup_swift_key=<None>
+
+# The default Swift container to use (string value)
+#backup_swift_container=volumebackups
+
+# The size in bytes of Swift backup objects (integer value)
+#backup_swift_object_size=52428800
+
+# The number of retries to make for Swift operations (integer
+# value)
+#backup_swift_retry_attempts=3
+
+# The backoff time in seconds between Swift retries (integer
+# value)
+#backup_swift_retry_backoff=2
+
+# Compression algorithm (None to disable) (string value)
+#backup_compression_algorithm=zlib
+
+
+#
+# Options defined in cinder.backup.drivers.tsm
+#
+
+# 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
+
+
+#
+# Options defined in cinder.backup.manager
+#
+
+# Driver to use for backups. (string value)
+#backup_driver=cinder.backup.drivers.swift
+
+
+#
+# Options defined in cinder.common.config
 #
 
-# make deprecations fatal (boolean value)
-#fatal_deprecations=false
+# Virtualization api connection type : libvirt, xenapi, or
+# fake (string value)
+#connection_type=<None>
+
+# File name for the paste.deploy config for cinder-api (string
+# value)
+#api_paste_config=api-paste.ini
+
+# Directory where the cinder python module is installed
+# (string value)
+#pybasedir=/usr/lib/python2.6/vendor-packages
+
+# Directory where cinder binaries are installed (string value)
+bindir=/usr/bin
+
+# Top-level directory for maintaining cinder's state (string
+# value)
+state_path=/var/lib/cinder
+
+# ip address of this host (string value)
+#my_ip=10.0.0.1
+
+# default glance hostname or ip (string value)
+#glance_host=$my_ip
+
+# default glance port (integer value)
+#glance_port=9292
+
+# A list of the glance api servers available to cinder
+# ([hostname|ip]:port) (list value)
+#glance_api_servers=$glance_host:$glance_port
+
+# Version of the glance api to use (integer value)
+#glance_api_version=1
+
+# Number retries when downloading an image from glance
+# (integer value)
+#glance_num_retries=0
+
+# Allow to perform insecure SSL (https) requests to glance
+# (boolean value)
+#glance_api_insecure=false
+
+# Whether to attempt to negotiate SSL layer compression when
+# using SSL (https) requests. Set to False to disable SSL
+# layer compression. In some cases disabling this may improve
+# data throughput, eg when high network bandwidth is available
+# and you are using already compressed image formats such as
+# qcow2 . (boolean value)
+#glance_api_ssl_compression=false
+
+# http/https timeout value for glance operations. If no value
+# (None) is supplied here, the glanceclient default value is
+# used. (integer value)
+#glance_request_timeout=<None>
+
+# the topic scheduler nodes listen on (string value)
+#scheduler_topic=cinder-scheduler
+
+# the topic volume nodes listen on (string value)
+#volume_topic=cinder-volume
+
+# the topic volume backup nodes listen on (string value)
+#backup_topic=cinder-backup
+
+# Deploy v1 of the Cinder API.  (boolean value)
+#enable_v1_api=true
+
+# Deploy v2 of the Cinder API.  (boolean value)
+#enable_v2_api=true
+
+# whether to rate limit the api (boolean value)
+#api_rate_limit=true
+
+# Specify list of extensions to load when using
+# osapi_volume_extension option with
+# cinder.api.contrib.select_extensions (list value)
+#osapi_volume_ext_list=
+
+# osapi volume extension to load (multi valued)
+#osapi_volume_extension=cinder.api.contrib.standard_extensions
+
+# full class name for the Manager for volume (string value)
+#volume_manager=cinder.volume.manager.VolumeManager
+
+# full class name for the Manager for volume backup (string
+# value)
+#backup_manager=cinder.backup.manager.BackupManager
+
+# full class name for the Manager for scheduler (string value)
+#scheduler_manager=cinder.scheduler.manager.SchedulerManager
+
+# Name of this node.  This can be an opaque identifier.  It is
+# not necessarily a hostname, FQDN, or IP address. (string
+# value)
+#host=cinder
+
+# availability zone of this node (string value)
+#storage_availability_zone=nova
+
+# default availability zone to use when creating a new volume.
+# If this is not set then we use the value from the
+# storage_availability_zone option as the default
+# availability_zone for new volumes. (string value)
+#default_availability_zone=<None>
+
+# Memcached servers or None for in process cache. (list value)
+#memcached_servers=<None>
+
+# default volume type to use (string value)
+#default_volume_type=<None>
+
+# time period to generate volume usages for.  Time period must
+# be hour, day, month or year (string value)
+#volume_usage_audit_period=month
+
+# Deprecated: command to use for running commands as root
+# (string value)
+#root_helper=sudo
+
+# Path to the rootwrap configuration file to use for running
+# commands as root (string value)
+#rootwrap_config=/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 up service (integer
+# value)
+#service_down_time=60
+
+# The full class name of the volume API class to use (string
+# value)
+#volume_api_class=cinder.volume.api.API
+
+# The full class name of the volume backup API class (string
+# value)
+#backup_api_class=cinder.backup.api.API
+
+# The strategy to use for auth. Supports noauth, keystone, and
+# deprecated. (string value)
+auth_strategy=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
+
+
+#
+# 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
+#
+
+# Info to match when looking for nova in the service catalog.
+# Format is : separated values of the form:
+# <service_type>:<service_name>:<endpoint_type> (string value)
+#nova_catalog_info=compute:nova:publicURL
+
+# Same as nova_catalog_info, but for admin endpoint. (string
+# value)
+#nova_catalog_admin_info=compute:nova:adminURL
+
+# Override service catalog lookup with template for nova
+# endpoint e.g. http://localhost:8774/v2/%(tenant_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 certicates 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
 
 
 #
@@ -358,6 +464,7 @@
 # value)
 #backup_name_template=backup-%s
 
+
 #
 # Options defined in cinder.db.base
 #
@@ -367,12 +474,107 @@
 
 
 #
+# Options defined in cinder.image.glance
+#
+
+# 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
 #
 
-# parent dir for tempdir used for image conversion (string
+# Directory used for temporary storage during image conversion
+# (string value)
+#image_conversion_dir=$state_path/conversion
+
+
+#
+# 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)
-#image_conversion_dir=/tmp
+#fixed_key=<None>
+
+
+#
+# Options defined in cinder.openstack.common.db.api
+#
+
+# The backend to use for db (string value)
+#backend=sqlalchemy
+
+# Enable the experimental use of thread pooling for all DB API
+# calls (boolean value)
+#use_tpool=false
+
+
+#
+# Options defined in cinder.openstack.common.db.sqlalchemy.session
+#
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+connection=sqlite:///$state_path/$sqlite_db
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+#max_pool_size=5
+
+# maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+#max_retries=10
+
+# interval between retries of opening a sql connection
+# (integer value)
+#retry_interval=10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+#connection_debug=0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+#connection_trace=false
+
+# the filename to use with sqlite (string value)
+#sqlite_db=cinder.sqlite
+
+# If true, use synchronous mode for sqlite (boolean value)
+#sqlite_synchronous=true
+
+
+#
+# Options defined in cinder.openstack.common.eventlet_backdoor
+#
+
+# port for eventlet backdoor to listen (integer value)
+#backdoor_port=<None>
 
 
 #
@@ -382,7 +584,8 @@
 # Whether to disable inter-process locks (boolean value)
 #disable_process_locking=false
 
-# Directory to use for lock files (string value)
+# Directory to use for lock files. Default to a temp directory
+# (string value)
 #lock_path=<None>
 
 
@@ -390,27 +593,24 @@
 # Options defined in cinder.openstack.common.log
 #
 
-# Log output to a per-service log file in named directory
-# (string value)
-#logdir=<None>
-
-# Log output to a named file (string value)
-#logfile=<None>
+# 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
 
 # Log output to standard error (boolean value)
 #use_stderr=true
 
-# Default file mode used when creating log files (string
-# value)
-#logfile_mode=0644
-
 # format string to use for log messages with context (string
 # value)
-#logging_context_format_string=%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user_id)s %(project_id)s] %(instance)s%(message)s
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
 
 # format string to use for log messages without context
 # (string value)
-#logging_default_format_string=%(asctime)s %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+#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)
@@ -418,7 +618,7 @@
 
 # prefix each line of exception output with this format
 # (string value)
-#logging_exception_prefix=%(asctime)s %(process)d TRACE %(name)s %(instance)s
+#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
 
 # list of logger=LEVEL pairs (list value)
 #default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
@@ -426,6 +626,9 @@
 # publish error events (boolean value)
 #publish_errors=false
 
+# make deprecations fatal (boolean value)
+#fatal_deprecations=false
+
 # If an instance is passed with the log message, format it
 # like this (string value)
 #instance_format="[instance: %(uuid)s] "
@@ -434,6 +637,38 @@
 # it like this (string value)
 #instance_uuid_format="[instance: %(uuid)s] "
 
+# If this option is specified, the logging configuration file
+# specified is used and overrides any other logging options
+# specified. Please see the Python logging module
+# documentation for details on logging configuration files.
+# (string value)
+#log_config=<None>
+
+# 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)
+#log_file=<None>
+
+# (Optional) The base directory used for relative --log-file
+# paths (string value)
+#log_dir=<None>
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+# syslog facility to receive log lines (string value)
+#syslog_log_facility=LOG_USER
+
 
 #
 # Options defined in cinder.openstack.common.notifier.api
@@ -448,15 +683,32 @@
 
 # Default publisher_id for outgoing notifications (string
 # value)
-#default_publisher_id=$host
+#default_publisher_id=<None>
+
+
+#
+# Options defined in cinder.openstack.common.notifier.rpc_notifier
+#
+
+# AMQP topic used for OpenStack notifications (list value)
+#notification_topics=notifications
 
 
 #
-# Options defined in cinder.openstack.common.notifier.rabbit_notifier
+# Options defined in cinder.openstack.common.notifier.rpc_notifier2
 #
 
-# AMQP topic used for openstack notifications (list value)
-#notification_topics=notifications
+# AMQP topic(s) used for OpenStack notifications (list value)
+#topics=notifications
+
+
+#
+# Options defined in cinder.openstack.common.periodic_task
+#
+
+# Some periodic tasks can be run in a separate process. Should
+# we run them here? (boolean value)
+#run_external_periodic_tasks=true
 
 
 #
@@ -483,11 +735,30 @@
 
 # Modules of exceptions that are permitted to be recreatedupon
 # receiving exception data from an rpc call. (list value)
-#allowed_rpc_exception_modules=cinder.openstack.common.exception,nova.exception,cinder.exception
+#allowed_rpc_exception_modules=nova.exception,cinder.exception,exceptions
 
 # If passed, use a fake RabbitMQ provider (boolean value)
 #fake_rabbit=false
 
+# AMQP exchange to connect to if using RabbitMQ or Qpid
+# (string value)
+#control_exchange=openstack
+
+
+#
+# Options defined in cinder.openstack.common.rpc.amqp
+#
+
+# Enable a fast single reply queue if using AMQP based RPC
+# like RabbitMQ or Qpid. (boolean value)
+#amqp_rpc_single_reply_queue=false
+
+# Use durable queues in amqp. (boolean value)
+#amqp_durable_queues=false
+
+# Auto-delete queues in amqp. (boolean value)
+#amqp_auto_delete=false
+
 
 #
 # Options defined in cinder.openstack.common.rpc.impl_kombu
@@ -543,9 +814,6 @@
 # value)
 #rabbit_max_retries=0
 
-# use durable queues in RabbitMQ (boolean value)
-#rabbit_durable_queues=false
-
 # use H/A queues in RabbitMQ (x-ha-policy: all).You need to
 # wipe RabbitMQ database when changing this option. (boolean
 # value)
@@ -559,9 +827,12 @@
 # Qpid broker hostname (string value)
 #qpid_hostname=localhost
 
-# Qpid broker port (string value)
+# Qpid broker port (integer value)
 #qpid_port=5672
 
+# Qpid HA cluster host:port pairs (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
 # Username for qpid connection (string value)
 #qpid_username=
 
@@ -572,27 +843,6 @@
 # (string value)
 #qpid_sasl_mechanisms=
 
-# Automatically reconnect (boolean value)
-#qpid_reconnect=true
-
-# Reconnection timeout in seconds (integer value)
-#qpid_reconnect_timeout=0
-
-# Max reconnections before giving up (integer value)
-#qpid_reconnect_limit=0
-
-# Minimum seconds between reconnection attempts (integer
-# value)
-#qpid_reconnect_interval_min=0
-
-# Maximum seconds between reconnection attempts (integer
-# value)
-#qpid_reconnect_interval_max=0
-
-# Equivalent to setting max and min to the same value (integer
-# value)
-#qpid_reconnect_interval=0
-
 # Seconds between connection keepalive heartbeats (integer
 # value)
 #qpid_heartbeat=60
@@ -603,6 +853,14 @@
 # Disable Nagle algorithm (boolean value)
 #qpid_tcp_nodelay=true
 
+# 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
+
 
 #
 # Options defined in cinder.openstack.common.rpc.impl_zmq
@@ -622,6 +880,10 @@
 # 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
 
@@ -638,6 +900,26 @@
 # Matchmaker ring file (JSON) (string value)
 #matchmaker_ringfile=/etc/nova/matchmaker_ring.json
 
+# Heartbeat frequency (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+
+#
+# Options defined in cinder.openstack.common.rpc.matchmaker_redis
+#
+
+# Host to locate redis (string value)
+#host=127.0.0.1
+
+# Use this port to connect to redis host. (integer value)
+#port=6379
+
+# Password for Redis server. (optional) (string value)
+#password=<None>
+
 
 #
 # Options defined in cinder.scheduler.driver
@@ -646,6 +928,10 @@
 # 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
@@ -665,7 +951,7 @@
 #
 
 # Default scheduler driver to use (string value)
-#scheduler_driver=cinder.scheduler.simple.SimpleScheduler
+#scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler
 
 
 #
@@ -696,6 +982,18 @@
 
 
 #
+# 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
 #
 
@@ -703,6 +1001,10 @@
 # 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
@@ -716,17 +1018,14 @@
 # value)
 #reserved_percentage=0
 
-# number of times to rescan iSCSI target to find volume
-# (integer value)
-#num_iscsi_scan_tries=3
-
-# Number of iscsi target ids per host (integer value)
+# The maximum number of iscsi target ids per host (integer
+# value)
 #iscsi_num_targets=100
 
 # prefix for iscsi volumes (string value)
 #iscsi_target_prefix=iqn.2010-10.org.openstack:
 
-# The port that the iSCSI daemon is listening on (string
+# The IP address that the iSCSI daemon is listening on (string
 # value)
 #iscsi_ip_address=$my_ip
 
@@ -734,9 +1033,124 @@
 # value)
 #iscsi_port=3260
 
-# Optional override to the capacity based volume backend name
+# The maximum number of times to rescan targets to find volume
+# (integer value)
+#num_volume_device_scan_tries=3
+
+# The maximum number of times to rescan iSER targetto find
+# volume (integer value)
+#num_iser_scan_tries=3
+
+# The maximum number of iser target ids per host (integer
+# value)
+#iser_num_targets=100
+
+# prefix for iser volumes (string value)
+#iser_target_prefix=iqn.2010-10.org.iser.openstack:
+
+# The 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
+
+# iser target user-land tool to use (string value)
+#iser_helper=tgtadm
+
+# 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
+
+# Method used to wipe old voumes (valid options are: none,
+# zero, shred) (string value)
+#volume_clear=zero
+
+# Size in MiB to wipe at start of old volumes. 0 => all
+# (integer value)
+#volume_clear_size=0
+
+# iscsi target user-land tool to use (string value)
+#iscsi_helper=tgtadm
+
+# Volume configuration file storage directory (string value)
+#volumes_dir=$state_path/volumes
+
+# IET configuration file (string value)
+#iet_conf=/etc/iet/ietd.conf
+
+# Comma-separated list of initiator IQNs allowed to connect to
+# the iSCSI target. (From Nova compute nodes.) (string value)
+#lio_initiator_iqns=
+
+# Sets the behavior of the iSCSI target to either perform
+# blockio or fileio optionally, auto can be set and Cinder
+# will autodetect type of backing device (string value)
+#iscsi_iotype=fileio
+
+
 #
-#volume_backend_name=LVM_iSCSI_unique1
+# Options defined in cinder.volume.drivers.block_device
+#
+
+# List of all available devices (list value)
+#available_devices=
+
+
+#
+# Options defined in cinder.volume.drivers.coraid
+#
+
+# IP address of Coraid ESM (string value)
+#coraid_esm_address=
+
+# User name to connect to Coraid ESM (string value)
+#coraid_user=admin
+
+# Name of group on Coraid ESM to which coraid_user belongs
+# (must have admin privilege) (string value)
+#coraid_group=admin
+
+# Password to connect to Coraid ESM (string value)
+#coraid_password=password
+
+# Volume Type key name to store ESM Repository Name (string
+# value)
+#coraid_repository_key=coraid_repository
+
+
+#
+# Options defined in cinder.volume.drivers.eqlx
+#
+
+# Group name to use for creating volumes (string value)
+#eqlx_group_name=group-0
+
+# Timeout for the Group Manager cli command execution (integer
+# value)
+#eqlx_cli_timeout=30
+
+# Maximum retry count for reconnection (integer value)
+#eqlx_cli_max_retries=5
+
+# Use CHAP authentificaion for targets? (boolean value)
+#eqlx_use_chap=false
+
+# Existing CHAP account name (string value)
+#eqlx_chap_login=admin
+
+# Password for specified CHAP account name (string value)
+#eqlx_chap_password=password
+
+# Pool in which volumes will be created (string value)
+#eqlx_pool=default
+
 
 #
 # Options defined in cinder.volume.drivers.glusterfs
@@ -744,10 +1158,7 @@
 
 # File with the list of available gluster shares (string
 # value)
-#glusterfs_shares_config=<None>
-
-# Base dir where gluster expected to be mounted (string value)
-#glusterfs_mount_point_base=$state_path/mnt
+#glusterfs_shares_config=/etc/cinder/glusterfs_shares
 
 # Use du or df for free space calculation (string value)
 #glusterfs_disk_util=df
@@ -757,6 +1168,69 @@
 # 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.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
+
+
+#
+# Options defined in cinder.volume.drivers.hds.hds
+#
+
+# configuration file for HDS cinder plugin for HUS (string
+# value)
+#hds_cinder_config_file=/opt/hds/hus/cinder_hus_conf.xml
+
+
+#
+# Options defined in cinder.volume.drivers.huawei
+#
+
+# config data for cinder huawei plugin (string value)
+#cinder_huawei_conf_file=/etc/cinder/cinder_huawei_conf.xml
+
 
 #
 # Options defined in cinder.volume.drivers.lvm
@@ -766,14 +1240,6 @@
 # value)
 #volume_group=cinder-volumes
 
-# Method used to wipe old volumes (valid options are: none,
-# zero, shred) (string value)
-#volume_clear=zero
-
-# Size in MiB to wipe at start of old volumes. 0 => all
-# (integer value)
-#volume_clear_size=0
-
 # Size of thin provisioning pool (None uses entire cinder VG)
 # (string value)
 #pool_size=<None>
@@ -783,75 +1249,65 @@
 # value)
 #lvm_mirrors=0
 
-
-#
-# Options defined in cinder.volume.drivers.netapp
-#
-
-# URL of the WSDL file for the DFM server (string value)
-#netapp_wsdl_url=<None>
-
-# User name for the DFM server (string value)
-#netapp_login=<None>
-
-# Password for the DFM server (string value)
-#netapp_password=<None>
-
-# Hostname for the DFM server (string value)
-#netapp_server_hostname=<None>
-
-# Port number for the DFM server (integer value)
-#netapp_server_port=8088
-
-# Storage service to use for provisioning (when
-# volume_type=None) (string value)
-#netapp_storage_service=<None>
-
-# Prefix of storage service name to use for provisioning
-# (volume_type name will be appended) (string value)
-#netapp_storage_service_prefix=<None>
-
-# Vfiler to use for provisioning (string value)
-#netapp_vfiler=<None>
+# Type of LVM volumes to deploy; (default or thin) (string
+# value)
+#lvm_type=default
 
 
 #
-# Options defined in cinder.volume.drivers.netapp_nfs
+# Options defined in cinder.volume.drivers.netapp.options
 #
 
-# Does snapshot creation call returns immediately (integer
-# value)
-#synchronous_snapshot_create=0
-
-# URL of the WSDL file for the DFM server (string value)
-#netapp_wsdl_url=<None>
-
-# User name for the DFM server (string value)
-#netapp_login=<None>
-
-# Password for the DFM server (string value)
-#netapp_password=<None>
-
-# Hostname for the DFM server (string value)
-#netapp_server_hostname=<None>
-
-# Port number for the DFM server (integer value)
-#netapp_server_port=8088
-
-# Storage service to use for provisioning (when
-# volume_type=None) (string value)
-#netapp_storage_service=<None>
-
-# Prefix of storage service name to use for provisioning
-# (volume_type name will be appended) (string value)
-#netapp_storage_service_prefix=<None>
-
 # Vfiler to use for provisioning (string value)
 #netapp_vfiler=<None>
 
+# User name for the storage controller (string value)
+#netapp_login=<None>
+
+# Password for the storage controller (string value)
+#netapp_password=<None>
+
+# Cluster vserver to use for provisioning (string value)
+#netapp_vserver=<None>
+
+# Host name for the storage controller (string value)
+#netapp_server_hostname=<None>
+
+# Port number for the storage controller (integer value)
+#netapp_server_port=80
+
+# Threshold available percent to start cache cleaning.
+# (integer value)
+#thres_avl_size_perc_start=20
+
+# Threshold available percent to stop cache cleaning. (integer
+# value)
+#thres_avl_size_perc_stop=60
+
+# Threshold minutes after which cache file can be cleaned.
+# (integer value)
+#expiry_thres_minutes=720
+
+# Volume size multiplier to ensure while creation (floating
+# point value)
+#netapp_size_multiplier=1.2
+
+# Comma separated volumes to be used for provisioning (string
+# value)
+#netapp_volume_list=<None>
+
+# Storage family type. (string value)
+#netapp_storage_family=ontap_cluster
+
+# Storage protocol type. (string value)
+#netapp_storage_protocol=<None>
+
+# Transport type protocol (string value)
+#netapp_transport_type=http
+
 
 #
-# Options defined in cinder.volume.drivers.nexenta.volume
+# Options defined in cinder.volume.drivers.nexenta.options
 #
 
 # IP address of Nexenta SA (string value)
@@ -883,6 +1339,36 @@
 # prefix for iSCSI target groups on SA (string value)
 #nexenta_target_group_prefix=cinder/
 
+# File with the list of available nfs shares (string value)
+#nexenta_shares_config=/etc/cinder/nfs_shares
+
+# Base dir containing mount points for nfs shares (string
+# value)
+#nexenta_mount_point_base=$state_path/mnt
+
+# 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)
+#nexenta_sparsed_volumes=true
+
+# Default compression value for new ZFS folders. (string
+# value)
+#nexenta_volume_compression=on
+
+# Mount options passed to the nfs client. See section of the
+# nfs man page for details (string value)
+#nexenta_mount_options=<None>
+
+# Percent of ACTUAL usage of the underlying volume before no
+# new volumes can be allocated to the volume destination.
+# (floating point value)
+#nexenta_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)
+#nexenta_oversub_ratio=1.0
+
 # block size for volumes (blank=default,8KB) (string value)
 #nexenta_blocksize=
 
@@ -895,23 +1381,30 @@
 #
 
 # File with the list of available nfs shares (string value)
-#nfs_shares_config=<None>
-
-# Base dir where nfs expected to be mounted (string value)
-#nfs_mount_point_base=$state_path/mnt
-
-# Use du or df for free space calculation (string value)
-#nfs_disk_util=df
+#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
 
-# Mount options passed to the nfs client (string value)
-# The value set here is passed directly to the -o flag
-# of the mount command. See the nfs man page for details.
-#nfs_mount_options=None
+# Percent of ACTUAL usage of the underlying volume before no
+# new volumes can be allocated to the volume destination.
+# (floating point value)
+#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>
 
 
 #
@@ -922,10 +1415,17 @@
 # value)
 #rbd_pool=rbd
 
-# the RADOS client name for accessing rbd volumes (string
-# value)
+# the RADOS client name for accessing rbd volumes - only set
+# when using cephx authentication (string value)
 #rbd_user=<None>
 
+# path to the ceph configuration file to use (string value)
+#rbd_ceph_conf=
+
+# flatten volumes created from snapshots to remove dependency
+# (boolean value)
+#rbd_flatten_volume_from_snapshot=false
+
 # the libvirt uuid of the secret for the rbd_uservolumes
 # (string value)
 #rbd_secret_uuid=<None>
@@ -934,6 +1434,51 @@
 # does not write them directly to the volume (string value)
 #volume_tmp_dir=<None>
 
+# maximum number of nested clones that can be taken of a
+# volume before enforcing a flatten prior to next clone. A
+# value of zero disables cloning (integer value)
+#rbd_max_clone_depth=5
+
+
+#
+# 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=
+
+# This option is DEPRECATED and no longer used. The 3par
+# domain name to use. (string value)
+#hp3par_domain=<None>
+
+# The CPG to use for volume creation (string value)
+#hp3par_cpg=OpenStack
+
+# The CPG to use for Snapshots for volumes. If empty
+# hp3par_cpg 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=
+
 
 #
 # Options defined in cinder.volume.drivers.san.san
@@ -1000,6 +1545,14 @@
 
 
 #
+# Options defined in cinder.volume.drivers.solaris.zfs
+#
+
+# The base dataset for ZFS cinder volumes.
+#zfs_volume_base=rpool/cinder
+
+
+#
 # Options defined in cinder.volume.drivers.solidfire
 #
 
@@ -1009,6 +1562,13 @@
 # Allow tenants to specify QOS on create (boolean value)
 #sf_allow_tenant_qos=false
 
+# Create SolidFire accounts with this prefix (string value)
+#sf_account_prefix=cinder
+
+# 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.storwize_svc
@@ -1018,11 +1578,11 @@
 #storwize_svc_volpool_name=volpool
 
 # Storage system space-efficiency parameter for volumes
-# (string value)
-#storwize_svc_vol_rsize=2%
+# (percentage) (integer value)
+#storwize_svc_vol_rsize=2
 
 # Storage system threshold for volume capacity warnings
-# (string value)
+# (percentage) (integer value)
 #storwize_svc_vol_warning=0
 
 # Storage system autoexpand parameter for volumes (True/False)
@@ -1030,7 +1590,7 @@
 #storwize_svc_vol_autoexpand=true
 
 # Storage system grain size parameter for volumes
-# (32/64/128/256) (string value)
+# (32/64/128/256) (integer value)
 #storwize_svc_vol_grainsize=256
 
 # Storage system compression option for volumes (boolean
@@ -1040,14 +1600,75 @@
 # 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). (string
+# 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
+
 
 #
-# Options defined in cinder.volume.drivers.windows
+# 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 used for polling remote tasks invoked on VMware
+# ESX/VC server. (integer value)
+#vmware_task_poll_interval=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
+
+
+#
+# Options defined in cinder.volume.drivers.windows.windows
 #
 
 # Path to store VHD backed volumes (string value)
@@ -1073,13 +1694,21 @@
 # Password for XenAPI connection (string value)
 #xenapi_connection_password=<None>
 
+# Base path to the storage repository (string value)
+#xenapi_sr_base_path=/var/run/sr-mount
+
 
 #
-# Options defined in cinder.volume.drivers.xiv
+# Options defined in cinder.volume.drivers.xiv_ds8k
 #
 
-# Proxy driver (string value)
-#xiv_proxy=xiv_openstack.nova_proxy.XIVNovaProxy
+# Proxy driver that connects to the IBM Storage Array (string
+# value)
+#xiv_ds8k_proxy=xiv_ds8k_openstack.nova_proxy.XIVDS8KNovaProxy
+
+# Connection type to the IBM Storage Array
+# (fibre_channel|iscsi) (string value)
+#xiv_ds8k_connection_type=iscsi
 
 
 #
@@ -1104,11 +1733,11 @@
 # Name of VPSA storage pool for volumes (string value)
 #zadara_vpsa_poolname=<None>
 
-# Default cache policy for volumes (string value)
-#zadara_default_cache_policy=write-through
-
-# Default encryption policy for volumes (string value)
-#zadara_default_encryption=NO
+# Default thin provisioning policy for volumes (boolean value)
+#zadara_vol_thin=true
+
+# Default encryption policy for volumes (boolean value)
+#zadara_vol_encrypt=false
 
 # Default striping mode for volumes (string value)
 #zadara_default_striping_mode=simple
@@ -1129,21 +1758,77 @@
 
 
 #
-# Options defined in cinder.volume.iscsi
+# Options defined in cinder.volume.drivers.zfssa.zfssaiscsi
 #
 
-# iscsi target user-land tool to use (string value)
-#iscsi_helper=tgtadm
-
-# Volume configuration file storage directory (string value)
-#volumes_dir=$state_path/volumes
-
-# IET configuration file (string value)
-#iet_conf=/etc/iet/ietd.conf
-
-# Comma-separatd list of initiator IQNs allowed to connect to
-# the iSCSI target. (From Nova compute nodes.) (string value)
-#lio_initiator_iqns=
+# ZFSSA management hostname/IP
+#zfssa_host=<appliance ip>
+
+# ZFSSA management user login
+#zfssa_auth_user=<user>
+
+# ZFSSA management user password
+#zfssa_auth_password=<password>
+
+# ZFSSA pool name
+#zfssa_pool=<pool>
+
+# ZFSSA project name
+#zfssa_project=<project>
+
+# ZFSSA volume block size
+# Must be one of 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k.
+# This property is optional. If not provided, default is 8k.
+#zfssa_lun_volblocksize=
+
+# ZFSSA flag to create sparse (thin-provisioned) volume
+#zfssa_lun_sparse=False
+
+# ZFSSA flag to turn on compression on the volume
+# Must be one of off, lzjb, gzip-2, gzip, gzip-9.
+# This property is optional. If not provided, default is inherited
+# from the project.
+#zfssa_lun_compression=
+
+# ZFSSA flag to set write bias to latency or throughput
+# This property is optional. If not provided, default is inherited
+# from the project.
+#zfssa_lun_logbias=
+
+# ZFSSA iSCSI initiator group name
+#zfssa_initiator_group=
+
+# Cinder host initiator IQNs. Separate multiple entries with commas.
+#zfssa_initiator=
+
+# Cinder host initiator CHAP user.
+# This property is optional. Comment out the line if CHAP authentication is
+# not used.
+#zfssa_initiator_user=
+
+# Cinder host initiator CHAP password.
+# This property is optional. Comment out the line if CHAP authentication is
+# not used.
+#zfssa_initiator_password=
+
+# ZFSSA iSCSI target group name
+#zfssa_target_group=
+
+# ZFSSA iSCSI target CHAP user.
+# This property is optional. Comment out the line if CHAP authentication is
+# not used.
+#zfssa_target_user=
+
+# ZFSSA iSCSI target CHAP password.
+# This property is optional. Comment out the line if CHAP authentication is
+# not used.
+#zfssa_target_password=
+
+# ZFSSA iSCSI target portal (data-ip:port)
+#zfssa_target_portal=<data ip address>:3260
+
+# ZFSSA iSCSI target network interfaces (separate multiple entries with comma)
+#zfssa_target_interfaces=<device>
 
 
 #
@@ -1152,35 +1837,30 @@
 
 # Driver to use for volume creation (string value)
 # The local ZFS driver provides direct access to ZFS volumes that it
-# creates. The iSCSI ZFS driver provides the access to local ZFS volumes
-# using iSCSI over loopback and may be more suitable for future use of
-# features such as live migration of Nova instances.
+# creates. The other listed drivers provide access to ZFS volumes via
+# iSCSI or Fibre Channel 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
-
-
-#
-# Options defined in cinder.volume.drivers.solaris.zfs
-#
-
-# The base dataset for ZFS cinder volumes.
-#zfs_volume_base=rpool/cinder
+#volume_driver=cinder.volume.drivers.solaris.zfs.ZFSFCDriver
+#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
 
 
 #
-# Multi backend options
+# Options defined in cinder.volume.utils
 #
 
-# Define the names of the groups for multiple volume backends
-#enabled_backends=fakedriver,lvmdriver
-
-# Define the groups as above
-#[lvmdriver]
-#volume_group=lvm-group-1
-#volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
-#volume_backend_name=LVM_iSCSI_unique1
-#[fakedriver]
-#volume_driver=cinder.volume.driver.FakeISCSIDriver
-
-
-# Total option count: 256
+# The default block size used when copying/clearing volumes
+# (string value)
+#volume_dd_blocksize=1M
+
+
+# Total option count: 401
--- a/components/openstack/cinder/files/cinder.exec_attr	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder.exec_attr	Fri Jun 13 09:10:23 2014 -0700
@@ -1,9 +1,13 @@
 OpenStack Block Storage Management:solaris:cmd:RO::\
 /usr/bin/cinder-clear-rabbit-queues:uid=cinder;gid=cinder
 
-OpenStack Block Storage Management:solaris:cmd:RO::\
-/usr/bin/cinder-manage:uid=cinder;gid=cinder
+OpenStack Block Storage Management:solaris:cmd:RO::/usr/bin/cinder-manage:\
+uid=cinder;gid=cinder
+
+cinder-volume:solaris:cmd:RO::/usr/sbin/fcinfo:privs=file_dac_read,sys_devices
 
 cinder-volume:solaris:cmd:RO::/usr/sbin/itadm:uid=0
+
 cinder-volume:solaris:cmd:RO::/usr/sbin/stmfadm:euid=0
+
 cinder-volume:solaris:cmd:RO::/usr/sbin/zfs:privs=sys_config,sys_mount
--- a/components/openstack/cinder/files/cinder.prof_attr	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/cinder.prof_attr	Fri Jun 13 09:10:23 2014 -0700
@@ -6,7 +6,8 @@
 solaris.admin.edit/etc/cinder/logging.conf,\
 solaris.admin.edit/etc/cinder/policy.json,\
 solaris.smf.manage.cinder,\
-solaris.smf.value.cinder
+solaris.smf.value.cinder;\
+defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
 
 OpenStack Management:RO:::profiles=OpenStack Block Storage Management
 
--- a/components/openstack/cinder/files/solaris/zfs.py	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/files/solaris/zfs.py	Fri Jun 13 09:10:23 2014 -0700
@@ -25,14 +25,14 @@
 from oslo.config import cfg
 
 from cinder import exception
-from cinder import flags
 from cinder.image import image_utils
 from cinder.openstack.common import log as logging
+from cinder.openstack.common import processutils
 from cinder.volume import driver
 
 from solaris_install.target.size import Size
 
-FLAGS = flags.FLAGS
+FLAGS = cfg.CONF
 LOG = logging.getLogger(__name__)
 
 solaris_zfs_opts = [
@@ -73,7 +73,7 @@
                                    "from that of the snapshot, '%s'.")
                                  % (volume['name'], volume['size'],
                                     snapshot['volume_size']))
-            raise exception.VolumeBackendAPIException(data=exception_message)
+            raise exception.InvalidInput(reason=exception_message)
 
         # Create a ZFS clone
         zfs_snapshot = self._get_zfs_snap_name(snapshot)
@@ -172,18 +172,20 @@
                                         volume['id'])
         return {
             'driver_volume_type': 'local',
-            'volume_path': volume_path
+            'volume_path': volume_path,
+            'data': {}
         }
 
     def terminate_connection(self, volume, connector, **kwargs):
         """Disconnection from the connector."""
         pass
 
-    def attach_volume(self, context, volume_id, instance_uuid, mountpoint):
-        """ Callback for volume attached to instance."""
+    def attach_volume(self, context, volume, instance_uuid, host_name,
+                      mountpoint):
+        """Callback for volume attached to instance or host."""
         pass
 
-    def detach_volume(self, context, volume_id):
+    def detach_volume(self, context, volume):
         """ Callback for volume detached."""
         pass
 
@@ -251,6 +253,17 @@
 
         self._stats = stats
 
+    def extend_volume(self, volume, new_size):
+        """Extend an existing volume's size."""
+        volsize_str = 'volsize=%sg' % new_size
+        zfs_volume = self._get_zfs_volume_name(volume)
+        try:
+            self._execute('/usr/sbin/zfs', 'set', volsize_str, zfs_volume)
+        except Exception:
+            msg = (_("Failed to extend volume size to %(new_size)s GB.")
+                   % {'new_size': new_size})
+            raise exception.VolumeBackendAPIException(data=msg)
+
 
 class STMFDriver(ZFSVolumeDriver):
     """Abstract base class for common COMSTAR operations."""
@@ -327,11 +340,11 @@
     def _get_view_and_lun(self, lu):
         """Check the view entry of the LU and then get the lun and view."""
         view_and_lun = {}
-        view_and_lun['valid_value'] = False
+        view_and_lun['view'] = view_and_lun['lun'] = None
         try:
             (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-view',
-                                        '-l', lu)
-        except exception.ProcessExecutionError as error:
+                                        '-l', lu, '-v')
+        except processutils.ProcessExecutionError as error:
             if 'no views found' in error.stderr:
                 LOG.debug(_("No view is found for LU '%s'") % lu)
                 return view_and_lun
@@ -341,15 +354,19 @@
         for line in [l.strip() for l in out.splitlines()]:
             if line.startswith("View Entry:"):
                 view_and_lun['view'] = line.split()[-1]
-                view_and_lun['valid_value'] = True
-            if line.startswith("LUN"):
-                view_and_lun['lun'] = line.split()[-1]
+            if line.startswith("LUN") and 'Auto' not in line.split()[-1]:
+                view_and_lun['lun'] = int(line.split()[-1])
+                break
+            if line.startswith("Lun"):
+                view_and_lun['lun'] = int(line.split()[2])
 
-        if view_and_lun['lun'] == 'Auto':
-            view_and_lun['lun'] = 0
-
-        LOG.debug(_("The view_entry and LUN of LU '%s' are '%s' and '%s'.")
-                  % (lu, view_and_lun['view'], view_and_lun['lun']))
+        if view_and_lun['view'] is None or view_and_lun['lun'] is None:
+            LOG.error(_("Failed to get the view_entry or LUN of the LU '%s'.")
+                      % lu)
+            raise
+        else:
+            LOG.debug(_("The view_entry and LUN of LU '%s' are '%s' and '%d'.")
+                      % (lu, view_and_lun['view'], view_and_lun['lun']))
 
         return view_and_lun
 
@@ -385,9 +402,9 @@
         self._execute('/usr/sbin/itadm', 'create-target', '-n', target_name)
         assert self._check_target(target_name, 'iSCSI')
 
-        # Add a logical unit view entry
+        # Add a view entry to the logical unit with the specified LUN, 8776
         if luid is not None:
-            self._execute('/usr/sbin/stmfadm', 'add-view', '-t',
+            self._execute('/usr/sbin/stmfadm', 'add-view', '-n', 8776, '-t',
                           target_group, luid)
 
     def remove_export(self, context, volume):
@@ -404,7 +421,7 @@
         # Remove the view entry
         if luid is not None:
             view_lun = self._get_view_and_lun(luid)
-            if view_lun['valid_value']:
+            if view_lun['view']:
                 self._execute('/usr/sbin/stmfadm', 'remove-view', '-l',
                               luid, view_lun['view'])
 
@@ -452,9 +469,9 @@
         properties['target_iqn'] = target_name
         properties['target_portal'] = ('%s:%d' %
                                        (self.configuration.iscsi_ip_address,
-                                       self.configuration.iscsi_port))
+                                        self.configuration.iscsi_port))
         view_lun = self._get_view_and_lun(luid)
-        if view_lun['valid_value']:
+        if view_lun['lun']:
             properties['target_lun'] = view_lun['lun']
         properties['volume_id'] = volume['id']
 
@@ -508,3 +525,210 @@
                     'for volume %(volume_name)s')
                   % {'initiator_name': initiator_name,
                      'volume_name': volume_name})
+
+
+class ZFSFCDriver(STMFDriver, driver.FibreChannelDriver):
+    """ZFS volume operations in FC mode."""
+    protocol = 'FC'
+
+    def __init__(self, *args, **kwargs):
+        super(ZFSFCDriver, self).__init__(*args, **kwargs)
+
+    def check_for_setup_error(self):
+        """Check the setup error."""
+        wwns = self._get_wwns()
+        if not wwns:
+            msg = (_("Could not determine fibre channel world wide "
+                     "node names."))
+            raise exception.VolumeBackendAPIException(data=msg)
+
+    def _get_wwns(self):
+        """Get the FC port WWNs of the host."""
+        (out, _err) = self._execute('/usr/sbin/fcinfo', 'hba-port', '-t')
+
+        wwns = []
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("HBA Port WWN:"):
+                wwn = line.split()[-1]
+                LOG.debug(_("Got the FC port WWN '%s'") % wwn)
+                wwns.append(wwn)
+
+        return wwns
+
+    def _check_wwn_tg(self, wwn):
+        """Check if the target group 'tg-wwn-xxx' exists."""
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg')
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Target Group:") and wwn in line:
+                tg = line.split()[-1]
+                break
+        else:
+            LOG.debug(_("The target group 'tg-wwn-%s' doesn't exist.") % wwn)
+            tg = None
+
+        return tg
+
+    def _only_lu(self, lu):
+        """Check if the LU is the only one."""
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-lu', '-v')
+        linecount = 0
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("LU Name:"):
+                luid = line.split()[-1]
+                linecount += 1
+
+        if linecount == 1 and luid == lu:
+            LOG.debug(_("The LU '%s' is the only one.") % lu)
+            return True
+        else:
+            return False
+
+    def _target_in_tg(self, wwn, tg):
+        """Check if the target has been added into a target group."""
+        target = 'wwn.%s' % wwn.upper()
+
+        if tg is not None:
+            (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg',
+                                        '-v', tg)
+        else:
+            (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg', '-v')
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Member:") and target in line:
+                return True
+        LOG.debug(_("The target '%s' is not in any target group.") % target)
+        return False
+
+    def create_export(self, context, volume):
+        """Export the volume."""
+        zvol = self._get_zvol_path(volume)
+
+        # Create a Logical Unit (LU)
+        self._execute('/usr/sbin/stmfadm', 'create-lu', zvol)
+        luid = self._get_luid(volume)
+        if not luid:
+            msg = (_("Failed to create logic unit for volume '%s'")
+                   % volume['name'])
+            raise exception.VolumeBackendAPIException(data=msg)
+
+        wwns = self._get_wwns()
+        wwn = wwns[0]
+        target_group = self._check_wwn_tg(wwn)
+        if target_group is None:
+            target_group = 'tg-wwn-%s' % wwn
+            if self._target_in_tg(wwn, None):
+                msg = (_("Target WWN '%s' has been found in another"
+                         "target group, so it will not be added "
+                         "into the expected target group '%s'.") %
+                       (wwn, target_group))
+                raise exception.VolumeBackendAPIException(data=msg)
+
+            # Create a target group for the wwn
+            self._execute('/usr/sbin/stmfadm', 'create-tg', target_group)
+
+            # Enable the target and add it to the 'tg-wwn-xxx' group
+            self._execute('/usr/sbin/stmfadm', 'offline-target',
+                          'wwn.%s' % wwn)
+            self._execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
+                          target_group, 'wwn.%s' % wwn)
+            self._execute('/usr/sbin/stmfadm', 'online-target', 'wwn.%s' % wwn)
+        assert self._target_in_tg(wwn, target_group)
+
+        # Add a logical unit view entry
+        # TODO(Strony): replace the auto assigned LUN with '-n' option
+        if luid is not None:
+            self._execute('/usr/sbin/stmfadm', 'add-view', '-t',
+                          target_group, luid)
+
+    def remove_export(self, context, volume):
+        """Remove an export for a volume."""
+        luid = self._get_luid(volume)
+
+        if luid is not None:
+            wwns = self._get_wwns()
+            wwn = wwns[0]
+            target_wwn = 'wwn.%s' % wwn
+            target_group = 'tg-wwn-%s' % wwn
+            view_lun = self._get_view_and_lun(luid)
+            if view_lun['view']:
+                self._execute('/usr/sbin/stmfadm', 'remove-view', '-l',
+                              luid, view_lun['view'])
+
+            # Remove the target group when only one LU exists.
+            if self._only_lu(luid):
+                if self._check_target(target_wwn, 'Channel'):
+                    self._execute('/usr/sbin/stmfadm', 'offline-target',
+                                  target_wwn)
+                if self._check_tg(target_group):
+                    self._execute('/usr/sbin/stmfadm', 'delete-tg',
+                                  target_group)
+
+            # Remove the LU
+            self._execute('/usr/sbin/stmfadm', 'delete-lu', luid)
+
+    def _get_fc_properties(self, volume):
+        """Get Fibre Channel configuration.
+
+        :target_discovered:    boolean indicating whether discovery was used
+        :target_wwn:           the world wide name of the FC port target
+        :target_lun:           the lun assigned to the LU for the view entry
+
+        """
+        wwns = self._get_wwns()
+        if not wwns:
+            msg = (_("Could not determine fibre channel world wide "
+                     "node names."))
+            raise exception.VolumeBackendAPIException(data=msg)
+
+        luid = self._get_luid(volume)
+        if not luid:
+            msg = (_("Failed to get logic unit for volume '%s'")
+                   % volume['name'])
+            raise exception.VolumeBackendAPIException(data=msg)
+
+        properties = {}
+
+        properties['target_discovered'] = True
+        properties['target_wwn'] = wwns
+        view_lun = self._get_view_and_lun(luid)
+        if view_lun['lun']:
+            properties['target_lun'] = view_lun['lun']
+        return properties
+
+    def initialize_connection(self, volume, connector):
+        """Initializes the connection and returns connection info.
+
+        The  driver returns a driver_volume_type of 'fibre_channel'.
+        The target_wwn can be a single entry or a list of wwns that
+        correspond to the list of remote wwn(s) that will export the volume.
+        Example return values:
+
+            {
+                'driver_volume_type': 'fibre_channel'
+                'data': {
+                    'target_discovered': True,
+                    'target_lun': 1,
+                    'target_wwn': '1234567890123',
+                }
+            }
+
+            or
+
+             {
+                'driver_volume_type': 'fibre_channel'
+                'data': {
+                    'target_discovered': True,
+                    'target_lun': 1,
+                    'target_wwn': ['1234567890123', '0987654321321'],
+                }
+            }
+
+        """
+        fc_properties = self._get_fc_properties(volume)
+
+        return {
+            'driver_volume_type': 'fibre_channel',
+            'data': fc_properties
+        }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/zfssa/__init__.py	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,15 @@
+# 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.
+
+# Empty for this release
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/zfssa/cinder.akwf	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ */
+
+var workflow = {
+	name: 'Configuration for OpenStack Cinder Driver',
+	origin: 'Oracle Corporation',
+	description: 'Setup environment for OpenStack Cinder Driver',
+	version: '1.0.0',
+	parameters: {
+		name: {
+			label: 'Cinder\'s User\'s Name',
+			type: 'String'
+		},
+		password: {
+			label: 'Password',
+			type: 'Password'
+		}
+	},
+	execute: function (params) {
+		/*
+		 * Check for REST service to be enabled
+		 */
+		try {
+		    run('configuration services rest');
+		    if (get('<status>') != 'online')
+			run('enable');
+		} catch (err) {
+		    return ('The REST API is not available on this version of \
+			    appliance software and is required to run with the \
+			    ZFSSA cinder driver.  Please upgrade the appliance \
+			    software.');
+		}
+
+		/*
+		 * Cinder role
+		 */
+		var osrole = 'OpenStackRole';
+		run('cd /');
+		run('configuration roles');
+		try {
+		    run('select ' + osrole);
+		} catch(err) {
+		    run('role ' + osrole);
+		    run('set description="OpenStack Cinder Driver"');
+		    run('commit');
+		    run('select ' + osrole);
+		}
+		run('authorizations');
+		run('create');
+		run('set scope=stmf');
+		run('set allow_configure=true');
+		run('commit');
+		run('create');
+		run('set scope=nas');
+		run('set allow_clone=true');
+		run('set allow_createProject=true');
+		run('set allow_createShare=true');
+		run('set allow_changeSpaceProps=true');
+		run('set allow_changeGeneralProps=true');
+		run('set allow_destroy=true');
+		run('set allow_rollback=true');
+		run('set allow_takeSnap=true');
+		run('commit');
+
+		/*
+		 * Set user with Cinder role
+		 */
+		 var msg = 'User ' + params.name;
+		 run('cd /')
+		 run('configuration users');
+		 try {
+		    run('select ' + params.name);
+		    msg += ' updated.';
+		 } catch (err) {
+		    run('user ' + params.name);
+		    run('set initial_password=' + params.password);
+		    run('set fullname="OpenStack Cinder Driver"');
+		    run('commit');
+		    run('select ' + params.name);
+		    msg += ' created.';
+		}
+		run('set roles=' + osrole);
+		run('commit');
+		return (msg);
+	}
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/zfssa/restclient.py	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,353 @@
+# 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 REST API Client Programmatic Interface
+"""
+
+import httplib
+import json
+import time
+import urllib2
+import StringIO
+
+from cinder.openstack.common import log
+
+LOG = log.getLogger(__name__)
+
+
+class Status:
+    """Result HTTP Status"""
+
+    def __init__(self):
+        pass
+
+    #: Request return OK
+    OK = httplib.OK
+
+    #: New resource created successfully
+    CREATED = httplib.CREATED
+
+    #: Command accepted
+    ACCEPTED = httplib.ACCEPTED
+
+    #: Command returned OK but no data will be returned
+    NO_CONTENT = httplib.NO_CONTENT
+
+    #: Bad Request
+    BAD_REQUEST = httplib.BAD_REQUEST
+
+    #: User is not authorized
+    UNAUTHORIZED = httplib.UNAUTHORIZED
+
+    #: The request is not allowed
+    FORBIDDEN = httplib.FORBIDDEN
+
+    #: The requested resource was not found
+    NOT_FOUND = httplib.NOT_FOUND
+
+    #: The request is not allowed
+    NOT_ALLOWED = httplib.METHOD_NOT_ALLOWED
+
+    #: Request timed out
+    TIMEOUT = httplib.REQUEST_TIMEOUT
+
+    #: Invalid request
+    CONFLICT = httplib.CONFLICT
+
+    #: Service Unavailable
+    BUSY = httplib.SERVICE_UNAVAILABLE
+
+
+class RestResult(object):
+    """Result from a REST API operation"""
+    def __init__(self, response=None, err=None):
+        """Initialize a RestResult containing the results from a REST call
+        :param response: HTTP response
+        """
+        self.response = response
+        self.error = err
+        self.data = ""
+        self.status = 0
+        if self.response is not None:
+            self.status = self.response.getcode()
+            result = self.response.read()
+            while result:
+                self.data += result
+                result = self.response.read()
+
+        if self.error is not None:
+            self.status = self.error.code
+            self.data = httplib.responses[self.status]
+
+        LOG.debug('response code: %s' % self.status)
+        LOG.debug('response data: %s' % self.data)
+
+    def get_header(self, name):
+        """Get an HTTP header with the given name from the results
+
+        :param name: HTTP header name
+        :return: The header value or None if no value is found
+        """
+        if self.response is None:
+            return None
+        info = self.response.info()
+        return info.getheader(name)
+
+
+class RestClientError(Exception):
+    """Exception for ZFS REST API client errors"""
+    def __init__(self, status, name="ERR_INTERNAL", message=None):
+
+        """Create a REST Response exception
+
+        :param status: HTTP response status
+        :param name: The name of the REST API error type
+        :param message: Descriptive error message returned from REST call
+        """
+        Exception.__init__(self, message)
+        self.code = status
+        self.name = name
+        self.msg = message
+        if status in httplib.responses:
+            self.msg = httplib.responses[status]
+
+    def __str__(self):
+        return "%d %s %s" % (self.code, self.name, self.msg)
+
+
+class RestClientURL(object):
+    """ZFSSA urllib2 client"""
+    def __init__(self, url, **kwargs):
+        """
+        Initialize a REST client.
+
+        :param url: The ZFSSA REST API URL
+        :key session: HTTP Cookie value of x-auth-session obtained from a
+                      normal BUI login.
+        :key timeout: Time in seconds to wait for command to complete.
+                      (Default is 60 seconds)
+        """
+        self.url = url
+        self.local = kwargs.get("local", False)
+        self.base_path = kwargs.get("base_path", "/api")
+        self.timeout = kwargs.get("timeout", 60)
+        self.headers = None
+        if kwargs.get('session'):
+            self.headers['x-auth-session'] = kwargs.get('session')
+
+        self.headers = {"content-type": "application/json"}
+        self.do_logout = False
+        self.auth_str = None
+
+    def _path(self, path, base_path=None):
+        """build rest url path"""
+        if path.startswith("http://") or path.startswith("https://"):
+            return path
+        if base_path is None:
+            base_path = self.base_path
+        if not path.startswith(base_path) and not (
+                self.local and ("/api" + path).startswith(base_path)):
+            path = "%s%s" % (base_path, path)
+        if self.local and path.startswith("/api"):
+            path = path[4:]
+        return self.url + path
+
+    def authorize(self):
+        """Performs authorization setting x-auth-session"""
+        self.headers['authorization'] = 'Basic %s' % self.auth_str
+        if 'x-auth-session' in self.headers:
+            del self.headers['x-auth-session']
+
+        try:
+            result = self.post("/access/v1")
+            del self.headers['authorization']
+            if result.status == httplib.CREATED:
+                self.headers['x-auth-session'] = \
+                    result.get_header('x-auth-session')
+                self.do_logout = True
+                LOG.info('ZFSSA version: %s' %
+                         result.get_header('x-zfssa-version'))
+
+            elif result.status == httplib.NOT_FOUND:
+                raise RestClientError(result.status, name="ERR_RESTError",
+                                      message="REST Not Available: \
+                                      Please Upgrade")
+
+        except RestClientError as err:
+            del self.headers['authorization']
+            raise err
+
+    def login(self, auth_str):
+        """
+        Login to an appliance using a user name and password and start
+        a session like what is done logging into the BUI.  This is not a
+        requirement to run REST commands, since the protocol is stateless.
+        What is does is set up a cookie session so that some server side
+        caching can be done.  If login is used remember to call logout when
+        finished.
+
+        :param auth_str: Authorization string (base64)
+        """
+        self.auth_str = auth_str
+        self.authorize()
+
+    def logout(self):
+        """Logout of an appliance"""
+        result = None
+        try:
+            result = self.delete("/access/v1", base_path="/api")
+        except RestClientError:
+            pass
+
+        self.headers.clear()
+        self.do_logout = False
+        return result
+
+    def islogin(self):
+        """return if client is login"""
+        return self.do_logout
+
+    @staticmethod
+    def mkpath(*args, **kwargs):
+        """Make a path?query string for making a REST request
+
+        :cmd_params args: The path part
+        :cmd_params kwargs: The query part
+        """
+        buf = StringIO()
+        query = "?"
+        for arg in args:
+            buf.write("/")
+            buf.write(arg)
+        for k in kwargs:
+            buf.write(query)
+            if query == "?":
+                query = "&"
+            buf.write(k)
+            buf.write("=")
+            buf.write(kwargs[k])
+        return buf.getvalue()
+
+    def request(self, path, request, body=None, **kwargs):
+        """Make an HTTP request and return the results
+
+        :param path: Path used with the initiazed URL to make a request
+        :param request: HTTP request type (GET, POST, PUT, DELETE)
+        :param body: HTTP body of request
+        :key accept: Set HTTP 'Accept' header with this value
+        :key base_path: Override the base_path for this request
+        :key content: Set HTTP 'Content-Type' header with this value
+        """
+        out_hdrs = dict.copy(self.headers)
+        if kwargs.get("accept"):
+            out_hdrs['accept'] = kwargs.get("accept")
+
+        if body is not None:
+            if isinstance(body, dict):
+                body = str(json.dumps(body))
+
+        if body and len(body):
+            out_hdrs['content-length'] = len(body)
+
+        zfssaurl = self._path(path, kwargs.get("base_path"))
+        req = urllib2.Request(zfssaurl, body, out_hdrs)
+        req.get_method = lambda: request
+        maxreqretries = kwargs.get("maxreqretries", 10)
+        retry = 0
+        response = None
+
+        LOG.debug('request: %s %s' % (request, zfssaurl))
+        LOG.debug('out headers: %s' % out_hdrs)
+        if body is not None and body != '':
+            LOG.debug('body: %s' % body)
+
+        while retry < maxreqretries:
+            try:
+                response = urllib2.urlopen(req, timeout=self.timeout)
+            except urllib2.HTTPError as err:
+                LOG.error('REST Not Available: %s' % err.code)
+                if err.code == httplib.SERVICE_UNAVAILABLE and \
+                   retry < maxreqretries:
+                    retry += 1
+                    time.sleep(1)
+                    LOG.error('Server Busy retry request: %s' % retry)
+                    continue
+                if (err.code == httplib.UNAUTHORIZED or
+                    err.code == httplib.INTERNAL_SERVER_ERROR) and \
+                   '/access/v1' not in zfssaurl:
+                    try:
+                        LOG.error('Authorizing request retry: %s, %s' %
+                                  (zfssaurl, retry))
+                        self.authorize()
+                        req.add_header('x-auth-session',
+                                       self.headers['x-auth-session'])
+                    except RestClientError:
+                        pass
+                    retry += 1
+                    time.sleep(1)
+                    continue
+
+                return RestResult(err=err)
+
+            except urllib2.URLError as err:
+                LOG.error('URLError: %s' % err.reason)
+                raise RestClientError(-1, name="ERR_URLError",
+                                      message=err.reason)
+
+            break
+
+        if response and response.getcode() == httplib.SERVICE_UNAVAILABLE and \
+           retry >= maxreqretries:
+            raise RestClientError(response.getcode(), name="ERR_HTTPError",
+                                  message="REST Not Available: Disabled")
+
+        return RestResult(response=response)
+
+    def get(self, path, **kwargs):
+        """
+        Make an HTTP GET request
+
+        :param path: Path to resource.
+        """
+        return self.request(path, "GET", **kwargs)
+
+    def post(self, path, body="", **kwargs):
+        """Make an HTTP POST request
+
+        :param path: Path to resource.
+        :param body: Post data content
+        """
+        return self.request(path, "POST", body, **kwargs)
+
+    def put(self, path, body="", **kwargs):
+        """Make an HTTP PUT request
+
+        :param path: Path to resource.
+        :param body: Put data content
+        """
+        return self.request(path, "PUT", body, **kwargs)
+
+    def delete(self, path, **kwargs):
+        """Make an HTTP DELETE request
+
+        :param path: Path to resource that will be deleted.
+        """
+        return self.request(path, "DELETE", **kwargs)
+
+    def head(self, path, **kwargs):
+        """Make an HTTP HEAD request
+
+        :param path: Path to resource.
+        """
+        return self.request(path, "HEAD", **kwargs)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/zfssa/zfssaiscsi.py	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,389 @@
+# 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 base64
+
+from cinder import exception
+from cinder.openstack.common import log
+from cinder.volume import driver
+from oslo.config import cfg
+
+from cinder.volume.drivers.zfssa import zfssarest
+
+
+CONF = cfg.CONF
+LOG = log.getLogger(__name__)
+
+ZFSSA_OPTS = [
+    cfg.StrOpt('zfssa_host', required=True,
+               help='ZFSSA management IP address'),
+    cfg.StrOpt('zfssa_auth_user', required=True, secret=True,
+               help='ZFSSA management authorized user\'s name'),
+    cfg.StrOpt('zfssa_auth_password', required=True, secret=True,
+               help='ZFSSA management authorized user\'s password'),
+    cfg.StrOpt('zfssa_pool', required=True,
+               help='ZFSSA storage pool name'),
+    cfg.StrOpt('zfssa_project', required=True,
+               help='ZFSSA project name'),
+    cfg.StrOpt('zfssa_lun_volblocksize', default='8k',
+               help='Block size: 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k'),
+    cfg.BoolOpt('zfssa_lun_sparse', default=False,
+                help='Flag to enable sparse (thin-provisioned): True, False'),
+    cfg.StrOpt('zfssa_lun_compression', default='',
+               help='Data compression-off, lzjb, gzip-2, gzip, gzip-9'),
+    cfg.StrOpt('zfssa_lun_logbias', default='',
+               help='Synchronous write bias-latency, throughput'),
+    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'),
+    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'),
+    cfg.StrOpt('zfssa_target_portal', required=True,
+               help='iSCSI target portal (Data-IP:Port, w.x.y.z:3260)'),
+    cfg.StrOpt('zfssa_target_interfaces', required=True,
+               help='Network interfaces of iSCSI targets (comma separated)')
+]
+
+CONF.register_opts(ZFSSA_OPTS)
+
+SIZE_GB = 1073741824
+
+
+#pylint: disable=R0904
+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.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 project, initiators, initiatorgroup, target,
+                   targetgroup
+        """
+        self.configuration._check_required_opts()
+        lcfg = self.configuration
+
+        LOG.info('Connecting to host: %s' % lcfg.zfssa_host)
+        self.zfssa = zfssarest.ZFSSAApi(lcfg.zfssa_host)
+        auth_str = base64.encodestring('%s:%s' %
+                                       (lcfg.zfssa_auth_user,
+                                        lcfg.zfssa_auth_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 != '' and
+            (lcfg.zfssa_initiator_group == '' or
+             lcfg.zfssa_initiator_group == 'default')):
+            LOG.warning('zfssa_initiator= %s wont be used on \
+                        zfssa_initiator_group= %s' %
+                        (lcfg.zfssa_initiator,
+                         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 and pool, project, initiators,
+           initiatorgroup, target, targetgroup exist
+        """
+        lcfg = self.configuration
+
+        self.zfssa.verify_pool(lcfg.zfssa_pool)
+        self.zfssa.verify_project(lcfg.zfssa_pool, lcfg.zfssa_project)
+
+        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('_export_volume: 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'
+        self.zfssa.create_lun(lcfg.zfssa_pool,
+                              lcfg.zfssa_project,
+                              volume['name'],
+                              volsize,
+                              targetgroup=lcfg.zfssa_target_group,
+                              volblocksize=lcfg.zfssa_lun_volblocksize,
+                              sparse=lcfg.zfssa_lun_sparse,
+                              compression=lcfg.zfssa_lun_compression,
+                              logbias=lcfg.zfssa_lun_logbias)
+
+        return self._get_provider_info(volume)
+
+    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's temp snapshot. see create_cloned_volume()"""
+        """clone is deleted as part of the snapshot delete."""
+        tmpsnap = 'tmp-snapshot-%s' % volume['id']
+        if 'origin' in lun2del and 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('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'] * SIZE_GB):
+            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 = {}
+        data["volume_backend_name"] = self.__class__.__name__
+        data["vendor_name"] = 'Oracle'
+        data["driver_version"] = self.VERSION
+        data["storage_protocol"] = self.protocol
+
+        lcfg = self.configuration
+        (avail, used) = self.zfssa.get_pool_stats(lcfg.zfssa_pool)
+        if avail is None or used is None:
+            return
+        total = int(avail) + int(used)
+
+        if lcfg.zfssa_lun_sparse:
+            data['total_capacity_gb'] = 'infinite'
+        else:
+            data['total_capacity_gb'] = total / SIZE_GB
+        data['free_capacity_gb'] = int(avail) / SIZE_GB
+        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 _export_volume(self, volume):
+        """Export the volume - set the initiatorgroup property."""
+        LOG.debug('_export_volume: volume name: %s' % volume['name'])
+        lcfg = self.configuration
+
+        self.zfssa.set_lun_initiatorgroup(lcfg.zfssa_pool,
+                                          lcfg.zfssa_project,
+                                          volume['name'],
+                                          lcfg.zfssa_initiator_group)
+        return self._get_provider_info(volume)
+
+    def create_export(self, context, volume):
+        """Driver entry point to get the  export info for a new volume."""
+        LOG.debug('create_export: volume name: %s' % volume['name'])
+        return self._export_volume(volume)
+
+    def remove_export(self, context, volume):
+        """Driver entry point to remove an export for a volume."""
+        LOG.debug('remove_export: volume name: %s' % volume['name'])
+        lcfg = self.configuration
+        self.zfssa.set_lun_initiatorgroup(lcfg.zfssa_pool,
+                                          lcfg.zfssa_project,
+                                          volume['name'],
+                                          '')
+
+    def ensure_export(self, context, volume):
+        """Driver entry point to get the export info for an existing volume."""
+        LOG.debug('ensure_export: volume name: %s' % volume['name'])
+        return self._export_volume(volume)
+
+    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_size(lcfg.zfssa_pool,
+                                lcfg.zfssa_project,
+                                volume['name'],
+                                new_size * SIZE_GB)
+
+    def _get_iscsi_properties(self, volume):
+        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())
+
+        return {'target_discovered': True,
+                'target_iqn': iqn,
+                'target_portal': lcfg.zfssa_target_portal,
+                'volume_id': lun['number'],
+                'access_mode': 'rw'}
+
+    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("Clone Volume '%s' failed from source volume '%s'"
+                      % (volume['name'], 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)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/zfssa/zfssarest.py	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,614 @@
+# 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 Proxy
+"""
+import json
+import socket
+
+from cinder import exception
+from cinder.openstack.common import log
+
+from cinder.volume.drivers.zfssa import restclient
+
+LOG = log.getLogger(__name__)
+
+
+#pylint: disable=R0913
+#pylint: disable=R0904
+class ZFSSAApi(object):
+    """ZFSSA API proxy class"""
+    def __init__(self, host):
+        self.host = host
+        self.url = "https://" + self.host + ":215"
+        self.rclient = restclient.RestClientURL(self.url)
+
+    def __del__(self):
+        if self.rclient and self.rclient.islogin():
+            self.rclient.logout()
+
+    def _is_pool_owned(self, pdata):
+        """returns True if the pool's owner is the
+           same as the host.
+        """
+        svc = '/api/system/v1/version'
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error getting version: '
+                               'svc: %(svc)s.'
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'svc': svc,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+        vdata = json.loads(ret.data)
+        return vdata['version']['asn'] == pdata['pool']['asn'] and \
+            vdata['version']['nodename'] == pdata['pool']['owner']
+
+    def login(self, auth_str):
+        """Login to the appliance"""
+        if self.rclient:
+            self.rclient.login(auth_str)
+
+    def get_pool_stats(self, pool):
+        """Get space_available and used properties of a pool
+           returns (avail, used)
+        """
+        svc = '/api/storage/v1/pools/' + pool
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Getting Pool Stats: '
+                               'Pool: %(pool)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'pool': pool,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.InvalidVolume(reason=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.InstanceNotFound(instance_id=pool)
+
+        avail = val['pool']['usage']['available']
+        used = val['pool']['usage']['used']
+
+        return (avail, used)
+
+    def create_project(self, pool, project, compression=None, logbias=None):
+        """Create a project on a pool
+           Check first whether the pool exists.
+        """
+        self.verify_pool(pool)
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + project
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svc = '/api/storage/v1/pools/' + pool + '/projects'
+            arg = {
+                'name': project
+            }
+            if compression and compression != '':
+                arg.update({'compression': compression})
+            if logbias and logbias != '':
+                arg.update({'logbias': logbias})
+
+            ret = self.rclient.post(svc, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Creating Project: '
+                                   '%(project)s on '
+                                   'Pool: %(pool)s '
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'project': project,
+                                    'pool': pool,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def create_initiator(self, initiator, alias, chapuser=None,
+                         chapsecret=None):
+        """Create an iSCSI initiator"""
+
+        svc = '/api/san/v1/iscsi/initiators/alias=' + alias
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svc = '/api/san/v1/iscsi/initiators'
+            arg = {
+                'initiator': initiator,
+                'alias': alias
+            }
+            if chapuser and chapuser != '' and chapsecret and chapsecret != '':
+                arg.update({'chapuser': chapuser,
+                            'chapsecret': chapsecret})
+
+            ret = self.rclient.post(svc, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Creating Initator: '
+                                   '%(initiator)s on '
+                                   'Alias: %(alias)s '
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'initiator': initiator,
+                                    'alias': alias,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def add_to_initiatorgroup(self, initiator, initiatorgroup):
+        """Add an iSCSI initiator to initiatorgroup"""
+        svc = '/api/san/v1/iscsi/initiator-groups/' + initiatorgroup
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svc = '/api/san/v1/iscsi/initiator-groups'
+            arg = {
+                'name': initiatorgroup,
+                'initiators': [initiator]
+            }
+            ret = self.rclient.post(svc, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Adding Initator: '
+                                   '%(initiator)s on group'
+                                   'InitiatorGroup: %(initiatorgroup)s '
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'initiator': initiator,
+                                    'initiatorgroup': initiatorgroup,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+        else:
+            svc = '/api/san/v1/iscsi/initiator-groups/' + initiatorgroup
+            arg = {
+                'initiators': [initiator]
+            }
+            ret = self.rclient.put(svc, arg)
+            if ret.status != restclient.Status.ACCEPTED:
+                exception_msg = (_('Error Adding Initator: '
+                                   '%(initiator)s on group'
+                                   'InitiatorGroup: %(initiatorgroup)s '
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'initiator': initiator,
+                                    'initiatorgroup': initiatorgroup,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def create_target(self, alias, interfaces=None, tchapuser=None,
+                      tchapsecret=None):
+        """Create an iSCSI target
+           interfaces: an array with network interfaces
+           tchapuser, tchapsecret: target's chapuser and chapsecret
+           returns target iqn
+        """
+        svc = '/api/san/v1/iscsi/targets/alias=' + alias
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svc = '/api/san/v1/iscsi/targets'
+            arg = {
+                'alias': alias
+            }
+
+            if tchapuser and tchapuser != '' and tchapsecret and \
+               tchapsecret != '':
+                arg.update({'targetchapuser': tchapuser,
+                            'targetchapsecret': tchapsecret,
+                            'auth': 'chap'})
+
+            if interfaces is not None and len(interfaces) > 0:
+                arg.update({'interfaces': interfaces})
+
+            ret = self.rclient.post(svc, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Creating Target: '
+                                   '%(alias)s'
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'alias': alias,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+        val = json.loads(ret.data)
+        return val['target']['iqn']
+
+    def get_target(self, alias):
+        """Get an iSCSI target iqn"""
+        svc = '/api/san/v1/iscsi/targets/alias=' + alias
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Getting Target: '
+                               '%(alias)s'
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s .')
+                             % {'alias': alias,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+        val = json.loads(ret.data)
+        return val['target']['iqn']
+
+    def add_to_targetgroup(self, iqn, targetgroup):
+        """Add an iSCSI target to targetgroup"""
+        svc = '/api/san/v1/iscsi/target-groups/' + targetgroup
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svccrt = '/api/san/v1/iscsi/target-groups'
+            arg = {
+                'name': targetgroup,
+                'targets': [iqn]
+            }
+
+            ret = self.rclient.post(svccrt, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Creating TargetGroup: '
+                                   '%(targetgroup)s with'
+                                   'IQN: %(iqn)s'
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s .')
+                                 % {'targetgroup': targetgroup,
+                                    'iqn': iqn,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+            return
+
+        arg = {
+            'targets': [iqn]
+        }
+
+        ret = self.rclient.put(svc, arg)
+        if ret.status != restclient.Status.ACCEPTED:
+            exception_msg = (_('Error Adding to TargetGroup: '
+                               '%(targetgroup)s with'
+                               'IQN: %(iqn)s'
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'targetgroup': targetgroup,
+                                'iqn': iqn,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def verify_pool(self, pool):
+        """Checks whether pool exists"""
+        svc = '/api/storage/v1/pools/' + pool
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Verifying Pool: '
+                               '%(pool)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'pool': pool,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def verify_project(self, pool, project):
+        """Checks whether project exists"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + project
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Verifying '
+                               'Project: %(project)s on '
+                               'Pool: %(pool)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'project': project,
+                                'pool': pool,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def verify_initiator(self, iqn):
+        """Check whether initiator iqn exists"""
+        svc = '/api/san/v1/iscsi/initiators/' + iqn
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Verifying '
+                               'Initiator: %(iqn)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'initiator': iqn,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def verify_target(self, alias):
+        """Check whether target alias exists."""
+        svc = '/api/san/v1/iscsi/targets/alias=' + alias
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Verifying '
+                               'Target: %(alias)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'alias': alias,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def create_lun(self, pool, project, lun, volsize, targetgroup,
+                   volblocksize='8k', sparse=False, compression=None,
+                   logbias=None):
+        """Create a LUN
+           required - pool, project, lun, volsize, targetgroup.
+           optional - volblocksize, sparse, compression, logbias
+        """
+
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + project + \
+              '/luns/' + lun
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+                  project + '/luns'
+            arg = {
+                'name': lun,
+                'volsize': volsize,
+                'targetgroup':  targetgroup,
+                'initiatorgroup': 'com.sun.ms.vss.hg.maskAll',
+                'volblocksize': volblocksize,
+                'sparse': sparse
+            }
+            if compression and compression != '':
+                arg.update({'compression': compression})
+            if logbias and logbias != '':
+                arg.update({'logbias': logbias})
+
+            ret = self.rclient.post(svc, arg)
+            if ret.status != restclient.Status.CREATED:
+                exception_msg = (_('Error Creating '
+                                   'Volume: %(lun)s '
+                                   'Size: %(size)s '
+                                   'Return code: %(ret.status)d '
+                                   'Message: %(ret.data)s.')
+                                 % {'lun': lun,
+                                    'size': volsize,
+                                    'ret.status': ret.status,
+                                    'ret.data': ret.data})
+                LOG.error(exception_msg)
+                raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def get_lun(self, pool, project, lun):
+        """return iscsi lun properties"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + "/luns/" + lun
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Getting '
+                               'Volume: %(lun)s on '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+        val = json.loads(ret.data)
+        ret = {
+            'guid': val['lun']['lunguid'],
+            'number': val['lun']['assignednumber'],
+            'initiatorgroup': val['lun']['initiatorgroup'],
+            'size': val['lun']['volsize']
+        }
+        if 'origin' in val['lun']:
+            ret.update({'origin': val['lun']['origin']})
+
+        return ret
+
+    def set_lun_initiatorgroup(self, pool, project, lun, initiatorgroup):
+        """Set the initiatorgroup property of a LUN"""
+        if initiatorgroup == '':
+            initiatorgroup = 'com.sun.ms.vss.hg.maskAll'
+
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun
+        arg = {
+            'initiatorgroup': initiatorgroup
+        }
+
+        ret = self.rclient.put(svc, arg)
+        if ret.status != restclient.Status.ACCEPTED:
+            exception_msg = (_('Error Setting '
+                               'Volume: %(lun)s to '
+                               'InitiatorGroup: %(initiatorgroup)s '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'lun': lun,
+                                'initiatorgroup': initiatorgroup,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+
+    def delete_lun(self, pool, project, lun):
+        """delete iscsi lun"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun
+
+        ret = self.rclient.delete(svc)
+        if ret.status != restclient.Status.NO_CONTENT:
+            exception_msg = (_('Error Deleting '
+                               'Volume: %(lun)s to '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+
+    def create_snapshot(self, pool, project, lun, snapshot):
+        """create snapshot"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun + '/snapshots'
+        arg = {
+            'name': snapshot
+        }
+
+        ret = self.rclient.post(svc, arg)
+        if ret.status != restclient.Status.CREATED:
+            exception_msg = (_('Error Creating '
+                               'Snapshot: %(snapshot)s on'
+                               'Volume: %(lun)s to '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'snapshot': snapshot,
+                                'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def delete_snapshot(self, pool, project, lun, snapshot):
+        """delete snapshot"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+              project + '/luns/' + lun + '/snapshots/' + snapshot
+
+        ret = self.rclient.delete(svc)
+        if ret.status != restclient.Status.NO_CONTENT:
+            exception_msg = (_('Error Deleting '
+                               'Snapshot: %(snapshot)s on '
+                               'Volume: %(lun)s to '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'snapshot': snapshot,
+                                'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def clone_snapshot(self, pool, project, lun, snapshot, clone):
+        """clone snapshot"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun + '/snapshots/' + snapshot + '/clone'
+        arg = {
+            'project': project,
+            'share': clone
+        }
+
+        ret = self.rclient.put(svc, arg)
+        if ret.status != restclient.Status.CREATED:
+            exception_msg = (_('Error Cloning '
+                               'Snapshot: %(snapshot)s on '
+                               'Volume: %(lun)s of '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'snapshot': snapshot,
+                                'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def set_lun_size(self, pool, project, lun, size):
+        """increase lun size capacity"""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun
+        arg = {
+            'volsize': size
+        }
+
+        ret = self.rclient.put(svc, arg)
+        if ret.status != restclient.Status.ACCEPTED:
+            exception_msg = (_('Error Setting size on '
+                               'Size: %(size)s on '
+                               'Volume: %(lun)s of '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'size': size,
+                                'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+    def has_clones(self, pool, project, lun, snapshot):
+        """Checks whether snapshot has clones or not."""
+        svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
+            project + '/luns/' + lun + '/snapshots/' + snapshot
+
+        ret = self.rclient.get(svc)
+        if ret.status != restclient.Status.OK:
+            exception_msg = (_('Error Getting '
+                               'Snapshot: %(snapshot)s on '
+                               'Volume: %(lun)s to '
+                               'Pool: %(pool)s '
+                               'Project: %(project)s  '
+                               'Return code: %(ret.status)d '
+                               'Message: %(ret.data)s.')
+                             % {'snapshot': snapshot,
+                                'lun': lun,
+                                'pool': pool,
+                                'project': project,
+                                'ret.status': ret.status,
+                                'ret.data': ret.data})
+            LOG.error(exception_msg)
+            raise exception.VolumeBackendAPIException(data=exception_msg)
+
+        val = json.loads(ret.data)
+        return (val['snapshot']['numclones'] != 0)
--- a/components/openstack/cinder/patches/01-noamqplib.patch	Wed Jun 11 05:34:04 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-In-house patch to remove amqplib from Cinder's requirements files as
-an alternate implementation is used on Solaris.
-
---- cinder-2013.1.4/cinder.egg-info/requires.txt.orig 2013-11-22 07:46:37.051978903 -0700
-+++ cinder-2013.1.4/cinder.egg-info/requires.txt        2013-11-22 07:46:45.304481983 -0700
[email protected]@ -1,5 +1,4 @@
- SQLAlchemy>=0.7.3,<=0.7.9
--amqplib>=0.6.1
- anyjson>=0.2.4
- eventlet>=0.9.17
- kombu>=1.0.4
-
---- cinder-2013.1.4/tools/pip-requires.orig       2013-11-22 07:48:29.381781247 -0700
-+++ cinder-2013.1.4/tools/pip-requires        2013-11-22 07:48:34.137850426 -0700
[email protected]@ -1,5 +1,4 @@
- SQLAlchemy>=0.7.3,<=0.7.9
--amqplib>=0.6.1
- anyjson>=0.2.4
- argparse
- eventlet>=0.9.17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/01-requirements.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,73 @@
+In-house patch to remove unnecessary dependencies from Cinder's
+requirements files. The specific reasons are as follows:
+
+amqplib		No longer applicable
+		(upstream commit e609183a39fef781aec45638c3bea4a7a6981412)
+
+argparse	No longer applicable
+
+lockfile	No longer applicable
+		(upstream commit a497b4a214b89cb2b387f227c208cfdae62ad6b1)
+
+netaddr		Not applicable to Solaris (VMware specific)
+
+paramiko	Not applicable to Solaris (various drivers specific)
+
+suds		Not applicable to Solaris (VMware specific)
+
+wsgiref		No longer applicable
+
+--- cinder-2013.2.3/cinder.egg-info/requires.txt.orig	2014-04-03 11:45:40.000000000 -0700
++++ cinder-2013.2.3/cinder.egg-info/requires.txt	2014-05-24 21:38:09.097874174 -0700
[email protected]@ -1,16 +1,12 @@
+ pbr>=0.5.21,<1.0
+-amqplib>=0.6.1
+ anyjson>=0.3.3
+ Babel>=1.3
+ eventlet>=0.13.0
+ greenlet>=0.3.2
+ iso8601>=0.1.8
+ kombu>=2.4.8
+-lockfile>=0.8
+ lxml>=2.3
+-netaddr
+ oslo.config>=1.2.0
+-paramiko>=1.8.0
+ Paste
+ PasteDeploy>=1.5.0
+ python-glanceclient>=0.9.0
[email protected]@ -22,6 +18,4 @@
+ SQLAlchemy>=0.7.8,<=0.7.99
+ sqlalchemy-migrate>=0.7.2
+ stevedore>=0.10
+-suds>=0.4
+ WebOb>=1.2.3,<1.3
+-wsgiref>=0.1.2
+\ No newline at end of file
+--- cinder-2013.2.3/requirements.txt.orig	2014-04-03 11:42:36.000000000 -0700
++++ cinder-2013.2.3/requirements.txt	2014-05-24 21:38:36.989936528 -0700
[email protected]@ -1,17 +1,12 @@
+ pbr>=0.5.21,<1.0
+-amqplib>=0.6.1
+ anyjson>=0.3.3
+-argparse
+ Babel>=1.3
+ eventlet>=0.13.0
+ greenlet>=0.3.2
+ iso8601>=0.1.8
+ kombu>=2.4.8
+-lockfile>=0.8
+ lxml>=2.3
+-netaddr
+ oslo.config>=1.2.0
+-paramiko>=1.8.0
+ Paste
+ PasteDeploy>=1.5.0
+ python-glanceclient>=0.9.0
[email protected]@ -23,6 +18,4 @@
+ SQLAlchemy>=0.7.8,<=0.7.99
+ sqlalchemy-migrate>=0.7.2
+ stevedore>=0.10
+-suds>=0.4
+ WebOb>=1.2.3,<1.3
+-wsgiref>=0.1.2
--- a/components/openstack/cinder/patches/02-noparamiko.patch	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/patches/02-noparamiko.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -1,56 +1,53 @@
 In-house patch for the temporary removal of Paramiko dependency in
 Cinder.  This patch is Solaris-specific and not suitable for upstream
 
---- cinder-2013.1.4/cinder/utils.py.orig	2013-10-17 11:21:37.000000000 -0700
-+++ cinder-2013.1.4/cinder/utils.py	2014-03-08 11:55:09.044072461 -0800
[email protected]@ -27,7 +27,6 @@
- import inspect
- import itertools
- import os
+--- cinder-2013.2.3/cinder/utils.py.orig	2014-04-03 11:42:36.000000000 -0700
++++ cinder-2013.2.3/cinder/utils.py	2014-04-09 00:14:56.141352333 -0700
[email protected]@ -43,7 +43,6 @@
+ from eventlet import greenthread
+ from eventlet import pools
+ from oslo.config import cfg
 -import paramiko
- import pyclbr
- import random
- import re
[email protected]@ -233,135 +232,6 @@
-     return out, err
+ 
+ from cinder.brick.initiator import connector
+ from cinder import exception
[email protected]@ -142,125 +141,6 @@
+     return processutils.execute(*cmd, **kwargs)
  
  
--def ssh_execute(ssh, cmd, process_input=None,
--                addl_env=None, check_exit_code=True):
--    LOG.debug(_('Running cmd (SSH): %s'), cmd)
--    if addl_env:
--        raise exception.Error(_('Environment not supported over SSH'))
+-def check_ssh_injection(cmd_list):
+-    ssh_injection_pattern = ['`', '$', '|', '||', ';', '&', '&&', '>', '>>',
+-                             '<']
 -
--    if process_input:
--        # This is (probably) fixable if we need it...
--        raise exception.Error(_('process_input not supported over SSH'))
--
--    stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(cmd)
--    channel = stdout_stream.channel
--
--    #stdin.write('process_input would go here')
--    #stdin.flush()
+-    # Check whether injection attacks exist
+-    for arg in cmd_list:
+-        arg = arg.strip()
 -
--    # NOTE(justinsb): This seems suspicious...
--    # ...other SSH clients have buffering issues with this approach
--    stdout = stdout_stream.read()
--    stderr = stderr_stream.read()
--    stdin_stream.close()
--    stdout_stream.close()
--    stderr_stream.close()
--
--    exit_status = channel.recv_exit_status()
+-        # Check for matching quotes on the ends
+-        is_quoted = re.match('^(?P<quote>[\'"])(?P<quoted>.*)(?P=quote)$', arg)
+-        if is_quoted:
+-            # Check for unescaped quotes within the quoted argument
+-            quoted = is_quoted.group('quoted')
+-            if quoted:
+-                if (re.match('[\'"]', quoted) or
+-                        re.search('[^\\\\][\'"]', quoted)):
+-                    raise exception.SSHInjectionThreat(command=str(cmd_list))
+-        else:
+-            # We only allow spaces within quoted arguments, and that
+-            # is the only special character allowed within quotes
+-            if len(arg.split()) > 1:
+-                raise exception.SSHInjectionThreat(command=str(cmd_list))
 -
--    # exit_status == -1 if no exit code was returned
--    if exit_status != -1:
--        LOG.debug(_('Result was %s') % exit_status)
--        if check_exit_code and exit_status != 0:
--            raise exception.ProcessExecutionError(exit_code=exit_status,
--                                                  stdout=stdout,
--                                                  stderr=stderr,
--                                                  cmd=cmd)
--    channel.close()
--    return (stdout, stderr)
+-        # Second, check whether danger character in command. So the shell
+-        # special operator must be a single argument.
+-        for c in ssh_injection_pattern:
+-            if arg == c:
+-                continue
+-
+-            result = arg.find(c)
+-            if not result == -1:
+-                if result == 0 or not arg[result - 1] == '\\':
+-                    raise exception.SSHInjectionThreat(command=cmd_list)
 -
 -
 -def create_channel(client, width, height):
@@ -119,27 +116,20 @@
 -        before returning it. For dead connections create and return a new
 -        connection.
 -        """
--        if self.free_items:
--            conn = self.free_items.popleft()
--            if conn:
--                if conn.get_transport().is_active():
--                    return conn
--                else:
--                    conn.close()
--            return self.create()
--        if self.current_size < self.max_size:
--            created = self.create()
--            self.current_size += 1
--            return created
--        return self.channel.get()
+-        conn = super(SSHPool, self).get()
+-        if conn:
+-            if conn.get_transport().is_active():
+-                return conn
+-            else:
+-                conn.close()
+-        return self.create()
 -
 -    def remove(self, ssh):
--        """Close an ssh client and remove it if in free_items."""
+-        """Close an ssh client and remove it from free_items."""
 -        ssh.close()
+-        ssh = None
 -        if ssh in self.free_items:
 -            self.free_items.pop(ssh)
--        ssh = None
--
 -        if self.current_size > 0:
 -            self.current_size -= 1
 -
@@ -147,23 +137,4 @@
  def cinderdir():
      import cinder
      return os.path.abspath(cinder.__file__).split('cinder/__init__.py')[0]
---- cinder-2013.1.4/cinder.egg-info/requires.txt.orig	Wed Feb 26 10:56:39 2014
-+++ cinder-2013.1.4/cinder.egg-info/requires.txt	Wed Feb 26 10:58:01 2014
[email protected]@ -14,7 +14,6 @@
- sqlalchemy-migrate>=0.7.2
- stevedore>=0.8.0
- suds>=0.4
--paramiko
- Babel>=0.9.6
- iso8601>=0.1.4
- setuptools_git>=0.4
---- cinder-2013.1.4/tools/pip-requires.orig	Wed Feb 26 10:56:38 2014
-+++ cinder-2013.1.4/tools/pip-requires	Wed Feb 26 10:58:25 2014
[email protected]@ -14,7 +14,6 @@
- sqlalchemy-migrate>=0.7.2
- stevedore>=0.8.0
- suds>=0.4
--paramiko
- Babel>=0.9.6
- iso8601>=0.1.4
- setuptools_git>=0.4
+
--- a/components/openstack/cinder/patches/03-emc_smis_iscsi.patch	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/patches/03-emc_smis_iscsi.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -1,17 +1,18 @@
 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-2013.1.4/cinder/volume/drivers/emc/emc_smis_iscsi.py.~1~	2013-10-17 11:21:37.000000000 -0700
-+++ cinder-2013.1.4/cinder/volume/drivers/emc/emc_smis_iscsi.py	2014-03-12 17:07:06.500560732 -0700
[email protected]@ -21,6 +21,7 @@
+--- cinder-2013.2.3/cinder/volume/drivers/emc/emc_smis_iscsi.py.~1~	2014-04-03 11:42:36.000000000 -0700
++++ cinder-2013.2.3/cinder/volume/drivers/emc/emc_smis_iscsi.py	2014-04-09 01:30:22.894010750 -0700
[email protected]@ -21,6 +21,8 @@
  """
  
- import os
+ 
 +import sys
- import time
- 
++
  from cinder import exception
[email protected]@ -118,13 +119,41 @@
+ from cinder.openstack.common import log as logging
+ from cinder.volume import driver
[email protected]@ -114,13 +116,41 @@
  
          LOG.warn(_("ISCSI provider_location not stored, using discovery"))
  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/04-launchpad-1236459.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,36 @@
+Although the following patch has been addressed in Icehouse 2014.1, it
+still has not yet been released for Havana.  It has been modified to
+apply cleanly into our current Havana implementation
+
+commit 5c321d758c9718d7dde555316ac4fbd2f7acf424
+Author: Dan Prince <[email protected]>
+Date:   Mon Oct 7 12:41:28 2013 -0400
+
+    Drop conf_key_mgr warning message!
+    
+    By default ConfKeyManager logs tons of WARNING message stating
+    that it isn't production ready...
+    
+    Given that it is currently the only Cinder key manager option
+    which can be used/selected I don't think repeatedly logging
+    warnings is helpful. Lets just drop the warning message
+    for now and when a good "production ready" cinder key manager
+    implementation is implemented perhaps we can re-add a warning to
+    this class (hopefully making the production ready impl the default).
+    
+    Change-Id: Id1fdddc20a963f9fa4749ad57f355cd83d0e14e3
+    Closes-Bug: #1236459
+
+diff --git a/cinder/keymgr/conf_key_mgr.py b/cinder/keymgr/conf_key_mgr.py
+index 7b53e0c..1c9ff2d 100644
+--- a/cinder/keymgr/conf_key_mgr.py
++++ b/cinder/keymgr/conf_key_mgr.py
[email protected]@ -64,8 +64,6 @@ class ConfKeyManager(key_mgr.KeyManager):
+     """
+ 
+     def __init__(self):
+-        LOG.warn(_('This key manager is insecure and is not recommended for '
+-                   'production deployments'))
+         super(ConfKeyManager, self).__init__()
+ 
+         self.key_id = '00000000-0000-0000-0000-000000000000'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/05-launchpad-1252512.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,45 @@
+Although the following patch has been addressed in Icehouse 2014.1, it
+still has not yet been released for Havana.  It has been modified to
+apply cleanly into our current Havana implementation
+
+commit 3badd1ffbe8796d27b924f882ed05b8d3f4f0f11
+Author: Dan Prince <[email protected]>
+Date:   Tue Dec 10 14:51:32 2013 -0500
+
+    Lazy log the fixed_key warnings
+    
+    Cinder currently spews quite a bit of WARNINGs like this with
+    the default settings:
+    
+    WARNING cinder.keymgr.conf_key_mgr [-] config option keymgr.fixed_key
+    has not been defined: some operations may fail unexpectedly
+    
+    Many users may not be using features that require key manager...
+    so logging the WARNING message a bit more lazily seems reasonable.
+    
+    Change-Id: I5ab72285c7d4bc2ec3196dd94fabf977b3a4ebaf
+    Closes-bug: 1252512
+
+diff --git a/cinder/keymgr/conf_key_mgr.py b/cinder/keymgr/conf_key_mgr.py
+index f000c44..ee4fbc3 100644
+--- cinder-2013.2.3/cinder/keymgr/conf_key_mgr.py.~2~	2014-05-29 11:02:58.846311952 -0700
++++ cinder-2013.2.3/cinder/keymgr/conf_key_mgr.py	2014-05-29 11:02:58.855843284 -0700
[email protected]@ -67,9 +67,6 @@
+         super(ConfKeyManager, self).__init__()
+ 
+         self.key_id = '00000000-0000-0000-0000-000000000000'
+-        if CONF.keymgr.fixed_key is None:
+-            LOG.warn(_('config option keymgr.fixed_key has not been defined: '
+-                       'some operations may fail unexpectedly'))
+ 
+     def _generate_key(self, **kwargs):
+         _hex = self._generate_hex_key(**kwargs)
[email protected]@ -78,6 +75,8 @@
+ 
+     def _generate_hex_key(self, **kwargs):
+         if CONF.keymgr.fixed_key is None:
++            LOG.warn(_('config option keymgr.fixed_key has not been defined: '
++                       'some operations may fail unexpectedly'))
+             raise ValueError(_('keymgr.fixed_key not defined'))
+         return CONF.keymgr.fixed_key
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/06-launchpad-1233763.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,181 @@
+Although the following patch has been addressed in Icehouse 2014.1, it
+still has not yet been released for Havana.
+
+From c1fca7affc22dc756f07f604f03c2343eeac9d15 Mon Sep 17 00:00:00 2001
+From: "Jay S. Bryant" <[email protected]>
+Date: Fri, 15 Nov 2013 19:01:58 -0600
+Subject: [PATCH] Add default quota class into DB during migration
+
+For some time now use_default_quota_class has been the
+default setting for Cinder.  Cinder, however, has not been putting
+any defaults for the default quota class into the database.  This
+resulted in any command that queried for the default quotas to cause
+the message "Deprecated: Default quota for resource: <resource> is set
+by the default quota flag: <quota flag>, it is now deprecated.  Please use
+the default quota class for default quota."
+
+This commit resolves this issue by setting the default value for volumes,
+snapshots and gigabytes in the quota_class table at migration time if there
+is not already a class_name of 'default' in the quota_classes table.
+
+Unit tests are included with this commit.
+
+Closes-bug 1233763
+Change-Id: I457ed8a9b78492eda22e31dfc198b2ee051d3ece
+(cherry picked from commit 7d2641688454d9064b691e4aab4b5d8b14d75305)
+---
+ .../versions/021_add_default_quota_class.py        |   85 ++++++++++++++++++++
+ cinder/tests/test_migrations.py                    |   31 +++++++
+ cinder/tests/test_quota.py                         |    5 ++
+ 3 files changed, 121 insertions(+)
+ create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/021_add_default_quota_class.py
+
+diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/021_add_default_quota_class.py b/cinder/db/sqlalchemy/migrate_repo/versions/021_add_default_quota_class.py
+new file mode 100644
+index 0000000..5c06e9c
+--- /dev/null
++++ b/cinder/db/sqlalchemy/migrate_repo/versions/021_add_default_quota_class.py
[email protected]@ -0,0 +1,85 @@
++#    Copyright 2013 IBM Corp.
++#
++#    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.
++
++import datetime
++
++from cinder.openstack.common import log as logging
++from oslo.config import cfg
++from sqlalchemy import MetaData, Table
++
++# Get default values via config.  The defaults will either
++# come from the default values set in the quota option
++# configuration or via cinder.conf if the user has configured
++# default values for quotas there.
++CONF = cfg.CONF
++CONF.import_opt('quota_volumes', 'cinder.quota')
++CONF.import_opt('quota_snapshots', 'cinder.quota')
++CONF.import_opt('quota_gigabytes', 'cinder.quota')
++LOG = logging.getLogger(__name__)
++
++CLASS_NAME = 'default'
++CREATED_AT = datetime.datetime.now()
++
++
++def upgrade(migrate_engine):
++    """Add default quota class data into DB."""
++    meta = MetaData()
++    meta.bind = migrate_engine
++
++    quota_classes = Table('quota_classes', meta, autoload=True)
++
++    rows = quota_classes.count().\
++        where(quota_classes.c.class_name == 'default').execute().scalar()
++
++    # Do not add entries if there are already 'default' entries.  We don't
++    # want to write over something the user added.
++    if rows:
++        LOG.info(_("Found existing 'default' entries in the quota_classes "
++                   "table.  Skipping insertion of default values."))
++        return
++
++    try:
++        #Set default volumes
++        qci = quota_classes.insert()
++        qci.execute({'created_at': CREATED_AT,
++                     'class_name': CLASS_NAME,
++                     'resource': 'volumes',
++                     'hard_limit': CONF.quota_volumes,
++                     'deleted': False, })
++        #Set default snapshots
++        qci.execute({'created_at': CREATED_AT,
++                     'class_name': CLASS_NAME,
++                     'resource': 'snapshots',
++                     'hard_limit': CONF.quota_snapshots,
++                     'deleted': False, })
++        #Set default gigabytes
++        qci.execute({'created_at': CREATED_AT,
++                     'class_name': CLASS_NAME,
++                     'resource': 'gigabytes',
++                     'hard_limit': CONF.quota_gigabytes,
++                     'deleted': False, })
++        LOG.info(_("Added default quota class data into the DB."))
++    except Exception:
++        LOG.error(_("Default quota class data not inserted into the DB."))
++        raise
++
++
++def downgrade(migrate_engine):
++    """Don't delete the 'default' entries at downgrade time.
++
++    We don't know if the user had default entries when we started.
++    If they did, we wouldn't want to remove them.  So, the safest
++    thing to do is just leave the 'default' entries at downgrade time.
++    """
++    pass
+diff --git a/cinder/tests/test_migrations.py b/cinder/tests/test_migrations.py
+index 257c3e8..2ef5bff 100644
+--- a/cinder/tests/test_migrations.py
++++ b/cinder/tests/test_migrations.py
[email protected]@ -1002,3 +1002,34 @@ class TestMigrations(test.TestCase):
+ 
+             self.assertFalse(engine.dialect.has_table(engine.connect(),
+                                                       "volume_admin_metadata"))
++
++    def test_migration_021(self):
++        """Test adding default data for quota classes works correctly."""
++        for (key, engine) in self.engines.items():
++            migration_api.version_control(engine,
++                                          TestMigrations.REPOSITORY,
++                                          migration.INIT_VERSION)
++            migration_api.upgrade(engine, TestMigrations.REPOSITORY, 20)
++            metadata = sqlalchemy.schema.MetaData()
++            metadata.bind = engine
++
++            migration_api.upgrade(engine, TestMigrations.REPOSITORY, 21)
++
++            quota_class_metadata = sqlalchemy.Table('quota_classes',
++                                                    metadata,
++                                                    autoload=True)
++
++            num_defaults = quota_class_metadata.count().\
++                where(quota_class_metadata.c.class_name == 'default').\
++                execute().scalar()
++
++            self.assertEqual(3, num_defaults)
++
++            migration_api.downgrade(engine, TestMigrations.REPOSITORY, 20)
++
++            # Defaults should not be deleted during downgrade
++            num_defaults = quota_class_metadata.count().\
++                where(quota_class_metadata.c.class_name == 'default').\
++                execute().scalar()
++
++            self.assertEqual(3, num_defaults)
+diff --git a/cinder/tests/test_quota.py b/cinder/tests/test_quota.py
+index 99b2ed2..ae79b39 100644
+--- a/cinder/tests/test_quota.py
++++ b/cinder/tests/test_quota.py
[email protected]@ -62,6 +62,11 @@ class QuotaIntegrationTestCase(test.TestCase):
+ 
+         self.stubs.Set(rpc, 'call', rpc_call_wrapper)
+ 
++        # Destroy the 'default' quota_class in the database to avoid
++        # conflicts with the test cases here that are setting up their own
++        # defaults.
++        db.quota_class_destroy_all_by_name(self.context, 'default')
++
+     def tearDown(self):
+         db.volume_type_destroy(context.get_admin_context(),
+                                self.volume_type['id'])
+-- 
+1.7.9.2
+
--- a/components/openstack/cinder/resolve.deps	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/cinder/resolve.deps	Fri Jun 13 09:10:23 2014 -0700
@@ -1,15 +1,14 @@
 library/python-2/eventlet-26
 library/python-2/ipython-26
 library/python-2/oslo.config-26
-library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
 library/python/eventlet-26
 library/python/ipython-26
 library/python/oslo.config-26
-library/python/sqlalchemy-26
 library/python/sqlalchemy-migrate-26
 runtime/python-26
 system/core-os
 system/file-system/zfs
+system/storage/fc-utilities
 system/storage/iscsi/iscsi-target
 system/storage/scsi-target-mode-framework
--- a/components/openstack/common/Makefile	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/common/Makefile	Fri Jun 13 09:10:23 2014 -0700
@@ -20,12 +20,12 @@
 #
 
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		openstack
-COMPONENT_VERSION=	2013.1.4
+COMPONENT_VERSION=	2013.2.3
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 IPS_COMPONENT_VERSION=  0.$(COMPONENT_VERSION)
 
--- a/components/openstack/common/openstack.p5m	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/common/openstack.p5m	Fri Jun 13 09:10:23 2014 -0700
@@ -28,7 +28,7 @@
 set name=pkg.summary value=OpenStack
 set name=pkg.description \
     value="OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a data center, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface."
-set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
 set name=info.classification \
     value="org.opensolaris.category.2008:Meta Packages/Group Packages" \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -46,10 +46,12 @@
 depend type=group fmri=cloud/openstack/neutron
 depend type=group fmri=cloud/openstack/nova
 depend type=group fmri=cloud/openstack/swift
+depend type=group fmri=library/python/ceilometerclient
 depend type=group fmri=library/python/cinderclient
 depend type=group fmri=library/python/glanceclient
+depend type=group fmri=library/python/heatclient
 depend type=group fmri=library/python/keystoneclient
 depend type=group fmri=library/python/neutronclient
 depend type=group fmri=library/python/novaclient
-depend type=group fmri=library/python/quantumclient
 depend type=group fmri=library/python/swiftclient
+depend type=group fmri=library/python/troveclient
--- a/components/openstack/glance/Makefile	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/Makefile	Fri Jun 13 09:10:23 2014 -0700
@@ -25,12 +25,12 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		glance
-COMPONENT_CODENAME=	grizzly
-COMPONENT_VERSION=	2013.1.4
+COMPONENT_CODENAME=	havana
+COMPONENT_VERSION=	2013.2.3
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:dfb8070a12bbf5761db1c55d21db4772fe81ed903d57cf991618e5224cbdcd67
+    sha256:8766f8d198ec513c46519f1c44f99a4845ba3c04e7b7c41893cb3d5a7c2a9a28
 COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUGDB=	service/glance
--- a/components/openstack/glance/files/glance-api.conf	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-api.conf	Fri Jun 13 09:10:23 2014 -0700
@@ -13,11 +13,14 @@
 
 # List of which store classes and store class locations are
 # currently known to glance at startup.
+# Existing but disabled stores:
+#      glance.store.rbd.Store,
+#      glance.store.s3.Store,
+#      glance.store.swift.Store,
+#      glance.store.sheepdog.Store,
+#      glance.store.cinder.Store,
 #known_stores = glance.store.filesystem.Store,
-#               glance.store.http.Store,
-#               glance.store.rbd.Store,
-#               glance.store.s3.Store,
-#               glance.store.swift.Store,
+#               glance.store.http.Store
 
 
 # Maximum image size (in bytes) that may be uploaded through the
@@ -43,6 +46,10 @@
 # Not supported on OS X.
 #tcp_keepidle = 600
 
+# API to use for accessing data. Default value points to sqlalchemy
+# package, it is also possible to use: glance.db.registry.api
+# data_api = glance.db.sqlalchemy.api
+
 # SQLAlchemy connection string for the reference implementation
 # registry server. Any valid SQLAlchemy connection string is fine.
 # See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
@@ -84,6 +91,38 @@
 # The default value is false.
 #show_image_direct_url = False
 
+# Send headers containing user and tenant information when making requests to
+# the v1 glance registry. This allows the registry to function as if a user is
+# authenticated without the need to authenticate a user itself using the
+# auth_token middleware.
+# The default value is false.
+#send_identity_headers = False
+
+# Supported values for the 'container_format' image attribute
+#container_formats=ami,ari,aki,bare,ovf,uar
+
+# Supported values for the 'disk_format' image attribute
+#disk_formats=ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso,zfs
+
+# Directory to use for lock files. Default to a temp directory
+# (string value). This setting needs to be the same for both
+# glance-scrubber and glance-api.
+#lock_path=<None>
+#
+# Property Protections config file
+# This file contains the rules for property protections and the roles
+# associated with it.
+# If this config value is not specified, by default, property protections
+# won't be enforced.
+# If a value is specified and the file is not found, then an
+# HTTPInternalServerError will be thrown.
+#property_protection_file =
+
+# Set a system wide quota for every user.  This value is the total number
+# of bytes that a user can use across all storage systems.  A value of
+# 0 means unlimited.
+#user_storage_quota = 0
+
 # ================= Syslog Options ============================
 
 # Send logs to syslog (/dev/log) instead of to file specified
@@ -153,6 +192,11 @@
 # Default: False
 #db_auto_create = False
 
+# Enable DEBUG log messages from sqlalchemy which prints every database
+# query and response.
+# Default: False
+#sqlalchemy_debug = True
+
 # ============ Notification System Options =====================
 
 # Notifications can be sent when images are create, updated or deleted.
@@ -177,7 +221,7 @@
 # the defaults)
 qpid_notification_exchange = glance
 qpid_notification_topic = notifications
-qpid_host = localhost
+qpid_hostname = localhost
 qpid_port = 5672
 qpid_username =
 qpid_password =
@@ -198,6 +242,12 @@
 # writes image data to
 filesystem_store_datadir = /var/lib/glance/images/
 
+# A path to a JSON file that contains metadata describing the storage
+# system.  When show_multiple_locations is True the information in this
+# file will be returned with any location that is contained in this
+# store.
+#filesystem_store_metadata_file = None
+
 # ============ Swift Store Options =============================
 
 # Version of the authentication service to use
@@ -266,6 +316,12 @@
 # is only necessary if the tenant has multiple swift endpoints.
 #swift_store_region =
 
+# If set to False, disables SSL layer compression of https swift requests.
+# Setting to 'False' may improve performance for images which are already
+# in a compressed format, eg qcow2. If set to True, enables SSL layer
+# compression (provided it is supported by the target swift proxy).
+#swift_store_ssl_compression = True
+
 # ============ S3 Store Options =============================
 
 # Address where the S3 authentication service lives
@@ -320,6 +376,40 @@
 # For best performance, this should be a power of two
 rbd_store_chunk_size = 8
 
+# ============ Sheepdog Store Options =============================
+
+sheepdog_store_address = localhost
+
+sheepdog_store_port = 7000
+
+# Images will be chunked into objects of this size (in megabytes).
+# For best performance, this should be a power of two
+sheepdog_store_chunk_size = 64
+
+# ============ Cinder Store Options ===============================
+
+# Info to match when looking for cinder in the service catalog
+# Format is : separated values of the form:
+# <service_type>:<service_name>:<endpoint_type> (string value)
+#cinder_catalog_info = volume:cinder:publicURL
+
+# Override service catalog lookup with template for cinder endpoint
+# e.g. http://localhost:8776/v1/%(project_id)s (string value)
+#cinder_endpoint_template = <None>
+
+# Region name of this node (string value)
+#os_region_name = <None>
+
+# Location of ca certicates file to use for cinder client requests
+# (string value)
+#cinder_ca_certificates_file = <None>
+
+# Number of cinderclient retries on failed http calls (integer value)
+#cinder_http_retries = 3
+
+# Allow to perform insecure SSL requests to cinder (boolean value)
+#cinder_api_insecure = False
+
 # ============ Delayed Delete Options =============================
 
 # Turn on/off delayed delete
@@ -338,12 +428,12 @@
 image_cache_dir = /var/lib/glance/image-cache/
 
 [keystone_authtoken]
-auth_host = 127.0.0.1
-auth_port = 35357
-auth_protocol = http
+auth_uri = http://127.0.0.1:5000/v2.0
+identity_uri = http://127.0.0.1:35357
 admin_tenant_name = %SERVICE_TENANT_NAME%
 admin_user = %SERVICE_USER%
 admin_password = %SERVICE_PASSWORD%
+signing_dir = /var/lib/glance/keystone-signing
 
 [paste_deploy]
 # Name of the paste configuration file that defines the available pipelines
@@ -353,4 +443,4 @@
 # service name removed. For example, if your paste section name is
 # [pipeline:glance-api-keystone], you would configure the flavor below
 # as 'keystone'.
-#flavor=
+flavor = keystone
--- a/components/openstack/glance/files/glance-api.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-api.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -29,6 +29,7 @@
       type='service'>
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
+
     <!-- create a dependency on the glance_db service so the glance-api and
          glance-registry services do not collide when creating the database -->
     <dependency name='glance_db' grouping='optional_all' restart_on='error'
@@ -36,6 +37,13 @@
       <service_fmri value='svc:/application/openstack/glance/glance-db'/>
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/glance-api %m">
       <method_context>
--- a/components/openstack/glance/files/glance-db.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-db.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -30,6 +30,13 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/usr/bin/glance-manage db_sync">
       <method_context>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-registry.conf	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,99 @@
+[DEFAULT]
+# Show more verbose log output (sets INFO log level output)
+#verbose = False
+
+# Show debugging output in logs (sets DEBUG log level output)
+#debug = False
+
+# Address to bind the registry server
+bind_host = 0.0.0.0
+
+# Port the bind the registry server to
+bind_port = 9191
+
+# Log to this file. Make sure you do not set the same log
+# file for both the API and registry servers!
+log_file = /var/log/glance/registry.log
+
+# Backlog requests when creating socket
+backlog = 4096
+
+# TCP_KEEPIDLE value in seconds when creating socket.
+# Not supported on OS X.
+#tcp_keepidle = 600
+
+# API to use for accessing data. Default value points to sqlalchemy
+# package.
+# data_api = glance.db.sqlalchemy.api
+
+# SQLAlchemy connection string for the reference implementation
+# registry server. Any valid SQLAlchemy connection string is fine.
+# See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
+sql_connection = sqlite:////var/lib/glance/glance.sqlite
+
+# Period in seconds after which SQLAlchemy should reestablish its connection
+# to the database.
+#
+# MySQL uses a default `wait_timeout` of 8 hours, after which it will drop
+# idle connections. This can result in 'MySQL Gone Away' exceptions. If you
+# notice this, you can lower this value to ensure that SQLAlchemy reconnects
+# before MySQL can drop the connection.
+sql_idle_timeout = 3600
+
+# Limit the api to return `param_limit_max` items in a call to a container. If
+# a larger `limit` query param is provided, it will be reduced to this value.
+api_limit_max = 1000
+
+# If a `limit` query param is not provided in an api request, it will
+# default to `limit_param_default`
+limit_param_default = 25
+
+# Role used to identify an authenticated user as administrator
+#admin_role = admin
+
+# Whether to automatically create the database tables.
+# Default: False
+#db_auto_create = False
+
+# Enable DEBUG log messages from sqlalchemy which prints every database
+# query and response.
+# Default: False
+#sqlalchemy_debug = True
+
+# ================= Syslog Options ============================
+
+# Send logs to syslog (/dev/log) instead of to file specified
+# by `log_file`
+#use_syslog = False
+
+# Facility to use. If unset defaults to LOG_USER.
+#syslog_log_facility = LOG_LOCAL1
+
+# ================= SSL Options ===============================
+
+# Certificate file to use when starting registry server securely
+#cert_file = /path/to/certfile
+
+# Private key file to use when starting registry server securely
+#key_file = /path/to/keyfile
+
+# CA certificate file to use to verify connecting clients
+#ca_file = /path/to/cafile
+
+[keystone_authtoken]
+auth_uri = http://127.0.0.1:5000/v2.0
+identity_uri = http://127.0.0.1:35357
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+signing_dir = /var/lib/glance/keystone-signing
+
+[paste_deploy]
+# Name of the paste configuration file that defines the available pipelines
+#config_file = glance-registry-paste.ini
+
+# Partial name of a pipeline in your paste configuration file with the
+# service name removed. For example, if your paste section name is
+# [pipeline:glance-registry-keystone], you would configure the flavor below
+# as 'keystone'.
+flavor = keystone
--- a/components/openstack/glance/files/glance-registry.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-registry.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -29,6 +29,7 @@
       type='service'>
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
+
     <!-- create a dependency on the glance_db service so the glance-api and
          glance-registry services do not collide when creating the database -->
     <dependency name='glance_db' grouping='optional_all' restart_on='error'
@@ -36,6 +37,13 @@
       <service_fmri value='svc:/application/openstack/glance/glance-db'/>
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/glance-registry %m">
       <method_context>
--- a/components/openstack/glance/files/glance-scrubber.conf	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-scrubber.conf	Fri Jun 13 09:10:23 2014 -0700
@@ -34,7 +34,27 @@
 # Port the registry server is listening on
 registry_port = 9191
 
+# Auth settings if using Keystone
+# auth_url = http://127.0.0.1:5000/v2.0/
+# admin_tenant_name = %SERVICE_TENANT_NAME%
+# admin_user = %SERVICE_USER%
+# admin_password = %SERVICE_PASSWORD%
+
+# Directory to use for lock files. Default to a temp directory
+# (string value). This setting needs to be the same for both
+# glance-scrubber and glance-api.
+#lock_path=<None>
+
+# ================= Security Options ==========================
+
 # AES key for encrypting store 'location' metadata, including
 # -- if used -- Swift or S3 credentials
 # Should be set to a random string of length 16, 24 or 32 bytes
 #metadata_encryption_key = <16, 24 or 32 char registry metadata key>
+
+# ============ Filesystem Store Options ========================
+
+# Directory that the Filesystem backend store
+# writes image data to
+filesystem_store_datadir = /var/lib/glance/images/
+
--- a/components/openstack/glance/files/glance-scrubber.xml	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance-scrubber.xml	Fri Jun 13 09:10:23 2014 -0700
@@ -30,6 +30,13 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/glance-scrubber %m">
       <method_context>
--- a/components/openstack/glance/files/glance.prof_attr	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/files/glance.prof_attr	Fri Jun 13 09:10:23 2014 -0700
@@ -9,6 +9,7 @@
 solaris.admin.edit/etc/glance/logging.conf,\
 solaris.admin.edit/etc/glance/policy.json,\
 solaris.smf.manage.glance,\
-solaris.smf.value.glance
+solaris.smf.value.glance;\
+defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
 
 OpenStack Management:RO:::profiles=OpenStack Image Management
--- a/components/openstack/glance/glance.p5m	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/glance.p5m	Fri Jun 13 09:10:23 2014 -0700
@@ -28,9 +28,9 @@
 set name=pkg.summary value="OpenStack Glance"
 set name=pkg.description \
     value="OpenStack Glance provides services for discovering, registering, and retrieving virtual machine images. Glance has a RESTful API that allows querying of VM image metadata as well as retrieval of the actual image. VM images made available through Glance can be stored in a variety of locations from simple file systems to object-storage systems like OpenStack Swift."
-set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
 set name=com.oracle.info.description value="Glance, the OpenStack image service"
-set name=com.oracle.info.tpno value=16269
+set name=com.oracle.info.tpno value=17717
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -39,25 +39,26 @@
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream value="OpenStack <[email protected]>"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
-set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/055
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/055 \
+    value=PSARC/2014/207
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 dir  path=etc/glance owner=glance group=glance mode=0700
 file etc/glance-api-paste.ini path=etc/glance/glance-api-paste.ini \
-    owner=glance group=glance mode=0644 overlay=allow preserve=true
+    owner=glance group=glance mode=0644 overlay=allow preserve=renamenew
 file files/glance-api.conf path=etc/glance/glance-api.conf owner=glance \
-    group=glance mode=0644 overlay=allow preserve=true
+    group=glance mode=0644 overlay=allow preserve=renamenew
 file etc/glance-cache.conf path=etc/glance/glance-cache.conf owner=glance \
-    group=glance mode=0644 overlay=allow preserve=true
+    group=glance mode=0644 overlay=allow preserve=renamenew
 file etc/glance-registry-paste.ini path=etc/glance/glance-registry-paste.ini \
-    owner=glance group=glance mode=0644 overlay=allow preserve=true
-file etc/glance-registry.conf path=etc/glance/glance-registry.conf \
-    owner=glance group=glance mode=0644 overlay=allow preserve=true
+    owner=glance group=glance mode=0644 overlay=allow preserve=renamenew
+file files/glance-registry.conf path=etc/glance/glance-registry.conf \
+    owner=glance group=glance mode=0644 overlay=allow preserve=renamenew
 file files/glance-scrubber.conf path=etc/glance/glance-scrubber.conf \
-    owner=glance group=glance mode=0644 overlay=allow preserve=true
+    owner=glance group=glance mode=0644 overlay=allow preserve=renamenew
 file etc/logging.cnf.sample path=etc/glance/logging.conf owner=glance \
-    group=glance mode=0644 overlay=allow preserve=true
+    group=glance mode=0644 overlay=allow preserve=renamenew
 file etc/policy.json path=etc/glance/policy.json owner=glance group=glance \
-    mode=0644 overlay=allow preserve=true
+    mode=0644 overlay=allow preserve=renamenew
 file etc/schema-image.json path=etc/glance/schema-image.json owner=glance \
     group=glance
 file files/glance.auth_attr \
@@ -88,6 +89,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/__init__.py
@@ -99,14 +102,17 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/cache.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/cache_manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/gzip.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/version_negotiation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/property_protections.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/controller.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/images.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/members.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/upload_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_data.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_members.py
@@ -115,6 +121,17 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/router.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/schemas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/cache_cleaner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/cache_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/cache_prefetcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/cache_pruner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/control.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/registry.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/replicator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/scrubber.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/auth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/client.py
@@ -122,11 +139,16 @@
     pkg.depend.bypass-generate=.*/paste.*
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/crypt.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/ordereddict.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/property_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/context.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/registry/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/registry/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/simple/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/simple/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/__init__.py
@@ -168,6 +190,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/020_drop_images_table_location.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/021_set_engine_mysql_innodb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/022_image_member_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/023_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/024_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/025_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/026_add_location_storage_information.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/027_checksum_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/028_owner_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/029_location_meta_data_pickle_to_string.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/models.py
@@ -184,24 +213,53 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/drivers/xattr.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/prefetcher.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/pruner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ar/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/bg_BG/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/bs/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ca/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/cs/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/da/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/de/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/en_AU/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/en_GB/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/en_US/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/es/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/es_MX/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/fi_FI/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/fil/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/fr/LC_MESSAGES/glance.po
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/glance.pot
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/hi/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/hr/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/hu/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/id/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/it/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/it_IT/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ja/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ka_GE/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/kn/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ko/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ko_KR/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ms/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/nb/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ne/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/nl_NL/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/pl_PL/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/pt/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/pt_BR/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ro/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ru/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/ru_RU/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/sk/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/sl_SI/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/sw_KE/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/tl/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/tl_PH/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/tr/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/tr_TR/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/uk/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/vi_VN/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/zh_CN/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/zh_HK/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/zh_TW/LC_MESSAGES/glance.po
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/notify_kombu.py
@@ -212,11 +270,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/README
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/eventlet_backdoor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/fileutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/jsonutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/network_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/log_notifier.py
@@ -226,26 +291,39 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/rpc_notifier2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/test_notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/policy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/setup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/processutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/threadgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/uuidutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/quota/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/images.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/members.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v2/rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v1/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v1/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v2/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client/v2/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/cinder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/filesystem.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/gridfs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/http.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/location.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/rbd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/s3.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/scrubber.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/sheepdog.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/store/swift.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/version.py
 dir  path=var/lib/glance owner=glance group=glance mode=0700
@@ -259,15 +337,22 @@
 # flush this out.
 depend type=group fmri=library/python-2/anyjson-26
 
+# force a group dependency on the optional swiftclient; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/swiftclient-26
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-26
+
 # force a dependency on boto; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/boto-26
 
+# force a dependency on greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/greenlet-26
+
 # force a dependency on httplib2; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/httplib2-26
 
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/iso8601-26
-
 # force a dependency on jsonschema; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/jsonschema-26
 
@@ -281,17 +366,30 @@
 # out.
 depend type=require fmri=library/python-2/paste.deploy-26
 
+# force a dependency on pyopenssl; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pyopenssl-26
+
 # force a dependency on routes; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/routes-26
 
-# force a dependency on setuptools; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/setuptools-26
-
 # force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/sqlalchemy-26
 
 # force a dependency on webob; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/webob-26
 
-# force a dependency on swiftclient; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/swiftclient-26
+# force a dependency on cinderclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/cinderclient-26
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-26
+
+# force a dependency on keystoneclient; used via a paste.deploy filter
+depend type=require fmri=library/python/keystoneclient-26
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-26
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-26
--- a/components/openstack/glance/patches/01-nopycrypto.patch	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/patches/01-nopycrypto.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -4,19 +4,8 @@
 Convert urlsafe_encrypt() and urlsafe_decrypt() to use M2Crypto instead
 of PyCrypto.
 
---- glance-2013.1.4/glance.egg-info/requires.txt.orig	Thu Jan 16 22:08:47 2014
-+++ glance-2013.1.4/glance.egg-info/requires.txt	Thu Jan 16 22:23:01 2014
[email protected]@ -11,7 +11,7 @@
- sqlalchemy-migrate>=0.7
- httplib2
- kombu
--pycrypto>=2.1.0alpha1
-+M2Crypto>=0.21.1
- iso8601>=0.1.4
- oslo.config>=1.1.0
- python-swiftclient>=1.2,<2
---- glance-2013.1.4/glance/common/crypt.py.orig	Thu Oct 17 11:22:18 2013
-+++ glance-2013.1.4/glance/common/crypt.py	Thu Jan 16 22:42:41 2014
+--- glance-2013.2.3/glance/common/crypt.py.orig	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/common/crypt.py	2014-05-19 03:47:07.005226253 -0700
 @@ -4,6 +4,8 @@
  # Copyright 2011 OpenStack LLC.
  # All Rights Reserved.
@@ -26,20 +15,20 @@
  #    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
[email protected]@ -21,12 +23,27 @@
[email protected]@ -21,10 +23,26 @@
  """
  
  import base64
 +import os
++
++from M2Crypto.EVP import Cipher
++
++from glance.common import exception
++
  
 -from Crypto.Cipher import AES
 -from Crypto import Random
 -from Crypto.Random import random
-+from M2Crypto.EVP import Cipher
- 
-+from glance.common import exception
- 
-+
 +def _key_to_alg(key):
 +    """Return a M2Crypto-compatible AES-CBC algorithm name given a key."""
 +    aes_algs = {
@@ -53,11 +42,10 @@
 +        msg = ('Invalid AES key length, %d bits') % keylen
 +        raise exception.Invalid(msg)
 +    return aes_algs[keylen]
-+
+ 
+ 
  def urlsafe_encrypt(key, plaintext, blocksize=16):
-     """
-     Encrypts plaintext. Resulting ciphertext will contain URL-safe characters
[email protected]@ -36,20 +53,12 @@
[email protected]@ -36,20 +54,12 @@
  
      :returns : Resulting ciphertext
      """
@@ -82,7 +70,7 @@
      return base64.urlsafe_b64encode(init_vector + padded)
  
  
[email protected]@ -63,6 +72,7 @@
[email protected]@ -63,6 +73,7 @@
      """
      # Cast from unicode
      ciphertext = base64.urlsafe_b64decode(str(ciphertext))
@@ -93,14 +81,3 @@
 +    padded = cipher.update(ciphertext[16:])
 +    padded = padded + cipher.final()
 +    return padded
---- glance-2013.1.4/tools/pip-requires.orig	Thu Oct 17 11:22:19 2013
-+++ glance-2013.1.4/tools/pip-requires	Thu Jan 16 22:22:56 2014
[email protected]@ -15,7 +15,7 @@
- sqlalchemy-migrate>=0.7
- httplib2
- kombu
--pycrypto>=2.1.0alpha1
-+M2Crypto>=0.21.1
- iso8601>=0.1.4
- oslo.config>=1.1.0
- 
--- a/components/openstack/glance/patches/02-zfs-uar-formats.patch	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/glance/patches/02-zfs-uar-formats.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -1,40 +1,20 @@
 In-house patch to add 'uar' and 'zfs' container and disk formats to
 registered image types.  Patch has not yet been submitted upstream.
 
-diff --git a/glance/api/v1/images.py b/glance/api/v1/images.py
-index 4993a28..a4efe16 100644
---- a/glance/api/v1/images.py
-+++ b/glance/api/v1/images.py
[email protected]@ -55,9 +55,9 @@ CONF = cfg.CONF
- LOG = logging.getLogger(__name__)
- SUPPORTED_PARAMS = glance.api.v1.SUPPORTED_PARAMS
- SUPPORTED_FILTERS = glance.api.v1.SUPPORTED_FILTERS
--CONTAINER_FORMATS = ['ami', 'ari', 'aki', 'bare', 'ovf']
-+CONTAINER_FORMATS = ['ami', 'ari', 'aki', 'bare', 'ovf', 'uar']
- DISK_FORMATS = ['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2', 'vdi',
--                'iso']
-+                'iso', 'zfs']
- 
+--- glance-2013.2.3/glance/domain/__init__.py.orig	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/domain/__init__.py	2014-04-10 00:27:51.161800689 -0700
[email protected]@ -23,12 +23,12 @@
  
- def validate_image_meta(req, values):
-diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py
-index 3121b25..32090c9 100644
---- a/glance/api/v2/images.py
-+++ b/glance/api/v2/images.py
[email protected]@ -520,14 +520,14 @@ _BASE_PROPERTIES = {
-         'type': 'string',
-         'description': _(''),
-         'type': 'string',
--        'enum': ['bare', 'ovf', 'ami', 'aki', 'ari'],
-+        'enum': ['bare', 'ovf', 'ami', 'aki', 'ari', 'uar'],
-     },
-     'disk_format': {
-         'type': 'string',
-         'description': _(''),
-         'type': 'string',
-         'enum': ['raw', 'vhd', 'vmdk', 'vdi', 'iso', 'qcow2',
--                 'aki', 'ari', 'ami'],
-+                 'aki', 'ari', 'ami', 'zfs'],
-     },
-     'created_at': {
-         'type': 'string',
+ image_format_opts = [
+     cfg.ListOpt('container_formats',
+-                default=['ami', 'ari', 'aki', 'bare', 'ovf'],
++                default=['ami', 'ari', 'aki', 'bare', 'ovf', 'uar'],
+                 help=_("Supported values for the 'container_format' "
+                        "image attribute")),
+     cfg.ListOpt('disk_formats',
+                 default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
+-                         'vdi', 'iso'],
++                         'vdi', 'iso', 'zfs'],
+                 help=_("Supported values for the 'disk_format' "
+                        "image attribute")),
+ ]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/03-CVE-2014-0162.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,219 @@
+This proposed upstream patch addresses CVE-2014-0162 and is tracked
+under Launchpad bug 1298698. Although it's been addressed in Icehouse
+2014.1, the patch below is still not yet released for Havana.
+
+commit 13069a4017d36a549576a21ca3ec5b15c411effc
+Author: Zhi Yan Liu <[email protected]>
+Date:   Sat Mar 29 03:35:35 2014 +0800
+
+    To prevent remote code injection on Sheepdog store
+    
+    Change-Id: Iae92eaf9eb023f36a1bab7c20ea41c985f2bf51b
+    Signed-off-by: Zhi Yan Liu <[email protected]>
+
+diff --git a/glance/store/sheepdog.py b/glance/store/sheepdog.py
+index d10aea7..2f75441 100644
+--- a/glance/store/sheepdog.py
++++ b/glance/store/sheepdog.py
[email protected]@ -25,6 +25,7 @@ from glance.common import exception
+ from glance.openstack.common import excutils
+ import glance.openstack.common.log as logging
+ from glance.openstack.common import processutils
++from glance.openstack.common import uuidutils
+ import glance.store
+ import glance.store.base
+ import glance.store.location
[email protected]@ -32,7 +33,7 @@ import glance.store.location
+ 
+ LOG = logging.getLogger(__name__)
+ 
+-DEFAULT_ADDR = 'localhost'
++DEFAULT_ADDR = '127.0.0.1'
+ DEFAULT_PORT = '7000'
+ DEFAULT_CHUNKSIZE = 64  # in MiB
+ 
[email protected]@ -63,18 +64,14 @@ class SheepdogImage:
+         self.chunk_size = chunk_size
+ 
+     def _run_command(self, command, data, *params):
+-        cmd = ("collie vdi %(command)s -a %(addr)s -p %(port)s %(name)s "
+-               "%(params)s" %
+-               {"command": command,
+-                "addr": self.addr,
+-                "port": self.port,
+-                "name": self.name,
+-                "params": " ".join(map(str, params))})
++        cmd = ["collie", "vdi"]
++        cmd.extend(command)
++        cmd.extend(["-a", self.addr, "-p", self.port, self.name])
++        cmd.extend(params)
+ 
+         try:
+-            return processutils.execute(
+-                cmd, process_input=data, shell=True)[0]
+-        except processutils.ProcessExecutionError as exc:
++            return processutils.execute(*cmd, process_input=data)[0]
++        except (processutils.ProcessExecutionError, OSError) as exc:
+             LOG.error(exc)
+             raise glance.store.BackendException(exc)
+ 
[email protected]@ -84,7 +81,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi list -r -a address -p port image
+         """
+-        out = self._run_command("list -r", None)
++        out = self._run_command(["list", "-r"], None)
+         return long(out.split(' ')[3])
+ 
+     def read(self, offset, count):
[email protected]@ -94,7 +91,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi read -a address -p port image offset len
+         """
+-        return self._run_command("read", None, str(offset), str(count))
++        return self._run_command(["read"], None, str(offset), str(count))
+ 
+     def write(self, data, offset, count):
+         """
[email protected]@ -103,7 +100,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi write -a address -p port image offset len
+         """
+-        self._run_command("write", data, str(offset), str(count))
++        self._run_command(["write"], data, str(offset), str(count))
+ 
+     def create(self, size):
+         """
[email protected]@ -111,7 +108,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi create -a address -p port image size
+         """
+-        self._run_command("create", None, str(size))
++        self._run_command(["create"], None, str(size))
+ 
+     def delete(self):
+         """
[email protected]@ -119,7 +116,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi delete -a address -p port image
+         """
+-        self._run_command("delete", None)
++        self._run_command(["delete"], None)
+ 
+     def exist(self):
+         """
[email protected]@ -127,7 +124,7 @@ class SheepdogImage:
+ 
+         Sheepdog Usage: collie vdi list -r -a address -p port image
+         """
+-        out = self._run_command("list -r", None)
++        out = self._run_command(["list", "-r"], None)
+         if not out:
+             return False
+         else:
[email protected]@ -138,7 +135,7 @@ class StoreLocation(glance.store.location.StoreLocation):
+     """
+     Class describing a Sheepdog URI. This is of the form:
+ 
+-        sheepdog://image
++        sheepdog://image-id
+ 
+     """
+ 
[email protected]@ -149,10 +146,14 @@ class StoreLocation(glance.store.location.StoreLocation):
+         return "sheepdog://%s" % self.image
+ 
+     def parse_uri(self, uri):
+-        if not uri.startswith('sheepdog://'):
+-            raise exception.BadStoreUri(uri, "URI must start with %s://" %
+-                                        'sheepdog')
+-        self.image = uri[11:]
++        valid_schema = 'sheepdog://'
++        if not uri.startswith(valid_schema):
++            raise exception.BadStoreUri(_("URI must start with %s://") %
++                                        valid_schema)
++        self.image = uri[len(valid_schema):]
++        if not uuidutils.is_uuid_like(self.image):
++            raise exception.BadStoreUri(_("URI must contains well-formated "
++                                          "image id"))
+ 
+ 
+ class ImageIterator(object):
[email protected]@ -192,7 +193,7 @@ class Store(glance.store.base.Store):
+ 
+         try:
+             self.chunk_size = CONF.sheepdog_store_chunk_size * 1024 * 1024
+-            self.addr = CONF.sheepdog_store_address
++            self.addr = CONF.sheepdog_store_address.strip()
+             self.port = CONF.sheepdog_store_port
+         except cfg.ConfigFileValueError as e:
+             reason = _("Error in store configuration: %s") % e
[email protected]@ -200,10 +201,18 @@ class Store(glance.store.base.Store):
+             raise exception.BadStoreConfiguration(store_name='sheepdog',
+                                                   reason=reason)
+ 
++        if ' ' in self.addr:
++            reason = (_("Invalid address configuration of sheepdog store: %s")
++                      % self.addr)
++            LOG.error(reason)
++            raise exception.BadStoreConfiguration(store_name='sheepdog',
++                                                  reason=reason)
++
+         try:
+-            processutils.execute("collie", shell=True)
+-        except processutils.ProcessExecutionError as exc:
+-            reason = _("Error in store configuration: %s") % exc
++            cmd = ["collie", "vdi", "list", "-a", self.addr, "-p", self.port]
++            processutils.execute(*cmd)
++        except Exception as e:
++            reason = _("Error in store configuration: %s") % e
+             LOG.error(reason)
+             raise exception.BadStoreConfiguration(store_name='sheepdog',
+                                                   reason=reason)
+diff --git a/glance/tests/unit/test_sheepdog_store.py b/glance/tests/unit/test_sheepdog_store.py
+index 8eef86b..bea7e29 100644
+--- a/glance/tests/unit/test_sheepdog_store.py
++++ b/glance/tests/unit/test_sheepdog_store.py
[email protected]@ -57,4 +57,5 @@ class TestStore(base.StoreClearingUnitTest):
+                           'fake_image_id',
+                           utils.LimitingReader(StringIO.StringIO('xx'), 1),
+                           2)
+-        self.assertEqual(called_commands, ['list -r', 'create', 'delete'])
++        self.assertEqual([['list', '-r'], ['create'], ['delete']],
++                         called_commands)
+diff --git a/glance/tests/unit/test_store_location.py b/glance/tests/unit/test_store_location.py
+index 7eec171..2464ebb 100644
+--- a/glance/tests/unit/test_store_location.py
++++ b/glance/tests/unit/test_store_location.py
[email protected]@ -52,7 +52,7 @@ class TestStoreLocation(base.StoreClearingUnitTest):
+             'rbd://imagename',
+             'rbd://fsid/pool/image/snap',
+             'rbd://%2F/%2F/%2F/%2F',
+-            'sheepdog://imagename',
++            'sheepdog://244e75f1-9c69-4167-9db7-1aa7d1973f6c',
+             'cinder://12345678-9012-3455-6789-012345678901',
+         ]
+ 
[email protected]@ -367,15 +367,18 @@ class TestStoreLocation(base.StoreClearingUnitTest):
+         """
+         Test the specific StoreLocation for the Sheepdog store
+         """
+-        uri = 'sheepdog://imagename'
++        uri = 'sheepdog://244e75f1-9c69-4167-9db7-1aa7d1973f6c'
+         loc = glance.store.sheepdog.StoreLocation({})
+         loc.parse_uri(uri)
+-        self.assertEqual('imagename', loc.image)
++        self.assertEqual('244e75f1-9c69-4167-9db7-1aa7d1973f6c', loc.image)
+ 
+-        bad_uri = 'sheepdog:/image'
++        bad_uri = 'sheepdog:/244e75f1-9c69-4167-9db7-1aa7d1973f6c'
+         self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
+ 
+-        bad_uri = 'http://image'
++        bad_uri = 'http://244e75f1-9c69-4167-9db7-1aa7d1973f6c'
++        self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
++
++        bad_uri = 'image; name'
+         self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)
+ 
+     def test_cinder_store_good_location(self):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/04-requirements.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,71 @@
+In-house patch to remove unnecessary dependencies from Glance's
+requirements files. The specific reasons are as follows:
+
+lxml		No longer applicable
+		(upstream commit b7f9120cd4623d8284c4edfea760ef10e1193492)
+
+passlib		No longer applicable
+		(upstream commit b31874284212d49560ddf4f36e5c9ca5d221f605)
+
+pycrypto	Not applicable to Solaris (M2Crypto used instead)
+
+wsgiref		No longer applicable
+		(upstream commit b31874284212d49560ddf4f36e5c9ca5d221f605)
+
+--- glance-2013.2.3/glance.egg-info/requires.txt.orig	2014-04-03 11:46:54.000000000 -0700
++++ glance-2013.2.3/glance.egg-info/requires.txt	2014-05-24 23:04:42.210143004 -0700
[email protected]@ -6,20 +6,16 @@
+ PasteDeploy>=1.5.0
+ Routes>=1.12.3
+ WebOb>=1.2.3,<1.3
+-wsgiref>=0.1.2
+ boto>=2.4.0,!=2.13.0
+ sqlalchemy-migrate>=0.7.2
+ httplib2
+ kombu>=2.4.8
+-pycrypto>=2.6
+ iso8601>=0.1.8
+ oslo.config>=1.2.0
+ python-swiftclient>=1.5,<2.0.0
+-lxml>=2.3
+ Paste
+-passlib
+ jsonschema>=1.3.0,!=1.4.0
+ python-cinderclient>=1.0.6
+ python-keystoneclient>=0.3.2
+ pyOpenSSL>=0.11
+-six>=1.4.1
+\ No newline at end of file
++six>=1.4.1
+--- glance-2013.2.3/requirements.txt.orig	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/requirements.txt	2014-05-24 23:05:14.053235541 -0700
[email protected]@ -12,29 +12,20 @@
+ PasteDeploy>=1.5.0
+ Routes>=1.12.3
+ WebOb>=1.2.3,<1.3
+-wsgiref>=0.1.2
+ argparse
+ boto>=2.4.0,!=2.13.0
+ sqlalchemy-migrate>=0.7.2
+ httplib2
+ kombu>=2.4.8
+-pycrypto>=2.6
+ iso8601>=0.1.8
+ oslo.config>=1.2.0
+ 
+ # For Swift storage backend.
+ python-swiftclient>=1.5,<2.0.0
+ 
+-# Note you will need gcc buildtools installed and must
+-# have installed libxml headers for lxml to be successfully
+-# installed using pip, therefore you will need to install the
+-# libxml2-dev and libxslt-dev Ubuntu packages.
+-lxml>=2.3
+-
+ # For paste.util.template used in keystone.common.template
+ Paste
+ 
+-passlib
+ jsonschema>=1.3.0,!=1.4.0
+ python-cinderclient>=1.0.6
+ python-keystoneclient>=0.3.2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/05-launchpad-1255556.patch	Fri Jun 13 09:10:23 2014 -0700
@@ -0,0 +1,119 @@
+Although the following patch has been addressed in Icehouse 2014.1, it
+still has not yet been released for Havana.  It has been modified to
+apply cleanly into our current Havana implementation
+
+commit 1f6381a73f5c99f1f731d6c4f9defb91bd2d042d
+Author: Flavio Percoco <[email protected]>
+Date:   Thu Nov 28 16:17:13 2013 +0100
+
+    Don't enable all stores by default
+    
+    Glance currently enables all stores by default. This patch changes that
+    by removing all stores that require manual configuration and leaving
+    those that work right out of the box.
+    
+    Current behavior causes a lot of confusion to users since most of those
+    stores print errors when they're not configured correctly. All extra
+    stores should be enabled explicitly by users.
+    
+    This fix makes tests use http locations. All other locations besides the
+    default ones should be tested in their own test suites.
+    
+    DocImpact
+    Closes-bug: #1255556
+    Change-Id: I82073352641d3eb2ab3d6e9a6b64afc99a30dcc7
+
+--- glance-2013.2.3/etc/glance-api.conf.~1~	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/etc/glance-api.conf	2014-05-29 13:47:44.689586507 -0700
[email protected]@ -13,13 +13,14 @@
+ 
+ # List of which store classes and store class locations are
+ # currently known to glance at startup.
++# Existing but disabled stores:
++#      glance.store.rbd.Store,
++#      glance.store.s3.Store,
++#      glance.store.swift.Store,
++#      glance.store.sheepdog.Store,
++#      glance.store.cinder.Store,
+ #known_stores = glance.store.filesystem.Store,
+-#               glance.store.http.Store,
+-#               glance.store.rbd.Store,
+-#               glance.store.s3.Store,
+-#               glance.store.swift.Store,
+-#               glance.store.sheepdog.Store,
+-#               glance.store.cinder.Store,
++#               glance.store.http.Store
+ 
+ 
+ # Maximum image size (in bytes) that may be uploaded through the
+--- glance-2013.2.3/glance/store/__init__.py.~1~	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/store/__init__.py	2014-05-29 13:53:14.827604452 -0700
[email protected]@ -38,12 +38,7 @@
+     cfg.ListOpt('known_stores',
+                 default=[
+                     'glance.store.filesystem.Store',
+-                    'glance.store.http.Store',
+-                    'glance.store.rbd.Store',
+-                    'glance.store.s3.Store',
+-                    'glance.store.swift.Store',
+-                    'glance.store.sheepdog.Store',
+-                    'glance.store.cinder.Store',
++                    'glance.store.http.Store'
+                 ],
+                 help=_('List of which store classes and store class locations '
+                        'are currently known to glance at startup.')),
+--- glance-2013.2.3/glance/tests/unit/test_s3_store.py.~1~	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/tests/unit/test_s3_store.py	2014-05-29 13:43:01.104336073 -0700
[email protected]@ -41,7 +41,8 @@
+            's3_store_access_key': 'user',
+            's3_store_secret_key': 'key',
+            's3_store_host': 'localhost:8080',
+-           's3_store_bucket': 'glance'}
++           's3_store_bucket': 'glance',
++           'known_stores': ['glance.store.s3.Store']}
+ 
+ 
+ # We stub out as little as possible to ensure that the code paths
+--- glance-2013.2.3/glance/tests/unit/test_store_image.py.~1~	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/tests/unit/test_store_image.py	2014-05-29 13:43:01.104846210 -0700
[email protected]@ -20,7 +20,7 @@
+ from glance.tests import utils
+ 
+ 
+-BASE_URI = 'swift+http://storeurl.com/container'
++BASE_URI = 'http://storeurl.com/container'
+ UUID1 = 'c80a1a6c-bd1f-41c5-90ee-81afedb1d58d'
+ UUID2 = '971ec09a-8067-4bc8-a91f-ae3557f1c4c7'
+ USER1 = '54492ba0-f4df-4e4e-be62-27f4d76b29cf'
+--- glance-2013.2.3/glance/tests/unit/test_store_location.py.~2~	2014-05-29 13:43:01.087604346 -0700
++++ glance-2013.2.3/glance/tests/unit/test_store_location.py	2014-05-29 15:38:15.306762870 -0700
[email protected]@ -30,6 +30,18 @@
+ 
+     def setUp(self):
+         self.config(default_store='file')
++
++        # NOTE(flaper87): Each store should test
++        # this in their test suite.
++        self.config(known_stores=[
++            "glance.store.filesystem.Store",
++            "glance.store.http.Store",
++            "glance.store.rbd.Store",
++            "glance.store.s3.Store",
++            "glance.store.swift.Store",
++            "glance.store.sheepdog.Store",
++            "glance.store.cinder.Store",
++        ])
+         super(TestStoreLocation, self).setUp()
+ 
+     def test_get_location_from_uri_back_to_uri(self):
+--- glance-2013.2.3/glance/tests/unit/utils.py.~1~	2014-04-03 11:43:55.000000000 -0700
++++ glance-2013.2.3/glance/tests/unit/utils.py	2014-05-29 13:43:01.105795472 -0700
[email protected]@ -36,7 +36,7 @@
+ USER2 = '0b3b3006-cb76-4517-ae32-51397e22c754'
+ USER3 = '2hss8dkl-d8jh-88yd-uhs9-879sdjsd8skd'
+ 
+-BASE_URI = 'swift+http://storeurl.com/container'
++BASE_URI = 'http://storeurl.com/container'
+ 
+ 
+ def get_fake_request(path='', method='POST', is_admin=False, user=USER1,
--- a/components/openstack/horizon/Makefile	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/horizon/Makefile	Fri Jun 13 09:10:23 2014 -0700
@@ -25,12 +25,12 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		horizon
-COMPONENT_CODENAME=	grizzly
-COMPONENT_VERSION=	2013.1.4
+COMPONENT_CODENAME=	havana
+COMPONENT_VERSION=	2013.2.3
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:fb24b6d8b38d199a8ab0174335df63c7612e74a02e4f0883ee8a3181ce07b4ab
+    sha256:de9b87ee62d8b28792399be0fc867ba99618eaaad289cf9842b5c7084e12620f
 COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUGDB=	utility/horizon
@@ -57,7 +57,7 @@
 	 $(CP) files/branding/theme/_stylesheets.html $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/theme; \
 	 $(CP) files/overrides.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard); \
 	 $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
-
+	
 # common targets
 build:		$(BUILD_NO_ARCH)
 
--- a/components/openstack/horizon/files/branding/css/solaris.css	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/horizon/files/branding/css/solaris.css	Fri Jun 13 09:10:23 2014 -0700
@@ -1,4 +1,4 @@
-/*!
+/*
  * Bootstrap v2.0.1
  *
  * Copyright 2012 Twitter, Inc
@@ -123,11 +123,11 @@
   background-color: #ffffff;
 }
 a {
-  color: #dd4814;
+  color: #005D9D;
   text-decoration: none;
 }
 a:hover {
-  color: #dd4814;
+  color: #005D9D;
   text-decoration: underline;
 }
 .row {
@@ -350,7 +350,7 @@
 }
 h3 {
   line-height: 27px;
-  font-size: 18px;
+  font-size: 16px;
 }
 h3 small {
   font-size: 14px;
@@ -1278,11 +1278,11 @@
 [class^="icon-"],
 [class*=" icon-"] {
   display: inline-block;
-  width: 14px;
-  height: 14px;
+  width: 0px;
+  height: 0px;
   line-height: 14px;
   vertical-align: text-top;
-  xbackground-image: url('/static/bootstrap/img/glyphicons-halflings.png?531d4b607365');
+  /*xbackground-image: url('/static/bootstrap/img/glyphicons-halflings.png?531d4b607365');*/
   background-position: 14px 14px;
   background-repeat: no-repeat;
   *margin-right: .3em;
@@ -1292,7 +1292,7 @@
   *margin-left: 0;
 }
 .icon-white {
-  xbackground-image: url('/static/bootstrap/img/glyphicons-halflings-white.png?11118ae8db79');
+  /*xbackground-image: url('/static/bootstrap/img/glyphicons-halflings-white.png?11118ae8db79');*/
 }
 .icon-glass {
   background-position: 0      0;
@@ -1658,7 +1658,7 @@
   position: relative;
 }
 .dropdown-toggle {
-  *margin-bottom: -3px;
+  border: 1px solid #eeeeee;
 }
 .dropdown-toggle:active,
 .open .dropdown-toggle {
@@ -1749,7 +1749,8 @@
 .dropdown.open {
   *z-index: 1000;
 }
-.dropdown.open .dropdown-toggle {
+.dropdown.open .dropdown-toggle,
+.dropdown.open .dropdown-toggle:hover  {
   color: #ffffff;
   background: #ccc;
   background: rgba(0, 0, 0, 0.3);
@@ -1973,9 +1974,9 @@
   background-color: #c44012;
 
 }
-
+li.active .btn-primary,
 .btn-primary {
-    color: #fff;
+    color: #ffffff;
     border: 1px solid #0074CD;
     background: #0074CD;
     font-weight: bold;
@@ -2180,6 +2181,10 @@
   *zoom: 1;
   margin: 0px;
 }
+.topologyNavi .btn-group {
+	margin-left: 5px;
+	float: right;
+}
 .btn-group:before,
 .btn-group:after {
   display: table;
@@ -2192,7 +2197,7 @@
   *margin-left: 0;
 }
 .btn-group + .btn-group {
-  margin-left: 5px;
+  /*margin-left: 5px;*/
 }
 .btn-toolbar {
   margin-top: 9px;
@@ -2426,16 +2431,32 @@
 .nav-pills:after {
   clear: both;
 }
+.nav-pills {
+  margin: 0px;
+  padding: 5px 12px; 
+  width: 289px !important; 
+  border: 1px solid #d5dfe6;
+  border-top: 1px solid #eeeeee;
+  border-bottom: none;
+}
+.right .fake_table .members .nav-pills {
+	width: 304px !important;
+}
+.nav-pills:first-of-type {
+  border-top: 1px solid #d5dfe6;
+}
 .nav-tabs > li,
 .nav-pills > li {
   float: left;
 }
-.nav-tabs > li > a,
-.nav-pills > li > a {
+.nav-tabs > li > a {
   line-height: 33px;
   text-align: center;
 }
-
+.nav-pills > li > a {
+  line-height: 14px;
+  text-align: center;
+}
 .nav-tabs > li {
   margin-bottom: -1px;
   margin-left: -1px;
@@ -2455,19 +2476,26 @@
   border-top: none;
   cursor: default;
 }
+ul.nav-pills li.active {
+	float: right;
+}
 .nav-pills > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
+  padding-top: 6px;
+  padding-bottom: 10px;
   margin-top: 2px;
   margin-bottom: 2px;
   -webkit-border-radius: 5px;
   -moz-border-radius: 5px;
   border-radius: 5px;
 }
-.nav-pills .active > a,
+.nav-pills .active > a {
+  color: #ffffff;
+  background-color: #0074CD;
+  height: 14px;
+  width: 8px;  
+}
 .nav-pills .active > a:hover {
-  color: #ffffff;
-  background-color: #0088cc;
+  background-color: #0160C1;
 }
 .nav-stacked > li {
   float: none;
@@ -2510,13 +2538,15 @@
   border-width: 1px;
 }
 .nav-pills .dropdown-menu {
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
+  -webkit-border-radius: 0px;
+  -moz-border-radius: 0px;
+  border-radius: 0px;
 }
 .nav-tabs .dropdown-toggle .caret,
 .nav-pills .dropdown-toggle .caret {
-  border-top-color: #0088cc;
+  /*border-top-color: #000000;*/
+  border-top: 4px solid #005580;
+  oppacity: 0.3;
   margin-top: 6px;
 }
 .nav-tabs .dropdown-toggle:hover .caret,
@@ -2525,10 +2555,10 @@
 }
 .nav-tabs .active .dropdown-toggle .caret,
 .nav-pills .active .dropdown-toggle .caret {
-  border-top-color: #333333;
+  border-top: 4px solid #005580;
 }
 .nav > .dropdown.active > a:hover {
-  color: #000000;
+  color: #005580;
   cursor: pointer;
 }
 .nav-tabs .open .dropdown-toggle,
@@ -3755,7 +3785,7 @@
   font-style: normal;
 }
 a {
-  color: #dd4814;
+  color: #005D9D;
 }
 ul {
   list-style: none;
@@ -3767,6 +3797,7 @@
 #main_content {
   padding-left: 247px;   
   padding-right: 20px;
+  min-width: 840px;
 }
 .topbar {
   background: #f2f2f2;
@@ -3909,6 +3940,12 @@
   color: #8EACB7;
   text-shadow: none;
 }
+.nav li a.dropdown-toggle {
+  color: #8EACB7;
+}
+.nav li a.dropdown-toggle:hover {
+  color: #005580;
+}
 .container-fluid {
   padding-left: 0;
 }
@@ -4234,7 +4271,8 @@
 }
 .table_actions .table_search {
   /*display: inline-block;*/
- padding-bottom: 8px;
+  padding-bottom: 8px;
+  margin-left: 142px; 
   width: 267px;
 }
 
@@ -4381,7 +4419,7 @@
 }
 .left {
   float: left;
-  width: 347px;
+  width: 315px;
   margin-right: 15px;
 }
 .left form {
@@ -4389,7 +4427,7 @@
 }
 .right {
   float: left;
-  width: 308px;
+  width: 330px;
 }
 
 .workflow ul.nav-tabs {
@@ -4415,7 +4453,7 @@
 	background: url(../img/content_tab_bkgd_selected.png) repeat-x;
 	font-weight: bold;
 	border: 1px solid #C4CED8;
-	border-top: 1px solid #FFFFFF;
+	border-top: 1px solid #1274D1;
 	border-bottom: 1px solid #FFFFFF;
 }
 
@@ -4537,6 +4575,9 @@
   width: 10px;
 }
 /* Actions dropdown */
+th.actions_column {
+  width: 150px;	
+}
 td.actions_column {
   width: 150px;
   padding: 10px;
@@ -4969,33 +5010,49 @@
 .project_membership input {
   background: url('../../dashboard/img/search.png?781fb162b111') no-repeat 105px 5px whiteSmoke;
 }
+.membership .fake_table_header, 
 .project_membership .fake_table_header {
-  background-color: #F1F1F1;
+  background-color: #F2F4F7;
   width: 306px;
   height: 38px;
-  padding-top: 15px;
-  border: 1px solid #DDD;
+  padding-top: 10px;
+  border: 1px solid #D5DFE6;
   border-bottom: none;
 }
+.membership .fake_table,
 .project_membership .fake_table {
-  margin-left: 5px;
   width: 315px;
 }
-.project_membership .fake_table ul.no_results {
-  width: 298px;
-}
+.membership .fake_table ul.no_results,
+.project_membership .left .fake_table ul.no_results {
+  width: 313px;
+  line-height: 36px;
+  border: 1px solid #d5dfe6;  
+
+}
+.membership .fake_table ul.btn-group:hover,
 .project_membership .fake_table ul.btn-group:hover {
   background-color: #DDD;
 }
+.membership .left .fake_table_header,
 .project_membership .left .fake_table_header {
-  width: 318px;
-}
+  width: 313px;
+}
+.membership .right .fake_table_header,
 .project_membership .right .fake_table_header {
-  width: 318px;
-  margin-left: -15px;
-}
+  width: 328px;
+}
+.membership .right .fake_table ul.no_results,
 .project_membership .right .fake_table ul.no_results {
-  margin-left: -20px;
+  /*margin-left: -20px;*/
+  line-height: 36px;
+  width: 328px;
+  border: 1px solid #d5dfe6;
+}
+ul.no_results li {
+  padding: 5px 12px;
+  height: 36px;
+  line-height: 36px;
 }
 .project_membership .member {
   padding: 10px;
@@ -5004,18 +5061,21 @@
 .project_membership .project_members {
   margin-left: -20px;
 }
-.project_membership .project_members ul.btn-group,
+.membership .project_members ul.btn-group,
 .project_membership .available_users ul.btn-group {
   width: 308px;
 }
+.membership .dark_stripe,
 .project_membership .dark_stripe {
   background-color: #F9F9F9;
 }
+.membership .light_stripe, 
 .project_membership .light_stripe {
   background-color: white;
 }
+.membership .last_stripe,
 .project_membership .last_stripe {
-  border-bottom: 1px solid #DDD;
+  border-bottom: 1px solid #d5dfe6;
 }
 .project_membership .filter {
   width: 120px;
@@ -5027,6 +5087,7 @@
   padding: 10px;
   color: #08C;
 }
+.membership .role_dropdown li, 
 .project_membership .role_dropdown li {
   cursor: pointer;
   background: none;
@@ -5042,13 +5103,27 @@
   box-shadow: none;
   z-index: 99999;
 }
+.membership .role_dropdown li:hover, 
 .project_membership .role_dropdown li:hover {
   background-color: #EBECED;
 }
+.membership .nav .role_options, 
 .project_membership .nav .role_options {
   float: right;
   padding-right: 5px;
 }
+.membership input[type="text"] {
+	width: 180px;
+	float: right;
+	margin-right: 12px;
+} 
+.members_title {
+	margin-left: 12px;
+	position: relative;
+	top: 6px;
+
+}
+
 /* Inline user creation */
 .add_user_btn {
   display: inline;
@@ -5636,8 +5711,10 @@
   background-size: 14px 14px;
 }
 .launchButtons {
+  float: right;
   text-align: right;
   margin: 10px 0px 15px 10px;
+  clear: right;	
 }
 .launchButtons a.btn {
   margin-left: 10px;
@@ -5700,7 +5777,7 @@
   margin: 0px -30px 0px 0px;
   padding: 0px;
   position: relative;
-  top: 107px;
+  top: 100px;
 }
 
 #user_info, #user_info a {
@@ -5848,6 +5925,7 @@
   margin-left: 23px;
   color: #000000;
   vertical-align: top;
+  font-weight: 500;  
 }
 
 .sidebar a { font-size: 14px; }
@@ -5931,7 +6009,9 @@
 /* static pages */
 .static_page, .quota-dynamic { margin-top: 80px; }
 
-.static_page, .quota-dynamic h3 { margin-bottom: 20px; }
+.static_page, .quota-dynamic h3 { 
+  margin-bottom: 20px;
+}
 
 .static_page, .quota-dynamic .progress_bar {
   max-width: 50%;
@@ -5954,4 +6034,41 @@
 	color:#000000;
 	border-left: 1px solid #EEEEEE;
 }
+.topologyNavi {
+  height: 80px;
+}
+.quota-dynamic {
+  height: 200px; 
+  min-width: 840px;
+}
+.d3_quota_bar {
+  float: left;	
+  width: 160px;
+  text-align: center;
+  position: relative;
+  left: -30px;
+}
+#date_form h3 {
+	margin-bottom: 19px;
+}
 
+#volumes, #volume-types {
+  position: relative;
+  top: -8px;
+}
+td.normal_column, td.actions_column {
+	font-size: 12px;
+	color:#000000;
+	border-left: 1px solid #EEEEEE;
+}
+.display_name {
+	line-height: 36px;
+}
+.nodata {
+	display: none;
+}
+
+#no_update_flavor_access_members li {
+  line-height: 24px;
+  height: 48px;
+}
\ No newline at end of file
--- a/components/openstack/horizon/files/local_settings.py	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/horizon/files/local_settings.py	Fri Jun 13 09:10:23 2014 -0700
@@ -4,9 +4,16 @@
 
 from openstack_dashboard import exceptions
 
-DEBUG = False
+DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 
+# Required for Django 1.5.
+# If horizon is running in production (DEBUG is False), set this
+# with the list of host/domain names that the application can serve.
+# For more information see:
+# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
+#ALLOWED_HOSTS = ['horizon.example.com', ]
+
 # Set SSL proxy settings:
 # For Django 1.4+ pass this header from the proxy after terminating the SSL,
 # and don't forget to strip it from the client's request.
@@ -25,12 +32,32 @@
 LOGOUT_URL = '/horizon/auth/logout/'
 LOGIN_REDIRECT_URL = '/horizon'
 
-# Set STATIC_ROOT directly.
-STATIC_ROOT = "/var/lib/openstack_dashboard/static"
+STATIC_ROOT = '/var/lib/openstack_dashboard/static'
 
 # Enable Solaris theme
 TEMPLATE_DIRS = ('/var/lib/openstack_dashboard/static/solaris/theme', )
 
+# Overrides for OpenStack API versions. Use this setting to force the
+# OpenStack dashboard to use a specfic API version for a given service API.
+# NOTE: The version should be formatted as it appears in the URL for the
+# service API. For example, The identity service APIs have inconsistent
+# use of the decimal point, so valid options would be "2.0" or "3".
+# OPENSTACK_API_VERSIONS = {
+#     "identity": 3
+# }
+
+# Set this to True if running on multi-domain model. When this is enabled, it
+# will require user to enter the Domain name in addition to username for login.
+# OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False
+
+# Overrides the default domain used when running on single-domain model
+# with Keystone V3. All entities will be created in the default domain.
+# OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
+
+# Set Console type:
+# valid options would be "AUTO", "VNC" or "SPICE"
+# CONSOLE_TYPE = "AUTO"
+
 # Default OpenStack Dashboard configuration.
 HORIZON_CONFIG = {
     'dashboards': ('project', 'admin', 'settings',),
@@ -62,7 +89,7 @@
 # Turn off browser autocompletion for the login form if so desired.
 # HORIZON_CONFIG["password_autocomplete"] = "off"
 
-LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
+LOCAL_PATH = '/var/lib/openstack_dashboard'
 
 # Set custom secret key:
 # You can either set it to a specific value or you can let horizion generate a
@@ -74,7 +101,7 @@
 # requests routed to the same dashboard instance or you set the same SECRET_KEY
 # for all of them.
 from horizon.utils import secret_key
-SECRET_KEY = secret_key.generate_key()
+SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))
 
 # We recommend you use memcached for development; otherwise after every reload
 # of the django development server, you will have to login again. To use
@@ -111,11 +138,14 @@
 
 OPENSTACK_HOST = "127.0.0.1"
 OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
-OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
+OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_"
 
 # Disable SSL certificate checks (useful for self-signed certificates):
 # OPENSTACK_SSL_NO_VERIFY = True
 
+# The CA certificate to use to verify SSL connections
+# OPENSTACK_SSL_CACERT = '/path/to/cacert.pem'
+
 # The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
 # capabilities of the auth backend for Keystone.
 # If Keystone has been configured to use LDAP as the auth backend then set
@@ -125,29 +155,61 @@
 OPENSTACK_KEYSTONE_BACKEND = {
     'name': 'native',
     'can_edit_user': True,
-    'can_edit_project': True
+    'can_edit_group': True,
+    'can_edit_project': True,
+    'can_edit_domain': True,
+    'can_edit_role': True
 }
 
 OPENSTACK_HYPERVISOR_FEATURES = {
     'can_set_mount_point': True,
+}
 
-    # NOTE: as of Grizzly this is not yet supported in Nova so enabling this
-    # setting will not do anything useful
-    'can_encrypt_volumes': False
+# The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional
+# services provided by neutron. Options currenly available are load
+# balancer service, security groups, quotas, VPN service.
+OPENSTACK_NEUTRON_NETWORK = {
+    'enable_lb': False,
+    'enable_firewall': False,
+    'enable_quotas': True,
+    'enable_vpn': False,
+    # The profile_support option is used to detect if an external router can be
+    # configured via the dashboard. When using specific plugins the
+    # profile_support can be turned on if needed.
+    'profile_support': None,
+    #'profile_support': 'cisco',
 }
 
-# The OPENSTACK_QUANTUM_NETWORK settings can be used to enable optional
-# services provided by quantum.  Currently only the load balancer service
-# is available.
-OPENSTACK_QUANTUM_NETWORK = {
-    'enable_lb': False
-}
+# The OPENSTACK_IMAGE_BACKEND settings can be used to customize features
+# in the OpenStack Dashboard related to the Image service, such as the list
+# of supported image formats.
+# OPENSTACK_IMAGE_BACKEND = {
+#     'image_formats': [
+#         ('', ''),
+#         ('aki', _('AKI - Amazon Kernel Image')),
+#         ('ami', _('AMI - Amazon Machine Image')),
+#         ('ari', _('ARI - Amazon Ramdisk Image')),
+#         ('iso', _('ISO - Optical Disk Image')),
+#         ('qcow2', _('QCOW2 - QEMU Emulator')),
+#         ('raw', _('Raw')),
+#         ('vdi', _('VDI')),
+#         ('vhd', _('VHD')),
+#         ('vmdk', _('VMDK'))
+#     ]
+# }
 
 # OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints
 # in the Keystone service catalog. Use this setting when Horizon is running
-# external to the OpenStack environment. The default is 'internalURL'.
+# external to the OpenStack environment. The default is 'publicURL'.
 #OPENSTACK_ENDPOINT_TYPE = "publicURL"
 
+# SECONDARY_ENDPOINT_TYPE specifies the fallback endpoint type to use in the
+# case that OPENSTACK_ENDPOINT_TYPE is not present in the endpoints
+# in the Keystone service catalog. Use this setting when Horizon is running
+# external to the OpenStack environment. The default is None.  This
+# value should differ from OPENSTACK_ENDPOINT_TYPE if used.
+#SECONDARY_ENDPOINT_TYPE = "publicURL"
+
 # The number of objects (Swift containers/objects or images) to display
 # on a single page before providing a paging element (a "more" link)
 # to paginate results.
@@ -158,6 +220,36 @@
 # of your entire OpenStack installation, and hopefully be in UTC.
 TIME_ZONE = "UTC"
 
+# When launching an instance, the menu of available flavors is
+# sorted by RAM usage, ascending.  Provide a callback method here
+# (and/or a flag for reverse sort) for the sorted() method if you'd
+# like a different behaviour.  For more info, see
+# http://docs.python.org/2/library/functions.html#sorted
+# CREATE_INSTANCE_FLAVOR_SORT = {
+#     'key': my_awesome_callback_method,
+#     'reverse': False,
+# }
+
+# The Horizon Policy Enforcement engine uses these values to load per service
+# policy rule files. The content of these files should match the files the
+# OpenStack services are using to determine role based access control in the
+# target installation.
+
+# Path to directory containing policy.json files
+#POLICY_FILES_PATH = os.path.join(ROOT_PATH, "conf")
+# Map of local copy of service policy files
+#POLICY_FILES = {
+#    'identity': 'keystone_policy.json',
+#    'compute': 'nova_policy.json'
+#}
+
+# Trove user and database extension support. By default support for
+# creating users and databases on database instances is turned on.
+# To disable these extensions set the permission here to something
+# unusable such as ["!"].
+# TROVE_ADD_USER_PERMS = []
+# TROVE_ADD_DATABASE_PERMS = []
+
 LOGGING = {
     'version': 1,
     # When set to True this will disable all logging except
@@ -189,27 +281,182 @@
         },
         'horizon': {
             'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
         },
         'openstack_dashboard': {
             'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
         },
         'novaclient': {
             'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'cinderclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
         },
         'keystoneclient': {
             'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
         },
         'glanceclient': {
             'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'neutronclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'heatclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'ceilometerclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'troveclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'swiftclient': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'openstack_auth': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
         },
         'nose.plugins.manager': {
             'handlers': ['console'],
+            'level': 'DEBUG',
             'propagate': False,
-        }
+        },
+        'django': {
+            'handlers': ['console'],
+            'level': 'DEBUG',
+            'propagate': False,
+        },
+        'iso8601': {
+            'handlers': ['null'],
+            'propagate': False,
+        },
     }
 }
+
+SECURITY_GROUP_RULES = {
+    'all_tcp': {
+        'name': 'ALL TCP',
+        'ip_protocol': 'tcp',
+        'from_port': '1',
+        'to_port': '65535',
+    },
+    'all_udp': {
+        'name': 'ALL UDP',
+        'ip_protocol': 'udp',
+        'from_port': '1',
+        'to_port': '65535',
+    },
+    'all_icmp': {
+        'name': 'ALL ICMP',
+        'ip_protocol': 'icmp',
+        'from_port': '-1',
+        'to_port': '-1',
+    },
+    'ssh': {
+        'name': 'SSH',
+        'ip_protocol': 'tcp',
+        'from_port': '22',
+        'to_port': '22',
+    },
+    'smtp': {
+        'name': 'SMTP',
+        'ip_protocol': 'tcp',
+        'from_port': '25',
+        'to_port': '25',
+    },
+    'dns': {
+        'name': 'DNS',
+        'ip_protocol': 'tcp',
+        'from_port': '53',
+        'to_port': '53',
+    },
+    'http': {
+        'name': 'HTTP',
+        'ip_protocol': 'tcp',
+        'from_port': '80',
+        'to_port': '80',
+    },
+    'pop3': {
+        'name': 'POP3',
+        'ip_protocol': 'tcp',
+        'from_port': '110',
+        'to_port': '110',
+    },
+    'imap': {
+        'name': 'IMAP',
+        'ip_protocol': 'tcp',
+        'from_port': '143',
+        'to_port': '143',
+    },
+    'ldap': {
+        'name': 'LDAP',
+        'ip_protocol': 'tcp',
+        'from_port': '389',
+        'to_port': '389',
+    },
+    'https': {
+        'name': 'HTTPS',
+        'ip_protocol': 'tcp',
+        'from_port': '443',
+        'to_port': '443',
+    },
+    'smtps': {
+        'name': 'SMTPS',
+        'ip_protocol': 'tcp',
+        'from_port': '465',
+        'to_port': '465',
+    },
+    'imaps': {
+        'name': 'IMAPS',
+        'ip_protocol': 'tcp',
+        'from_port': '993',
+        'to_port': '993',
+    },
+    'pop3s': {
+        'name': 'POP3S',
+        'ip_protocol': 'tcp',
+        'from_port': '995',
+        'to_port': '995',
+    },
+    'ms_sql': {
+        'name': 'MS SQL',
+        'ip_protocol': 'tcp',
+        'from_port': '1433',
+        'to_port': '1433',
+    },
+    'mysql': {
+        'name': 'MYSQL',
+        'ip_protocol': 'tcp',
+        'from_port': '3306',
+        'to_port': '3306',
+    },
+    'rdp': {
+        'name': 'RDP',
+        'ip_protocol': 'tcp',
+        'from_port': '3389',
+        'to_port': '3389',
+    },
+}
--- a/components/openstack/horizon/files/overrides.py	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/horizon/files/overrides.py	Fri Jun 13 09:10:23 2014 -0700
@@ -16,7 +16,6 @@
 Solaris-specific customizations for Horizon
 """
 
-from horizon import tabs
 from openstack_dashboard.dashboards.admin.networks.forms import CreateNetwork
 from openstack_dashboard.dashboards.admin.networks.ports.forms import \
     CreatePort
@@ -26,6 +25,8 @@
     DeleteSubnet, SubnetsTable
 from openstack_dashboard.dashboards.admin.networks.tables import \
     DeleteNetwork, NetworksTable
+from openstack_dashboard.dashboards.project.access_and_security.tabs import \
+    AccessAndSecurityTabs, APIAccessTab, FloatingIPsTab, KeypairsTab
 from openstack_dashboard.dashboards.project.instances.tabs import \
     InstanceDetailTabs, LogTab, OverviewTab
 from openstack_dashboard.dashboards.project.instances.workflows import \
@@ -45,13 +46,16 @@
 from openstack_dashboard.dashboards.project.networks.workflows import \
     CreateNetworkInfoAction, CreateSubnetDetailAction, CreateSubnetInfoAction
 
-# remove PostCreationStep from LaunchInstance
+# remove VolumeOptions and PostCreationStep from LaunchInstance
 create_instance.LaunchInstance.default_steps = \
     (create_instance.SelectProjectUser,
      create_instance.SetInstanceDetails,
      create_instance.SetAccessControls,
      create_instance.SetNetwork)
 
+# Remove the Security Groups tab from Project/Access and Security
+AccessAndSecurityTabs.tabs = (KeypairsTab, FloatingIPsTab, APIAccessTab)
+
 # remove the 'Console' tab from Instance Detail
 InstanceDetailTabs.tabs = (OverviewTab, LogTab)
 
--- a/components/openstack/horizon/horizon.p5m	Wed Jun 11 05:34:04 2014 -0700
+++ b/components/openstack/horizon/horizon.p5m	Fri Jun 13 09:10:23 2014 -0700
@@ -45,7 +45,7 @@
 set name=pkg.summary value="OpenStack Horizon"
 set name=pkg.description \
     value="OpenStack Horizon is the canonical implementation of Openstack's Dashboard, which provides a web based user interface to OpenStack services including Nova, Swift, Keystone, etc."
-set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -61,7 +61,7 @@
 file files/openstack-dashboard-tls.conf \
     path=etc/apache2/2.2/samples-conf.d/openstack-dashboard-tls.conf
 file files/local_settings.py path=etc/openstack_dashboard/local_settings.py \
-    mode=0644 overlay=allow pkg.tmp.autopyc=false preserve=true
+    mode=0644 overlay=allow pkg.tmp.autopyc=false preserve=renamenew
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -97,40 +97,28 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/fields.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/loaders.py
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/bg_BG/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/bg_BG/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en_AU/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en_AU/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en_GB/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en_GB/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/es/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/es/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fi_FI/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fr/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fr/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/it/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ja/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ja/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ka_GE/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ko_KR/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ko_KR/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/nl_NL/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/nl_NL/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl_PL/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl_PL/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt_BR/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt_BR/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ru/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ru/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/vi_VN/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_CN/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_CN/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_HK/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_TW/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_TW/LC_MESSAGES/djangojs.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/management/__init__.py
@@ -141,24 +129,30 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/middleware.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/site_urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/bootstrap/js/bootstrap-datepicker.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/bootstrap/js/bootstrap.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/bootstrap/js/bootstrap.min.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.communication.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.conf.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.cookies.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.d3linechart.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.d3piechart.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.firewalls.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.forms.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.heattop.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.instances.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.membership.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.messages.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.modals.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.networktopology.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.projects.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.quota.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.tables.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.tabs.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.templates.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.users.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.utils.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/d3.v3.min.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/hogan-2.0.0.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery-ui-1.9.2.custom.min.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery.cookie.js
@@ -168,6 +162,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/json2.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/qunit/qunit.css
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/qunit/qunit.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/rickshaw.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/spin.jquery.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/spin.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/underscore/underscore-min.js
@@ -194,8 +189,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_subnav_list.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_alert_message.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_loading.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_membership.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_modal.html
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_project_user.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_script_loader.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_table_row.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/template.html
@@ -207,12 +202,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table_row_actions.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table_table_actions.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_detail_table.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_domain_page_header.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_form_fields.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_limit_summary.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_modal.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_modal_form.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_modal_form_add_members.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_page_header.html
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_progress_bar.html
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_quota_summary.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_region_selector.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_resource_browser.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_sidebar.html
@@ -220,6 +216,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_tab_group.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_usage_summary.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow_base.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow_step.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow_step_update_members.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/qunit.html
@@ -228,6 +225,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/branding.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/horizon.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/parse_date.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/shellfilter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/sizeformat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/truncate_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/__init__.py
@@ -246,18 +244,44 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/ceilometer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/cinder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/fwaas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/glance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/heat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/keystone.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/lbaas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/network.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/network_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/neutron.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/nova.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/quantum.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/trove.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/vpn.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/conf/keystone_policy.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/conf/nova_policy.json
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/context_processors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/templates/defaults/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/defaults/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/templates/domains/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/domains/workflows.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/forms.py
@@ -265,13 +289,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/views.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/edit.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_edit.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_index.html
@@ -279,9 +300,34 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/edit.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/_add_non_member.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/add_non_member.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/manage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/templates/groups/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/groups/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/templates/hypervisors/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/panel.py
@@ -309,6 +355,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/templates/metering/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/templates/metering/stats.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/metering/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/forms.py
@@ -333,9 +387,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/_update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/urls.py
@@ -348,27 +400,26 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_add_user.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_create_user.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_quotas.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_update_members.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/add_user.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/create_user.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/quotas.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/usage.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/users.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/templates/roles/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/templates/roles/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/templates/roles/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/templates/roles/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/templates/roles/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/roles/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/__init__.py
@@ -419,7 +470,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/urls.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/workflows.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/__init__.py
@@ -440,7 +490,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/api_access/openrc.sh.template
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/_allocate.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/allocate.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/associate.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/_import.html
@@ -449,9 +498,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/import.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/_add_rule.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/_update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/add_rule.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/views.py
@@ -460,17 +511,79 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_container_detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_copy.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_object_detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_upload.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/container_detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/copy.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/object_detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/upload.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/templates/database_backups/_backup_details_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/templates/database_backups/backup.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/templates/database_backups/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/templates/database_backups/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/database_backups/workflows/create_backup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_users.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_launch_details_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_launch_initialize_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_launch_restore_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/launch.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/workflows/create_instance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_firewall_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_insert_rule_to_policy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_policy_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_remove_rule_from_policy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_rule_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_update_rule_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_update_rules.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_updatefirewall.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_updatepolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/_updaterule.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/addfirewall.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/addpolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/addrule.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/details_tabs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/insert_rule_to_policy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/remove_rule_from_policy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/updatefirewall.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/updatepolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/templates/firewalls/updaterule.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/firewalls/workflows.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/forms.py
@@ -482,7 +595,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/forms.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py
@@ -499,35 +611,40 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/snapshots/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_console.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_log.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_flavors_and_quotas.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_instance_ips.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_customize_help.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_details_help.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_network_help.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_volumes_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_rebuild.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_update_networks.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/launch.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/rebuild.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/resize_instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/update_instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/tables.py
@@ -538,19 +655,37 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_monitors_tab.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_pool_details.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_pools_tab.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_updatemember.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_updatemonitor.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_updatepool.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_updatevip.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_vip_details.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addmember.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addmonitor.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addpool.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addvip.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/details_tabs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/updatemember.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/updatemonitor.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/updatepool.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/updatevip.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/workflows.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/instances/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/instances/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/ports/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/ports/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/routers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/routers/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/_create_router.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/_post_massage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/_svg_element.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_device.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_port.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/create_router.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/iframe.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/views.py
@@ -574,7 +709,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_detail_overview.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_network_ips.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/_detail_overview.html
@@ -583,10 +717,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/_detail_overview.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/urls.py
@@ -622,6 +754,31 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/mappings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/sro.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_events.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_resources.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_topology.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_resource_info.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_resource_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_select_template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_stack_info.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/resource.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/select_template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/panel.py
@@ -631,6 +788,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/_create_snapshot.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/_limits.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/attach.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/create_snapshot.html
@@ -639,9 +797,49 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_ikepolicy_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_ipsecpolicy_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_ipsecsiteconnection_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_vpnservice_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/details_tabs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/_create_network_profile.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/_update_network_profile.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/create_network_profile.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/network_profile/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/policy_profile/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/templates/nexus1000v/update_network_profile.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/router/nexus1000v/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/dashboard.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/templates/password/_change.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/templates/password/change.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/password/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/panel.py
@@ -651,36 +849,67 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/hooks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/__init__.py
 link \
     path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/local_settings.py \
     target=../../../../../../etc/openstack_dashboard/local_settings.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/bg_BG/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/en/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/en_AU/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/en_GB/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/fi_FI/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/it/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ka_GE/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ko_KR/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/nl_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pt/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pl_PL/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pt_BR/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/vi_VN/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/zh_CN/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.mo
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/setup.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/config/generator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/eventlet_backdoor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/network_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/log_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/no_op_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/rpc_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/rpc_notifier2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/notifier/test_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/amqp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/impl_fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/impl_kombu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/impl_qpid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/impl_zmq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/matchmaker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/matchmaker_redis.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/matchmaker_ring.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/serializer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/rpc/zmq_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/threadgroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/uuidutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/overrides.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/settings.py
 dir  path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static \
     owner=webservd group=webservd
@@ -696,6 +925,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/close.less
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/code.less
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/component-animations.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/datepicker.less
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/dropdowns.less
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/forms.less
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/grid.less
@@ -726,18 +956,40 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.ttf
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.woff
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/action_required.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/db-gray.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/db-gray.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/db-green.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/db-red.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/drag.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/drop_arrow.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/favicon.ico
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/lb-gray.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/lb-gray.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/lb-green.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/lb-red.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/loading.gif
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/logo-splash.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/logo.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/right_droparrow.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/router.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/search.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server-gray.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server-gray.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server-green.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server-red.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/stack-gray.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/stack-gray.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/stack-green.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/stack-red.svg