PSARC 2015/110 OpenStack service updates for Juno s11u2-sru
authorDanek Duvall <danek.duvall@oracle.com>
Mon, 20 Apr 2015 12:35:51 -0700
branchs11u2-sru
changeset 4156 4b1def16fe9b
parent 4146 097063f324c0
child 4157 92532a6159e7
PSARC 2015/110 OpenStack service updates for Juno PSARC 2014/302 oslo.messaging - OpenStack RPC and notifications PSARC 2014/303 concurrent.futures - high-level Python interface for asynchronous execution PSARC 2014/304 networkx - Python module for complex networks PSARC 2014/305 taskflow - Python module for task execution PSARC 2014/329 pycadf - Python interface for CADF (cloud auditing) PSARC 2014/330 posix_ipc - POSIX IPC primitives for Python PSARC 2014/331 oauthlib - Python implementation of OAuth request-signing logic PSARC 2014/377 noVNC - A browser based VNC client PSARC 2015/058 oslo - OpenStack common libraries (context, db, i18n, middleware, serialization, utils, vmware) PSARC 2015/059 glance_store - Glance storage library PSARC 2015/060 ipaddr - an IPv4/IPv6 manipulation library in Python PSARC 2015/061 simplegeneric - single-dispatch generic Python functions PSARC 2015/062 wsme - Web Services Made Easy PSARC 2015/063 retrying - General purpose Python retrying library PSARC 2015/065 osprofiler - an OpenStack cross-project profiling library PSARC 2015/066 OpenStack client for Sahara (Hadoop as a Service) PSARC 2015/067 keystonemiddleware - Middleware for OpenStack Identity PSARC 2015/068 pyScss - Compiler for the SCSS flavor of the Sass language PSARC 2015/069 django-pyscss - pyScss support for Django PSARC 2015/073 barbicanclient - OpenStack client for Barbican (Key Management) PSARC 2015/074 pysendfile - Python interface to sendfile PSARC 2015/097 ldappool - a connection pool for python-ldap PSARC 2015/098 rfc3986 - URI reference validation module for Python PSARC 2015/102 iniparse - python .ini file parsing module 20667775 OpenStack service updates for Juno (Umbrella) 17511386 sqlalchemy-migrate should lose its bypass-gen tags once sqlalchemy is in the CBE 18293987 /usr/bin/alembic should be shipped 18293992 boto's demo scripts aren't delivered executable 18377642 py.test has a requirement on py 18615101 Horizon should prevent network, subnet, and port names with hyphens in them 18772068 instance failed to launch with NoValidHost but no reason 18887457 openstack shouldn't deliver .po files 18905324 hostname.xml should set config/ignore_dhcp_hostname = true 18961031 Duplicate names for role-create and user-create are allowed 19015363 Users should not be allowed to attempt to create volumes when quota exceed 19044301 boto's dependencies need work 19050335 user appears logged in but unauthorised after horizon reboot 19131218 solaris.css: 'Delete Interface' button in Router pop-up menu broken 19131507 solaris.css: 'Project Limits' section of Launch Instance pop-up menu broken 19144215 Instance manipulation buttons greyed out after all instances terminated 19249066 heat stack-preview doesn't appear to do anything 19313272 Need bottom slidebar in horizon for small browser windows 19439030 'nova migration-list' returns python error 19462265 The Python module oslo.messaging should be added to Userland 19462397 The Python module futures should be added to Userland 19476604 The Python module networkx should be added to Userland 19476953 The Python module taskflow should be added to Userland 19519227 The Python module pycadf should be added to Userland 19557488 The noVNC client should be added to Userland 19582394 The Python module posix_ipc should be added to Userland 19596691 instance failed to launch, cinder hit resource busy in stmfadm 19598430 The Python module oauthlib should be added to Userland 19649055 FC connection fails when the target_lun is assigned 0 19815780 nova package should have dependencies on brand-solaris and brand-solaris-kz 19883623 Image snapshots are missing 'instance_uuid' property 19887874 horizon should set up apache log rotation 19888859 six should enable its tests now. 19987962 Cinder lists additional volumes attached to instance with linuxy device names 20046570 rabbitmq & rad-evs-controller should be added to group package 20052466 remove _ai_health_check() from driver.py now that 18857274 is integrated 20164815 The Python module django-pyscss should be added to Userland 20173049 The Python module retrying should be added to Userland 20174489 The Python module WSME should be added to Userland 20176001 The Python module keystonemiddleware should be added to Userland 20182039 The Python module pysendfile should be added to Userland 20200162 The Python module pyScss should be added to Userland 20202461 Websockify is broken on SPARC because of unnecessary byte swapping 20202582 Solaris zones nova compute driver needs console access support 20222184 horizon doesn't send start request on shutdown instance 20312312 The Python module python-saharaclient should be added to Userland 20388250 problem in SERVICE/GLANCE 20433402 The fix for 20388250 is incomplete 20514287 wrong vnic label name used for dhcp vnic in evs 20596802 The Python module oslo.middleware should be added to Userland 20596803 The Python module barbicanclient should be added to Userland 20596804 The Python module oslo.context should be added to Userland 20596805 The Python module iniparse should be added to Userland 20596806 The Python module oslo.vmware should be added to Userland 20596807 The Python module osprofiler should be added to Userland 20596808 The Python module oslo.i18n should be added to Userland 20596809 The Python module oslo.utils should be added to Userland 20596811 The Python module ipaddr should be added to Userland 20596812 The Python module glance_store should be added to Userland 20596813 The Python module oslo.serialization should be added to Userland 20596814 The Python module oslo.db should be added to Userland 20596815 The Python module simplegeneric should be added to Userland 20602690 The Python module ldappool should be added to Userland 20602722 The Python module rfc3986 should be added to Userland 20638369 compilemessages.py requires GNU msgfmt without calling gmsgfmt 20715741 cinder 2014.2.2 20715742 glance 2014.2.2 20715743 heat 2014.2.2 20715744 horizon 2014.2.2 20715745 keystone 2014.2.2 20715746 neutron 2014.2.2 20715747 nova 2014.2.2 20715748 swift 2.2.2 20715749 alembic 0.7.4 20715750 amqp 1.4.6 20715751 boto 2.34.0 20715752 ceilometerclient 1.0.12 20715753 cinderclient 1.1.1 20715754 cliff 1.9.0 20715756 django 1.4.19 20739229 Update django to 1.4.20 20715757 django_compressor 1.4 20715758 django_openstack_auth 1.1.9 20715759 eventlet 0.15.2 20715761 glanceclient 0.15.0 20715762 greenlet 0.4.5 20715763 heatclient 0.2.12 20715764 keystoneclient 1.0.0 20715765 kombu 3.0.7 20715766 mysql 1.2.5 20715767 netaddr 0.7.13 20715769 netifaces 0.10.4 20715770 neutronclient 2.3.10 20715771 novaclient 2.20.0 20715772 oslo.config 1.6.0 20715773 py 1.4.26 20715774 pyflakes 0.8.1 20715775 pytest 2.6.4 20715776 pytz 2014.10 20715777 requests 2.6.0 20715778 simplejson 3.6.5 20715779 six 1.9.0 20715780 sqlalchemy-migrate 0.9.1 20715781 sqlalchemy 0.9.8 20715782 stevedore 1.2.0 20715783 swiftclient 2.3.1 20715784 tox 1.8.1 20715785 troveclient 1.0.8 20715786 virtualenv 12.0.7 20715787 websockify 0.6.0 20739215 problem in PYTHON-MOD/DJANGO 20739295 problem in PYTHON-MOD/DJANGO 20816861 zone-vnc-console instance goes in to maintenance 20829672 support flat network type in neutron
components/dnsmasq/patches/03_client_mac.patch
components/novnc/Makefile
components/novnc/novnc.license
components/novnc/novnc.p5m
components/novnc/resolve.deps
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
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-upgrade
components/openstack/cinder/files/cinder-upgrade.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/cinder.user_attr
components/openstack/cinder/files/solaris/solarisfc.py
components/openstack/cinder/files/solaris/solarisiscsi.py
components/openstack/cinder/files/solaris/zfs.py
components/openstack/cinder/files/zfssa/__init__.py
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-requirements.patch
components/openstack/cinder/patches/02-noparamiko.patch
components/openstack/cinder/patches/02-nopycrypto.patch
components/openstack/cinder/patches/03-emc_smis_iscsi.patch
components/openstack/cinder/patches/03-emc_vmax_iscsi.patch
components/openstack/cinder/patches/04-launchpad-1236459.patch
components/openstack/cinder/patches/04-volume-backup.patch
components/openstack/cinder/patches/05-keepalive.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-cache.conf
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-upgrade
components/openstack/glance/files/glance-upgrade.xml
components/openstack/glance/files/glance.prof_attr
components/openstack/glance/files/glance.user_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/03-Partial_Content.patch
components/openstack/glance/patches/04-requirements.patch
components/openstack/glance/patches/05-CVE-2015-1881.patch
components/openstack/glance/patches/05-launchpad-1255556.patch
components/openstack/glance/patches/06-CVE-2014-5356.patch
components/openstack/glance/patches/06-CVE-2014-9684.patch
components/openstack/glance/patches/07-CVE-2014-9493.patch
components/openstack/glance/patches/08-CVE-2014-9623.patch
components/openstack/glance/resolve.deps
components/openstack/heat/Makefile
components/openstack/heat/files/api-paste.ini
components/openstack/heat/files/heat-api-cfn.xml
components/openstack/heat/files/heat-api-cloudwatch.xml
components/openstack/heat/files/heat-api.xml
components/openstack/heat/files/heat-db.xml
components/openstack/heat/files/heat-engine.xml
components/openstack/heat/files/heat-upgrade
components/openstack/heat/files/heat-upgrade.xml
components/openstack/heat/files/heat.conf
components/openstack/heat/files/heat.exec_attr
components/openstack/heat/files/heat.prof_attr
components/openstack/heat/files/heat.user_attr
components/openstack/heat/heat.p5m
components/openstack/heat/patches/01-CVE-2014-3801.patch
components/openstack/heat/patches/02-requirements.patch
components/openstack/heat/patches/04-nopycrypto.patch
components/openstack/heat/patches/05-neutron-names-required.patch
components/openstack/heat/patches/06-heat-keystone-setup.patch
components/openstack/heat/patches/07-heat-plugin-defaults.patch
components/openstack/heat/resolve.deps
components/openstack/horizon/Makefile
components/openstack/horizon/angular.license
components/openstack/horizon/bootstrap-datepicker.license
components/openstack/horizon/bootstrap-scss.license
components/openstack/horizon/d3.license
components/openstack/horizon/files/branding/css/solaris.css
components/openstack/horizon/files/branding/img/OpenStack_banner.png
components/openstack/horizon/files/branding/img/Openstack_banner.png
components/openstack/horizon/files/branding/img/dropdown_dwn.png
components/openstack/horizon/files/branding/img/dropdown_ena.png
components/openstack/horizon/files/branding/img/favicon-solaris.ico
components/openstack/horizon/files/branding/img/favicon.ico
components/openstack/horizon/files/branding/theme/_stylesheets.html
components/openstack/horizon/files/local_settings.py
components/openstack/horizon/files/openstack-dashboard-http.conf
components/openstack/horizon/files/openstack-dashboard-tls.conf
components/openstack/horizon/files/overrides.py
components/openstack/horizon/font-awesome.license
components/openstack/horizon/hogan.license
components/openstack/horizon/horizon.p5m
components/openstack/horizon/jquery-migrate.license
components/openstack/horizon/jquery-quicksearch.license
components/openstack/horizon/jquery-tablesorter.license
components/openstack/horizon/jquery-ui.license
components/openstack/horizon/jquery.license
components/openstack/horizon/jsencrypt.license
components/openstack/horizon/patches/01-CVE-2014-0157.patch
components/openstack/horizon/patches/01-osprofiler.patch
components/openstack/horizon/patches/02-change-angular-imports.patch
components/openstack/horizon/patches/02-launchpad-1264228.patch
components/openstack/horizon/patches/03-launchpad-1254694.patch
components/openstack/horizon/patches/03-remove-qunit.patch
components/openstack/horizon/patches/04-blue-piechart.patch
components/openstack/horizon/patches/04-remove-jasmine.patch
components/openstack/horizon/patches/05-disable-unsupported-bootsource.patch
components/openstack/horizon/patches/05-launchpad-1260439.patch
components/openstack/horizon/patches/06-launchpad-1255136.patch
components/openstack/horizon/patches/06-remove-security-groups.patch
components/openstack/horizon/patches/07-remove-console.patch
components/openstack/horizon/patches/07-remove-image-source.patch
components/openstack/horizon/patches/08-_get_reachable_subnets.patch
components/openstack/horizon/patches/08-flavor-names.patch
components/openstack/horizon/patches/09-disable-unsupported-bootsource.patch
components/openstack/horizon/patches/10-network-agents.patch
components/openstack/horizon/patches/11-CVE-2014-3473-3474-3475.patch
components/openstack/horizon/patches/11-requirements.patch
components/openstack/horizon/patches/12-launchpad-1265032.patch
components/openstack/horizon/patches/13-CVE-2014-3594.patch
components/openstack/horizon/patches/14-CVE-2014-8124.patch
components/openstack/horizon/patches/99-remove.xstatic.patch
components/openstack/horizon/resolve.deps
components/openstack/horizon/rickshaw.license
components/openstack/horizon/spin.license
components/openstack/horizon/xstatic.license
components/openstack/keystone/Makefile
components/openstack/keystone/files/keystone-paste.ini
components/openstack/keystone/files/keystone-upgrade
components/openstack/keystone/files/keystone-upgrade.xml
components/openstack/keystone/files/keystone.conf
components/openstack/keystone/files/keystone.prof_attr
components/openstack/keystone/files/keystone.user_attr
components/openstack/keystone/files/keystone.xml
components/openstack/keystone/keystone.p5m
components/openstack/keystone/patches/01-launchpad-1244304.patch
components/openstack/keystone/patches/02-launchpad-1178740.patch
components/openstack/keystone/patches/03-sample-data-sh.patch
components/openstack/keystone/patches/04-CVE-2014-2828.patch
components/openstack/keystone/patches/05-requirements.patch
components/openstack/keystone/patches/06-CVE-2014-3476.patch
components/openstack/keystone/patches/07-CVE-2014-3520.patch
components/openstack/keystone/patches/08-CVE-2014-3621.patch
components/openstack/keystone/patches/launchpad-1384775.patch
components/openstack/keystone/patches/launchpad-1404354.patch
components/openstack/keystone/patches/requirements.patch
components/openstack/keystone/patches/sample-data.sh.patch
components/openstack/keystone/resolve.deps
components/openstack/neutron/Makefile
components/openstack/neutron/files/agent/evs_l3_agent.py
components/openstack/neutron/files/agent/solaris/dhcp.py
components/openstack/neutron/files/agent/solaris/interface.py
components/openstack/neutron/files/agent/solaris/net_lib.py
components/openstack/neutron/files/agent/solaris/ra.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/migrate/__init__.py
components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py
components/openstack/neutron/files/evs/migrate/havana_api.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/metadata_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-metadata-agent
components/openstack/neutron/files/neutron-metadata-agent.xml
components/openstack/neutron/files/neutron-server.xml
components/openstack/neutron/files/neutron-upgrade
components/openstack/neutron/files/neutron-upgrade.xml
components/openstack/neutron/files/neutron.conf
components/openstack/neutron/files/neutron.exec_attr
components/openstack/neutron/files/neutron.prof_attr
components/openstack/neutron/files/neutron.user_attr
components/openstack/neutron/neutron.p5m
components/openstack/neutron/patches/01-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-metadata-agent-add-solaris.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/patches/07-CVE-2014-6414.patch
components/openstack/neutron/patches/08-CVE-2014-7821.patch
components/openstack/neutron/resolve.deps
components/openstack/nova/Makefile
components/openstack/nova/files/api-paste.ini
components/openstack/nova/files/network/solaris_net.py
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-upgrade
components/openstack/nova/files/nova-upgrade.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/nova.user_attr
components/openstack/nova/files/release
components/openstack/nova/files/solariszones/driver.py
components/openstack/nova/files/solariszones/sysconfig.py
components/openstack/nova/files/zone-vnc-console
components/openstack/nova/files/zone-vnc-console.xml
components/openstack/nova/nova.p5m
components/openstack/nova/patches/01-Solaris-vm_mode.patch
components/openstack/nova/patches/02-requirements.patch
components/openstack/nova/patches/03-Solaris-flavors.patch
components/openstack/nova/patches/04-CVE-2014-0134-partial.patch
components/openstack/nova/patches/04-compute-hvtype.patch
components/openstack/nova/patches/05-CVE-2014-0167.patch
components/openstack/nova/patches/05-launchpad-1391782.patch
components/openstack/nova/patches/06-CVE-2014-2573.patch
components/openstack/nova/patches/06-Solaris-dev-name.patch
components/openstack/nova/patches/07-CVE-2014-3517.patch
components/openstack/nova/patches/07-CVE-2015-0259.patch
components/openstack/nova/patches/08-CVE-2014-3608.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-reconciler.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.xml
components/openstack/swift/files/swift-smf-method
components/openstack/swift/files/swift-upgrade
components/openstack/swift/files/swift-upgrade.xml
components/openstack/swift/files/swift.exec_attr
components/openstack/swift/files/swift.prof_attr
components/openstack/swift/files/swift.user_attr
components/openstack/swift/patches/01-CVE-2014-0006.patch
components/openstack/swift/patches/02-requirements.patch
components/openstack/swift/patches/CVE-2014-7960.patch
components/openstack/swift/patches/manager.patch
components/openstack/swift/patches/manpages.patch
components/openstack/swift/patches/recon.patch
components/openstack/swift/patches/requirements.patch
components/openstack/swift/patches/rlimit_nproc.patch
components/openstack/swift/patches/test.patch
components/openstack/swift/patches/workers.patch
components/openstack/swift/resolve.deps
components/openstack/swift/swift.p5m
components/python/alembic/Makefile
components/python/alembic/alembic-PYVER.p5m
components/python/alembic/resolve.deps
components/python/amqp/Makefile
components/python/amqp/amqp-PYVER.p5m
components/python/amqp/patches/auto_delete-ok.patch
components/python/barbicanclient/Makefile
components/python/barbicanclient/barbicanclient-PYVER.p5m
components/python/barbicanclient/resolve.deps
components/python/boto/Makefile
components/python/boto/boto-PYVER.p5m
components/python/boto/patches/mturk.patch
components/python/ceilometerclient/Makefile
components/python/ceilometerclient/ceilometerclient-PYVER.p5m
components/python/cffi/Makefile
components/python/cinderclient/Makefile
components/python/cinderclient/cinderclient-PYVER.p5m
components/python/cliff/Makefile
components/python/cliff/cliff-PYVER.p5m
components/python/django-pyscss/Makefile
components/python/django-pyscss/django-pyscss-PYVER.p5m
components/python/django-pyscss/resolve.deps
components/python/django/Makefile
components/python/django/django-PYVER.p5m
components/python/django/patches/use-gnu-msgfmt.patch
components/python/django/resolve.deps
components/python/django_compressor/Makefile
components/python/django_compressor/django_compressor-PYVER.p5m
components/python/django_openstack_auth/Makefile
components/python/django_openstack_auth/django_openstack_auth-PYVER.p5m
components/python/django_openstack_auth/patches/CVE-2014-8124.patch
components/python/eventlet/Makefile
components/python/eventlet/eventlet-PYVER.p5m
components/python/futures/Makefile
components/python/futures/futures-PYVER.p5m
components/python/futures/resolve.deps
components/python/glance_store/Makefile
components/python/glance_store/glance_store-PYVER.p5m
components/python/glance_store/glance_store.license
components/python/glance_store/patches/no-tests.patch
components/python/glance_store/resolve.deps
components/python/glanceclient/Makefile
components/python/glanceclient/glanceclient-PYVER.p5m
components/python/greenlet/Makefile
components/python/greenlet/greenlet-PYVER.p5m
components/python/greenlet/patches/01-slp_switch-sparc-multi-thread.patch
components/python/heatclient/Makefile
components/python/heatclient/heatclient-PYVER.p5m
components/python/iniparse/Makefile
components/python/iniparse/iniparse-GENFRAG.p5m
components/python/iniparse/iniparse-PYVER.p5m
components/python/iniparse/resolve.deps
components/python/ipaddr/Makefile
components/python/ipaddr/ipaddr-PYVER.p5m
components/python/ipaddr/resolve.deps
components/python/jinja2/Makefile
components/python/jinja2/jinja2-PYVER.p5m
components/python/keystoneclient/Makefile
components/python/keystoneclient/keystoneclient-PYVER.p5m
components/python/keystoneclient/patches/01-CVE-2014-7144.patch
components/python/keystoneclient/patches/nopycrypto.patch
components/python/keystonemiddleware/Makefile
components/python/keystonemiddleware/keystonemiddleware-PYVER.p5m
components/python/keystonemiddleware/patches/nopycrypto.patch
components/python/keystonemiddleware/resolve.deps
components/python/kombu/Makefile
components/python/kombu/kombu-PYVER.p5m
components/python/ldappool/Makefile
components/python/ldappool/ldappool-PYVER.p5m
components/python/ldappool/ldappool.license
components/python/ldappool/patches/python-3-exception.patch
components/python/ldappool/resolve.deps
components/python/markupsafe/Makefile
components/python/markupsafe/markupsafe-PYVER.p5m
components/python/mysql/Makefile
components/python/mysql/mysql-PYVER.p5m
components/python/mysql/resolve.deps
components/python/netaddr/Makefile
components/python/netaddr/netaddr-PYVER.p5m
components/python/netifaces/Makefile
components/python/netifaces/netifaces-PYVER.p5m
components/python/netifaces/patches/00-64bit.patch
components/python/networkx/Makefile
components/python/networkx/networkx-GENFRAG.p5m
components/python/networkx/networkx-PYVER.p5m
components/python/networkx/patches/01-no-tests.patch
components/python/networkx/resolve.deps
components/python/neutronclient/Makefile
components/python/neutronclient/neutronclient-PYVER.p5m
components/python/novaclient/Makefile
components/python/novaclient/novaclient-PYVER.p5m
components/python/novaclient/patches/01-novaclient-migration-list.patch
components/python/oauthlib/Makefile
components/python/oauthlib/oauthlib-PYVER.p5m
components/python/oauthlib/resolve.deps
components/python/oslo.config/Makefile
components/python/oslo.config/oslo.config-PYVER.p5m
components/python/oslo.config/patches/disable-oslo-deprecation.patch
components/python/oslo.context/Makefile
components/python/oslo.context/oslo.context-PYVER.p5m
components/python/oslo.context/resolve.deps
components/python/oslo.db/Makefile
components/python/oslo.db/oslo.db-PYVER.p5m
components/python/oslo.db/resolve.deps
components/python/oslo.i18n/Makefile
components/python/oslo.i18n/oslo.i18n-PYVER.p5m
components/python/oslo.i18n/patches/disable-oslo-deprecation.patch
components/python/oslo.i18n/resolve.deps
components/python/oslo.messaging/Makefile
components/python/oslo.messaging/oslo.messaging-PYVER.p5m
components/python/oslo.messaging/resolve.deps
components/python/oslo.middleware/Makefile
components/python/oslo.middleware/oslo.middleware-PYVER.p5m
components/python/oslo.middleware/patches/disable-oslo-deprecation.patch
components/python/oslo.middleware/resolve.deps
components/python/oslo.serialization/Makefile
components/python/oslo.serialization/oslo.serialization-PYVER.p5m
components/python/oslo.serialization/patches/disable-oslo-deprecation.patch
components/python/oslo.serialization/resolve.deps
components/python/oslo.utils/Makefile
components/python/oslo.utils/oslo.utils-PYVER.p5m
components/python/oslo.utils/patches/disable-oslo-deprecation.patch
components/python/oslo.utils/resolve.deps
components/python/oslo.vmware/Makefile
components/python/oslo.vmware/oslo.vmware-PYVER.p5m
components/python/oslo.vmware/resolve.deps
components/python/osprofiler/Makefile
components/python/osprofiler/osprofiler-PYVER.p5m
components/python/osprofiler/resolve.deps
components/python/posix_ipc/Makefile
components/python/posix_ipc/posix_ipc-PYVER.p5m
components/python/posix_ipc/resolve.deps
components/python/py/Makefile
components/python/py/py-PYVER.p5m
components/python/pycadf/Makefile
components/python/pycadf/pycadf-GENFRAG.p5m
components/python/pycadf/pycadf-PYVER.p5m
components/python/pycadf/resolve.deps
components/python/pyflakes/Makefile
components/python/pyflakes/pyflakes-PYVER.p5m
components/python/pylxml/pylxml-PYVER.p5m
components/python/pyopenssl/Makefile
components/python/pyopenssl/pyopenssl-PYVER.p5m
components/python/pyscss/Makefile
components/python/pyscss/patches/pcre.include.patch
components/python/pyscss/pyscss-PYVER.p5m
components/python/pyscss/resolve.deps
components/python/pysendfile/Makefile
components/python/pysendfile/pysendfile-PYVER.p5m
components/python/pysendfile/resolve.deps
components/python/pytest/Makefile
components/python/pytest/pytest-PYVER.p5m
components/python/pytz/Makefile
components/python/pytz/patches/zoneinfopath.patch
components/python/pytz/patches/zones.patch
components/python/pytz/pytz-PYVER.p5m
components/python/requests/Makefile
components/python/requests/patches/solaris-changes.patch
components/python/requests/requests-PYVER.p5m
components/python/requests/requests.license
components/python/requests/resolve.deps
components/python/retrying/Makefile
components/python/retrying/resolve.deps
components/python/retrying/retrying-PYVER.p5m
components/python/rfc3986/Makefile
components/python/rfc3986/resolve.deps
components/python/rfc3986/rfc3986-PYVER.p5m
components/python/rfc3986/runtests.sh
components/python/saharaclient/Makefile
components/python/saharaclient/resolve.deps
components/python/saharaclient/saharaclient-PYVER.p5m
components/python/simplegeneric/Makefile
components/python/simplegeneric/resolve.deps
components/python/simplegeneric/simplegeneric-PYVER.p5m
components/python/simplegeneric/simplegeneric.license
components/python/simplejson/Makefile
components/python/simplejson/simplejson-PYVER.p5m
components/python/six/Makefile
components/python/six/six-PYVER.p5m
components/python/sqlalchemy-migrate/Makefile
components/python/sqlalchemy-migrate/patches/01-fix-warnings.patch
components/python/sqlalchemy-migrate/resolve.deps
components/python/sqlalchemy-migrate/sqlalchemy-migrate-PYVER.p5m
components/python/sqlalchemy/Makefile
components/python/sqlalchemy/sqlalchemy-PYVER.p5m
components/python/stevedore/Makefile
components/python/stevedore/stevedore-PYVER.p5m
components/python/swiftclient/Makefile
components/python/swiftclient/swiftclient-PYVER.p5m
components/python/taskflow/Makefile
components/python/taskflow/resolve.deps
components/python/taskflow/taskflow-PYVER.p5m
components/python/tox/Makefile
components/python/tox/tox-PYVER.p5m
components/python/troveclient/Makefile
components/python/troveclient/troveclient-PYVER.p5m
components/python/virtualenv/Makefile
components/python/virtualenv/virtualenv-PYVER.p5m
components/python/websockify/Makefile
components/python/websockify/patches/websockify-byte-order.patch
components/python/websockify/websockify-PYVER.p5m
components/python/wsme/Makefile
components/python/wsme/resolve.deps
components/python/wsme/wsme-PYVER.p5m
components/python/xattr/Makefile
components/python/xattr/xattr-PYVER.p5m
make-rules/ips.mk
make-rules/prep.mk
make-rules/setup.py.mk
make-rules/shared-targets.mk
transforms/standard-python-libraries
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/dnsmasq/patches/03_client_mac.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,43 @@
+Solaris doesn't have an easy way to retrieve the MAC address of the client
+that is soliciting the DHCPv6 IP address. This fix uses a simple way to
+retrieve the client MAC address from the client's EUI64 link-local address.
+
+
+*** dnsmasq-2.68/src/dhcp6.c	2013-12-08 07:58:29.000000000 -0800
+--- NEW/src/dhcp6.c	2015-02-23 18:33:30.937299563 -0800
+***************
+*** 231,236 ****
+--- 231,253 ----
+  
+  void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsigned int *maclenp, unsigned int *mactypep)
+  {
++ #ifdef HAVE_SOLARIS_NETWORK
++ /* Solaris does not have an easy way to retrieve MAC address for a given IPv6 address from the kernel.
++    For now the following workaround should work for OpenStack's needs. */
++   uint8_t *addr6;
++ 
++   *maclenp = ETHER_ADDR_LEN;
++   *mactypep = ARPHRD_ETHER;
++   /* Take the EUI64 based client's link-local address and convert it to client's MAC address.
++      For example: from fe80::f816:3eff:fe5c:df43 link-local address we arrive at fa:16:3e:5c:df:43 */
++   addr6 = client->s6_addr;
++   mac[0] = addr6[8] ^ 0x2;
++   mac[1] = addr6[9];
++   mac[2] = addr6[10];
++   mac[3] = addr6[13];
++   mac[4] = addr6[14];
++   mac[5]= addr6[15];
++ #else
+    /* Recieving a packet from a host does not populate the neighbour
+       cache, so we send a neighbour discovery request if we can't 
+       find the sender. Repeat a few times in case of packet loss. */
+***************
+*** 276,281 ****
+--- 293,299 ----
+  
+    *maclenp = mac_param.maclen;
+    *mactypep = ARPHRD_ETHER;
++ #endif /* HAVE_SOLARIS_NETWORK */
+  }
+      
+  static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/novnc/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,54 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		noVNC
+COMPONENT_VERSION=	0.5
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	v$(COMPONENT_VERSION).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:6d702a628c85384118d85d51225770a78dd62d805229f56e42b92798c87baa31
+COMPONENT_ARCHIVE_URL=  https://github.com/kanaka/noVNC/archive/$(COMPONENT_ARCHIVE)
+COMPONENT_PROJECT_URL=  http://kanaka.github.io/noVNC
+COMPONENT_BUGDB=	utility/novnc
+
+TPNO=			18799
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:          prep
+
+install:	build
+
+test:		$(NO_TESTS)
+
+clean::
+	$(RM) -r $(BUILD_DIR)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/novnc/novnc.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,928 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in 
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
+
+--------------------------------------------------------------------------------
+
+Copyright (c) 2012, Joel Martin
+Copyright (C) 2013, Samuel Mannehed for Cendio AB
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the <organization> nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--------------------------------------------------------------------------------
+
+Copyright (c) 2012, Joel Martin
+Copyright (C) 2013, Samuel Mannehed for Cendio AB
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Ported from Flashlight VNC ActionScript implementation:
+    http://www.wizhelp.com/flashlight-vnc/
+
+Full attribution follows:
+
+-------------------------------------------------------------------------
+
+This DES class has been extracted from package Acme.Crypto for use in VNC.
+The unnecessary odd parity code has been removed.
+
+These changes are:
+ Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+DesCipher - the DES encryption method
+
+The meat of this code is by Dave Zimmerman <[email protected]>, and is:
+
+Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved.
+
+Permission to use, copy, modify, and distribute this software
+and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and
+without fee is hereby granted, provided that this copyright notice is kept 
+intact. 
+
+WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY
+OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE
+FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+
+THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
+CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
+PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
+NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
+SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
+SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
+PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  WIDGET WORKSHOP
+SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
+HIGH RISK ACTIVITIES.
+
+
+The rest is:
+
+Copyright (C) 1996 by Jef Poskanzer <[email protected]>.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Visit the ACME Labs Java page for up-to-date versions of this and other
+fine Java utilities: http://www.acme.com/java/
+
+--------------------------------------------------------------------------------
+
+Copyright 2009 Matt McInerney
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+--------------------------------------------------------------------------------
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE 
+COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY 
+COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS 
+AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE 
+BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE 
+CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE 
+IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+"Adaptation" means a work based upon the Work, or upon the Work and other 
+pre-existing works, such as a translation, adaptation, derivative work, 
+arrangement of music or other alterations of a literary or artistic work, or 
+phonogram or performance and includes cinematographic adaptations or any other 
+form in which the Work may be recast, transformed, or adapted including in any 
+form recognizably derived from the original, except that a work that 
+constitutes a Collection will not be considered an Adaptation for the purpose 
+of this License. For the avoidance of doubt, where the Work is a musical work, 
+performance or phonogram, the synchronization of the Work in timed-relation 
+with a moving image ("synching") will be considered an Adaptation for the 
+purpose of this License.
+"Collection" means a collection of literary or artistic works, such as 
+encyclopedias and anthologies, or performances, phonograms or broadcasts, or 
+other works or subject matter other than works listed in Section 1(f) below, 
+which, by reason of the selection and arrangement of their contents, constitute 
+intellectual creations, in which the Work is included in its entirety in 
+unmodified form along with one or more other contributions, each constituting 
+separate and independent works in themselves, which together are assembled into 
+a collective whole. A work that constitutes a Collection will not be considered 
+an Adaptation (as defined below) for the purposes of this License.
+"Creative Commons Compatible License" means a license that is listed at 
+http://creativecommons.org/compatiblelicenses that has been approved by 
+Creative Commons as being essentially equivalent to this License, including, at 
+a minimum, because that license: (i) contains terms that have the same purpose, 
+meaning and effect as the License Elements of this License; and, (ii) 
+explicitly permits the relicensing of adaptations of works made available under 
+that license under this License or a Creative Commons jurisdiction license with 
+the same License Elements as this License.
+"Distribute" means to make available to the public the original and copies of 
+the Work or Adaptation, as appropriate, through sale or other transfer of 
+ownership.
+"License Elements" means the following high-level license attributes as 
+selected by Licensor and indicated in the title of this License: Attribution, 
+ShareAlike.
+"Licensor" means the individual, individuals, entity or entities that offer(s) 
+the Work under the terms of this License.
+"Original Author" means, in the case of a literary or artistic work, the 
+individual, individuals, entity or entities who created the Work or if no 
+individual or entity can be identified, the publisher; and in addition (i) in 
+the case of a performance the actors, singers, musicians, dancers, and other 
+persons who act, sing, deliver, declaim, play in, interpret or otherwise 
+perform literary or artistic works or expressions of folklore; (ii) in the case 
+of a phonogram the producer being the person or legal entity who first fixes 
+the sounds of a performance or other sounds; and, (iii) in the case of 
+broadcasts, the organization that transmits the broadcast.
+"Work" means the literary and/or artistic work offered under the terms of this 
+License including without limitation any production in the literary, scientific 
+and artistic domain, whatever may be the mode or form of its expression 
+including digital form, such as a book, pamphlet and other writing; a lecture, 
+address, sermon or other work of the same nature; a dramatic or 
+dramatico-musical work; a choreographic work or entertainment in dumb show; a 
+musical composition with or without words; a cinematographic work to which are 
+assimilated works expressed by a process analogous to cinematography; a work of 
+drawing, painting, architecture, sculpture, engraving or lithography; a 
+photographic work to which are assimilated works expressed by a process 
+analogous to photography; a work of applied art; an illustration, map, plan, 
+sketch or three-dimensional work relative to geography, topography, 
+architecture or science; a performance; a broadcast; a phonogram; a compilation 
+of data to the extent it is protected as a copyrightable work; or a work 
+performed by a variety or circus performer to the extent it is not otherwise 
+considered a literary or artistic work.
+"You" means an individual or entity exercising rights under this License who 
+has not previously violated the terms of this License with respect to the Work, 
+or who has received express permission from the Licensor to exercise rights 
+under this License despite a previous violation.
+"Publicly Perform" means to perform public recitations of the Work and to 
+communicate to the public those public recitations, by any means or process, 
+including by wire or wireless means or public digital performances; to make 
+available to the public Works in such a way that members of the public may 
+access these Works from a place and at a place individually chosen by them; to 
+perform the Work to the public by any means or process and the communication to 
+the public of the performances of the Work, including by public digital 
+performance; to broadcast and rebroadcast the Work by any means including 
+signs, sounds or images.
+"Reproduce" means to make copies of the Work by any means including without 
+limitation by sound or visual recordings and the right of fixation and 
+reproducing fixations of the Work, including storage of a protected performance 
+or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights.
+
+Nothing in this License is intended to reduce, limit, 
+or restrict any uses free from copyright or rights arising from limitations or 
+exceptions that are provided for in connection with the copyright protection 
+under copyright law or other applicable laws.
+
+3. License Grant.
+
+Subject to the terms and conditions of this License, Licensor 
+hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the 
+duration of the applicable copyright) license to exercise the rights in the 
+Work as stated below:
+
+to Reproduce the Work, to incorporate the Work into one or more Collections, 
+and to Reproduce the Work as incorporated in the Collections;
+to create and Reproduce Adaptations provided that any such Adaptation, 
+including any translation in any medium, takes reasonable steps to clearly 
+label, demarcate or otherwise identify that changes were made to the original 
+Work. For example, a translation could be marked "The original work was 
+translated from English to Spanish," or a modification could indicate "The 
+original work has been modified.";
+to Distribute and Publicly Perform the Work including as incorporated in 
+Collections; and,
+to Distribute and Publicly Perform Adaptations.
+For the avoidance of doubt:
+
+Non-waivable Compulsory License Schemes. In those jurisdictions in which the 
+right to collect royalties through any statutory or compulsory licensing scheme 
+cannot be waived, the Licensor reserves the exclusive right to collect such 
+royalties for any exercise by You of the rights granted under this License;
+Waivable Compulsory License Schemes. In those jurisdictions in which the right 
+to collect royalties through any statutory or compulsory licensing scheme can 
+be waived, the Licensor waives the exclusive right to collect such royalties 
+for any exercise by You of the rights granted under this License; and,
+Voluntary License Schemes. The Licensor waives the right to collect royalties, 
+whether individually or, in the event that the Licensor is a member of a 
+collecting society that administers voluntary licensing schemes, via that 
+society, from any exercise by You of the rights granted under this License.
+The above rights may be exercised in all media and formats whether now known or 
+hereafter devised. The above rights include the right to make such 
+modifications as are technically necessary to exercise the rights in other 
+media and formats. Subject to Section 8(f), all rights not expressly granted by 
+Licensor are hereby reserved.
+
+4. Restrictions.
+
+The license granted in Section 3 above is expressly made 
+subject to and limited by the following restrictions:
+
+You may Distribute or Publicly Perform the Work only under the terms of this 
+License. You must include a copy of, or the Uniform Resource Identifier (URI) 
+for, this License with every copy of the Work You Distribute or Publicly 
+Perform. You may not offer or impose any terms on the Work that restrict the 
+terms of this License or the ability of the recipient of the Work to exercise 
+the rights granted to that recipient under the terms of the License. You may 
+not sublicense the Work. You must keep intact all notices that refer to this 
+License and to the disclaimer of warranties with every copy of the Work You 
+Distribute or Publicly Perform. When You Distribute or Publicly Perform the 
+Work, You may not impose any effective technological measures on the Work that 
+restrict the ability of a recipient of the Work from You to exercise the rights 
+granted to that recipient under the terms of the License. This Section 4(a) 
+applies to the Work as incorporated in a Collection, but this does not require 
+the Collection apart from the Work itself to be made subject to the terms of 
+this License. If You create a Collection, upon notice from any Licensor You 
+must, to the extent practicable, remove from the Collection any credit as 
+required by Section 4(c), as requested. If You create an Adaptation, upon 
+notice from any Licensor You must, to the extent practicable, remove from the 
+Adaptation any credit as required by Section 4(c), as requested.
+You may Distribute or Publicly Perform an Adaptation only under the terms of: 
+(i) this License; (ii) a later version of this License with the same License 
+Elements as this License; (iii) a Creative Commons jurisdiction license (either 
+this or a later license version) that contains the same License Elements as 
+this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons 
+Compatible License. If you license the Adaptation under one of the licenses 
+mentioned in (iv), you must comply with the terms of that license. If you 
+license the Adaptation under the terms of any of the licenses mentioned in (i), 
+(ii) or (iii) (the "Applicable License"), you must comply with the terms of the 
+Applicable License generally and the following provisions: (I) You must include 
+a copy of, or the URI for, the Applicable License with every copy of each 
+Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose 
+any terms on the Adaptation that restrict the terms of the Applicable License 
+or the ability of the recipient of the Adaptation to exercise the rights 
+granted to that recipient under the terms of the Applicable License; (III) You 
+must keep intact all notices that refer to the Applicable License and to the 
+disclaimer of warranties with every copy of the Work as included in the 
+Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or 
+Publicly Perform the Adaptation, You may not impose any effective technological 
+measures on the Adaptation that restrict the ability of a recipient of the 
+Adaptation from You to exercise the rights granted to that recipient under the 
+terms of the Applicable License. This Section 4(b) applies to the Adaptation as 
+incorporated in a Collection, but this does not require the Collection apart 
+from the Adaptation itself to be made subject to the terms of the Applicable 
+License.
+If You Distribute, or Publicly Perform the Work or any Adaptations or 
+Collections, You must, unless a request has been made pursuant to Section 4(a), 
+keep intact all copyright notices for the Work and provide, reasonable to the 
+medium or means You are utilizing: (i) the name of the Original Author (or 
+pseudonym, if applicable) if supplied, and/or if the Original Author and/or 
+Licensor designate another party or parties (e.g., a sponsor institute, 
+publishing entity, journal) for attribution ("Attribution Parties") in 
+Licensor's copyright notice, terms of service or by other reasonable means, the 
+name of such party or parties; (ii) the title of the Work if supplied; (iii) to 
+the extent reasonably practicable, the URI, if any, that Licensor specifies to 
+be associated with the Work, unless such URI does not refer to the copyright 
+notice or licensing information for the Work; and (iv) , consistent with 
+Ssection 3(b), in the case of an Adaptation, a credit identifying the use of 
+the Work in the Adaptation (e.g., "French translation of the Work by Original 
+Author," or "Screenplay based on original Work by Original Author"). The credit 
+required by this Section 4(c) may be implemented in any reasonable manner; 
+provided, however, that in the case of a Adaptation or Collection, at a minimum 
+such credit will appear, if a credit for all contributing authors of the 
+Adaptation or Collection appears, then as part of these credits and in a manner 
+at least as prominent as the credits for the other contributing authors. For 
+the avoidance of doubt, You may only use the credit required by this Section 
+for the purpose of attribution in the manner set out above and, by exercising 
+Your rights under this License, You may not implicitly or explicitly assert or 
+imply any connection with, sponsorship or endorsement by the Original Author, 
+Licensor and/or Attribution Parties, as appropriate, of You or Your use of the 
+Work, without the separate, express prior written permission of the Original 
+Author, Licensor and/or Attribution Parties.
+Except as otherwise agreed in writing by the Licensor or as may be otherwise 
+permitted by applicable law, if You Reproduce, Distribute or Publicly Perform 
+the Work either by itself or as part of any Adaptations or Collections, You 
+must not distort, mutilate, modify or take other derogatory action in relation 
+to the Work which would be prejudicial to the Original Author's honor or 
+reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which 
+any exercise of the right granted in Section 3(b) of this License (the right to 
+make Adaptations) would be deemed to be a distortion, mutilation, modification 
+or other derogatory action prejudicial to the Original Author's honor and 
+reputation, the Licensor will waive or not assert, as appropriate, this 
+Section, to the fullest extent permitted by the applicable national law, to 
+enable You to reasonably exercise Your right under Section 3(b) of this License 
+(right to make Adaptations) but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS 
+THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND 
+CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, 
+WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A 
+PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, 
+ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. 
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH 
+EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. 
+
+EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN 
+NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, 
+INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS 
+LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+This License and the rights granted hereunder will terminate automatically upon 
+any breach by You of the terms of this License. Individuals or entities who 
+have received Adaptations or Collections from You under this License, however, 
+will not have their licenses terminated provided such individuals or entities 
+remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 
+will survive any termination of this License.
+Subject to the above terms and conditions, the license granted here is 
+perpetual (for the duration of the applicable copyright in the Work). 
+Notwithstanding the above, Licensor reserves the right to release the Work 
+under different license terms or to stop distributing the Work at any time; 
+provided, however that any such election will not serve to withdraw this 
+License (or any other license that has been, or is required to be, granted 
+under the terms of this License), and this License will continue in full force 
+and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+Each time You Distribute or Publicly Perform the Work or a Collection, the 
+Licensor offers to the recipient a license to the Work on the same terms and 
+conditions as the license granted to You under this License.
+Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to 
+the recipient a license to the original Work on the same terms and conditions 
+as the license granted to You under this License.
+If any provision of this License is invalid or unenforceable under applicable 
+law, it shall not affect the validity or enforceability of the remainder of the 
+terms of this License, and without further action by the parties to this 
+agreement, such provision shall be reformed to the minimum extent necessary to 
+make such provision valid and enforceable.
+No term or provision of this License shall be deemed waived and no breach 
+consented to unless such waiver or consent shall be in writing and signed by 
+the party to be charged with such waiver or consent.
+This License constitutes the entire agreement between the parties with respect 
+to the Work licensed here. There are no understandings, agreements or 
+representations with respect to the Work not specified here. Licensor shall not 
+be bound by any additional provisions that may appear in any communication from 
+You. This License may not be modified without the mutual written agreement of 
+the Licensor and You.
+The rights granted under, and the subject matter referenced, in this License 
+were drafted utilizing the terminology of the Berne Convention for the 
+Protection of Literary and Artistic Works (as amended on September 28, 1979), 
+the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO 
+Performances and Phonograms Treaty of 1996 and the Universal Copyright 
+Convention (as revised on July 24, 1971). These rights and subject matter take 
+effect in the relevant jurisdiction in which the License terms are sought to be 
+enforced according to the corresponding provisions of the implementation of 
+those treaty provisions in the applicable national law. If the standard suite 
+of rights granted under applicable copyright law includes additional rights not 
+granted under this License, such additional rights are deemed to be included in 
+the License; this License is not intended to restrict the license of any rights 
+under applicable law.
+
+--------------------------------------------------------------------------------
+
+Copyright (c) 2011 by Erik Moller
+All rights reserved.
+
+This software is provided 'as-is', without any express
+or implied warranty.  In no event will the authors be
+held liable for any damages arising from the use of
+this software.
+
+Permission is granted to anyone to use this software
+for any purpose, including commercial applications,
+and to alter it and redistribute it freely, subject to
+the following restrictions:
+
+1. The origin of this software must not be
+   misrepresented; you must not claim that you
+   wrote the original software. If you use this
+   software in a product, an acknowledgment in
+   the product documentation would be appreciated
+   but is not required.
+
+2. Altered source versions must be plainly marked
+   as such, and must not be misrepresented as
+   being the original software.
+
+3. This notice may not be removed or altered from
+   any source distribution.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/novnc/novnc.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,84 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+<transform file path=usr/share/novnc/(.+) -> set action.hash %<1>>
+set name=pkg.fmri value=pkg:/web/novnc@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Browser based VNC client"
+set name=pkg.description \
+    value="noVNC is a browser based VNC client implemented using HTML5 Canvas and WebSockets. It requires either a VNC server with WebSockets support or alternatively, websockify to bridge between a browser and the VNC server."
+set name=com.oracle.info.description value="the noVNC module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value="org.opensolaris.category.2008:Web Services/Communications"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Joel Martin <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/377
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+link path=usr/share/novnc/favicon.ico target=images/favicon.ico
+file path=usr/share/novnc/images/alt.png
+file path=usr/share/novnc/images/clipboard.png
+file path=usr/share/novnc/images/connect.png
+file path=usr/share/novnc/images/ctrl.png
+file path=usr/share/novnc/images/ctrlaltdel.png
+file path=usr/share/novnc/images/disconnect.png
+file path=usr/share/novnc/images/drag.png
+file path=usr/share/novnc/images/esc.png
+file path=usr/share/novnc/images/favicon.ico
+file path=usr/share/novnc/images/favicon.png
+file path=usr/share/novnc/images/keyboard.png
+file path=usr/share/novnc/images/mouse_left.png
+file path=usr/share/novnc/images/mouse_middle.png
+file path=usr/share/novnc/images/mouse_none.png
+file path=usr/share/novnc/images/mouse_right.png
+file path=usr/share/novnc/images/power.png
+file path=usr/share/novnc/images/screen_320x460.png
+file path=usr/share/novnc/images/screen_57x57.png
+file path=usr/share/novnc/images/screen_700x700.png
+file path=usr/share/novnc/images/settings.png
+file path=usr/share/novnc/images/showextrakeys.png
+file path=usr/share/novnc/images/tab.png
+file path=usr/share/novnc/include/Orbitron700.ttf
+file path=usr/share/novnc/include/Orbitron700.woff
+file path=usr/share/novnc/include/base.css
+file path=usr/share/novnc/include/base64.js
+file path=usr/share/novnc/include/black.css
+file path=usr/share/novnc/include/blue.css
+file path=usr/share/novnc/include/des.js
+file path=usr/share/novnc/include/display.js
+file path=usr/share/novnc/include/input.js
+file path=usr/share/novnc/include/jsunzip.js
+file path=usr/share/novnc/include/keyboard.js
+file path=usr/share/novnc/include/keysym.js
+file path=usr/share/novnc/include/keysymdef.js
+file path=usr/share/novnc/include/logo.js
+file path=usr/share/novnc/include/playback.js
+file path=usr/share/novnc/include/rfb.js
+file path=usr/share/novnc/include/ui.js
+file path=usr/share/novnc/include/util.js
+file path=usr/share/novnc/include/websock.js
+file path=usr/share/novnc/include/webutil.js
+file path=usr/share/novnc/vnc.html
+file path=usr/share/novnc/vnc_auto.html
+license novnc.license license="MPL-2.0, BSD-style, OFL-1.1, CC BY-SA 3.0, Zlib"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/novnc/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,1 @@
+consolidation/userland/userland-incorporation
--- a/components/openstack/cinder/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,25 +20,29 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cinder
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:a2740f0a0481139ae21cdb0868bebcce01b9f19832439b7f3056435e75791194
+    sha256:2c779bf9d208163af6c425da9043bbdcb345cebc5c118198482b94062862a117
 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
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+
+TPNO=			21819
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,27 +50,34 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
-# cinder-api, cinder-backup, cinder-scheduler, and cinder-volume
-# depend on the cinder-db svc so copy the manifest into the proto
-# directory for pkgdepend to find
+#
+# cinder-api, cinder-backup, cinder-scrubber, and cinder-volume depend
+# on cinder-db, and cinder-upgrade so copy all of the service
+# manifests into the proto directory for pkgdepend(1) to find.
+#
 COMPONENT_POST_INSTALL_ACTION += \
-        ($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
-         $(CP) files/cinder-api.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack/; \
-         $(CP) files/cinder-backup.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack/; \
-         $(CP) files/cinder-db.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack/; \
-         $(CP) files/cinder-scheduler.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack/; \
-         $(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; \
+	($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+	 $(CP) \
+	     files/cinder-api.xml \
+	     files/cinder-backup.xml \
+	     files/cinder-db.xml \
+	     files/cinder-scheduler.xml \
+	     files/cinder-upgrade.xml \
+	     files/cinder-volume.xml \
+	     $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+         $(CP) \
+	     files/solaris/solarisfc.py \
+             files/solaris/solarisiscsi.py \
+	     $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/cinder/brick/initiator; \
+	 $(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; \
-         $(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); \
+	 $(MKDIR) $(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); \
 	 $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
 
 # common targets
--- a/components/openstack/cinder/cinder.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/cinder.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,10 +28,10 @@
 set name=pkg.summary value="OpenStack Cinder (Block Storage Service)"
 set name=pkg.description \
     value="OpenStack Cinder provides an infrastructure for managing block storage volumes in OpenStack. It allows block devices to be exposed and connected to compute instances for expanded storage, better performance and integration with enterprise storage platforms."
-set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Cinder, the OpenStack block storage service"
-set name=com.oracle.info.tpno value=17714
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -40,12 +40,14 @@
 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=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/054 \
-    value=PSARC/2014/208
+    value=PSARC/2014/208 value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 dir  path=etc/cinder owner=cinder group=cinder mode=0700
-file files/api-paste.ini path=etc/cinder/api-paste.ini owner=cinder \
-    group=cinder mode=0644 overlay=allow preserve=renamenew
+file 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=renamenew
 file etc/cinder/logging_sample.conf path=etc/cinder/logging.conf owner=cinder \
@@ -64,13 +66,14 @@
 file path=lib/svc/manifest/application/openstack/cinder-backup.xml
 file path=lib/svc/manifest/application/openstack/cinder-db.xml
 file path=lib/svc/manifest/application/openstack/cinder-scheduler.xml
+file path=lib/svc/manifest/application/openstack/cinder-upgrade.xml
 file path=lib/svc/manifest/application/openstack/cinder-volume.xml
 file files/cinder-api path=lib/svc/method/cinder-api
 file files/cinder-backup path=lib/svc/method/cinder-backup
 file files/cinder-scheduler path=lib/svc/method/cinder-scheduler
+file files/cinder-upgrade path=lib/svc/method/cinder-upgrade
 file files/cinder-volume path=lib/svc/method/cinder-volume
 file files/cinder-volume-setup path=lib/svc/method/cinder-volume-setup
-file path=usr/bin/cinder-clear-rabbit-queues
 file path=usr/bin/cinder-manage pkg.depend.bypass-generate=.*/bpython.*
 file usr/bin/cinder-api path=usr/lib/cinder/cinder-api mode=0555
 file usr/bin/cinder-backup path=usr/lib/cinder/cinder-backup mode=0555
@@ -83,6 +86,7 @@
 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/pbr.json
 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
@@ -93,6 +97,9 @@
 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/cgsnapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/consistencygroups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/extended_services.py
 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
@@ -100,18 +107,23 @@
 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/scheduler_stats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/services.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/snapshot_actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_extra_specs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/used_limits.py
 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_manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_mig_status_attribute.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_replication.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_tenant_attribute.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_transfer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_type_encryption.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_unmanage.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
@@ -127,6 +139,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/extensions.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/limits.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/metadata.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/qos_association.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/qos_associations.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/qos_spec.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/qos_specs.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/sizelimit.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/urlmap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/__init__.py
@@ -151,8 +167,11 @@
 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/cgsnapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/consistencygroups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/qos_specs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/scheduler_stats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/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
@@ -175,10 +194,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/host_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/linuxfc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/linuxscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/solarisfc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/initiator/solarisiscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/brick/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
@@ -189,6 +208,8 @@
 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/consistencygroup/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/consistencygroup/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/context.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/api.py
@@ -227,140 +248,90 @@
 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/022_add_reason_column_to_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/023_add_expire_reservations_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/024_add_replication_support.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/026_add_consistencygroup_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/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/flow_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/hacking/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/hacking/checks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/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/barbican.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/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/config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/config/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/context.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/imageutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/jsonutils.py
 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/log_handler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/middleware/request_id.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/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
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/log_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/notifier/rabbit_notifier.py
-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
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/amqp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/dispatcher.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/impl_fake.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/impl_kombu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/impl_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/impl_zmq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/rpc/matchmaker.py
-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/request_utils.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/base_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/base_handler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/base_weight.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/availability_zone_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/capabilities_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/extra_specs_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/ignore_attempted_hosts_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/json_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/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/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/sslutils.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/systemd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/test.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/units.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/versionutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/quota_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/replication/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/replication/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/chance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filter_scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/affinity_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/capacity_filter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/filters/retry_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/flows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/flows/create_volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/host_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/rpcapi.py
@@ -368,20 +339,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/simple.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/capacity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/chance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/volume_number.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/ssh_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
@@ -390,23 +354,126 @@
 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/coraid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/datera.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/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/emc/emc_cli_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_cli_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_fast.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_masking.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_provision.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vmax_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_vnx_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/xtremio.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/eqlx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu_eternus_dx_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu_eternus_dx_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fujitsu_eternus_dx_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fusionio/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/fusionio/ioControl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/glusterfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hds.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hnas_backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/hus_backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hds/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_basiclib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_horcm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/hitachi/hbsd_snm2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_dorado.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_hvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_t.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/huawei_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/rest_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/huawei/ssh_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/gpfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/ibmnas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/replication.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/storwize_svc/ssh.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/ibm/xiv_ds8k.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/lvm.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/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/eseries/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/eseries/iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/nfs.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/iscsi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/jsonrpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/nfs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/options.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nimble.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/dpl_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/dpl_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/dplcommon.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/prophetstor/options.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/pure.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/rbd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/remotefs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_3par_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_cliq_proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_lefthand_rest_proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_msa_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_msa_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/hp/hp_msa_fc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/san.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/san/solaris.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/scality.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/sheepdog.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/smbfs.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/solidfire.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/datastore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/error_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/io_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/pbm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/read_write_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/vim.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/vim_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/vmdk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/vmware_images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/volumeops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/wsdl/5.5/core-types.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/wsdl/5.5/pbm-messagetypes.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/wsdl/5.5/pbm-types.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/wsdl/5.5/pbm.wsdl
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/vmware/wsdl/5.5/pbmService.wsdl
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/remotefs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/smbfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/vhdutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/windows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/windows/windows_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zadara.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
@@ -414,24 +481,69 @@
 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/flows/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/api/create_volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/create_volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/flows/manager/manage_existing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/iscsi.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
 file path=usr/lib/python$(PYVER)/vendor-packages/cinder/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fabric_opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_san_lookup_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_zone_client_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/brcd_fc_zone_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/brocade/fc_zone_constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fabric_opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fc_san_lookup_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fc_zone_client_cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/cisco_fc_zone_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/cisco/fc_zone_constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/drivers/fc_zone_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_san_lookup_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/fc_zone_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/zonemanager/utils.py
 dir  path=var/lib/cinder owner=cinder group=cinder mode=0700
+#
 group groupname=cinder gid=81
 user username=cinder ftpuser=false gcos-field="OpenStack Cinder" group=cinder \
     home-dir=/var/lib/cinder uid=81
+#
 license cinder.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional netaddr; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/netaddr-$(PYV)
+
+# force a group dependency on the optional pywbem; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pywbem
+
+# force a group dependency on the optional requests; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/requests-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a group dependency on the optional suds; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/suds-$(PYV)
 
 # force a dependency on package delivering fcinfo(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/fcinfo
@@ -445,62 +557,83 @@
 # force a dependency on package delivering zfs(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zfs
 
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
 # force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-26
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on barbicanclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/barbicanclient-$(PYV)
+
+# force a dependency on glanceclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/glanceclient-$(PYV)
 
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/greenlet-26
+depend type=require fmri=library/python-2/greenlet-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-26
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
 
 # force a dependency on lxml; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/lxml-26
+depend type=require fmri=library/python-2/lxml-$(PYV)
+
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-$(PYV)
+
+# force a dependency on oslo.db; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.db-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on osprofiler; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/osprofiler-$(PYV)
 
 # force a dependency on paste; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/paste-26
+depend type=require fmri=library/python-2/paste-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
 
-# force a dependency on pywbem; pkgdepend work is needed to flush this out.
-# (dependency is for EMC volume driver)
-depend type=require fmri=library/python-2/pywbem
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
 
 # force a dependency on routes; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/routes-26
+depend type=require fmri=library/python-2/routes-$(PYV)
 
 # force a dependency on setuptools; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/setuptools-26
+depend type=require fmri=library/python-2/setuptools-$(PYV)
 
-# 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 six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
 
 # force a dependency on stevedore; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/stevedore-26
+depend type=require fmri=library/python-2/stevedore-$(PYV)
+
+# force a dependency on swiftclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/swiftclient-$(PYV)
+
+# force a dependency on taskflow; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/taskflow-$(PYV)
 
 # force a dependency on webob; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/webob-26
-
-# force a dependency on glanceclient; pkgdepend work is needed to flush this
-# 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
+depend type=require fmri=library/python-2/webob-$(PYV)
 
-# 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
+# force a dependency on the Solaris Install library; pkgdepend work is needed to
+# flush this out.
+depend type=require fmri=system/library/install
--- a/components/openstack/cinder/files/api-paste.ini	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-#############
-# 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	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-api.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/cinder/cinder-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the cinder_db service so the cinder
          services do not collide when creating the database -->
     <dependency name='cinder_db' grouping='optional_all' restart_on='error'
@@ -42,6 +48,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -72,7 +83,7 @@
       <description>
         <loctext xml:lang="C">
           cinder-api is a server daemon that provides the Cinder API service in
-          order to provide volume management for the OpenStack Compute service. 
+          order to provide volume management for the OpenStack Compute service.
         </loctext>
       </description>
     </template>
--- a/components/openstack/cinder/files/cinder-backup	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-backup	Mon Apr 20 12:35:51 2015 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/python2.6
 
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -20,7 +20,7 @@
 
 
 def start():
-    smf_include.smf_subprocess("/usr/lib/cinder/cinder-backup")
+    smf_include.smf_subprocess("/usr/bin/pfexec /usr/lib/cinder/cinder-backup")
 
 if __name__ == "__main__":
     os.putenv("LC_ALL", "C")
--- a/components/openstack/cinder/files/cinder-backup.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-backup.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/cinder/cinder-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the cinder_db service so the cinder
          services do not collide when creating the database -->
     <dependency name='cinder_db' grouping='optional_all' restart_on='error'
@@ -42,6 +48,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/cinder/files/cinder-db.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-db.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/cinder/cinder-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/cinder/files/cinder-scheduler.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-scheduler.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/cinder/cinder-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the cinder_db service so the cinder
          services do not collide when creating the database -->
     <dependency name='cinder_db' grouping='optional_all' restart_on='error'
@@ -42,6 +48,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -72,7 +83,7 @@
       <description>
         <loctext xml:lang="C">
           cinder-scheduler picks a cinder-volume node to host the block storage
-          requested by the OpenStack Compute service. 
+          requested by the OpenStack Compute service.
         </loctext>
       </description>
     </template>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,261 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+CINDER_CONF_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'rabbit_durable_queues'): ('DEFAULT', 'amqp_durable_queues'),
+    ('rpc_notifier2', 'topics'): ('DEFAULT', 'notification_topics'),
+    ('DEFAULT', 'osapi_compute_link_prefix'):
+        ('DEFAULT', 'osapi_volume_base_URL'),
+    ('DEFAULT', 'backup_service'): ('DEFAULT', 'backup_driver'),
+    ('DEFAULT', 'pybasedir'): ('DEFAULT', 'state_path'),
+    ('DEFAULT', 'log_config'): ('DEFAULT', 'log_config_append'),
+    ('DEFAULT', 'logfile'): ('DEFAULT', 'log_file'),
+    ('DEFAULT', 'logdir'): ('DEFAULT', 'log_dir'),
+    ('DEFAULT', 'num_iscsi_scan_tries'):
+        ('DEFAULT', 'num_volume_device_scan_tries'),
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DATABASE', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+    ('DEFAULT', 'dbapi_use_tpool'): ('database', 'use_tpool'),
+    ('DEFAULT', 'memcache_servers'):
+        ('keystone_authtoken', 'memcached_servers'),
+    ('DEFAULT', 'matchmaker_ringfile'): ('matchmaker_ring', 'ringfile'),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/cinder'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/cinder/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/cinder/api-paste.ini')
+        modify_conf('/etc/cinder/cinder.conf', CINDER_CONF_MAPPINGS)
+        modify_conf('/etc/cinder/logging.conf')
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/cinder/cinder.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+
+        if db_connection.startswith('mysql'):
+            engine = sqlalchemy.create_engine(db_connection)
+            if engine.url.username != '%SERVICE_USER%':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in cinder tables"
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,78 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="cinder">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/cinder-upgrade %m">
+      <method_context>
+        <method_credential user='cinder' group='cinder' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.cinder' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cinder' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cinder' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cinder-upgrade is a transient service to upgrade the Cinder
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/cinder/files/cinder-volume-setup	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-volume-setup	Mon Apr 20 12:35:51 2015 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/python2.6
 
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
--- a/components/openstack/cinder/files/cinder-volume.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder-volume.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/cinder/cinder-upgrade' />
+    </dependency>
+
     <dependency name='iscsi_target' grouping='optional_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/network/iscsi/target:default' />
@@ -69,6 +75,11 @@
         <service_fmri value='svc:/network/ntp'/>
       </dependency>
 
+      <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+        type='service'>
+        <service_fmri value='svc:/network/amqp/rabbitmq'/>
+      </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	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,60 +1,242 @@
-####################
-# cinder.conf sample #
-####################
-
 [DEFAULT]
 
 #
+# Options defined in oslo.messaging
+#
+
+# Use durable queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
+#amqp_durable_queues=false
+
+# Auto-delete queues in AMQP. (boolean value)
+#amqp_auto_delete=false
+
+# Size of RPC connection pool. (integer value)
+#rpc_conn_pool_size=30
+
+# Qpid broker hostname. (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port. (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs. (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for Qpid connection. (string value)
+#qpid_username=
+
+# Password for Qpid connection. (string value)
+#qpid_password=
+
+# Space separated list of SASL mechanisms to use for auth.
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats. (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl'. (string value)
+#qpid_protocol=tcp
+
+# Whether to disable the Nagle algorithm. (boolean value)
+#qpid_tcp_nodelay=true
+
+# The number of prefetched messages held by receiver. (integer
+# value)
+#qpid_receiver_capacity=1
+
+# The qpid topology version to use.  Version 1 is what was
+# originally used by impl_qpid.  Version 2 includes some
+# backwards-incompatible changes that allow broker federation
+# to work.  Users should update to version 2 when they are
+# able to take everything down, as it requires a clean break.
+# (integer value)
+#qpid_topology_version=1
+
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1 and SSLv23. SSLv2 and SSLv3 may be available on
+# some distributions. (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled). (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled). (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL
+# enabled). (string value)
+#kombu_ssl_ca_certs=
+
+# How long to wait before reconnecting in response to an AMQP
+# consumer cancel notification. (floating point value)
+#kombu_reconnect_delay=1.0
+
+# The RabbitMQ broker address where a single node is used.
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used.
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs. (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# Connect over SSL for RabbitMQ. (boolean value)
+#rabbit_use_ssl=false
+
+# The RabbitMQ userid. (string value)
+#rabbit_userid=guest
+
+# The RabbitMQ password. (string value)
+#rabbit_password=guest
+
+# The RabbitMQ login method. (string value)
+#rabbit_login_method=AMQPLAIN
+
+# The RabbitMQ virtual host. (string value)
+#rabbit_virtual_host=/
+
+# How frequently to retry connecting with RabbitMQ. (integer
+# value)
+#rabbit_retry_interval=1
+
+# How long to backoff for between retries when connecting to
+# RabbitMQ. (integer value)
+#rabbit_retry_backoff=2
+
+# Maximum number of RabbitMQ connection retries. Default is 0
+# (infinite retry count). (integer value)
+#rabbit_max_retries=0
+
+# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
+# this option, you must wipe the RabbitMQ database. (boolean
+# value)
+#rabbit_ha_queues=false
+
+# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
+# (boolean value)
+#fake_rabbit=false
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
+
+# MatchMaker driver. (string value)
+#rpc_zmq_matchmaker=oslo.messaging._drivers.matchmaker.MatchMakerLocalhost
+
+# ZeroMQ receiver listening port. (integer value)
+#rpc_zmq_port=9501
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
+
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=cinder
+
+# Seconds to wait before a cast expires (TTL). Only supported
+# by impl_zmq. (integer value)
+#rpc_cast_timeout=30
+
+# Heartbeat frequency. (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+# Size of RPC greenthread pool. (integer value)
+#rpc_thread_pool_size=64
+
+# Driver or drivers to handle sending notifications. (multi
+# valued)
+#notification_driver=
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+#notification_topics=notifications
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
+
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include qpid and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=openstack
+
+
+#
 # Options defined in cinder.exception
 #
 
-# make exception message format errors fatal (boolean value)
+# Make exception message format errors fatal. (boolean value)
 #fatal_exception_format_errors=false
 
 
 #
-# Options defined in cinder.policy
-#
-
-# JSON file representing policy (string value)
-#policy_file=policy.json
-
-# Rule checked when requested rule is not found (string value)
-#policy_default_rule=default
-
-
-#
 # Options defined in cinder.quota
 #
 
-# number of volumes allowed per project (integer value)
+# Number of volumes allowed per project (integer value)
 #quota_volumes=10
 
-# number of volume snapshots allowed per project (integer
+# Number of volume snapshots allowed per project (integer
 # value)
 #quota_snapshots=10
 
-# number of volume gigabytes (snapshots are also included)
-# allowed per project (integer value)
+# Number of consistencygroups allowed per project (integer
+# value)
+#quota_consistencygroups=10
+
+# Total amount of storage, in gigabytes, allowed for volumes
+# and snapshots per project (integer value)
 #quota_gigabytes=1000
 
-# number of seconds until a reservation expires (integer
+# Number of volume backups allowed per project (integer value)
+#quota_backups=10
+
+# Total amount of storage, in gigabytes, allowed for backups
+# per project (integer value)
+#quota_backup_gigabytes=1000
+
+# Number of seconds until a reservation expires (integer
 # value)
 #reservation_expire=86400
 
-# count of reservations until usage is refreshed (integer
+# Count of reservations until usage is refreshed (integer
 # value)
 #until_refresh=0
 
-# number of seconds between subsequent usage refreshes
+# Number of seconds between subsequent usage refreshes
 # (integer value)
 #max_age=0
 
-# default driver to use for quota checks (string value)
+# 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)
+# Enables or disables use of default quota class with default
+# quota. (boolean value)
 #use_default_quota_class=true
 
 
@@ -62,24 +244,49 @@
 # Options defined in cinder.service
 #
 
-# seconds between nodes reporting state to datastore (integer
-# value)
+# Interval, in seconds, between nodes reporting state to
+# datastore (integer value)
 #report_interval=10
 
-# seconds between running periodic tasks (integer value)
+# Interval, in seconds, between running periodic tasks
+# (integer value)
 #periodic_interval=60
 
-# range of seconds to randomly delay when starting the
+# Range, in seconds, to randomly delay when starting the
 # periodic task scheduler to reduce stampeding. (Disable by
 # setting to 0) (integer value)
 #periodic_fuzzy_delay=60
 
-# IP address for OpenStack Volume API to listen (string value)
+# IP address on which OpenStack Volume API listens (string
+# value)
 #osapi_volume_listen=0.0.0.0
 
-# port for os volume api to listen (integer value)
+# Port on which OpenStack Volume API listens (integer value)
 #osapi_volume_listen_port=8776
 
+# Number of workers for OpenStack Volume API service. The
+# default is equal to the number of CPUs available. (integer
+# value)
+osapi_volume_workers=1
+
+
+#
+# Options defined in cinder.ssh_utils
+#
+
+# Option to enable strict host key checking.  When set to
+# "True" Cinder will only connect to systems with a host key
+# present in the configured "ssh_hosts_key_file".  When set to
+# "False" the host key will be saved upon first connection and
+# used for subsequent connections.  Default=False (boolean
+# value)
+#strict_ssh_host_key_policy=false
+
+# File containing SSH host keys for the systems with which
+# Cinder needs to communicate.  OPTIONAL:
+# Default=$state_path/ssh_known_hosts (string value)
+#ssh_hosts_key_file=$state_path/ssh_known_hosts
+
 
 #
 # Options defined in cinder.test
@@ -88,22 +295,44 @@
 # File name of clean sqlite db (string value)
 #sqlite_clean_db=clean.sqlite
 
-# should we use everything for testing (boolean value)
-#fake_tests=true
-
 
 #
 # Options defined in cinder.wsgi
 #
 
-# Number of backlog requests to configure the socket with
-# (integer value)
-#backlog=4096
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs). (integer value)
+#max_header_line=16384
+
+# If False, closes the client socket connection explicitly.
+# Setting it to True to maintain backward compatibility.
+# Recommended setting is set it to False. (boolean value)
+#wsgi_keep_alive=true
+
+# Timeout for client connections' socket operations. If an
+# incoming connection is idle for this number of seconds it
+# will be closed. A value of '0' means wait forever. (integer
+# value)
+#client_socket_timeout=0
+
+# Sets the value of TCP_KEEPALIVE (True/False) for each server
+# socket. (boolean value)
+#tcp_keepalive=true
 
 # Sets the value of TCP_KEEPIDLE in seconds for each server
 # socket. Not supported on OS X. (integer value)
 #tcp_keepidle=600
 
+# Sets the value of TCP_KEEPINTVL in seconds for each server
+# socket. Not supported on OS X. (integer value)
+#tcp_keepalive_interval=<None>
+
+# Sets the value of TCP_KEEPCNT for each server socket. Not
+# supported on OS X. (integer value)
+#tcp_keepalive_count=<None>
+
 # CA certificate file to use to verify connecting clients
 # (string value)
 #ssl_ca_file=<None>
@@ -121,12 +350,13 @@
 # Options defined in cinder.api.common
 #
 
-# the maximum number of items returned in a single response
-# from a collection resource (integer value)
+# The maximum number of items that a collection resource
+# returns in a single response (integer value)
 #osapi_max_limit=1000
 
 # Base URL that will be presented to users in links to the
 # OpenStack Volume API (string value)
+# Deprecated group/name - [DEFAULT]/osapi_compute_link_prefix
 #osapi_volume_base_URL=<None>
 
 
@@ -148,32 +378,45 @@
 
 
 #
+# Options defined in cinder.backup.driver
+#
+
+# Backup metadata version to be used when backing up volume
+# metadata. If this number is bumped, make sure the service
+# doing the restore supports the new version. (integer value)
+#backup_metadata_version=1
+
+
+#
 # Options defined in cinder.backup.drivers.ceph
 #
 
-# Ceph config file to use. (string value)
+# Ceph configuration file to use. (string value)
 #backup_ceph_conf=/etc/ceph/ceph.conf
 
-# the Ceph user to connect with (string value)
+# The Ceph user to connect with. Default here is to use the
+# same user as for Cinder volumes. If not using cephx this
+# should be set to None. (string value)
 #backup_ceph_user=cinder
 
-# the chunk size in bytes that a backup will be broken into
-# before transfer to backup store (integer value)
+# The chunk size, in bytes, that a backup is broken into
+# before transfer to the Ceph object store. (integer value)
 #backup_ceph_chunk_size=134217728
 
-# the Ceph pool to backup to (string value)
+# The Ceph pool where volume backups are stored. (string
+# value)
 #backup_ceph_pool=backups
 
-# RBD stripe unit to use when creating a backup image (integer
-# value)
+# 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
+# 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)
+# If True, always discard excess bytes when restoring volumes
+# i.e. pad with zeroes. (boolean value)
 #restore_discard_excess_bytes=true
 
 
@@ -182,11 +425,25 @@
 #
 
 # The URL of the Swift endpoint (string value)
-#backup_swift_url=http://localhost:8080/v1/AUTH_
+#backup_swift_url=<None>
+
+# Info to match when looking for swift in the service catalog.
+# Format is: separated values of the form:
+# <service_type>:<service_name>:<endpoint_type> - Only used if
+# backup_swift_url is unset (string value)
+#swift_catalog_info=object-store:swift:publicURL
 
 # Swift authentication mechanism (string value)
 #backup_swift_auth=per_user
 
+# Swift authentication version. Specify "1" for auth 1.0, or
+# "2" for auth 2.0 (string value)
+#backup_swift_auth_version=1
+
+# Swift tenant/account name. Required when connecting to an
+# auth 2.0 system (string value)
+#backup_swift_tenant=<None>
+
 # Swift user name (string value)
 #backup_swift_user=<None>
 
@@ -231,6 +488,7 @@
 #
 
 # Driver to use for backups. (string value)
+# Deprecated group/name - [DEFAULT]/backup_service
 #backup_driver=cinder.backup.drivers.swift
 
 
@@ -238,39 +496,29 @@
 # Options defined in cinder.common.config
 #
 
-# Virtualization api connection type : libvirt, xenapi, or
-# fake (string value)
-#connection_type=<None>
-
 # File name for the paste.deploy config for cinder-api (string
 # value)
 #api_paste_config=api-paste.ini
 
-# Directory where the cinder python module is installed
-# (string value)
-#pybasedir=/usr/lib/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)
+# Deprecated group/name - [DEFAULT]/pybasedir
+#state_path=/var/lib/cinder
+
+# IP address of this host (string value)
 #my_ip=10.0.0.1
 
-# default glance hostname or ip (string value)
+# Default glance host name or IP (string value)
 #glance_host=$my_ip
 
-# default glance port (integer value)
+# Default glance port (integer value)
 #glance_port=9292
 
-# A list of the glance api servers available to cinder
+# 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)
+# Version of the glance API to use (integer value)
 #glance_api_version=1
 
 # Number retries when downloading an image from glance
@@ -281,35 +529,38 @@
 # (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)
+# Enables or disables negotiation of SSL layer compression. In
+# some cases disabling compression can improve data
+# throughput, such as when high network bandwidth is available
+# and you use compressed image formats like qcow2. (boolean
+# value)
 #glance_api_ssl_compression=false
 
+# Location of ca certificates file to use for glance client
+# requests. (string value)
+#glance_ca_certificates_file=<None>
+
 # http/https timeout value for glance operations. If no value
 # (None) is supplied here, the glanceclient default value is
 # used. (integer value)
 #glance_request_timeout=<None>
 
-# the topic scheduler nodes listen on (string value)
+# The topic that scheduler nodes listen on (string value)
 #scheduler_topic=cinder-scheduler
 
-# the topic volume nodes listen on (string value)
+# The topic that volume nodes listen on (string value)
 #volume_topic=cinder-volume
 
-# the topic volume backup nodes listen on (string value)
+# The topic that volume backup nodes listen on (string value)
 #backup_topic=cinder-backup
 
-# Deploy v1 of the Cinder API.  (boolean value)
+# DEPRECATED: Deploy v1 of the Cinder API. (boolean value)
 #enable_v1_api=true
 
-# Deploy v2 of the Cinder API.  (boolean value)
+# Deploy v2 of the Cinder API. (boolean value)
 #enable_v2_api=true
 
-# whether to rate limit the api (boolean value)
+# Enables or disables rate limit of the API. (boolean value)
 #api_rate_limit=true
 
 # Specify list of extensions to load when using
@@ -320,44 +571,36 @@
 # 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)
+# 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
+# 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)
+# 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
+# Name of this node.  This can be an opaque identifier. It is
+# not necessarily a host name, FQDN, or IP address. (string
 # value)
 #host=cinder
 
-# availability zone of this node (string value)
+# 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 for new volumes. If not set, the
+# storage_availability_zone option value is used as the
+# default for new volumes. (string value)
 #default_availability_zone=<None>
 
-# Memcached servers or None for in process cache. (list value)
-#memcached_servers=<None>
-
-# default volume type to use (string value)
+# 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)
+# Time period for which to generate volume usages. The options
+# are 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
@@ -368,8 +611,8 @@
 # List of modules/decorators to monkey patch (list value)
 #monkey_patch_modules=
 
-# maximum time since last check-in for up service (integer
-# value)
+# Maximum time since last check-in for a service to be
+# considered up (integer value)
 #service_down_time=60
 
 # The full class name of the volume API class to use (string
@@ -397,6 +640,14 @@
 # value)
 #transfer_api_class=cinder.transfer.api.API
 
+# The full class name of the volume replication API class
+# (string value)
+#replication_api_class=cinder.replication.api.API
+
+# The full class name of the consistencygroup API class
+# (string value)
+#consistencygroup_api_class=cinder.consistencygroup.api.API
+
 
 #
 # Options defined in cinder.compute
@@ -411,8 +662,8 @@
 # Options defined in cinder.compute.nova
 #
 
-# Info to match when looking for nova in the service catalog.
-# Format is : separated values of the form:
+# Match this value when searching for nova in the service
+# catalog. Format is: separated values of the form:
 # <service_type>:<service_name>:<endpoint_type> (string value)
 #nova_catalog_info=compute:nova:publicURL
 
@@ -421,18 +672,18 @@
 #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)
+# endpoint e.g. http://localhost:8774/v2/%(project_id)s
+# (string value)
 #nova_endpoint_template=<None>
 
 # Same as nova_endpoint_template, but for admin endpoint.
 # (string value)
 #nova_endpoint_admin_template=<None>
 
-# region name of this node (string value)
+# Region name of this node (string value)
 #os_region_name=<None>
 
-# Location of ca certicates file to use for nova client
+# Location of ca certificates file to use for nova client
 # requests. (string value)
 #nova_ca_certificates_file=<None>
 
@@ -469,7 +720,7 @@
 # Options defined in cinder.db.base
 #
 
-# driver to use for database access (string value)
+# Driver to use for database access (string value)
 #db_driver=cinder.db
 
 
@@ -477,6 +728,9 @@
 # Options defined in cinder.image.glance
 #
 
+# Default core properties of image (list value)
+#glance_core_properties=checksum,container_format,disk_format,image_name,image_id,min_disk,min_ram,name,size
+
 # A list of url schemes that can be downloaded directly via
 # the direct_url.  Currently supported schemes: [file]. (list
 # value)
@@ -493,21 +747,17 @@
 
 
 #
-# Options defined in cinder.openstack.common.db.sqlalchemy.session
-#
-
-# 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)
+# Enable eventlet backdoor.  Acceptable values are 0, <port>,
+# and <start>:<end>, where 0 results in listening on a random
+# tcp port number; <port> results in listening on the
+# specified port number (and not enabling backdoor if that
+# port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range
+# of port numbers.  The chosen port is displayed in the
+# service's log file. (string value)
 #backdoor_port=<None>
 
 
@@ -535,108 +785,89 @@
 # of default WARNING level). (boolean value)
 #verbose=false
 
-# Log output to standard error (boolean value)
+# Log output to standard error. (boolean value)
 #use_stderr=true
 
-# format string to use for log messages with context (string
+# Format string to use for log messages with context. (string
 # value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
-
-# format string to use for log messages without context
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages without context.
 # (string value)
 #logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
 
-# data to append to log format when level is DEBUG (string
+# Data to append to log format when level is DEBUG. (string
 # value)
 #logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
 
-# prefix each line of exception output with this format
+# Prefix each line of exception output with this format.
 # (string value)
 #logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
 
-# list of logger=LEVEL pairs (list value)
-#default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
-
-# publish error events (boolean value)
+# List of logger=LEVEL pairs. (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
+
+# Enables or disables publication of error events. (boolean
+# value)
 #publish_errors=false
 
-# make deprecations fatal (boolean value)
+# Enables or disables fatal status of deprecations. (boolean
+# value)
 #fatal_deprecations=false
 
-# If an instance is passed with the log message, format it
-# like this (string value)
+# The format for an instance that is passed with the log
+# message. (string value)
 #instance_format="[instance: %(uuid)s] "
 
-# If an instance UUID is passed with the log message, format
-# it like this (string value)
+# The format for an instance UUID that is passed with the log
+# message. (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
+# The name of a logging configuration file. This file is
+# appended to any existing logging configuration files. For
+# details about logging configuration files, see the Python
+# logging module documentation. (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
+
+# DEPRECATED. A logging.Formatter log message format string
+# which may use any of the available logging.LogRecord
+# attributes. This option is deprecated.  Please use
 # logging_context_format_string and
 # logging_default_format_string instead. (string value)
 #log_format=<None>
 
 # Format string for %%(asctime)s in log records. Default:
-# %(default)s (string value)
+# %(default)s . (string value)
 #log_date_format=%Y-%m-%d %H:%M:%S
 
 # (Optional) Name of log file to output to. If no default is
 # set, logging will go to stdout. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
 #log_file=<None>
 
 # (Optional) The base directory used for relative --log-file
-# paths (string value)
+# paths. (string value)
+# Deprecated group/name - [DEFAULT]/logdir
 #log_dir=<None>
 
-# Use syslog for logging. (boolean value)
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# during I, and will change in J to honor RFC5424. (boolean
+# value)
 #use_syslog=false
 
-# syslog facility to receive log lines (string value)
+# (Optional) Enables or disables syslog rfc5424 format for
+# logging. If enabled, prefixes the MSG part of the syslog
+# message with APP-NAME (RFC5424). The format without the APP-
+# NAME is deprecated in I, and will be removed in J. (boolean
+# value)
+#use_syslog_rfc_format=false
+
+# Syslog facility to receive log lines. (string value)
 #syslog_log_facility=LOG_USER
 
 
 #
-# Options defined in cinder.openstack.common.notifier.api
-#
-
-# Driver or drivers to handle sending notifications (multi
-# valued)
-
-# Default notification level for outgoing notifications
-# (string value)
-#default_notification_level=INFO
-
-# Default publisher_id for outgoing notifications (string
-# value)
-#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.rpc_notifier2
-#
-
-# AMQP topic(s) used for OpenStack notifications (list value)
-#topics=notifications
-
-
-#
 # Options defined in cinder.openstack.common.periodic_task
 #
 
@@ -646,199 +877,15 @@
 
 
 #
-# Options defined in cinder.openstack.common.rpc
-#
-
-# The messaging module to use, defaults to kombu. (string
-# value)
-#rpc_backend=cinder.openstack.common.rpc.impl_kombu
-
-# Size of RPC thread pool (integer value)
-#rpc_thread_pool_size=64
-
-# Size of RPC connection pool (integer value)
-#rpc_conn_pool_size=30
-
-# Seconds to wait for a response from call or multicall
-# (integer value)
-#rpc_response_timeout=60
-
-# Seconds to wait before a cast expires (TTL). Only supported
-# by impl_zmq. (integer value)
-#rpc_cast_timeout=30
-
-# Modules of exceptions that are permitted to be recreatedupon
-# receiving exception data from an rpc call. (list value)
-#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.policy
 #
-# 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
-#
-
-# SSL version to use (valid only if SSL enabled) (string
-# value)
-#kombu_ssl_version=
-
-# SSL key file (valid only if SSL enabled) (string value)
-#kombu_ssl_keyfile=
-
-# SSL cert file (valid only if SSL enabled) (string value)
-#kombu_ssl_certfile=
-
-# SSL certification authority file (valid only if SSL enabled)
-# (string value)
-#kombu_ssl_ca_certs=
-
-# The RabbitMQ broker address where a single node is used
+
+# The JSON file that defines policies. (string value)
+#policy_file=policy.json
+
+# Default rule. Enforced when a requested rule is not found.
 # (string value)
-#rabbit_host=localhost
-
-# The RabbitMQ broker port where a single node is used
-# (integer value)
-#rabbit_port=5672
-
-# RabbitMQ HA cluster host:port pairs (list value)
-#rabbit_hosts=$rabbit_host:$rabbit_port
-
-# connect over SSL for RabbitMQ (boolean value)
-#rabbit_use_ssl=false
-
-# the RabbitMQ userid (string value)
-#rabbit_userid=guest
-
-# the RabbitMQ password (string value)
-#rabbit_password=guest
-
-# the RabbitMQ virtual host (string value)
-#rabbit_virtual_host=/
-
-# how frequently to retry connecting with RabbitMQ (integer
-# value)
-#rabbit_retry_interval=1
-
-# how long to backoff for between retries when connecting to
-# RabbitMQ (integer value)
-#rabbit_retry_backoff=2
-
-# maximum retries with trying to connect to RabbitMQ (the
-# default of 0 implies an infinite retry count) (integer
-# value)
-#rabbit_max_retries=0
-
-# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
-# wipe RabbitMQ database when changing this option. (boolean
-# value)
-#rabbit_ha_queues=false
-
-
-#
-# Options defined in cinder.openstack.common.rpc.impl_qpid
-#
-
-# Qpid broker hostname (string value)
-#qpid_hostname=localhost
-
-# Qpid broker port (integer value)
-#qpid_port=5672
-
-# Qpid HA cluster host:port pairs (list value)
-#qpid_hosts=$qpid_hostname:$qpid_port
-
-# Username for qpid connection (string value)
-#qpid_username=
-
-# Password for qpid connection (string value)
-#qpid_password=
-
-# Space separated list of SASL mechanisms to use for auth
-# (string value)
-#qpid_sasl_mechanisms=
-
-# Seconds between connection keepalive heartbeats (integer
-# value)
-#qpid_heartbeat=60
-
-# Transport to use, either 'tcp' or 'ssl' (string value)
-#qpid_protocol=tcp
-
-# 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
-#
-
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet
-# interface, or IP. The "host" option should point or resolve
-# to this address. (string value)
-#rpc_zmq_bind_address=*
-
-# MatchMaker driver (string value)
-#rpc_zmq_matchmaker=cinder.openstack.common.rpc.matchmaker.MatchMakerLocalhost
-
-# ZeroMQ receiver listening port (integer value)
-#rpc_zmq_port=9501
-
-# Number of ZeroMQ contexts, defaults to 1 (integer value)
-#rpc_zmq_contexts=1
-
-# Maximum number of ingress messages to locally buffer per
-# topic. Default is unlimited. (integer value)
-#rpc_zmq_topic_backlog=<None>
-
-# Directory for holding IPC sockets (string value)
-#rpc_zmq_ipc_dir=/var/run/openstack
-
-# Name of this node. Must be a valid hostname, FQDN, or IP
-# address. Must match "host" option, if running Nova. (string
-# value)
-#rpc_zmq_host=cinder
-
-
-#
-# Options defined in cinder.openstack.common.rpc.matchmaker
-#
-
-# 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
+#policy_default_rule=default
 
 
 #
@@ -887,8 +934,11 @@
 # Options defined in cinder.scheduler.simple
 #
 
-# maximum number of volume gigabytes to allow per host
-# (integer value)
+# This configure option has been deprecated along with the
+# SimpleScheduler.  New scheduler is able to gather capacity
+# information for each host, thus setting the maximum number
+# of volume gigabytes for host is no longer needed.  It's safe
+# to remove this configure from cinder.conf. (integer value)
 #max_gigabytes=10000
 
 
@@ -900,6 +950,19 @@
 # numbers mean to stack vs spread. (floating point value)
 #capacity_weight_multiplier=1.0
 
+# Multiplier used for weighing volume capacity. Negative
+# numbers mean to stack vs spread. (floating point value)
+#allocated_capacity_weight_multiplier=-1.0
+
+
+#
+# Options defined in cinder.scheduler.weights.volume_number
+#
+
+# Multiplier used for weighing volume number. Negative numbers
+# mean to spread vs stack. (floating point value)
+#volume_number_multiplier=-1.0
+
 
 #
 # Options defined in cinder.transfer.api
@@ -917,6 +980,10 @@
 # Options defined in cinder.volume.api
 #
 
+# Cache volume availability zones in memory for the provided
+# duration in seconds (integer value)
+#az_cache_duration=3600
+
 # Create volume from snapshot at the host where snapshot
 # resides (boolean value)
 #snapshot_same_host=true
@@ -930,7 +997,30 @@
 # Options defined in cinder.volume.driver
 #
 
-# number of times to attempt to run flakey shell commands
+# 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
+
+# The name of the iSER target user-land tool to use (string
+# value)
+#iser_helper=tgtadm
+
+# Number of times to attempt to run flakey shell commands
 # (integer value)
 #num_shell_tries=3
 
@@ -938,11 +1028,11 @@
 # value)
 #reserved_percentage=0
 
-# The maximum number of iscsi target ids per host (integer
+# The maximum number of iSCSI target IDs per host (integer
 # value)
 #iscsi_num_targets=100
 
-# prefix for iscsi volumes (string value)
+# Prefix for iSCSI volumes (string value)
 #iscsi_target_prefix=iqn.2010-10.org.openstack:
 
 # The IP address that the iSCSI daemon is listening on (string
@@ -955,30 +1045,9 @@
 
 # The maximum number of times to rescan targets to find volume
 # (integer value)
+# Deprecated group/name - [DEFAULT]/num_iscsi_scan_tries
 #num_volume_device_scan_tries=3
 
-# The 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>
@@ -988,7 +1057,7 @@
 # value)
 #use_multipath_for_image_xfer=false
 
-# Method used to wipe old voumes (valid options are: none,
+# Method used to wipe old volumes (valid options are: none,
 # zero, shred) (string value)
 #volume_clear=zero
 
@@ -996,7 +1065,14 @@
 # (integer value)
 #volume_clear_size=0
 
-# iscsi target user-land tool to use (string value)
+# The flag to pass to ionice to alter the i/o priority of the
+# process used to zero a volume after deletion, for example
+# "-c3" for idle only priority. (string value)
+#volume_clear_ionice=<None>
+
+# iSCSI target user-land tool to use. tgtadm is default, use
+# lioadm for LIO iSCSI support, iseradm for the ISER protocol,
+# or fake for testing. (string value)
 #iscsi_helper=tgtadm
 
 # Volume configuration file storage directory (string value)
@@ -1014,6 +1090,32 @@
 # will autodetect type of backing device (string value)
 #iscsi_iotype=fileio
 
+# The default block size used when copying/clearing volumes
+# (string value)
+#volume_dd_blocksize=1M
+
+# The blkio cgroup name to be used to limit bandwidth of
+# volume copy (string value)
+#volume_copy_blkio_cgroup_name=cinder-volume-copy
+
+# The upper limit of bandwidth of volume copy. 0 => unlimited
+# (integer value)
+#volume_copy_bps_limit=0
+
+# Sets the behavior of the iSCSI target to either perform
+# write-back(on) or write-through(off). This parameter is
+# valid if iscsi_helper is set to tgtadm or iseradm. (string
+# value)
+#iscsi_write_cache=on
+
+# The path to the client certificate key for verification, if
+# the driver supports it. (string value)
+#driver_client_cert_key=<None>
+
+# The path to the client certificate for verification, if the
+# driver supports it. (string value)
+#driver_client_cert=<None>
+
 
 #
 # Options defined in cinder.volume.drivers.block_device
@@ -1046,6 +1148,77 @@
 
 
 #
+# Options defined in cinder.volume.drivers.datera
+#
+
+# Datera API token. (string value)
+#datera_api_token=<None>
+
+# Datera API port. (string value)
+#datera_api_port=7717
+
+# Datera API version. (string value)
+#datera_api_version=1
+
+# Number of replicas to create of an inode. (string value)
+#datera_num_replicas=3
+
+
+#
+# Options defined in cinder.volume.drivers.emc.emc_vmax_common
+#
+
+# use this file for cinder emc plugin config data (string
+# value)
+#cinder_emc_config_file=/etc/cinder/cinder_emc_config.xml
+
+
+#
+# Options defined in cinder.volume.drivers.emc.emc_vnx_cli
+#
+
+# VNX authentication scope type. (string value)
+#storage_vnx_authentication_type=global
+
+# Directory path that contains the VNX security file. Make
+# sure the security file is generated first. (string value)
+#storage_vnx_security_file_dir=<None>
+
+# Naviseccli Path. (string value)
+#naviseccli_path=
+
+# Storage pool name. (string value)
+#storage_vnx_pool_name=<None>
+
+# VNX secondary SP IP Address. (string value)
+#san_secondary_ip=<None>
+
+# Default timeout for CLI operations in minutes. For example,
+# LUN migration is a typical long running operation, which
+# depends on the LUN size and the load of the array. An upper
+# bound in the specific deployment can be set to avoid
+# unnecessary long wait. By default, it is 365 days long.
+# (integer value)
+#default_timeout=525600
+
+# Default max number of LUNs in a storage group. By default,
+# the value is 255. (integer value)
+#max_luns_per_storage_group=255
+
+# To destroy storage group when the last LUN is removed from
+# it. By default, the value is False. (boolean value)
+#destroy_empty_storage_group=false
+
+# Mapping between hostname and its iSCSI initiator IP
+# addresses. (string value)
+#iscsi_initiators=
+
+# Automatically register initiators. By default, the value is
+# False. (boolean value)
+#initiator_auto_registration=false
+
+
+#
 # Options defined in cinder.volume.drivers.eqlx
 #
 
@@ -1059,7 +1232,7 @@
 # Maximum retry count for reconnection (integer value)
 #eqlx_cli_max_retries=5
 
-# Use CHAP authentificaion for targets? (boolean value)
+# Use CHAP authentication for targets? (boolean value)
 #eqlx_use_chap=false
 
 # Existing CHAP account name (string value)
@@ -1073,6 +1246,31 @@
 
 
 #
+# Options defined in cinder.volume.drivers.fujitsu_eternus_dx_common
+#
+
+# The configuration file for the Cinder SMI-S driver (string
+# value)
+#cinder_smis_config_file=/etc/cinder/cinder_fujitsu_eternus_dx.xml
+
+
+#
+# Options defined in cinder.volume.drivers.fusionio.ioControl
+#
+
+# amount of time wait for iSCSI target to come online (integer
+# value)
+#fusionio_iocontrol_targetdelay=5
+
+# number of retries for GET operations (integer value)
+#fusionio_iocontrol_retry=3
+
+# verify the array certificate on each transaction (boolean
+# value)
+#fusionio_iocontrol_verify_cert=true
+
+
+#
 # Options defined in cinder.volume.drivers.glusterfs
 #
 
@@ -1080,9 +1278,6 @@
 # value)
 #glusterfs_shares_config=/etc/cinder/glusterfs_shares
 
-# Use du or df for free space calculation (string value)
-#glusterfs_disk_util=df
-
 # 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)
@@ -1098,7 +1293,127 @@
 
 
 #
-# Options defined in cinder.volume.drivers.gpfs
+# Options defined in cinder.volume.drivers.hds.hds
+#
+
+# The configuration file for the Cinder HDS driver for HUS
+# (string value)
+#hds_cinder_config_file=/opt/hds/hus/cinder_hus_conf.xml
+
+
+#
+# Options defined in cinder.volume.drivers.hds.iscsi
+#
+
+# Configuration file for HDS iSCSI cinder plugin (string
+# value)
+#hds_hnas_iscsi_config_file=/opt/hds/hnas/cinder_iscsi_conf.xml
+
+
+#
+# Options defined in cinder.volume.drivers.hds.nfs
+#
+
+# Configuration file for HDS NFS cinder plugin (string value)
+#hds_hnas_nfs_config_file=/opt/hds/hnas/cinder_nfs_conf.xml
+
+
+#
+# Options defined in cinder.volume.drivers.hitachi.hbsd_common
+#
+
+# Serial number of storage system (string value)
+#hitachi_serial_number=<None>
+
+# Name of an array unit (string value)
+#hitachi_unit_name=<None>
+
+# Pool ID of storage system (integer value)
+#hitachi_pool_id=<None>
+
+# Thin pool ID of storage system (integer value)
+#hitachi_thin_pool_id=<None>
+
+# Range of logical device of storage system (string value)
+#hitachi_ldev_range=<None>
+
+# Default copy method of storage system (string value)
+#hitachi_default_copy_method=FULL
+
+# Copy speed of storage system (integer value)
+#hitachi_copy_speed=3
+
+# Interval to check copy (integer value)
+#hitachi_copy_check_interval=3
+
+# Interval to check copy asynchronously (integer value)
+#hitachi_async_copy_check_interval=10
+
+# Control port names for HostGroup or iSCSI Target (string
+# value)
+#hitachi_target_ports=<None>
+
+# Range of group number (string value)
+#hitachi_group_range=<None>
+
+# Request for creating HostGroup or iSCSI Target (boolean
+# value)
+#hitachi_group_request=false
+
+
+#
+# Options defined in cinder.volume.drivers.hitachi.hbsd_fc
+#
+
+# Request for FC Zone creating HostGroup (boolean value)
+#hitachi_zoning_request=false
+
+
+#
+# Options defined in cinder.volume.drivers.hitachi.hbsd_horcm
+#
+
+# Instance numbers for HORCM (string value)
+#hitachi_horcm_numbers=200,201
+
+# Username of storage system for HORCM (string value)
+#hitachi_horcm_user=<None>
+
+# Password of storage system for HORCM (string value)
+#hitachi_horcm_password=<None>
+
+# Add to HORCM configuration (boolean value)
+#hitachi_horcm_add_conf=true
+
+
+#
+# Options defined in cinder.volume.drivers.hitachi.hbsd_iscsi
+#
+
+# Add CHAP user (boolean value)
+#hitachi_add_chap_user=false
+
+# iSCSI authentication method (string value)
+#hitachi_auth_method=<None>
+
+# iSCSI authentication username (string value)
+#hitachi_auth_user=HBSD-CHAP-user
+
+# iSCSI authentication password (string value)
+#hitachi_auth_password=HBSD-CHAP-password
+
+
+#
+# Options defined in cinder.volume.drivers.huawei
+#
+
+# The configuration file for the Cinder Huawei driver (string
+# value)
+#cinder_huawei_conf_file=/etc/cinder/cinder_huawei_conf.xml
+
+
+#
+# Options defined in cinder.volume.drivers.ibm.gpfs
 #
 
 # Specifies the path of the GPFS directory where Block Storage
@@ -1134,364 +1449,40 @@
 # 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
-#
-
-# Name for the VG that will contain exported volumes (string
-# value)
-#volume_group=cinder-volumes
-
-# Size of thin provisioning pool (None uses entire cinder VG)
-# (string value)
-#pool_size=<None>
-
-# If set, create lvms with multiple mirrors. Note that this
-# requires lvm_mirrors + 2 pvs with available space (integer
-# value)
-#lvm_mirrors=0
-
-# Type of LVM volumes to deploy; (default or thin) (string
-# value)
-#lvm_type=default
-
-
-#
-# Options defined in cinder.volume.drivers.netapp.options
-#
-
-# 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.options
-#
-
-# IP address of Nexenta SA (string value)
-#nexenta_host=
-
-# HTTP port to connect to Nexenta REST API server (integer
-# value)
-#nexenta_rest_port=2000
-
-# Use http or https for REST connection (default auto) (string
-# value)
-#nexenta_rest_protocol=auto
-
-# User name to connect to Nexenta SA (string value)
-#nexenta_user=admin
-
-# Password to connect to Nexenta SA (string value)
-#nexenta_password=nexenta
-
-# Nexenta target portal port (integer value)
-#nexenta_iscsi_target_portal_port=3260
-
-# pool on SA that will hold all volumes (string value)
-#nexenta_volume=cinder
-
-# IQN prefix for iSCSI targets (string value)
-#nexenta_target_prefix=iqn.1986-03.com.sun:02:cinder-
-
-# prefix for iSCSI target groups on SA (string value)
-#nexenta_target_group_prefix=cinder/
-
-# 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=
-
-# flag to create sparse volumes (boolean value)
-#nexenta_sparse=false
+# Specifies the storage pool that volumes are assigned to. By
+# default, the system storage pool is used. (string value)
+#gpfs_storage_pool=system
 
 
 #
-# Options defined in cinder.volume.drivers.nfs
-#
-
-# File with the list of available nfs shares (string value)
-#nfs_shares_config=/etc/cinder/nfs_shares
-
-# Create volumes as sparsed files which take no space.If set
-# to False volume is created as regular file.In such case
-# volume creation takes a lot of time. (boolean value)
-#nfs_sparsed_volumes=true
-
-# Percent of ACTUAL usage of the underlying volume before no
-# new volumes can be allocated to the volume destination.
-# (floating point value)
-#nfs_used_ratio=0.95
-
-# This will compare the allocated to available space on the
-# volume destination.  If the ratio exceeds this number, the
-# destination will no longer be valid. (floating point value)
-#nfs_oversub_ratio=1.0
-
-# Base dir containing mount points for nfs shares. (string
-# value)
-#nfs_mount_point_base=$state_path/mnt
-
-# Mount options passed to the nfs client. See section of the
-# nfs man page for details. (string value)
-#nfs_mount_options=<None>
-
-
+# Options defined in cinder.volume.drivers.ibm.ibmnas
 #
-# Options defined in cinder.volume.drivers.rbd
-#
-
-# the RADOS pool in which rbd volumes are stored (string
-# value)
-#rbd_pool=rbd
-
-# the RADOS client name for accessing rbd volumes - only set
-# when using cephx authentication (string value)
-#rbd_user=<None>
-
-# path to the ceph configuration file 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
+
+# IP address or Hostname of NAS system. (string value)
+#nas_ip=
+
+# User name to connect to NAS system. (string value)
+#nas_login=admin
+
+# Password to connect to NAS system. (string value)
+#nas_password=
+
+# SSH port to use to connect to NAS system. (integer value)
+#nas_ssh_port=22
+
+# Filename of private key to use for SSH authentication.
 # (string value)
-#rbd_secret_uuid=<None>
-
-# where to store temporary image files if the volume driver
-# 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
+#nas_private_key=
+
+# IBMNAS platform type to be used as backend storage; valid
+# values are - v7ku : for using IBM Storwize V7000 Unified,
+# sonas : for using IBM Scale Out NAS, gpfs-nas : for using
+# NFS based IBM GPFS deployments. (string value)
+#ibmnas_platform_type=v7ku
 
 
 #
-# Options defined in cinder.volume.drivers.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
-#
-
-# Use thin provisioning for SAN volumes? (boolean value)
-#san_thin_provision=true
-
-# IP address of SAN controller (string value)
-#san_ip=
-
-# Username for SAN controller (string value)
-#san_login=admin
-
-# Password for SAN controller (string value)
-#san_password=
-
-# Filename of private key to use for SSH authentication
-# (string value)
-#san_private_key=
-
-# Cluster name to use for creating volumes (string value)
-#san_clustername=
-
-# SSH port to use with SAN (integer value)
-#san_ssh_port=22
-
-# Execute commands locally instead of over SSH; use if the
-# volume service is running on the SAN device (boolean value)
-#san_is_local=false
-
-# SSH connection timeout in seconds (integer value)
-#ssh_conn_timeout=30
-
-# Minimum ssh connections in the pool (integer value)
-#ssh_min_pool_conn=1
-
-# Maximum ssh connections in the pool (integer value)
-#ssh_max_pool_conn=5
-
-
-#
-# Options defined in cinder.volume.drivers.san.solaris
-#
-
-# The ZFS path under which to create zvols for volumes.
-# (string value)
-#san_zfs_volume_base=rpool/
-
-
-#
-# Options defined in cinder.volume.drivers.scality
-#
-
-# Path or URL to Scality SOFS configuration file (string
-# value)
-#scality_sofs_config=<None>
-
-# Base dir where Scality SOFS shall be mounted (string value)
-#scality_sofs_mount_point=$state_path/scality
-
-# Path from Scality SOFS root to volume dir (string value)
-#scality_sofs_volume_dir=cinder/volumes
-
-
-#
-# Options defined in cinder.volume.drivers.solaris.zfs
-#
-
-# The base dataset for ZFS cinder volumes.
-#zfs_volume_base=rpool/cinder
-
-
-#
-# Options defined in cinder.volume.drivers.solidfire
-#
-
-# Set 512 byte emulation on volume creation;  (boolean value)
-#sf_emulate_512=true
-
-# Allow tenants to specify QOS on create (boolean value)
-#sf_allow_tenant_qos=false
-
-# Create SolidFire accounts with this prefix (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
+# Options defined in cinder.volume.drivers.ibm.storwize_svc
 #
 
 # Storage system storage pool for volumes (string value)
@@ -1542,6 +1533,587 @@
 # Allows vdisk to multi host mapping (boolean value)
 #storwize_svc_multihostmap_enabled=true
 
+# Indicate whether svc driver is compatible for NPIV setup. If
+# it is compatible, it will allow no wwpns being returned on
+# get_conn_fc_wwpns during initialize_connection (boolean
+# value)
+#storwize_svc_npiv_compatibility_mode=false
+
+# Allow tenants to specify QOS on create (boolean value)
+#storwize_svc_allow_tenant_qos=false
+
+# If operating in stretched cluster mode, specify the name of
+# the pool in which mirrored copies are stored.Example:
+# "pool2" (string value)
+#storwize_svc_stretched_cluster_partner=<None>
+
+
+#
+# Options defined in cinder.volume.drivers.ibm.xiv_ds8k
+#
+
+# Proxy driver that connects to the IBM Storage Array (string
+# value)
+#xiv_ds8k_proxy=xiv_ds8k_openstack.nova_proxy.XIVDS8KNovaProxy
+
+# Connection type to the IBM Storage Array
+# (fibre_channel|iscsi) (string value)
+#xiv_ds8k_connection_type=iscsi
+
+# CHAP authentication mode, effective only for iscsi
+# (disabled|enabled) (string value)
+#xiv_chap=disabled
+
+
+#
+# Options defined in cinder.volume.drivers.lvm
+#
+
+# Name for the VG that will contain exported volumes (string
+# value)
+#volume_group=cinder-volumes
+
+# If >0, create LVs with multiple mirrors. Note that this
+# requires lvm_mirrors + 2 PVs with available space (integer
+# value)
+#lvm_mirrors=0
+
+# Type of LVM volumes to deploy; (default or thin) (string
+# value)
+#lvm_type=default
+
+
+#
+# Options defined in cinder.volume.drivers.netapp.options
+#
+
+# The vFiler unit on which provisioning of block storage
+# volumes will be done. This option is only used by the driver
+# when connecting to an instance with a storage family of Data
+# ONTAP operating in 7-Mode. Only use this option when
+# utilizing the MultiStore feature on the NetApp storage
+# system. (string value)
+#netapp_vfiler=<None>
+
+# Administrative user account name used to access the storage
+# system or proxy server. (string value)
+#netapp_login=<None>
+
+# Password for the administrative user account specified in
+# the netapp_login option. (string value)
+#netapp_password=<None>
+
+# This option specifies the virtual storage server (Vserver)
+# name on the storage cluster on which provisioning of block
+# storage volumes should occur. If using the NFS storage
+# protocol, this parameter is mandatory for storage service
+# catalog support (utilized by Cinder volume type extra_specs
+# support). If this option is specified, the exports belonging
+# to the Vserver will only be used for provisioning in the
+# future. Block storage volumes on exports not belonging to
+# the Vserver specified by this option will continue to
+# function normally. (string value)
+#netapp_vserver=<None>
+
+# The hostname (or IP address) for the storage system or proxy
+# server. (string value)
+#netapp_server_hostname=<None>
+
+# The TCP port to use for communication with the storage
+# system or proxy server. If not specified, Data ONTAP drivers
+# will use 80 for HTTP and 443 for HTTPS; E-Series will use
+# 8080 for HTTP and 8443 for HTTPS. (integer value)
+#netapp_server_port=<None>
+
+# This option is used to specify the path to the E-Series
+# proxy application on a proxy server. The value is combined
+# with the value of the netapp_transport_type,
+# netapp_server_hostname, and netapp_server_port options to
+# create the URL used by the driver to connect to the proxy
+# application. (string value)
+#netapp_webservice_path=/devmgr/v2
+
+# This option is only utilized when the storage family is
+# configured to eseries. This option is used to restrict
+# provisioning to the specified controllers. Specify the value
+# of this option to be a comma separated list of controller
+# hostnames or IP addresses to be used for provisioning.
+# (string value)
+#netapp_controller_ips=<None>
+
+# Password for the NetApp E-Series storage array. (string
+# value)
+#netapp_sa_password=<None>
+
+# This option is used to restrict provisioning to the
+# specified storage pools. Only dynamic disk pools are
+# currently supported. Specify the value of this option to be
+# a comma separated list of disk pool names to be used for
+# provisioning. (string value)
+#netapp_storage_pools=<None>
+
+# This option is used to define how the controllers in the
+# E-Series storage array will work with the particular
+# operating system on the hosts that are connected to it.
+# (string value)
+#netapp_eseries_host_type=linux_dm_mp
+
+# If the percentage of available space for an NFS share has
+# dropped below the value specified by this option, the NFS
+# image cache will be cleaned. (integer value)
+#thres_avl_size_perc_start=20
+
+# When the percentage of available space on an NFS share has
+# reached the percentage specified by this option, the driver
+# will stop clearing files from the NFS image cache that have
+# not been accessed in the last M minutes, where M is the
+# value of the expiry_thres_minutes configuration option.
+# (integer value)
+#thres_avl_size_perc_stop=60
+
+# This option specifies the threshold for last access time for
+# images in the NFS image cache. When a cache cleaning cycle
+# begins, images in the cache that have not been accessed in
+# the last M minutes, where M is the value of this parameter,
+# will be deleted from the cache to create free space on the
+# NFS share. (integer value)
+#expiry_thres_minutes=720
+
+# This option specifies the path of the NetApp copy offload
+# tool binary. Ensure that the binary has execute permissions
+# set which allow the effective user of the cinder-volume
+# process to execute the file. (string value)
+#netapp_copyoffload_tool_path=<None>
+
+# The quantity to be multiplied by the requested volume size
+# to ensure enough space is available on the virtual storage
+# server (Vserver) to fulfill the volume creation request.
+# (floating point value)
+#netapp_size_multiplier=1.2
+
+# This option is only utilized when the storage protocol is
+# configured to use iSCSI. This option is used to restrict
+# provisioning to the specified controller volumes. Specify
+# the value of this option to be a comma separated list of
+# NetApp controller volume names to be used for provisioning.
+# (string value)
+#netapp_volume_list=<None>
+
+# The storage family type used on the storage system; valid
+# values are ontap_7mode for using Data ONTAP operating in
+# 7-Mode, ontap_cluster for using clustered Data ONTAP, or
+# eseries for using E-Series. (string value)
+#netapp_storage_family=ontap_cluster
+
+# The storage protocol to be used on the data path with the
+# storage system; valid values are iscsi or nfs. (string
+# value)
+#netapp_storage_protocol=<None>
+
+# The transport protocol used when communicating with the
+# storage system or proxy server. Valid values are http or
+# https. (string value)
+#netapp_transport_type=http
+
+
+#
+# Options defined in cinder.volume.drivers.nexenta.options
+#
+
+# IP address of Nexenta SA (string value)
+#nexenta_host=
+
+# HTTP port to connect to Nexenta REST API server (integer
+# value)
+#nexenta_rest_port=2000
+
+# Use http or https for REST connection (default auto) (string
+# value)
+#nexenta_rest_protocol=auto
+
+# User name to connect to Nexenta SA (string value)
+#nexenta_user=admin
+
+# Password to connect to Nexenta SA (string value)
+#nexenta_password=nexenta
+
+# Nexenta target portal port (integer value)
+#nexenta_iscsi_target_portal_port=3260
+
+# SA Pool that holds all volumes (string value)
+#nexenta_volume=cinder
+
+# IQN prefix for iSCSI targets (string value)
+#nexenta_target_prefix=iqn.1986-03.com.sun:02:cinder-
+
+# Prefix for iSCSI target groups on SA (string value)
+#nexenta_target_group_prefix=cinder/
+
+# File with the list of available nfs shares (string value)
+#nexenta_shares_config=/etc/cinder/nfs_shares
+
+# Base directory that contains NFS share mount points (string
+# value)
+#nexenta_mount_point_base=$state_path/mnt
+
+# Enables or disables the creation of volumes as sparsed files
+# that take no space. If disabled (False), volume is created
+# as a regular file, which takes a long time. (boolean value)
+#nexenta_sparsed_volumes=true
+
+# Default compression value for new ZFS folders. (string
+# value)
+#nexenta_volume_compression=on
+
+# If set True cache NexentaStor appliance volroot option
+# value. (boolean value)
+#nexenta_nms_cache_volroot=true
+
+# Enable stream compression, level 1..9. 1 - gives best speed;
+# 9 - gives best compression. (integer value)
+#nexenta_rrmgr_compression=0
+
+# TCP Buffer size in KiloBytes. (integer value)
+#nexenta_rrmgr_tcp_buf_size=4096
+
+# Number of TCP connections. (integer value)
+#nexenta_rrmgr_connections=2
+
+# Block size for volumes (default=blank means 8KB) (string
+# value)
+#nexenta_blocksize=
+
+# Enables or disables the creation of sparse volumes (boolean
+# value)
+#nexenta_sparse=false
+
+
+#
+# Options defined in cinder.volume.drivers.nfs
+#
+
+# File with the list of available nfs shares (string value)
+#nfs_shares_config=/etc/cinder/nfs_shares
+
+# Create volumes as sparsed files which take no space.If set
+# to False volume is created as regular file.In such case
+# volume creation takes a lot of time. (boolean value)
+#nfs_sparsed_volumes=true
+
+# Percent of ACTUAL usage of the underlying volume before no
+# new volumes can be allocated to the volume destination.
+# (floating point value)
+#nfs_used_ratio=0.95
+
+# This will compare the allocated to available space on the
+# volume destination.  If the ratio exceeds this number, the
+# destination will no longer be valid. (floating point value)
+#nfs_oversub_ratio=1.0
+
+# Base dir containing mount points for nfs shares. (string
+# value)
+#nfs_mount_point_base=$state_path/mnt
+
+# Mount options passed to the nfs client. See section of the
+# nfs man page for details. (string value)
+#nfs_mount_options=<None>
+
+
+#
+# Options defined in cinder.volume.drivers.nimble
+#
+
+# Nimble Controller pool name (string value)
+#nimble_pool_name=default
+
+# Nimble Subnet Label (string value)
+#nimble_subnet_label=*
+
+
+#
+# Options defined in cinder.volume.drivers.prophetstor.options
+#
+
+# DPL pool uuid in which DPL volumes are stored. (string
+# value)
+#dpl_pool=
+
+# DPL port number. (integer value)
+#dpl_port=8357
+
+
+#
+# Options defined in cinder.volume.drivers.pure
+#
+
+# REST API authorization token. (string value)
+#pure_api_token=<None>
+
+
+#
+# Options defined in cinder.volume.drivers.rbd
+#
+
+# The RADOS pool where rbd volumes are stored (string value)
+#rbd_pool=rbd
+
+# The RADOS client name for accessing rbd volumes - only set
+# when using cephx authentication (string value)
+#rbd_user=<None>
+
+# Path to the ceph configuration file (string value)
+#rbd_ceph_conf=
+
+# Flatten volumes created from snapshots to remove dependency
+# from volume to snapshot (boolean value)
+#rbd_flatten_volume_from_snapshot=false
+
+# The libvirt uuid of the secret for the rbd_user volumes
+# (string value)
+#rbd_secret_uuid=<None>
+
+# Directory where temporary image files are stored when the
+# volume driver does not write them directly to the volume.
+# (string value)
+#volume_tmp_dir=<None>
+
+# Maximum number of nested volume clones that are taken before
+# a flatten occurs. Set to 0 to disable cloning. (integer
+# value)
+#rbd_max_clone_depth=5
+
+# Volumes will be chunked into objects of this size (in
+# megabytes). (integer value)
+#rbd_store_chunk_size=4
+
+# Timeout value (in seconds) used when connecting to ceph
+# cluster. If value < 0, no timeout is set and default
+# librados value is used. (integer value)
+#rados_connect_timeout=-1
+
+
+#
+# Options defined in cinder.volume.drivers.remotefs
+#
+
+# IP address or Hostname of NAS system. (string value)
+#nas_ip=
+
+# User name to connect to NAS system. (string value)
+#nas_login=admin
+
+# Password to connect to NAS system. (string value)
+#nas_password=
+
+# SSH port to use to connect to NAS system. (integer value)
+#nas_ssh_port=22
+
+# Filename of private key to use for SSH authentication.
+# (string value)
+#nas_private_key=
+
+
+#
+# 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=
+
+# 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=
+
+# Enable CHAP authentication for iSCSI connections. (boolean
+# value)
+#hp3par_iscsi_chap_enabled=false
+
+
+#
+# Options defined in cinder.volume.drivers.san.hp.hp_lefthand_rest_proxy
+#
+
+# HP LeftHand WSAPI Server Url like https://<LeftHand
+# ip>:8081/lhos (string value)
+#hplefthand_api_url=<None>
+
+# HP LeftHand Super user username (string value)
+#hplefthand_username=<None>
+
+# HP LeftHand Super user password (string value)
+#hplefthand_password=<None>
+
+# HP LeftHand cluster name (string value)
+#hplefthand_clustername=<None>
+
+# Configure CHAP authentication for iSCSI connections
+# (Default: Disabled) (boolean value)
+#hplefthand_iscsi_chap_enabled=false
+
+# Enable HTTP debugging to LeftHand (boolean value)
+#hplefthand_debug=false
+
+
+#
+# Options defined in cinder.volume.drivers.san.hp.hp_msa_common
+#
+
+# The VDisk to use for volume creation. (string value)
+#msa_vdisk=OpenStack
+
+
+#
+# Options defined in cinder.volume.drivers.san.san
+#
+
+# Use thin provisioning for SAN volumes? (boolean value)
+#san_thin_provision=true
+
+# IP address of SAN controller (string value)
+#san_ip=
+
+# Username for SAN controller (string value)
+#san_login=admin
+
+# Password for SAN controller (string value)
+#san_password=
+
+# Filename of private key to use for SSH authentication
+# (string value)
+#san_private_key=
+
+# Cluster name to use for creating volumes (string value)
+#san_clustername=
+
+# SSH port to use with SAN (integer value)
+#san_ssh_port=22
+
+# Execute commands locally instead of over SSH; use if the
+# volume service is running on the SAN device (boolean value)
+san_is_local=true
+
+# SSH connection timeout in seconds (integer value)
+#ssh_conn_timeout=30
+
+# Minimum ssh connections in the pool (integer value)
+#ssh_min_pool_conn=1
+
+# Maximum ssh connections in the pool (integer value)
+#ssh_max_pool_conn=5
+
+
+#
+# Options defined in cinder.volume.drivers.san.solaris
+#
+
+# The ZFS path under which to create zvols for volumes.
+# (string value)
+#san_zfs_volume_base=rpool/
+
+
+#
+# Options defined in cinder.volume.drivers.scality
+#
+
+# Path or URL to Scality SOFS configuration file (string
+# value)
+#scality_sofs_config=<None>
+
+# Base dir where Scality SOFS shall be mounted (string value)
+#scality_sofs_mount_point=$state_path/scality
+
+# Path from Scality SOFS root to volume dir (string value)
+#scality_sofs_volume_dir=cinder/volumes
+
+
+#
+# Options defined in cinder.volume.drivers.smbfs
+#
+
+# File with the list of available smbfs shares. (string value)
+#smbfs_shares_config=/etc/cinder/smbfs_shares
+
+# Default format that will be used when creating volumes if no
+# volume format is specified. Can be set to: raw, qcow2, vhd
+# or vhdx. (string value)
+#smbfs_default_volume_format=qcow2
+
+# Create volumes as sparsed files which take no space rather
+# than regular files when using raw format, in which case
+# volume creation takes lot of time. (boolean value)
+#smbfs_sparsed_volumes=true
+
+# Percent of ACTUAL usage of the underlying volume before no
+# new volumes can be allocated to the volume destination.
+# (floating point value)
+#smbfs_used_ratio=0.95
+
+# This will compare the allocated to available space on the
+# volume destination.  If the ratio exceeds this number, the
+# destination will no longer be valid. (floating point value)
+#smbfs_oversub_ratio=1.0
+
+# Base dir containing mount points for smbfs shares. (string
+# value)
+#smbfs_mount_point_base=$state_path/mnt
+
+# Mount options passed to the smbfs client. See mount.cifs man
+# page for details. (string value)
+#smbfs_mount_options=noperm,file_mode=0775,dir_mode=0775
+
+
+#
+# Options defined in cinder.volume.drivers.solaris.zfs
+#
+
+# The base dataset for ZFS cinder volumes.
+#zfs_volume_base=rpool/cinder
+
+
+#
+# Options defined in cinder.volume.drivers.solidfire
+#
+
+# Set 512 byte emulation on volume creation;  (boolean value)
+#sf_emulate_512=true
+
+# Allow tenants to specify QOS on create (boolean value)
+#sf_allow_tenant_qos=false
+
+# Create SolidFire accounts with this prefix. Any string can
+# be used here, but the string "hostname" is special and will
+# create a prefix using the cinder node hostsname (previous
+# default behavior).  The default is NO prefix. (string value)
+#sf_account_prefix=<None>
+
+# 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.vmware.vmdk
@@ -1568,9 +2140,9 @@
 # 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
+# The interval (in seconds) for polling remote tasks invoked
+# on VMware ESX/VC server. (floating point value)
+#vmware_task_poll_interval=0.5
 
 # Name for the folder in the VC datacenter that will contain
 # cinder volumes. (string value)
@@ -1586,6 +2158,16 @@
 # less than the configured value. (integer value)
 #vmware_max_objects_retrieval=100
 
+# Optional string specifying the VMware VC server version. The
+# driver attempts to retrieve the version from VMware VC
+# server. Set this configuration only if you want to override
+# the VC server version. (string value)
+#vmware_host_version=<None>
+
+# Directory where virtual disks are stored during volume
+# backup and restore. (string value)
+#vmware_tmp_dir=/tmp
+
 
 #
 # Options defined in cinder.volume.drivers.windows.windows
@@ -1596,42 +2178,6 @@
 
 
 #
-# Options defined in cinder.volume.drivers.xenapi.sm
-#
-
-# NFS server to be used by XenAPINFSDriver (string value)
-#xenapi_nfs_server=<None>
-
-# Path of exported NFS, used by XenAPINFSDriver (string value)
-#xenapi_nfs_serverpath=<None>
-
-# URL for XenAPI connection (string value)
-#xenapi_connection_url=<None>
-
-# Username for XenAPI connection (string value)
-#xenapi_connection_username=root
-
-# 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_ds8k
-#
-
-# Proxy driver that connects to the IBM Storage Array (string
-# value)
-#xiv_ds8k_proxy=xiv_ds8k_openstack.nova_proxy.XIVDS8KNovaProxy
-
-# Connection type to the IBM Storage Array
-# (fibre_channel|iscsi) (string value)
-#xiv_ds8k_connection_type=iscsi
-
-
-#
 # Options defined in cinder.volume.drivers.zadara
 #
 
@@ -1659,12 +2205,6 @@
 # Default encryption policy for volumes (boolean value)
 #zadara_vol_encrypt=false
 
-# Default striping mode for volumes (string value)
-#zadara_default_striping_mode=simple
-
-# Default stripe size for volumes (string value)
-#zadara_default_stripesize=64
-
 # Default template for VPSA volume names (string value)
 #zadara_vol_name_template=OS_%s
 
@@ -1681,74 +2221,58 @@
 # Options defined in cinder.volume.drivers.zfssa.zfssaiscsi
 #
 
-# 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.
+# Storage pool name. (string value)
+#zfssa_pool=<None>
+
+# Project name. (string value)
+#zfssa_project=<None>
+
+# Block size: 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k.
+# (string value)
+#zfssa_lun_volblocksize=8k
+
+# Flag to enable sparse (thin-provisioned): True, False.
+# (boolean value)
+#zfssa_lun_sparse=false
+
+# Data compression-off, lzjb, gzip-2, gzip, gzip-9. (string
+# value)
 #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.
+# Synchronous write bias-latency, throughput. (string value)
 #zfssa_lun_logbias=
 
-# ZFSSA iSCSI initiator group name
+# iSCSI initiator group. (string value)
 #zfssa_initiator_group=
 
-# Cinder host initiator IQNs. Separate multiple entries with commas.
+# iSCSI initiator IQNs. (comma separated) (string value)
 #zfssa_initiator=
 
-# Cinder host initiator CHAP user.
-# This property is optional. Comment out the line if CHAP authentication is
-# not used.
+# iSCSI initiator CHAP user. (string value)
 #zfssa_initiator_user=
 
-# Cinder host initiator CHAP password.
-# This property is optional. Comment out the line if CHAP authentication is
-# not used.
+# iSCSI initiator CHAP password. (string value)
 #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.
+# iSCSI target group name. (string value)
+#zfssa_target_group=tgt-grp
+
+# iSCSI target CHAP user. (string value)
 #zfssa_target_user=
 
-# ZFSSA iSCSI target CHAP password.
-# This property is optional. Comment out the line if CHAP authentication is
-# not used.
+# iSCSI target CHAP password. (string value)
 #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>
+# iSCSI target portal (Data-IP:Port, w.x.y.z:3260). (string
+# value)
+#zfssa_target_portal=<None>
+
+# Network interfaces of iSCSI targets. (comma separated)
+# (string value)
+#zfssa_target_interfaces=<None>
+
+# REST connection timeout. (seconds) (integer value)
+#zfssa_rest_timeout=<None>
 
 
 #
@@ -1773,14 +2297,230 @@
 # (boolean value)
 #volume_service_inithost_offload=false
 
+# FC Zoning mode configured (string value)
+#zoning_mode=none
+
+# User defined capabilities, a JSON formatted string
+# specifying key/value pairs. (string value)
+#extra_capabilities={}
+
+
+[BRCD_FABRIC_EXAMPLE]
+
+#
+# Options defined in cinder.zonemanager.drivers.brocade.brcd_fabric_opts
+#
+
+# Management IP of fabric (string value)
+#fc_fabric_address=
+
+# Fabric user ID (string value)
+#fc_fabric_user=
+
+# Password for user (string value)
+#fc_fabric_password=
+
+# Connecting port (integer value)
+#fc_fabric_port=22
+
+# overridden zoning policy (string value)
+#zoning_policy=initiator-target
+
+# overridden zoning activation state (boolean value)
+#zone_activate=true
+
+# overridden zone name prefix (string value)
+#zone_name_prefix=<None>
+
+# Principal switch WWN of the fabric (string value)
+#principal_switch_wwn=<None>
+
+
+[CISCO_FABRIC_EXAMPLE]
+
+#
+# Options defined in cinder.zonemanager.drivers.cisco.cisco_fabric_opts
+#
+
+# Management IP of fabric (string value)
+#cisco_fc_fabric_address=
+
+# Fabric user ID (string value)
+#cisco_fc_fabric_user=
+
+# Password for user (string value)
+#cisco_fc_fabric_password=
+
+# Connecting port (integer value)
+#cisco_fc_fabric_port=22
+
+# overridden zoning policy (string value)
+#cisco_zoning_policy=initiator-target
+
+# overridden zoning activation state (boolean value)
+#cisco_zone_activate=true
+
+# overridden zone name prefix (string value)
+#cisco_zone_name_prefix=<None>
+
+# VSAN of the Fabric (string value)
+#cisco_zoning_vsan=<None>
+
+
+[database]
 
 #
-# Options defined in cinder.volume.utils
+# Options defined in oslo.db
 #
 
-# The default block size used when copying/clearing volumes
-# (string value)
-#volume_dd_blocksize=1M
+# The file name to use with SQLite. (string value)
+#sqlite_db=oslo.sqlite
+
+# If True, SQLite uses synchronous mode. (boolean value)
+#sqlite_synchronous=true
+
+# The back end to use for the database. (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend=sqlalchemy
+
+# The SQLAlchemy connection string to use to connect to the
+# database. (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/cinder
+
+# The SQLAlchemy connection string to use to connect to the
+# slave database. (string value)
+#slave_connection=<None>
+
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode=TRADITIONAL
+
+# Timeout before idle SQL connections are reaped. (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size=<None>
+
+# Maximum number of database connection retries during
+# startup. Set to -1 to specify an infinite retry count.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries=10
+
+# Interval between retries of opening a SQL connection.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval=10
+
+# If set, use this value for max_overflow with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information: 0=None,
+# 100=Everything. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug=0
+
+# Add Python stack traces to SQL as comment strings. (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace=false
+
+# If set, use this value for pool_timeout with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout=<None>
+
+# Enable the experimental use of database reconnect on
+# connection lost. (boolean value)
+#use_db_reconnect=false
+
+# Seconds between database connection retries. (integer value)
+#db_retry_interval=1
+
+# If True, increases the interval between database connection
+# retries up to db_max_retry_interval. (boolean value)
+#db_inc_retry_interval=true
+
+# If db_inc_retry_interval is set, the maximum seconds between
+# database connection retries. (integer value)
+#db_max_retry_interval=10
+
+# Maximum database connection retries before error is raised.
+# Set to -1 to specify an infinite retry count. (integer
+# value)
+#db_max_retries=20
+
+
+#
+# Options defined in oslo.db.concurrency
+#
+
+# Enable the experimental use of thread pooling for all DB API
+# calls (boolean value)
+# Deprecated group/name - [DEFAULT]/dbapi_use_tpool
+#use_tpool=false
+
+
+[fc-zone-manager]
+
+#
+# Options defined in cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver
+#
+
+# Southbound connector for zoning operation (string value)
+#brcd_sb_connector=cinder.zonemanager.drivers.brocade.brcd_fc_zone_client_cli.BrcdFCZoneClientCLI
+
+
+#
+# Options defined in cinder.zonemanager.drivers.cisco.cisco_fc_zone_driver
+#
+
+# Southbound connector for zoning operation (string value)
+#cisco_sb_connector=cinder.zonemanager.drivers.cisco.cisco_fc_zone_client_cli.CiscoFCZoneClientCLI
+
+
+#
+# Options defined in cinder.zonemanager.fc_zone_manager
+#
+
+# FC Zone Driver responsible for zone management (string
+# value)
+#zone_driver=cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver.BrcdFCZoneDriver
+
+# Zoning policy configured by user (string value)
+#zoning_policy=initiator-target
+
+# Comma separated list of fibre channel fabric names. This
+# list of names is used to retrieve other SAN credentials for
+# connecting to each SAN fabric (string value)
+#fc_fabric_names=<None>
+
+# FC San Lookup Service (string value)
+#fc_san_lookup_service=cinder.zonemanager.drivers.brocade.brcd_fc_san_lookup_service.BrcdFCSanLookupService
 
 
 [keymgr]
@@ -1803,75 +2543,303 @@
 #fixed_key=<None>
 
 
-[database]
-
 #
-# Options defined in cinder.openstack.common.db.api
+# Options defined in cinder.keymgr.key_mgr
 #
 
-# 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
-
+# Authentication url for encryption service. (string value)
+#encryption_auth_url=http://localhost:5000/v2.0
+
+# Url for encryption service. (string value)
+#encryption_api_url=http://localhost:9311/v1
+
+
+[keystone_authtoken]
 
 #
-# Options defined in cinder.openstack.common.db.sqlalchemy.session
+# Options defined in keystonemiddleware.auth_token
 #
 
-# 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
+# Prefix to prepend at the beginning of the path. Deprecated,
+# use identity_uri. (string value)
+#auth_admin_prefix=
+
+# Host providing the admin Identity API endpoint. Deprecated,
+# use identity_uri. (string value)
+#auth_host=127.0.0.1
+
+# Port of the admin Identity API endpoint. Deprecated, use
+# identity_uri. (integer value)
+#auth_port=35357
+
+# Protocol of the admin Identity API endpoint (http or https).
+# Deprecated, use identity_uri. (string value)
+#auth_protocol=https
+
+# Complete public Identity API endpoint (string value)
+auth_uri=http://127.0.0.1:5000/v2.0/
+
+# Complete admin Identity API endpoint. This should specify
+# the unversioned root endpoint e.g. https://localhost:35357/
+# (string value)
+identity_uri=http://127.0.0.1:35357/
+
+# API version of the admin Identity API endpoint (string
+# value)
+#auth_version=<None>
+
+# Do not handle authorization requests within the middleware,
+# but delegate the authorization decision to downstream WSGI
+# components (boolean value)
+#delay_auth_decision=false
+
+# Request timeout value for communicating with Identity API
+# server. (boolean value)
+#http_connect_timeout=<None>
+
+# How many times are we trying to reconnect when communicating
+# with Identity API Server. (integer value)
+#http_request_max_retries=3
+
+# This option is deprecated and may be removed in a future
+# release. Single shared secret with the Keystone
+# configuration used for bootstrapping a Keystone
+# installation, or otherwise bypassing the normal
+# authentication process. This option should not be used, use
+# `admin_user` and `admin_password` instead. (string value)
+#admin_token=<None>
+
+# Keystone account username (string value)
+admin_user=%SERVICE_USER%
+
+# Keystone account password (string value)
+admin_password=%SERVICE_PASSWORD%
+
+# Keystone service account tenant name to validate user tokens
+# (string value)
+admin_tenant_name=%SERVICE_TENANT_NAME%
+
+# Env key for the swift cache (string value)
+#cache=<None>
+
+# Required if Keystone server requires client certificate
+# (string value)
+#certfile=<None>
+
+# Required if Keystone server requires client certificate
+# (string value)
+#keyfile=<None>
+
+# A PEM encoded Certificate Authority to use when verifying
+# HTTPs connections. Defaults to system CAs. (string value)
+#cafile=<None>
+
+# Verify HTTPS connections. (boolean value)
+#insecure=false
+
+# Directory used to cache files related to PKI tokens (string
 # value)
-#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
+signing_dir=$state_path/keystone-signing
+
+# Optionally specify a list of memcached server(s) to use for
+# caching. If left undefined, tokens will instead be cached
+# in-process. (list value)
+# Deprecated group/name - [DEFAULT]/memcache_servers
+#memcached_servers=<None>
+
+# In order to prevent excessive effort spent validating
+# tokens, the middleware caches previously-seen tokens for a
+# configurable duration (in seconds). Set to -1 to disable
+# caching completely. (integer value)
+#token_cache_time=300
+
+# Determines the frequency at which the list of revoked tokens
+# is retrieved from the Identity service (in seconds). A high
+# number of revocation events combined with a low cache
+# duration may significantly reduce performance. (integer
+# value)
+#revocation_cache_time=10
+
+# (optional) if defined, indicate whether token data should be
+# authenticated or authenticated and encrypted. Acceptable
+# values are MAC or ENCRYPT.  If MAC, token data is
+# authenticated (with HMAC) in the cache. If ENCRYPT, token
+# data is encrypted and authenticated in the cache. If the
+# value is not one of these options or empty, auth_token will
+# raise an exception on initialization. (string value)
+#memcache_security_strategy=<None>
+
+# (optional, mandatory if memcache_security_strategy is
+# defined) this string is used for key derivation. (string
 # value)
-#connection_trace=false
+#memcache_secret_key=<None>
+
+# (optional) number of seconds memcached server is considered
+# dead before it is tried again. (integer value)
+#memcache_pool_dead_retry=300
+
+# (optional) max total number of open connections to every
+# memcached server. (integer value)
+#memcache_pool_maxsize=10
+
+# (optional) socket timeout in seconds for communicating with
+# a memcache server. (integer value)
+#memcache_pool_socket_timeout=3
+
+# (optional) number of seconds a connection to memcached is
+# held unused in the pool before it is closed. (integer value)
+#memcache_pool_unused_timeout=60
+
+# (optional) number of seconds that an operation will wait to
+# get a memcache client connection from the pool. (integer
+# value)
+#memcache_pool_conn_get_timeout=10
+
+# (optional) use the advanced (eventlet safe) memcache client
+# pool. The advanced pool will only work under python 2.x.
+# (boolean value)
+#memcache_use_advanced_pool=false
+
+# (optional) indicate whether to set the X-Service-Catalog
+# header. If False, middleware will not ask for service
+# catalog on token validation and will not set the X-Service-
+# Catalog header. (boolean value)
+#include_service_catalog=true
+
+# Used to control the use and type of token binding. Can be
+# set to: "disabled" to not check token binding. "permissive"
+# (default) to validate binding information if the bind type
+# is of a form known to the server and ignore it if not.
+# "strict" like "permissive" but if the bind type is unknown
+# the token will be rejected. "required" any form of token
+# binding is needed to be allowed. Finally the name of a
+# binding method that must be present in tokens. (string
+# value)
+#enforce_token_bind=permissive
+
+# If true, the revocation list will be checked for cached
+# tokens. This requires that PKI tokens are configured on the
+# Keystone server. (boolean value)
+#check_revocations_for_cached=false
+
+# Hash algorithms to use for hashing PKI tokens. This may be a
+# single algorithm or multiple. The algorithms are those
+# supported by Python standard hashlib.new(). The hashes will
+# be tried in the order given, so put the preferred one first
+# for performance. The result of the first hash will be stored
+# in the cache. This will typically be set to multiple values
+# only while migrating from a less secure algorithm to a more
+# secure one. Once all the old tokens are expired this option
+# should be set to a single value for better performance.
+# (list value)
+#hash_algorithms=md5
 
 
 [matchmaker_redis]
 
 #
-# Options defined in cinder.openstack.common.rpc.matchmaker_redis
+# Options defined in oslo.messaging
 #
 
-# Host to locate redis (string value)
+# 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 for Redis server (optional). (string value)
 #password=<None>
 
 
-# Total option count: 401
+[matchmaker_ring]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Matchmaker ring file (JSON). (string value)
+# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
+#ringfile=/etc/oslo/matchmaker_ring.json
+
+
+[oslo_messaging_amqp]
+
+#
+# Options defined in oslo.messaging
+#
+# NOTE: Options in this group are supported when using oslo.messaging >=1.5.0.
+
+# address prefix used when sending to a specific server
+# (string value)
+#server_request_prefix=exclusive
+
+# address prefix used when broadcasting to all servers (string
+# value)
+#broadcast_prefix=broadcast
+
+# address prefix when sending to any server in group (string
+# value)
+#group_request_prefix=unicast
+
+# Name for the AMQP container (string value)
+#container_name=<None>
+
+# Timeout for inactive connections (in seconds) (integer
+# value)
+#idle_timeout=0
+
+# Debug: dump AMQP frames to stdout (boolean value)
+#trace=false
+
+# CA certificate PEM file for verifing server certificate
+# (string value)
+#ssl_ca_file=
+
+# Identifying certificate PEM file to present to clients
+# (string value)
+#ssl_cert_file=
+
+# Private key PEM file used to sign cert_file certificate
+# (string value)
+#ssl_key_file=
+
+# Password for decrypting ssl_key_file (if encrypted) (string
+# value)
+#ssl_key_password=<None>
+
+# Accept clients using either SSL or plain TCP (boolean value)
+#allow_insecure_clients=false
+
+
+[profiler]
+
+#
+# Options defined in cinder.service
+#
+
+# If False fully disable profiling feature. (boolean value)
+#profiler_enabled=false
+
+# If False doesn't trace SQL requests. (boolean value)
+#trace_sqlalchemy=false
+
+
+[ssl]
+
+#
+# Options defined in cinder.openstack.common.sslutils
+#
+
+# CA certificate file to use to verify connecting clients
+# (string value)
+#ca_file=<None>
+
+# Certificate file to use when starting the server securely
+# (string value)
+#cert_file=<None>
+
+# Private key file to use when starting the server securely
+# (string value)
+#key_file=<None>
+
+
--- a/components/openstack/cinder/files/cinder.exec_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder.exec_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,6 +1,3 @@
-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
 
--- a/components/openstack/cinder/files/cinder.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,10 +1,8 @@
 OpenStack Block Storage Management:RO::\
 Manage OpenStack Cinder:\
-auths=solaris.admin.edit/etc/cinder/api-paste.ini,\
-solaris.admin.edit/etc/cinder/cinder.conf,\
-solaris.admin.edit/etc/cinder/cinder_emc_config.xml,\
-solaris.admin.edit/etc/cinder/logging.conf,\
-solaris.admin.edit/etc/cinder/policy.json,\
+auths=solaris.admin.edit/etc/cinder/*.conf,\
+solaris.admin.edit/etc/cinder/*.ini,\
+solaris.admin.edit/etc/cinder/*.json,\
 solaris.smf.manage.cinder,\
 solaris.smf.value.cinder;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
--- a/components/openstack/cinder/files/cinder.user_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/cinder.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,1 +1,1 @@
-cinder::RO::profiles=cinder-volume
+cinder::RO::profiles=OpenStack Block Storage Management,cinder-volume 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/solaris/solarisfc.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,162 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Generic Solaris Fibre Channel utilities."""
+
+import os
+import time
+
+from cinder.brick import exception
+from cinder.openstack.common.gettextutils import _
+from cinder.openstack.common import log as logging
+from cinder.openstack.common import processutils as putils
+
+LOG = logging.getLogger(__name__)
+
+
+class SolarisFibreChannel(object):
+    def __init__(self, *args, **kwargs):
+        self.execute = putils.execute
+
+    def _get_fc_hbas(self):
+        """Get Fibre Channel HBA information."""
+        out = None
+        try:
+            out, err = self.execute('/usr/sbin/fcinfo', 'hba-port')
+        except putils.ProcessExecutionError as err:
+            return None
+
+        if out is None:
+            LOG.info(_("Cannot find any Fibre Channel HBAs"))
+            return None
+
+        hbas = []
+        hba = {}
+        for line in out.splitlines():
+            line = line.strip()
+            # Collect the following hba-port data:
+            # 1: Port WWN
+            # 2: State (online|offline)
+            # 3: Node WWN
+            if line.startswith("HBA Port WWN:"):
+                # New HBA port entry
+                hba = {}
+                wwpn = line.split()[-1]
+                hba['port_name'] = wwpn
+                continue
+            elif line.startswith("Port Mode:"):
+                mode = line.split()[-1]
+                # Skip Target mode ports
+                if mode != 'Initiator':
+                    break
+            elif line.startswith("State:"):
+                state = line.split()[-1]
+                hba['port_state'] = state
+                continue
+            elif line.startswith("Node WWN:"):
+                wwnn = line.split()[-1]
+                hba['node_name'] = wwnn
+                continue
+            if len(hba) == 3:
+                hbas.append(hba)
+                hba = {}
+        return hbas
+
+    def get_fc_wwnns(self):
+        """Get Fibre Channel WWNNs from the system, if any."""
+        hbas = self._get_fc_hbas()
+        if hbas is None:
+            return None
+
+        wwnns = []
+        for hba in hbas:
+            if hba['port_state'] == 'online':
+                wwnn = hba['node_name']
+                wwnns.append(wwnn)
+        return wwnns
+
+    def get_fc_wwpns(self):
+        """Get Fibre Channel WWPNs from the system, if any."""
+        hbas = self._get_fc_hbas()
+        if hbas is None:
+            return None
+
+        wwpns = []
+        for hba in hbas:
+            if hba['port_state'] == 'online':
+                wwpn = hba['port_name']
+                wwpns.append(wwpn)
+        return wwpns
+
+    def _refresh_connection(self):
+        """Force the link reinitialization to make the LUN present."""
+        wwpns = self.get_fc_wwpns()
+        for wwpn in wwpns:
+            self.execute('/usr/sbin/fcadm', 'force-lip', wwpn)
+
+    def get_device_path(self, wwn):
+        """Get the Device Name of the WWN"""
+        try:
+            out, err = self.execute('/usr/sbin/fcinfo', 'logical-unit', '-v')
+        except putils.ProcessExecutionError as err:
+            return None
+
+        host_dev = None
+        remote_port = None
+        if out is not None:
+            for line in [l.strip() for l in out.splitlines()]:
+                if line.startswith("OS Device Name:"):
+                    host_dev = line.split()[-1]
+                if line.startswith("Remote Port WWN:"):
+                    remote_port = line.split()[-1]
+                if remote_port == wwn:
+                    return host_dev
+
+        return None
+
+    def connect_volume(self, connection_properties, scan_tries):
+        """Attach the volume to instance_name.
+
+        connection_properties for Fibre Channel must include:
+        target_portal - ip and optional port
+        target_iqn - iSCSI Qualified Name
+        target_lun - LUN id of the volume
+        """
+        device_info = {'type': 'block'}
+        target_wwn = connection_properties['target_wwn']
+        # Check for multiple target_wwn values in a list
+        if isinstance(target_wwn, list):
+            wwn = target_wwn[0]
+
+        # The scsi_vhci disk node is not always present immediately.
+        # Sometimes we need to reinitialize the connection to trigger
+        # a refresh.
+        for i in range(1, scan_tries):
+            LOG.debug("Looking for Fibre Channel device")
+            host_dev = self.get_device_path(wwn)
+
+            if host_dev is not None and os.path.exists(host_dev):
+                break
+            else:
+                self._refresh_connection()
+                time.sleep(i ** 2)
+        else:
+            msg = _("Fibre Channel volume device not found.")
+            LOG.error(msg)
+            raise exception.NoFibreChannelVolumeDeviceFound()
+
+        device_info['path'] = host_dev
+        return device_info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/solaris/solarisiscsi.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,118 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Generic Solaris iSCSI utilities."""
+
+import os
+import time
+
+from cinder.brick import exception
+from cinder.openstack.common.gettextutils import _
+from cinder.openstack.common import log as logging
+from cinder.openstack.common import processutils as putils
+
+LOG = logging.getLogger(__name__)
+
+
+class SolarisiSCSI(object):
+    def __init__(self, *args, **kwargs):
+        self.execute = putils.execute
+
+    def disconnect_iscsi(self):
+        """Disable the iSCSI discovery method to detach the volume
+        from instance_name.
+        """
+        self.execute('/usr/sbin/iscsiadm', 'modify', 'discovery',
+                     '--sendtargets', 'disable')
+
+    def _get_device_path(self, connection_properties):
+        """Get the device path from the target info."""
+        (out, _err) = self.execute('/usr/sbin/iscsiadm', 'list',
+                                   'target', '-S',
+                                   connection_properties['target_iqn'])
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("OS Device Name:"):
+                dev_path = line.split()[-1]
+                return dev_path
+        else:
+            LOG.error(_("No device is found for the target %s.") %
+                      connection_properties['target_iqn'])
+            raise
+
+    def get_initiator(self):
+        """Return the iSCSI initiator node name IQN"""
+        out, err = self.execute('/usr/sbin/iscsiadm', 'list', 'initiator-node')
+
+        # Sample first line of command output:
+        # Initiator node name: iqn.1986-03.com.sun:01:e00000000000.4f757217
+        initiator_name_line = out.splitlines()[0]
+        return initiator_name_line.rsplit(' ', 1)[1]
+
+    def _connect_to_iscsi_portal(self, connection_properties):
+        # TODO(Strony): handle the CHAP authentication
+        target_ip = connection_properties['target_portal'].split(":")[0]
+        self.execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
+                     target_ip)
+        self.execute('/usr/sbin/iscsiadm', 'modify', 'discovery',
+                     '--sendtargets', 'enable')
+        (out, _err) = self.execute('/usr/sbin/iscsiadm', 'list',
+                                   'discovery-address', '-v',
+                                   target_ip)
+
+        lines = out.splitlines()
+        if not lines[0].strip().startswith('Discovery Address: ') or \
+                lines[1].strip().startswith('Unable to get targets.'):
+            msg = _("No iSCSI target is found.")
+            LOG.error(msg)
+            raise
+
+        target_iqn = connection_properties['target_iqn']
+        for line in [l.strip() for l in lines]:
+            if line.startswith("Target name:") and \
+                    line.split()[-1] == target_iqn:
+                return
+        else:
+            LOG.error(_("No active session is found for the target %s.") %
+                      target_iqn)
+            raise
+
+    def connect_volume(self, connection_properties, scan_tries):
+        """Attach the volume to instance_name.
+
+        connection_properties for iSCSI must include:
+        target_portal - ip and optional port
+        target_iqn - iSCSI Qualified Name
+        target_lun - LUN id of the volume
+        """
+        device_info = {'type': 'block'}
+
+        # TODO(Strony): support the iSCSI multipath on Solaris.
+        self._connect_to_iscsi_portal(connection_properties)
+
+        host_device = self._get_device_path(connection_properties)
+
+        # check if it is a valid device path.
+        for i in range(1, scan_tries):
+            if os.path.exists(host_device):
+                break
+            else:
+                time.sleep(i ** 2)
+        else:
+            raise exception.VolumeDeviceNotFound(device=host_device)
+
+        device_info['path'] = host_device
+        return device_info
--- a/components/openstack/cinder/files/solaris/zfs.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/files/solaris/zfs.py	Mon Apr 20 12:35:51 2015 -0700
@@ -2,7 +2,7 @@
 # Copyright (c) 2012 OpenStack LLC.
 # All Rights Reserved.
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -20,12 +20,13 @@
 """
 
 import abc
-import os
+import time
 
 from oslo.config import cfg
 
 from cinder import exception
 from cinder.image import image_utils
+from cinder.i18n import _
 from cinder.openstack.common import log as logging
 from cinder.openstack.common import processutils
 from cinder.volume import driver
@@ -116,7 +117,9 @@
         well after it is removed.
         """
         zvol = self._get_zvol_path(volume)
-        if not os.path.exists(zvol):
+        try:
+            (out, _err) = self._execute('/usr/bin/ls', zvol)
+        except processutils.ProcessExecutionError:
             LOG.debug(_("The volume path '%s' doesn't exist") % zvol)
             return
 
@@ -170,10 +173,13 @@
         """Initialize the connection and returns connection info."""
         volume_path = '%s/volume-%s' % (self.configuration.zfs_volume_base,
                                         volume['id'])
+        properties = {}
+        properties['device_path'] = self._get_zvol_path(volume)
+
         return {
             'driver_volume_type': 'local',
             'volume_path': volume_path,
-            'data': {}
+            'data': properties
         }
 
     def terminate_connection(self, volume, connector, **kwargs):
@@ -272,6 +278,22 @@
     def __init__(self, *args, **kwargs):
         super(STMFDriver, self).__init__(*args, **kwargs)
 
+    def _stmf_execute(self, *cmd):
+        """Handle the possible race during the local execution."""
+        tries = 0
+        while True:
+            try:
+                self._execute(*cmd)
+                return
+            except processutils.ProcessExecutionError as ex:
+                tries = tries + 1
+
+                if tries >= self.configuration.num_shell_tries or \
+                        'resource busy' not in ex.stderr:
+                    raise
+
+                time.sleep(tries ** 2)
+
     def _check_target(self, target, protocol):
         """Verify if the target exists."""
         (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-target')
@@ -361,9 +383,9 @@
                 view_and_lun['lun'] = int(line.split()[2])
 
         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
+            err_msg = (_("Failed to get the view_entry or LUN of the LU '%s'.")
+                       % lu)
+            raise exception.VolumeBackendAPIException(data=err_msg)
         else:
             LOG.debug(_("The view_entry and LUN of LU '%s' are '%s' and '%d'.")
                       % (lu, view_and_lun['view'], view_and_lun['lun']))
@@ -383,7 +405,7 @@
         zvol = self._get_zvol_path(volume)
 
         # Create a Logical Unit (LU)
-        self._execute('/usr/sbin/stmfadm', 'create-lu', zvol)
+        self._stmf_execute('/usr/sbin/stmfadm', 'create-lu', zvol)
         luid = self._get_luid(volume)
         if not luid:
             msg = (_("Failed to create LU for volume '%s'")
@@ -392,20 +414,21 @@
 
         # Create a target group and a target belonging to the target group
         target_group = 'tg-%s' % volume['name']
-        self._execute('/usr/sbin/stmfadm', 'create-tg', target_group)
+        self._stmf_execute('/usr/sbin/stmfadm', 'create-tg', target_group)
 
         target_name = '%s%s' % (self.configuration.iscsi_target_prefix,
                                 volume['name'])
-        self._execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
-                      target_group, target_name)
+        self._stmf_execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
+                           target_group, target_name)
 
-        self._execute('/usr/sbin/itadm', 'create-target', '-n', target_name)
+        self._stmf_execute('/usr/sbin/itadm', 'create-target', '-n',
+                           target_name)
         assert self._check_target(target_name, 'iSCSI')
 
         # 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', '-n', 8776, '-t',
-                          target_group, luid)
+            self._stmf_execute('/usr/sbin/stmfadm', 'add-view', '-n', '8776',
+                               '-t', target_group, luid)
 
     def remove_export(self, context, volume):
         """Remove an export for a volume.
@@ -422,21 +445,22 @@
         if luid is not None:
             view_lun = self._get_view_and_lun(luid)
             if view_lun['view']:
-                self._execute('/usr/sbin/stmfadm', 'remove-view', '-l',
-                              luid, view_lun['view'])
+                self._stmf_execute('/usr/sbin/stmfadm', 'remove-view', '-l',
+                                   luid, view_lun['view'])
 
         # Remove the target and its target group
         if self._check_target(target_name, 'iSCSI'):
-            self._execute('/usr/sbin/stmfadm', 'offline-target', target_name)
-            self._execute('/usr/sbin/itadm', 'delete-target', '-f',
-                          target_name)
+            self._stmf_execute('/usr/sbin/stmfadm', 'offline-target',
+                               target_name)
+            self._stmf_execute('/usr/sbin/itadm', 'delete-target', '-f',
+                               target_name)
 
         if self._check_tg(target_group):
-            self._execute('/usr/sbin/stmfadm', 'delete-tg', target_group)
+            self._stmf_execute('/usr/sbin/stmfadm', 'delete-tg', target_group)
 
         # Remove the LU
         if luid is not None:
-            self._execute('/usr/sbin/stmfadm', 'delete-lu', luid)
+            self._stmf_execute('/usr/sbin/stmfadm', 'delete-lu', luid)
 
     def _get_iscsi_properties(self, volume):
         """Get iSCSI configuration
@@ -467,11 +491,12 @@
 
         properties['target_discovered'] = True
         properties['target_iqn'] = target_name
+
         properties['target_portal'] = ('%s:%d' %
                                        (self.configuration.iscsi_ip_address,
                                         self.configuration.iscsi_port))
         view_lun = self._get_view_and_lun(luid)
-        if view_lun['lun']:
+        if view_lun['lun'] is not None:
             properties['target_lun'] = view_lun['lun']
         properties['volume_id'] = volume['id']
 
@@ -606,7 +631,7 @@
         zvol = self._get_zvol_path(volume)
 
         # Create a Logical Unit (LU)
-        self._execute('/usr/sbin/stmfadm', 'create-lu', zvol)
+        self._stmf_execute('/usr/sbin/stmfadm', 'create-lu', zvol)
         luid = self._get_luid(volume)
         if not luid:
             msg = (_("Failed to create logic unit for volume '%s'")
@@ -626,21 +651,22 @@
                 raise exception.VolumeBackendAPIException(data=msg)
 
             # Create a target group for the wwn
-            self._execute('/usr/sbin/stmfadm', 'create-tg', target_group)
+            self._stmf_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)
+            self._stmf_execute('/usr/sbin/stmfadm', 'offline-target',
+                               'wwn.%s' % wwn)
+            self._stmf_execute('/usr/sbin/stmfadm', 'add-tg-member', '-g',
+                               target_group, 'wwn.%s' % wwn)
+            self._stmf_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)
+            self._stmf_execute('/usr/sbin/stmfadm', 'add-view', '-t',
+                               target_group, luid)
 
     def remove_export(self, context, volume):
         """Remove an export for a volume."""
@@ -653,20 +679,20 @@
             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'])
+                self._stmf_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)
+                    self._stmf_execute('/usr/sbin/stmfadm', 'offline-target',
+                                       target_wwn)
                 if self._check_tg(target_group):
-                    self._execute('/usr/sbin/stmfadm', 'delete-tg',
-                                  target_group)
+                    self._stmf_execute('/usr/sbin/stmfadm', 'delete-tg',
+                                       target_group)
 
             # Remove the LU
-            self._execute('/usr/sbin/stmfadm', 'delete-lu', luid)
+            self._stmf_execute('/usr/sbin/stmfadm', 'delete-lu', luid)
 
     def _get_fc_properties(self, volume):
         """Get Fibre Channel configuration.
@@ -693,7 +719,7 @@
         properties['target_discovered'] = True
         properties['target_wwn'] = wwns
         view_lun = self._get_view_and_lun(luid)
-        if view_lun['lun']:
+        if view_lun['lun'] is not None:
             properties['target_lun'] = view_lun['lun']
         return properties
 
--- a/components/openstack/cinder/files/zfssa/__init__.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-# Empty for this release
--- a/components/openstack/cinder/files/zfssa/restclient.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,353 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-"""
-ZFS Storage Appliance 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)
--- a/components/openstack/cinder/files/zfssa/zfssaiscsi.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-"""
-ZFS Storage Appliance Cinder Volume Driver
-"""
-import 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 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)
--- a/components/openstack/cinder/files/zfssa/zfssarest.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,614 +0,0 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-"""
-ZFS Storage Appliance 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-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/patches/01-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,73 +1,71 @@
 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
+kombu		Not applicable
 
-lockfile	No longer applicable
-		(upstream commit a497b4a214b89cb2b387f227c208cfdae62ad6b1)
-
-netaddr		Not applicable to Solaris (VMware specific)
+oslo.rootwrap	Not applicable to Solaris
 
 paramiko	Not applicable to Solaris (various drivers specific)
 
-suds		Not applicable to Solaris (VMware specific)
+pycrypto	Not applicable to Solaris (various drivers specific)
 
-wsgiref		No longer applicable
+rtslib-fb	Not applicable to Solaris (Linux iSCSI specific)
 
---- 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
-@@ -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
+--- cinder-2014.2.2/cinder.egg-info/requires.txt.~1~	2015-02-05 08:05:50.000000000 -0800
++++ cinder-2014.2.2/cinder.egg-info/requires.txt	2015-02-23 13:49:52.736413251 -0800
+@@ -6,18 +6,14 @@ eventlet>=0.15.1,<0.16.0
  greenlet>=0.3.2
- iso8601>=0.1.8
- kombu>=2.4.8
--lockfile>=0.8
+ iso8601>=0.1.9
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
  lxml>=2.3
--netaddr
- oslo.config>=1.2.0
--paramiko>=1.8.0
+ netaddr>=0.7.12
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+-oslo.rootwrap>=1.3.0
+ osprofiler>=0.3.0                       # Apache-2.0
+-paramiko>=1.13.0
  Paste
  PasteDeploy>=1.5.0
- python-glanceclient>=0.9.0
-@@ -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
-@@ -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
+-pycrypto>=2.6
+ python-barbicanclient>=2.1.0,!=3.0.0,<3.0.2
+ python-glanceclient>=0.14.0
+ python-novaclient>=2.18.0
+@@ -25,7 +21,6 @@ python-swiftclient>=2.2.0
+ requests>=1.2.1,!=2.4.0
+ Routes>=1.12.3,!=2.0
+ taskflow>=0.4,<0.7.0
+-rtslib-fb>=2.1.39
+ six>=1.7.0
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+ sqlalchemy-migrate==0.9.1
+--- cinder-2014.2.2/requirements.txt.~1~	2015-02-05 08:03:26.000000000 -0800
++++ cinder-2014.2.2/requirements.txt	2015-02-23 13:52:20.137709426 -0800
+@@ -10,18 +10,14 @@ eventlet>=0.15.1,<0.16.0
  greenlet>=0.3.2
- iso8601>=0.1.8
- kombu>=2.4.8
--lockfile>=0.8
+ iso8601>=0.1.9
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
  lxml>=2.3
--netaddr
- oslo.config>=1.2.0
--paramiko>=1.8.0
+ netaddr>=0.7.12
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+-oslo.rootwrap>=1.3.0
+ osprofiler>=0.3.0                       # Apache-2.0
+-paramiko>=1.13.0
  Paste
  PasteDeploy>=1.5.0
- python-glanceclient>=0.9.0
-@@ -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
+-pycrypto>=2.6
+ python-barbicanclient>=2.1.0,!=3.0.0,<3.0.2
+ python-glanceclient>=0.14.0
+ python-novaclient>=2.18.0
+@@ -29,7 +25,6 @@ python-swiftclient>=2.2.0
+ requests>=1.2.1,!=2.4.0
+ Routes>=1.12.3,!=2.0
+ taskflow>=0.4,<0.7.0
+-rtslib-fb>=2.1.39
+ six>=1.7.0
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+ sqlalchemy-migrate==0.9.1
--- a/components/openstack/cinder/patches/02-noparamiko.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-In-house patch for the temporary removal of Paramiko dependency in
-Cinder.  This patch is Solaris-specific and not suitable for upstream
-
---- 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
-@@ -43,7 +43,6 @@
- from eventlet import greenthread
- from eventlet import pools
- from oslo.config import cfg
--import paramiko
- 
- from cinder.brick.initiator import connector
- from cinder import exception
-@@ -142,125 +141,6 @@
-     return processutils.execute(*cmd, **kwargs)
- 
- 
--def check_ssh_injection(cmd_list):
--    ssh_injection_pattern = ['`', '$', '|', '||', ';', '&', '&&', '>', '>>',
--                             '<']
--
--    # Check whether injection attacks exist
--    for arg in cmd_list:
--        arg = arg.strip()
--
--        # 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))
--
--        # 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):
--    """Invoke an interactive shell session on server."""
--    channel = client.invoke_shell()
--    channel.resize_pty(width, height)
--    return channel
--
--
--class SSHPool(pools.Pool):
--    """A simple eventlet pool to hold ssh connections."""
--
--    def __init__(self, ip, port, conn_timeout, login, password=None,
--                 privatekey=None, *args, **kwargs):
--        self.ip = ip
--        self.port = port
--        self.login = login
--        self.password = password
--        self.conn_timeout = conn_timeout if conn_timeout else None
--        self.privatekey = privatekey
--        super(SSHPool, self).__init__(*args, **kwargs)
--
--    def create(self):
--        try:
--            ssh = paramiko.SSHClient()
--            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
--            if self.password:
--                ssh.connect(self.ip,
--                            port=self.port,
--                            username=self.login,
--                            password=self.password,
--                            timeout=self.conn_timeout)
--            elif self.privatekey:
--                pkfile = os.path.expanduser(self.privatekey)
--                privatekey = paramiko.RSAKey.from_private_key_file(pkfile)
--                ssh.connect(self.ip,
--                            port=self.port,
--                            username=self.login,
--                            pkey=privatekey,
--                            timeout=self.conn_timeout)
--            else:
--                msg = _("Specify a password or private_key")
--                raise exception.CinderException(msg)
--
--            # Paramiko by default sets the socket timeout to 0.1 seconds,
--            # ignoring what we set thru the sshclient. This doesn't help for
--            # keeping long lived connections. Hence we have to bypass it, by
--            # overriding it after the transport is initialized. We are setting
--            # the sockettimeout to None and setting a keepalive packet so that,
--            # the server will keep the connection open. All that does is send
--            # a keepalive packet every ssh_conn_timeout seconds.
--            if self.conn_timeout:
--                transport = ssh.get_transport()
--                transport.sock.settimeout(None)
--                transport.set_keepalive(self.conn_timeout)
--            return ssh
--        except Exception as e:
--            msg = _("Error connecting via ssh: %s") % e
--            LOG.error(msg)
--            raise paramiko.SSHException(msg)
--
--    def get(self):
--        """
--        Return an item from the pool, when one is available.  This may
--        cause the calling greenthread to block. Check if a connection is active
--        before returning it. For dead connections create and return a new
--        connection.
--        """
--        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 from free_items."""
--        ssh.close()
--        ssh = None
--        if ssh in self.free_items:
--            self.free_items.pop(ssh)
--        if self.current_size > 0:
--            self.current_size -= 1
--
--
- def cinderdir():
-     import cinder
-     return os.path.abspath(cinder.__file__).split('cinder/__init__.py')[0]
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/02-nopycrypto.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,23 @@
+In-house removal of PyCrypto dependency in Cinder. This patch is
+Solaris-specific and not suitable for upstream.
+
+--- cinder-2014.2.2/cinder/volume/utils.py.orig	2014-10-16 06:26:26.000000000 -0700
++++ cinder-2014.2.2/cinder/volume/utils.py	2014-11-23 15:13:26.412114890 -0800
+@@ -16,8 +16,8 @@
+ 
+ 
+ import math
++from random import SystemRandom
+ 
+-from Crypto.Random import random
+ from oslo.config import cfg
+ 
+ from cinder.brick.local_dev import lvm as brick_lvm
+@@ -429,6 +429,7 @@ def generate_password(length=20, symbolg
+     # NOTE(jerdfelt): Some password policies require at least one character
+     # from each group of symbols, so start off with one random character
+     # from each symbol group
++    random = SystemRandom()
+     password = [random.choice(s) for s in symbolgroups]
+     # If length < len(symbolgroups), the leading characters will only
+     # be from the first length groups. Try our best to not be predictable
--- a/components/openstack/cinder/patches/03-emc_smis_iscsi.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-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.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
-@@ -21,6 +21,8 @@
- """
- 
- 
-+import sys
-+
- from cinder import exception
- from cinder.openstack.common import log as logging
- from cinder.volume import driver
-@@ -114,13 +116,41 @@
- 
-         LOG.warn(_("ISCSI provider_location not stored, using discovery"))
- 
--        (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
--                                    '-t', 'sendtargets', '-p',
--                                    self.configuration.iscsi_ip_address,
--                                    run_as_root=True)
-         targets = []
--        for target in out.splitlines():
--            targets.append(target)
-+
-+        if sys.platform == 'sunos5':
-+            data = _("Unexpected response while retrieving discovery-address "
-+                     "objects for volume '%s'") % volume["name"]
-+
-+            self._execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
-+                          self.configuration.iscsi_ip_address)
-+            (out, _err) = self._execute('/usr/sbin/iscsiadm', 'list',
-+                                        'discovery-address', '-v',
-+                                        self.configuration.iscsi_ip_address)
-+            lines = out.splitlines()
-+            if not lines[0].strip().startswith('Discovery Address: '):
-+                raise exception.VolumeBackendAPIException(data=data)
-+
-+            for i in range(1, len(lines), 2):
-+                name = lines[i].strip()
-+                if not name.startswith('Target name: '):
-+                    raise exception.VolumeBackendAPIException(data=data)
-+                (_, _, name) = name.split()
-+
-+                address = lines[i + 1].strip()
-+                if not address.startswith('Target address: '):
-+                    raise exception.VolumeBackendAPIException(data=data)
-+                (_, _, address, tpgt) = address.split()
-+                target = address + tpgt + ' ' + name
-+                targets.append(target)
-+
-+        else:
-+            (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
-+                                        '-t', 'sendtargets', '-p',
-+                                        self.configuration.iscsi_ip_address,
-+                                        run_as_root=True)
-+            for target in out.splitlines():
-+                targets.append(target)
- 
-         return targets
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/03-emc_vmax_iscsi.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,68 @@
+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-2014.2.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py.orig	2014-10-16 06:26:26.000000000 -0700
++++ cinder-2014.2.2/cinder/volume/drivers/emc/emc_vmax_iscsi.py	2014-10-27 00:12:22.034201865 -0700
+@@ -16,6 +16,8 @@
+ ISCSI Drivers for EMC VMAX arrays based on SMI-S.
+ 
+ """
++import sys
++
+ import six
+ 
+ from cinder import context
+@@ -155,17 +157,43 @@ class EMCVMAXISCSIDriver(driver.ISCSIDri
+ 
+         LOG.info(_("ISCSI provider_location not stored, using discovery."))
+ 
+-        (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
+-                                    '-t', 'sendtargets', '-p',
+-                                    self.configuration.iscsi_ip_address,
+-                                    run_as_root=True)
+-
+-        LOG.info(_(
+-            "smis_do_iscsi_discovery is: %(out)s")
+-            % {'out': out})
+         targets = []
+-        for target in out.splitlines():
+-            targets.append(target)
++        if sys.platform == 'sunos5':
++            data = _("Unexpected response while retrieving discovery-address "
++                     "objects for volume '%s'") % volume["name"]
++
++            self._execute('/usr/sbin/iscsiadm', 'add', 'discovery-address',
++                          self.configuration.iscsi_ip_address)
++            (out, _err) = self._execute('/usr/sbin/iscsiadm', 'list',
++                                        'discovery-address', '-v',
++                                        self.configuration.iscsi_ip_address)
++            lines = out.splitlines()
++            if not lines[0].strip().startswith('Discovery Address: '):
++                raise exception.VolumeBackendAPIException(data=data)
++
++            for i in range(1, len(lines), 2):
++                name = lines[i].strip()
++                if not name.startswith('Target name: '):
++                    raise exception.VolumeBackendAPIException(data=data)
++                (_, _, name) = name.split()
++
++                address = lines[i + 1].strip()
++                if not address.startswith('Target address: '):
++                    raise exception.VolumeBackendAPIException(data=data)
++                (_, _, address, tpgt) = address.split()
++                target = address + tpgt + ' ' + name
++                targets.append(target)
++        else:
++            (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
++                                        '-t', 'sendtargets', '-p',
++                                        self.configuration.iscsi_ip_address,
++                                        run_as_root=True)
++
++            LOG.info(_(
++                "smis_do_iscsi_discovery is: %(out)s")
++                % {'out': out})
++            for target in out.splitlines():
++                targets.append(target)
+ 
+         return targets
+ 
--- a/components/openstack/cinder/patches/04-launchpad-1236459.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-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
-@@ -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/04-volume-backup.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,146 @@
+This patch is to replace the linux-specific codes with the solaris
+codes to support the cinder backup on the Solaris.
+
+--- cinder-2014.2.2/cinder/brick/initiator/connector.py.~1~	2014-10-16 06:26:26.000000000 -0700
++++ cinder-2014.2.2/cinder/brick/initiator/connector.py	2015-01-04 23:12:23.661116812 -0800
+@@ -15,6 +15,7 @@
+ 
+ import os
+ import socket
++import sys
+ import time
+ 
+ from cinder.brick import exception
+@@ -22,6 +23,8 @@
+ from cinder.brick.initiator import host_driver
+ from cinder.brick.initiator import linuxfc
+ from cinder.brick.initiator import linuxscsi
++from cinder.brick.initiator import solarisfc
++from cinder.brick.initiator import solarisiscsi
+ from cinder.brick.remotefs import remotefs
+ from cinder.i18n import _
+ from cinder.openstack.common import lockutils
+@@ -39,7 +42,10 @@
+     """Get the connection properties for all protocols."""
+ 
+     iscsi = ISCSIConnector(root_helper=root_helper)
+-    fc = linuxfc.LinuxFibreChannel(root_helper=root_helper)
++    if sys.platform == 'sunos5':
++        fc = solarisfc.SolarisFibreChannel()
++    else:
++        fc = linuxfc.LinuxFibreChannel(root_helper=root_helper)
+ 
+     props = {}
+     props['ip'] = my_ip
+@@ -134,8 +140,11 @@
+                'of=/dev/null', 'count=1')
+         out, info = None, None
+         try:
+-            out, info = self._execute(*cmd, run_as_root=True,
+-                                      root_helper=self._root_helper)
++            if sys.platform == 'sunos5':
++                out, info = self._execute(*cmd)
++            else:
++                out, info = self._execute(*cmd, run_as_root=True,
++                                          root_helper=self._root_helper)
+         except putils.ProcessExecutionError as e:
+             LOG.error(_("Failed to access the device on the path "
+                         "%(path)s: %(error)s %(info)s.") %
+@@ -171,7 +180,10 @@
+                  execute=putils.execute, use_multipath=False,
+                  device_scan_attempts=DEVICE_SCAN_ATTEMPTS_DEFAULT,
+                  *args, **kwargs):
+-        self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
++        if sys.platform == 'sunos5':
++            self._solarisiscsi = solarisiscsi.SolarisiSCSI()
++        else:
++            self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
+         super(ISCSIConnector, self).__init__(root_helper, driver=driver,
+                                              execute=execute,
+                                              device_scan_attempts=
+@@ -192,6 +204,9 @@
+         target_iqn - iSCSI Qualified Name
+         target_lun - LUN id of the volume
+         """
++        if sys.platform == 'sunos5':
++            return self._solarisiscsi.connect_volume(connection_properties,
++                                                     self.device_scan_attempts)
+ 
+         device_info = {'type': 'block'}
+ 
+@@ -262,6 +277,10 @@
+         target_iqn - iSCSI Qualified Name
+         target_lun - LUN id of the volume
+         """
++        if sys.platform == 'sunos5':
++            self._solarisiscsi.disconnect_iscsi()
++            return
++
+         # Moved _rescan_iscsi and _rescan_multipath
+         # from _disconnect_volume_multipath_iscsi to here.
+         # Otherwise, if we do rescan after _linuxscsi.remove_multipath_device
+@@ -306,6 +325,9 @@
+ 
+     def get_initiator(self):
+         """Secure helper to read file as root."""
++        if sys.platform == 'sunos5':
++            return self._solarisiscsi.get_initiator()
++
+         file_path = '/etc/iscsi/initiatorname.iscsi'
+         try:
+             lines, _err = self._execute('cat', file_path, run_as_root=True,
+@@ -555,8 +577,11 @@
+                  execute=putils.execute, use_multipath=False,
+                  device_scan_attempts=DEVICE_SCAN_ATTEMPTS_DEFAULT,
+                  *args, **kwargs):
+-        self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
+-        self._linuxfc = linuxfc.LinuxFibreChannel(root_helper, execute)
++        if sys.platform == 'sunos5':
++            self._solarisfc = solarisfc.SolarisFibreChannel()
++        else:
++            self._linuxscsi = linuxscsi.LinuxSCSI(root_helper, execute)
++            self._linuxfc = linuxfc.LinuxFibreChannel(root_helper, execute)
+         super(FibreChannelConnector, self).__init__(root_helper, driver=driver,
+                                                     execute=execute,
+                                                     device_scan_attempts=
+@@ -578,6 +603,10 @@
+         target_iqn - iSCSI Qualified Name
+         target_lun - LUN id of the volume
+         """
++        if sys.platform == 'sunos5':
++            return self._solarisfc.connect_volume(connection_properties,
++                                                  self.device_scan_attempts)
++
+         LOG.debug("execute = %s" % self._execute)
+         device_info = {'type': 'block'}
+ 
+@@ -686,6 +715,13 @@
+         target_wwn - iSCSI Qualified Name
+         target_lun - LUN id of the volume
+         """
++        if sys.platform == 'sunos5':
++            # There is some latency before the next time connection happens.
++            # The best practice is to offline the state of the switch now
++            # and online it at the next connection.
++            # But now, we just return without any operation.
++            return
++
+         devices = device_info['devices']
+ 
+         # If this is a multipath device, we need to search again
+
+
+--- cinder-2014.2.2/cinder/utils.py.~1~   2014-10-16 06:26:26.000000000 -0700
++++ cinder-2014.2.2/cinder/utils.py       2015-01-04 23:26:04.305688145 -0800
+@@ -137,8 +137,9 @@
+
+ def execute(*cmd, **kwargs):
+     """Convenience wrapper around oslo's execute() method."""
+-    if 'run_as_root' in kwargs and 'root_helper' not in kwargs:
+-        kwargs['root_helper'] = get_root_helper()
++    if sys.platform != 'sunos5':
++        if 'run_as_root' in kwargs and 'root_helper' not in kwargs:
++            kwargs['root_helper'] = get_root_helper()
+     return processutils.execute(*cmd, **kwargs)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/05-keepalive.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,80 @@
+In-house patch to allow the TCP keepalive parameters from cinder.conf
+to be used on Solaris. Patch has not yet been submitted upstream.
+
+--- cinder-2014.2.2/cinder/openstack/common/network_utils.py.orig	2014-12-04 21:00:20.000000000 -0800
++++ cinder-2014.2.2/cinder/openstack/common/network_utils.py	2015-01-23 18:46:17.465276851 -0800
+@@ -18,6 +18,7 @@ Network-related utilities and helper fun
+ """
+ 
+ import socket
++import sys
+ 
+ from six.moves.urllib import parse
+ 
+@@ -135,26 +136,44 @@ def set_tcp_keepalive(sock, tcp_keepaliv
+     if not tcp_keepalive:
+         return
+ 
+-    # These options aren't available in the OS X version of eventlet,
+-    # Idle + Count * Interval effectively gives you the total timeout.
+-    if tcp_keepidle is not None:
+-        if hasattr(socket, 'TCP_KEEPIDLE'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPIDLE,
+-                            tcp_keepidle)
++    if sys.platform == 'sunos5':
++        # Should match definitions in <netinet/tcp.h>
++        TCP_KEEPALIVE_THRESHOLD = 0x16
++        TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17
++
++        if tcp_keepidle is not None:
++            sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE_THRESHOLD,
++                            tcp_keepidle * 1000)
++        if tcp_keepalive_interval is None and tcp_keepalive_count is None:
++            return
++        if tcp_keepalive_interval is None or tcp_keepalive_count is None:
++            LOG.warning(_LW('tcp_keepintvl and tcp_keepknt must be set '
++                            'together'))
+         else:
+-            LOG.warning(_LW('tcp_keepidle not available on your system'))
+-    if tcp_keepalive_interval is not None:
+-        if hasattr(socket, 'TCP_KEEPINTVL'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPINTVL,
+-                            tcp_keepalive_interval)
+-        else:
+-            LOG.warning(_LW('tcp_keepintvl not available on your system'))
+-    if tcp_keepalive_count is not None:
+-        if hasattr(socket, 'TCP_KEEPCNT'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPCNT,
+-                            tcp_keepalive_count)
+-        else:
+-            LOG.warning(_LW('tcp_keepknt not available on your system'))
++            sock.setsockopt(
++                socket.IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD,
++                tcp_keepalive_interval * tcp_keepalive_count * 1000)
++    else:
++        # These options aren't available in the OS X version of eventlet,
++        # Idle + Count * Interval effectively gives you the total timeout.
++        if tcp_keepidle is not None:
++            if hasattr(socket, 'TCP_KEEPIDLE'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPIDLE,
++                                tcp_keepidle)
++            else:
++                LOG.warning(_LW('tcp_keepidle not available on your system'))
++        if tcp_keepalive_interval is not None:
++            if hasattr(socket, 'TCP_KEEPINTVL'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPINTVL,
++                                tcp_keepalive_interval)
++            else:
++                LOG.warning(_LW('tcp_keepintvl not available on your system'))
++        if tcp_keepalive_count is not None:
++            if hasattr(socket, 'TCP_KEEPCNT'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPCNT,
++                                tcp_keepalive_count)
++            else:
++                LOG.warning(_LW('tcp_keepknt not available on your system'))
--- a/components/openstack/cinder/patches/05-launchpad-1252512.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-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
-@@ -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)
-@@ -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
- 
--- a/components/openstack/cinder/patches/06-launchpad-1233763.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-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
-@@ -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
-@@ -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
-@@ -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	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/cinder/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,11 +1,10 @@
 library/python-2/eventlet-26
 library/python-2/ipython-26
-library/python-2/oslo.config-26
+library/python-2/python-mysql-26
+library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
-library/python/eventlet-26
-library/python/ipython-26
+library/python/iniparse-26
 library/python/oslo.config-26
-library/python/sqlalchemy-migrate-26
 runtime/python-26
 system/core-os
 system/file-system/zfs
--- a/components/openstack/common/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/common/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -22,12 +22,13 @@
 #
 # Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		openstack
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_VERSION=	2014.2.2
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
-IPS_COMPONENT_VERSION=  0.$(COMPONENT_VERSION)
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
 
 include $(WS_TOP)/make-rules/ips.mk
 
--- a/components/openstack/common/openstack.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/common/openstack.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -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="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=info.classification \
     value="org.opensolaris.category.2008:Meta Packages/Group Packages" \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -47,6 +47,9 @@
 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=database/mysql-55
+depend type=group fmri=database/mysql-55/client
+depend type=group fmri=library/python/barbicanclient
 depend type=group fmri=library/python/ceilometerclient
 depend type=group fmri=library/python/cinderclient
 depend type=group fmri=library/python/glanceclient
@@ -54,5 +57,9 @@
 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-2/python-mysql
+depend type=group fmri=library/python/saharaclient
 depend type=group fmri=library/python/swiftclient
 depend type=group fmri=library/python/troveclient
+depend type=group fmri=network/amqp/rabbitmq
+depend type=group fmri=system/management/rad/module/rad-evs-controller
--- a/components/openstack/glance/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,25 +20,29 @@
 #
 
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		glance
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:8766f8d198ec513c46519f1c44f99a4845ba3c04e7b7c41893cb3d5a7c2a9a28
+    sha256:bf7273ff9e89e9a7edda76e7a2235989a25109fb728edc4afa956e74ef54a08c
 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
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+
+TPNO=			21820
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,15 +50,24 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
-# glance-api and glance-registry depend on the glance-db svc so copy
-# the manifests into the proto directory for pkgdepend to find
+#
+# glance-api, glance-registry, and glance-scrubber depend on glance-db
+# and glance-upgrade so copy all of the service manifests into the
+# proto directory for pkgdepend(1) to find.
+#
 COMPONENT_POST_INSTALL_ACTION += \
 	($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
- 	 $(CP) files/glance-db.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
- 	 $(CP) files/glance-api.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
- 	 $(CP) files/glance-registry.xml $(PROTO_DIR)/lib/svc/manifest/application/openstack)
+	 $(CP) \
+	     files/glance-db.xml \
+	     files/glance-api.xml \
+	     files/glance-registry.xml \
+	     files/glance-scrubber.xml \
+	     files/glance-upgrade.xml \
+	     $(PROTO_DIR)/lib/svc/manifest/application/openstack)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
--- a/components/openstack/glance/files/glance-api.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-api.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -11,18 +11,6 @@
 # Default: 'file'
 default_store = file
 
-# 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
-
-
 # Maximum image size (in bytes) that may be uploaded through the
 # Glance API server. Defaults to 1 TB.
 # WARNING: this value should only be increased after careful consideration
@@ -35,8 +23,11 @@
 # Port the bind the API server to
 bind_port = 9292
 
-# Log to this file. Make sure you do not set the same log
-# file for both the API and registry servers!
+# Log to this file. Make sure you do not set the same log file for both the API
+# and registry servers!
+#
+# If `log_file` is omitted and `use_syslog` is false, then log messages are
+# sent to stdout as a fallback.
 log_file = /var/log/glance/api.log
 
 # Backlog requests when creating socket
@@ -50,26 +41,16 @@
 # 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
-sql_connection = sqlite:////var/lib/glance/glance.sqlite
+# The number of child process workers that will be
+# created to service API requests. The default will be
+# equal to the number of CPUs available. (integer value)
+workers = 1
 
-# 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
-
-# Number of Glance API worker processes to start.
-# On machines with more than one CPU increasing this value
-# may improve performance (especially if using SSL with
-# compression turned on). It is typically recommended to set
-# this value to the number of CPUs present on your machine.
-workers = 1
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large tokens
+# (typically those generated by the Keystone v3 API with big service
+# catalogs)
+# max_header_line = 16384
 
 # Role used to identify an authenticated user as administrator
 #admin_role = admin
@@ -99,29 +80,34 @@
 #send_identity_headers = False
 
 # Supported values for the 'container_format' image attribute
-#container_formats=ami,ari,aki,bare,ovf,uar
+container_formats=ami,ari,aki,bare,ovf,ova,uar
 
 # Supported values for the 'disk_format' image attribute
-#disk_formats=ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso,zfs
+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
+# This file contains the rules for property protections and the roles/policies
 # 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.
+# If a value is specified and the file is not found, then the glance-api
+# service will not start.
 #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
+# Specify whether 'roles' or 'policies' are used in the
+# property_protection_file.
+# The default value for property_protection_rule_format is 'roles'.
+#property_protection_rule_format = roles
+
+# This value sets what strategy will be used to determine the image location
+# order. Currently two strategies are packaged with Glance 'location_order'
+# and 'store_type'.
+#location_strategy = location_order
 
 # ================= Syslog Options ============================
 
@@ -197,13 +183,37 @@
 # Default: False
 #sqlalchemy_debug = True
 
+# Pass the user's token through for API requests to the registry.
+# Default: True
+#use_user_token = True
+
+# If 'use_user_token' is not in effect then admin credentials
+# can be specified. Requests to the registry on behalf of
+# the API will use these credentials.
+# Admin user name
+#admin_user = None
+# Admin password
+#admin_password = None
+# Admin tenant name
+#admin_tenant_name = None
+# Keystone endpoint
+#auth_url = None
+# Keystone region
+#auth_region = None
+# Auth strategy
+#auth_strategy = keystone
+
 # ============ Notification System Options =====================
 
-# Notifications can be sent when images are create, updated or deleted.
-# There are three methods of sending notifications, logging (via the
-# log_file directive), rabbit (via a rabbitmq queue), qpid (via a Qpid
-# message queue), or noop (no notifications sent, the default)
-notifier_strategy = noop
+# Driver or drivers to handle sending notifications. Set to
+# 'messaging' to send notifications to a message queue.
+# notification_driver = noop
+
+# Default publisher_id for outgoing notifications.
+# default_publisher_id = image.localhost
+
+# Messaging driver used for 'messaging' notifications driver
+# rpc_backend = 'rabbit'
 
 # Configuration options if sending notifications via rabbitmq (these are
 # the defaults)
@@ -236,12 +246,223 @@
 qpid_protocol = tcp
 qpid_tcp_nodelay = True
 
+# ============ Delayed Delete Options =============================
+
+# Turn on/off delayed delete
+delayed_delete = False
+
+# Delayed delete time in seconds
+scrub_time = 43200
+
+# Directory that the scrubber will use to remind itself of what to delete
+# Make sure this is also set in glance-scrubber.conf
+scrubber_datadir = /var/lib/glance/scrubber
+
+# =============== Quota Options ==================================
+
+# The maximum number of image members allowed per image
+#image_member_quota = 128
+
+# The maximum number of image properties allowed per image
+#image_property_quota = 128
+
+# The maximum number of tags allowed per image
+#image_tag_quota = 128
+
+# The maximum number of locations allowed per image
+#image_location_quota = 10
+
+# 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
+
+# =============== Image Cache Options =============================
+
+# Base directory that the Image Cache uses
+image_cache_dir = /var/lib/glance/image-cache/
+
+# =============== Database Options =================================
+
+[database]
+# The file name to use with SQLite (string value)
+#sqlite_db = oslo.sqlite
+
+# If True, SQLite uses synchronous mode (boolean value)
+#sqlite_synchronous = True
+
+# The backend to use for db (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend = sqlalchemy
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection = mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/glance
+
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode = TRADITIONAL
+
+# Timeout before idle sql connections are reaped (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout = 3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size = 1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size = <None>
+
+# Maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries = 10
+
+# Interval between retries of opening a sql connection
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval = 10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow = <None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug = 0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace = False
+
+# If set, use this value for pool_timeout with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout = <None>
+
+# Enable the experimental use of database reconnect on
+# connection lost (boolean value)
+#use_db_reconnect = False
+
+# seconds between db connection retries (integer value)
+#db_retry_interval = 1
+
+# Whether to increase interval between db connection retries,
+# up to db_max_retry_interval (boolean value)
+#db_inc_retry_interval = True
+
+# max seconds between db connection retries, if
+# db_inc_retry_interval is enabled (integer value)
+#db_max_retry_interval = 10
+
+# maximum db connection retries before error is raised.
+# (setting -1 implies an infinite retry count) (integer value)
+#db_max_retries = 20
+
+[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%
+revocation_cache_time = 10
+signing_dir = /var/lib/glance/keystone-signing
+
+[paste_deploy]
+# Name of the paste configuration file that defines the available pipelines
+#config_file = glance-api-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-api-keystone], you would configure the flavor below
+# as 'keystone'.
+flavor=keystone
+
+[store_type_location_strategy]
+# The scheme list to use to get store preference order. The scheme must be
+# registered by one of the stores defined by the 'known_stores' config option.
+# This option will be applied when you using 'store_type' option as image
+# location strategy defined by the 'location_strategy' config option.
+#store_type_preference =
+
+[profiler]
+# If False fully disable profiling feature.
+#enabled = False
+
+# If False doesn't trace SQL requests.
+#trace_sqlalchemy = False
+
+[task]
+# ================= Glance Tasks Options ============================
+
+# Specifies how long (in hours) a task is supposed to live in the tasks DB
+# after succeeding or failing before getting soft-deleted.
+# The default value for task_time_to_live is 48 hours.
+# task_time_to_live = 48
+
+# Specifies which task executor to be used to run the task scripts.
+# The default value for task_executor is eventlet.
+# task_executor = eventlet
+
+# Specifies the maximum number of eventlet threads which can be spun up by
+# the eventlet based task executor to perform execution of Glance tasks.
+# eventlet_executor_pool_size = 1000
+
+[glance_store]
+# 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,
+#      glance.store.gridfs.Store,
+#      glance.store.vmware_datastore.Store,
+#stores = glance.store.filesystem.Store,
+#         glance.store.http.Store
+
 # ============ Filesystem Store Options ========================
 
 # Directory that the Filesystem backend store
 # writes image data to
 filesystem_store_datadir = /var/lib/glance/images/
 
+# A list of directories where image data can be stored.
+# This option may be specified multiple times for specifying multiple store
+# directories. Either one of filesystem_store_datadirs or
+# filesystem_store_datadir option is required. A priority number may be given
+# after each directory entry, separated by a ":".
+# When adding an image, the highest priority directory will be selected, unless
+# there is not enough space available in cases where the image size is already
+# known. If no priority is given, it is assumed to be zero and the directory
+# will be considered for selection last. If multiple directories have the same
+# priority, then the one with the most free space available is selected.
+# If same store is specified multiple times then BadStoreConfiguration
+# exception will be raised.
+#filesystem_store_datadirs = /var/lib/glance/images/:1
+
 # 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
@@ -282,6 +503,15 @@
 # the maximum object size in Swift, which is 5GB
 swift_store_large_object_size = 5120
 
+# swift_store_config_file = glance-swift.conf
+# This file contains references for each of the configured
+# Swift accounts/backing stores. If used, this option can prevent
+# credentials being stored in the database. Using Swift references
+# is disabled if this config is left blank.
+
+# The reference to the default Swift parameters to use for adding new images.
+# default_swift_reference = 'ref1'
+
 # When doing a large object manifest, what size, in MB, should
 # Glance write chunks to Swift? This amount of data is written
 # to a temporary disk buffer during the process of chunking
@@ -322,6 +552,13 @@
 # compression (provided it is supported by the target swift proxy).
 #swift_store_ssl_compression = True
 
+# The number of times a Swift download will be retried before the
+# request fails
+#swift_store_retry_get_count = 0
+
+# Bypass SSL verification for Swift
+#swift_store_auth_insecure = False
+
 # ============ S3 Store Options =============================
 
 # Address where the S3 authentication service lives
@@ -358,23 +595,38 @@
 # in the path. Set this to 'path' or 'subdomain' - defaults to 'subdomain'.
 #s3_store_bucket_url_format = subdomain
 
+# Size, in MB, should S3 start chunking image files
+# and do a multipart upload in S3. The default is 100MB.
+#s3_store_large_object_size = 100
+
+# Multipart upload part size, in MB, should S3 use when uploading
+# parts. The size must be greater than or equal to
+# 5MB. The default is 10MB.
+#s3_store_large_object_chunk_size = 10
+
+# The number of thread pools to perform a multipart upload
+# in S3. The default is 10.
+#s3_store_thread_pools = 10
+
 # ============ RBD Store Options =============================
 
 # Ceph configuration file path
 # If using cephx authentication, this file should
 # include a reference to the right keyring
 # in a client.<USER> section
-rbd_store_ceph_conf = /etc/ceph/ceph.conf
+#rbd_store_ceph_conf = /etc/ceph/ceph.conf
 
 # RADOS user to authenticate as (only applicable if using cephx)
-rbd_store_user = glance
+# If <None>, a default will be chosen based on the client. section
+# in rbd_store_ceph_conf
+#rbd_store_user = <None>
 
 # RADOS pool in which images are stored
-rbd_store_pool = images
+#rbd_store_pool = images
 
-# Images will be chunked into objects of this size (in megabytes).
+# RADOS images will be chunked into objects of this size (in megabytes).
 # For best performance, this should be a power of two
-rbd_store_chunk_size = 8
+#rbd_store_chunk_size = 8
 
 # ============ Sheepdog Store Options =============================
 
@@ -410,37 +662,38 @@
 # Allow to perform insecure SSL requests to cinder (boolean value)
 #cinder_api_insecure = False
 
-# ============ Delayed Delete Options =============================
+# ============ VMware Datastore Store Options =====================
 
-# Turn on/off delayed delete
-delayed_delete = False
-
-# Delayed delete time in seconds
-scrub_time = 43200
+# ESX/ESXi or vCenter Server target system.
+# The server value can be an IP address or a DNS name
+# e.g. 127.0.0.1, 127.0.0.1:443, www.vmware-infra.com
+#vmware_server_host = <None>
 
-# Directory that the scrubber will use to remind itself of what to delete
-# Make sure this is also set in glance-scrubber.conf
-scrubber_datadir = /var/lib/glance/scrubber
+# Server username (string value)
+#vmware_server_username = <None>
 
-# =============== Image Cache Options =============================
+# Server password (string value)
+#vmware_server_password = <None>
 
-# Base directory that the Image Cache uses
-image_cache_dir = /var/lib/glance/image-cache/
+# Inventory path to a datacenter (string value)
+# Value optional when vmware_server_ip is an ESX/ESXi host: if specified
+# should be `ha-datacenter`.
+#vmware_datacenter_path = <None>
 
-[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
+# Datastore associated with the datacenter (string value)
+#vmware_datastore_name = <None>
+
+# The number of times we retry on failures
+# e.g., socket error, etc (integer value)
+#vmware_api_retry_count = 10
 
-[paste_deploy]
-# Name of the paste configuration file that defines the available pipelines
-#config_file = glance-api-paste.ini
+# The interval used for polling remote tasks
+# invoked on VMware ESX/VC server in seconds (integer value)
+#vmware_task_poll_interval = 5
 
-# 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-api-keystone], you would configure the flavor below
-# as 'keystone'.
-flavor = keystone
+# Absolute path of the folder containing the images in the datastore
+# (string value)
+#vmware_store_image_dir = /openstack_glance
+
+# Allow to perform insecure SSL requests to the target system (boolean value)
+#vmware_api_insecure = False
--- a/components/openstack/glance/files/glance-api.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-api.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,8 +30,14 @@
       <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='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-upgrade' />
+    </dependency>
+
+    <!-- create a dependency on the glance-db service so the glance-api,
+         glance-registry, and glance-scrubber services do not collide when
+         creating the database -->
     <dependency name='glance_db' grouping='optional_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/application/openstack/glance/glance-db'/>
@@ -42,6 +48,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/glance/files/glance-cache.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-cache.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -5,6 +5,11 @@
 # Show debugging output in logs (sets DEBUG log level output)
 #debug = False
 
+# Log to this file. Make sure you do not set the same log file for both the API
+# and registry servers!
+#
+# If `log_file` is omitted and `use_syslog` is false, then log messages are
+# sent to stdout as a fallback.
 log_file = /var/log/glance/image-cache.log
 
 # Send logs to syslog (/dev/log) instead of to file specified by `log_file`
@@ -17,16 +22,6 @@
 # stalled and eligible for reaping
 image_cache_stall_time = 86400
 
-# image_cache_invalid_entry_grace_period - seconds
-#
-# If an exception is raised as we're writing to the cache, the cache-entry is
-# deemed invalid and moved to <image_cache_datadir>/invalid so that it can be
-# inspected for debugging purposes.
-#
-# This is number of seconds to leave these invalid images around before they
-# are elibible to be reaped.
-image_cache_invalid_entry_grace_period = 3600
-
 # Max cache size in bytes
 image_cache_max_size = 10737418240
 
@@ -51,6 +46,7 @@
 #                glance.store.swift.Store,
 #                glance.store.sheepdog.Store,
 #                glance.store.cinder.Store,
+#                glance.store.vmware_datastore.Store,
 
 # ============ Filesystem Store Options ========================
 
@@ -160,6 +156,42 @@
 # Allow to perform insecure SSL requests to cinder (boolean value)
 #cinder_api_insecure = False
 
+# ============ VMware Datastore Store Options =====================
+
+# ESX/ESXi or vCenter Server target system.
+# The server value can be an IP address or a DNS name
+# e.g. 127.0.0.1, 127.0.0.1:443, www.vmware-infra.com
+#vmware_server_host = <None>
+
+# Server username (string value)
+#vmware_server_username = <None>
+
+# Server password (string value)
+#vmware_server_password = <None>
+
+# Inventory path to a datacenter (string value)
+# Value optional when vmware_server_ip is an ESX/ESXi host: if specified
+# should be `ha-datacenter`.
+#vmware_datacenter_path = <None>
+
+# Datastore associated with the datacenter (string value)
+#vmware_datastore_name = <None>
+
+# The number of times we retry on failures
+# e.g., socket error, etc (integer value)
+#vmware_api_retry_count = 10
+
+# The interval used for polling remote tasks
+# invoked on VMware ESX/VC server in seconds (integer value)
+#vmware_task_poll_interval = 5
+
+# Absolute path of the folder containing the images in the datastore
+# (string value)
+#vmware_store_image_dir = /openstack_glance
+
+# Allow to perform insecure SSL requests to the target system (boolean value)
+#vmware_api_insecure = False
+
 # ================= Security Options ==========================
 
 # AES key for encrypting store 'location' metadata, including
--- a/components/openstack/glance/files/glance-db.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-db.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,21 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/glance/files/glance-registry.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-registry.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -11,8 +11,11 @@
 # 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 to this file. Make sure you do not set the same log file for both the API
+# and registry servers!
+#
+# If `log_file` is omitted and `use_syslog` is false, then log messages are
+# sent to stdout as a fallback.
 log_file = /var/log/glance/registry.log
 
 # Backlog requests when creating socket
@@ -24,21 +27,16 @@
 
 # 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
+#data_api = glance.db.sqlalchemy.api
 
-# 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
+# The number of child process workers that will be
+# created to service Registry requests. The default will be
+# equal to the number of CPUs available. (integer value)
+workers = 1
+
+# Enable Registry API versions individually or simultaneously
+#enable_v1_registry = True
+#enable_v2_registry = True
 
 # 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.
@@ -80,9 +78,151 @@
 # CA certificate file to use to verify connecting clients
 #ca_file = /path/to/cafile
 
+# ============ Notification System Options =====================
+
+# Driver or drivers to handle sending notifications. Set to
+# 'messaging' to send notifications to a message queue.
+# notification_driver = noop
+
+# Default publisher_id for outgoing notifications.
+# default_publisher_id = image.localhost
+
+# Messaging driver used for 'messaging' notifications driver
+# rpc_backend = 'rabbit'
+
+# Configuration options if sending notifications via rabbitmq (these are
+# the defaults)
+rabbit_host = localhost
+rabbit_port = 5672
+rabbit_use_ssl = false
+rabbit_userid = guest
+rabbit_password = guest
+rabbit_virtual_host = /
+rabbit_notification_exchange = glance
+rabbit_notification_topic = notifications
+rabbit_durable_queues = False
+
+# Configuration options if sending notifications via Qpid (these are
+# the defaults)
+qpid_notification_exchange = glance
+qpid_notification_topic = notifications
+qpid_hostname = localhost
+qpid_port = 5672
+qpid_username =
+qpid_password =
+qpid_sasl_mechanisms =
+qpid_reconnect_timeout = 0
+qpid_reconnect_limit = 0
+qpid_reconnect_interval_min = 0
+qpid_reconnect_interval_max = 0
+qpid_reconnect_interval = 0
+qpid_heartbeat = 5
+# Set to 'ssl' to enable SSL
+qpid_protocol = tcp
+qpid_tcp_nodelay = True
+
+
+# ================= Database Options ==========================
+
+[database]
+# The file name to use with SQLite (string value)
+#sqlite_db = glance.sqlite
+
+# If True, SQLite uses synchronous mode (boolean value)
+#sqlite_synchronous = True
+
+# The backend to use for db (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend = sqlalchemy
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection = mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/glance
+
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode = TRADITIONAL
+
+# Timeout before idle sql connections are reaped (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout = 3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size = 1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size = <None>
+
+# Maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries = 10
+
+# Interval between retries of opening a sql connection
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval = 10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow = <None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug = 0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace = False
+
+# If set, use this value for pool_timeout with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout = <None>
+
+# Enable the experimental use of database reconnect on
+# connection lost (boolean value)
+#use_db_reconnect = False
+
+# seconds between db connection retries (integer value)
+#db_retry_interval = 1
+
+# Whether to increase interval between db connection retries,
+# up to db_max_retry_interval (boolean value)
+#db_inc_retry_interval = True
+
+# max seconds between db connection retries, if
+# db_inc_retry_interval is enabled (integer value)
+#db_max_retry_interval = 10
+
+# maximum db connection retries before error is raised.
+# (setting -1 implies an infinite retry count) (integer value)
+#db_max_retries = 20
+
 [keystone_authtoken]
-auth_uri = http://127.0.0.1:5000/v2.0
-identity_uri = http://127.0.0.1:35357
+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%
@@ -96,4 +236,11 @@
 # 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
+flavor=keystone
+
+[profiler]
+# If False fully disable profiling feature.
+#enabled = False
+
+# If False doesn't trace SQL requests.
+#trace_sqlalchemy = False
--- a/components/openstack/glance/files/glance-registry.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-registry.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,8 +30,14 @@
       <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='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-upgrade' />
+    </dependency>
+
+    <!-- create a dependency on the glance-db service so the glance-api,
+         glance-registry, and glance-scrubber services do not collide when
+         creating the database -->
     <dependency name='glance_db' grouping='optional_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/application/openstack/glance/glance-db'/>
@@ -42,6 +48,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/glance/files/glance-scrubber.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-scrubber.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -5,8 +5,11 @@
 # Show debugging output in logs (sets DEBUG log level output)
 #debug = False
 
-# Log to this file. Make sure you do not set the same log
-# file for both the API and registry servers!
+# Log to this file. Make sure you do not set the same log file for both the API
+# and registry servers!
+#
+# If `log_file` is omitted and `use_syslog` is false, then log messages are
+# sent to stdout as a fallback.
 log_file = /var/log/glance/scrubber.log
 
 # Send logs to syslog (/dev/log) instead of to file specified by `log_file`
@@ -45,6 +48,10 @@
 # glance-scrubber and glance-api.
 #lock_path=<None>
 
+# 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
+
 # ================= Security Options ==========================
 
 # AES key for encrypting store 'location' metadata, including
@@ -52,9 +59,58 @@
 # 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>
 
+# ================= Database Options ===============+==========
+
+[database]
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/glance
+
+# The SQLAlchemy connection string used to connect to the
+# slave database (string value)
+#slave_connection=
+
+# 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=<None>
+
+# 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
+
+# If set, use this value for pool_timeout with sqlalchemy
+# (integer value)
+#pool_timeout=<None>
+
+[glance_store]
+
 # ============ 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	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance-scrubber.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,29 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-upgrade' />
+    </dependency>
+
+    <!-- create a dependency on the glance-db service so the glance-api,
+         glance-registry, and glance-scrubber services do not collide when
+         creating the database -->
+    <dependency name='glance_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <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>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,274 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+GLANCE_API_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DATABASE', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+}
+
+GLANCE_REGISTRY_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DATABASE', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/glance'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/glance/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/glance/glance-api.conf', GLANCE_API_MAPPINGS)
+        modify_conf('/etc/glance/glance-api-paste.ini')
+        modify_conf('/etc/glance/glance-cache.conf')
+        modify_conf('/etc/glance/glance-registry.conf',
+                    GLANCE_REGISTRY_MAPPINGS)
+        modify_conf('/etc/glance/glance-registry-paste.ini')
+        modify_conf('/etc/glance/glance-scrubber.conf')
+        modify_conf('/etc/glance/logging.conf')
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/glance/glance-api.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+
+        if db_connection.startswith('mysql'):
+            engine = sqlalchemy.create_engine(db_connection)
+            if engine.url.username != '%SERVICE_USER%':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in glance tables"
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="glance">
+
+  <service version="1" type="service"
+    name="application/openstack/glance/glance-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/glance-upgrade %m">
+      <method_context>
+        <method_credential user='glance' group='glance' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.glance' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.glance' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.glance' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Glance Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          glance-upgrade is a transient service to upgrade the Glance
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/glance/files/glance.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/files/glance.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,13 +1,9 @@
 OpenStack Image Management:RO::\
 Manage OpenStack Glance:\
-auths=solaris.admin.edit/etc/glance/api-paste.ini,\
-solaris.admin.edit/etc/glance/glance-api.conf,\
-solaris.admin.edit/etc/glance/glance-cache.conf,\
-solaris.admin.edit/etc/glance/glance-registry-paste.ini,\
-solaris.admin.edit/etc/glance/glance-registry.conf,\
-solaris.admin.edit/etc/glance/glance-scrubber.conf,\
-solaris.admin.edit/etc/glance/logging.conf,\
-solaris.admin.edit/etc/glance/policy.json,\
+auths=solaris.admin.edit/etc/glance/*.conf,\
+solaris.admin.edit/etc/glance/*.ini,\
+solaris.admin.edit/etc/glance/*.json,\
+solaris.admin.edit/etc/glance/metadefs/*.json,\
 solaris.smf.manage.glance,\
 solaris.smf.value.glance;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,1 @@
+glance::RO::profiles=OpenStack Image Management
--- a/components/openstack/glance/glance.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/glance.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,9 +28,9 @@
 set name=pkg.summary value="OpenStack Glance (Image Service)"
 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="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description value="Glance, the OpenStack image service"
-set name=com.oracle.info.tpno value=17717
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -39,9 +39,11 @@
 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=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/055 \
-    value=PSARC/2014/207
+    value=PSARC/2014/207 value=PSARC/2015/110
 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=renamenew
@@ -55,10 +57,67 @@
     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=renamenew
+file etc/glance-swift.conf.sample path=etc/glance/glance-swift.conf \
+    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=renamenew
+file etc/metadefs/README path=etc/glance/metadefs/README
+file etc/metadefs/compute-aggr-disk-filter.json \
+    path=etc/glance/metadefs/compute-aggr-disk-filter.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-aggr-iops-filter.json \
+    path=etc/glance/metadefs/compute-aggr-iops-filter.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-aggr-num-instances.json \
+    path=etc/glance/metadefs/compute-aggr-num-instances.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-guest-shutdown.json \
+    path=etc/glance/metadefs/compute-guest-shutdown.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-host-capabilities.json \
+    path=etc/glance/metadefs/compute-host-capabilities.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-hypervisor.json \
+    path=etc/glance/metadefs/compute-hypervisor.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-instance-data.json \
+    path=etc/glance/metadefs/compute-instance-data.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-libvirt.json \
+    path=etc/glance/metadefs/compute-libvirt.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-quota.json \
+    path=etc/glance/metadefs/compute-quota.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-randomgen.json \
+    path=etc/glance/metadefs/compute-randomgen.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-trust.json \
+    path=etc/glance/metadefs/compute-trust.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-vcputopology.json \
+    path=etc/glance/metadefs/compute-vcputopology.json owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-vmware.json \
+    path=etc/glance/metadefs/compute-vmware.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-watchdog.json \
+    path=etc/glance/metadefs/compute-watchdog.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/compute-xenapi.json \
+    path=etc/glance/metadefs/compute-xenapi.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/metadefs/glance-common-image-props.json \
+    path=etc/glance/metadefs/glance-common-image-props.json owner=glance \
+    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=renamenew
+file etc/property-protections-policies.conf.sample \
+    path=etc/glance/property-protections-policies.conf owner=glance \
+    group=glance mode=0644 overlay=allow preserve=renamenew
+file etc/property-protections-roles.conf.sample \
+    path=etc/glance/property-protections-roles.conf owner=glance group=glance \
+    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 \
@@ -67,14 +126,17 @@
     path=etc/security/exec_attr.d/cloud:openstack:glance group=sys
 file files/glance.prof_attr \
     path=etc/security/prof_attr.d/cloud:openstack:glance group=sys
+file files/glance.user_attr path=etc/user_attr.d/cloud:openstack:glance \
+    group=sys
 file path=lib/svc/manifest/application/openstack/glance-api.xml
 file path=lib/svc/manifest/application/openstack/glance-db.xml
 file path=lib/svc/manifest/application/openstack/glance-registry.xml
-file files/glance-scrubber.xml \
-    path=lib/svc/manifest/application/openstack/glance-scrubber.xml
+file path=lib/svc/manifest/application/openstack/glance-scrubber.xml
+file path=lib/svc/manifest/application/openstack/glance-upgrade.xml
 file files/glance-api path=lib/svc/method/glance-api
 file files/glance-registry path=lib/svc/method/glance-registry
 file files/glance-scrubber path=lib/svc/method/glance-scrubber
+file files/glance-upgrade path=lib/svc/method/glance-upgrade
 file path=usr/bin/glance-cache-manage
 file path=usr/bin/glance-cache-prefetcher
 file path=usr/bin/glance-manage
@@ -91,6 +153,7 @@
 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/pbr.json
 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
@@ -118,20 +181,41 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_members.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_tags.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/metadef_namespaces.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/metadef_objects.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/metadef_properties.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/metadef_resource_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/metadef_namespace.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/metadef_object.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/metadef_property_item_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/metadef_property_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/model/metadef_resource_type.py
 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/v2/tasks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/async/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/async/eventlet_executor.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/api.py \
+    pkg.depend.bypass-generate=.*/glance_store.* \
+    pkg.depend.bypass-generate=.*/osprofiler.*
 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_prefetcher.py \
+    pkg.depend.bypass-generate=.*/glance_store.*
 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/cmd/manage.py \
+    pkg.depend.bypass-generate=.*/oslo/db.*
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/registry.py \
+    pkg.depend.bypass-generate=.*/osprofiler.*
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/replicator.py \
+    pkg.depend.bypass-generate=.*/six.*
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/cmd/scrubber.py \
+    pkg.depend.bypass-generate=.*/glance_store.*
 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
@@ -139,13 +223,23 @@
     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/location_strategy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/location_strategy/location_order.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/location_strategy/store_type.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/scripts/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/scripts/image_import/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/scripts/image_import/main.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/scripts/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/store_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/swift_store_utils.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/common/wsme_utils.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/metadata.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
@@ -153,6 +247,14 @@
 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
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/namespace.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/object.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/property.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/resource_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/resource_type_association.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/metadef_api/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/README
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/manage.py
@@ -197,12 +299,22 @@
 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/030_add_tasks_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/031_remove_duplicated_locations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/032_add_task_info_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/033_add_location_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/034_add_virtual_size.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/035_add_metadef_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/036_rename_metadef_schema_columns.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
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/models_metadef.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/domain/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/domain/proxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/gateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/hacking/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/hacking/checks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/cleaner.py
@@ -213,65 +325,11 @@
 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/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
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/notify_log.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/notify_noop.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/notify_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier/strategy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/location.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/notifier.py
 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
@@ -280,23 +338,14 @@
 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
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/rabbit_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/notifier/rpc_notifier.py
-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/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/test.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/units.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/opts.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
@@ -313,83 +362,113 @@
 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/scrubber.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glance/version.py
 dir  path=var/lib/glance owner=glance group=glance mode=0700
 dir  path=var/log/glance owner=glance group=glance mode=0700
+#
 group groupname=glance gid=82
 user username=glance ftpuser=false gcos-field="Openstack Glance" group=glance \
     home-dir=/var/lib/glance uid=82
+#
 license glance.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional dnspython; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/dnspython-$(PYV)
 
-# force a group dependency on the optional swiftclient; pkgdepend work is needed
+# force a group dependency on the optional pysendfile; pkgdepend work is needed
 # to flush this out.
-depend type=group fmri=library/python/swiftclient-26
+depend type=group fmri=library/python/pysendfile-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
 
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/argparse-26
+depend type=require fmri=library/python-2/argparse-$(PYV)
 
-# 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 babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
 
-# 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 glance_store; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/glance_store-$(PYV)
 
 # force a dependency on httplib2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/httplib2-26
+depend type=require fmri=library/python-2/httplib2-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
 
 # force a dependency on jsonschema; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/jsonschema-26
+depend type=require fmri=library/python-2/jsonschema-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
+
+# force a dependency on ordereddict; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/ordereddict-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-26
+# force a dependency on oslo.db; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.db-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on osprofiler; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/osprofiler-$(PYV)
 
 # force a dependency on paste; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/paste-26
+depend type=require fmri=library/python-2/paste-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on posix_ipc; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/posix_ipc-$(PYV)
 
 # force a dependency on pyopenssl; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/pyopenssl-26
+depend type=require fmri=library/python-2/pyopenssl-$(PYV)
+
+# force a dependency on retrying; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/retrying-$(PYV)
 
 # force a dependency on routes; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/routes-26
+depend type=require fmri=library/python-2/routes-$(PYV)
 
-# 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 six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # 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 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
+depend type=require fmri=library/python-2/webob-$(PYV)
 
-# force a dependency on keystoneclient; used via a paste.deploy filter
-depend type=require fmri=library/python/keystoneclient-26
+# force a dependency on wsme; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/wsme-$(PYV)
 
-# 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 xattr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/xattr-$(PYV)
--- a/components/openstack/glance/patches/01-nopycrypto.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/patches/01-nopycrypto.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -4,10 +4,10 @@
 Convert urlsafe_encrypt() and urlsafe_decrypt() to use M2Crypto instead
 of PyCrypto.
 
---- 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.
+--- glance-2014.2.2/glance/common/crypt.py.~1~	2014-08-07 12:01:58.000000000 -0700
++++ glance-2014.2.2/glance/common/crypt.py	2014-08-09 21:36:53.351345980 -0700
+@@ -3,6 +3,8 @@
+ # Copyright 2011 OpenStack Foundation
  # All Rights Reserved.
  #
 +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
@@ -15,7 +15,7 @@
  #    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
-@@ -21,10 +23,26 @@
+@@ -20,10 +22,26 @@
  """
  
  import base64
@@ -45,7 +45,7 @@
  
  
  def urlsafe_encrypt(key, plaintext, blocksize=16):
-@@ -36,20 +54,12 @@
+@@ -35,20 +53,12 @@
  
      :returns : Resulting ciphertext
      """
@@ -70,7 +70,7 @@
      return base64.urlsafe_b64encode(init_vector + padded)
  
  
-@@ -63,6 +73,7 @@
+@@ -62,6 +72,7 @@
      """
      # Cast from unicode
      ciphertext = base64.urlsafe_b64decode(str(ciphertext))
--- a/components/openstack/glance/patches/02-zfs-uar-formats.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/patches/02-zfs-uar-formats.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,20 +1,23 @@
 In-house patch to add 'uar' and 'zfs' container and disk formats to
 registered image types.  Patch has not yet been submitted upstream.
 
---- 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
-@@ -23,12 +23,12 @@
- 
+--- glance-2014.2.2/glance/common/config.py.orig        2014-06-16 14:14:21.107758750 -0600
++++ glance-2014.2.2/glance/common/config.py   2014-06-16 14:14:34.374672756 -0600
+@@ -41,14 +41,14 @@
+ ]
  image_format_opts = [
      cfg.ListOpt('container_formats',
--                default=['ami', 'ari', 'aki', 'bare', 'ovf'],
-+                default=['ami', 'ari', 'aki', 'bare', 'ovf', 'uar'],
+-                default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'],
++                default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova', 'uar'],
                  help=_("Supported values for the 'container_format' "
-                        "image attribute")),
+                        "image attribute"),
+                 deprecated_opts=[cfg.DeprecatedOpt('container_formats',
+                                                    group='DEFAULT')]),
      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")),
- ]
+                        "image attribute"),
+                 deprecated_opts=[cfg.DeprecatedOpt('disk_formats',
+
--- a/components/openstack/glance/patches/03-CVE-2014-0162.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +0,0 @@
-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
-@@ -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
-@@ -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
- 
-@@ -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)
- 
-@@ -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):
-@@ -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):
-         """
-@@ -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):
-         """
-@@ -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):
-         """
-@@ -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):
-         """
-@@ -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:
-@@ -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
- 
-     """
- 
-@@ -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):
-@@ -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
-@@ -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
-@@ -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
-@@ -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',
-         ]
- 
-@@ -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/03-Partial_Content.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+Provide for HTTP Range requests in Glance API, and return correct 206
+Partial Content.
+
+See community bugs:
+ https://bugs.launchpad.net/glance/+bug/1399851
+ https://bugs.launchpad.net/glance/+bug/1417069
+
+--- glance-2014.2.2/glance/api/v2/image_data.py.~1~	2015-02-05 07:19:44.000000000 -0800
++++ glance-2014.2.2/glance/api/v2/image_data.py	2015-02-23 14:04:17.091921881 -0800
+@@ -199,6 +199,8 @@ class ResponseSerializer(wsgi.JSONRespon
+ 
+     def download(self, response, image):
+         offset, chunk_size = 0, None
++
++        # Initially attempt to get "Content-Range" request
+         range_val = response.request.get_content_range()
+ 
+         if range_val:
+@@ -210,6 +212,21 @@ class ResponseSerializer(wsgi.JSONRespon
+             if range_val.stop is not None:
+                 chunk_size = range_val.stop - offset
+ 
++            # Return 206 Partial Content
++            response.status_int = 206
++        else:
++            # Try for "Range" request header if ContentRange not present
++            range_obj = response.request.get_range()
++            if range_obj:
++                if range_obj.start is not None:
++                    offset = range_obj.start
++
++                if range_obj.end is not None:
++                    chunk_size = range_obj.end - offset
++
++                # Return 206 Partial Content
++                response.status_int = 206
++
+         response.headers['Content-Type'] = 'application/octet-stream'
+ 
+         try:
+@@ -229,7 +246,9 @@ class ResponseSerializer(wsgi.JSONRespon
+             response.headers['Content-MD5'] = image.checksum
+         #NOTE(markwash): "response.app_iter = ..." also erroneously resets the
+         # content-length
+-        response.headers['Content-Length'] = str(image.size)
++        # NOTE(mattk): Should be set to chunk_size or image.size
++        response.headers['Content-Length'] = \
++            str(chunk_size) if chunk_size != 0 else str(image.size)
+ 
+     def upload(self, response, result):
+         response.status_int = 204
+--- glance-2014.2.2/glance/common/wsgi.py.~1~	2015-02-05 07:19:44.000000000 -0800
++++ glance-2014.2.2/glance/common/wsgi.py	2015-02-23 14:04:17.092284573 -0800
+@@ -556,7 +556,7 @@ class Request(webob.Request):
+         return self.accept_language.best_match(langs)
+ 
+     def get_content_range(self):
+-        """Return the `Range` in a request."""
++        """Return the `Content-Range` in a request."""
+         range_str = self.headers.get('Content-Range')
+         if range_str is not None:
+             range_ = webob.byterange.ContentRange.parse(range_str)
+@@ -565,6 +565,16 @@ class Request(webob.Request):
+                 raise webob.exc.HTTPBadRequest(explanation=msg)
+             return range_
+ 
++    def get_range(self):
++        """Return the 'Range' in a reqyest."""
++        range_str = self.headers.get('Range')
++        if range_str is not None:
++            range_ = webob.byterange.Range.parse(range_str)
++            if range_ is None:
++                msg = _('Malformed Range header: %s') % range_str
++                raise webob.exc.HTTPBadRequest(explanation=msg)
++            return range_
++
+ 
+ class JSONRequestDeserializer(object):
+     def has_body(self, request):
--- a/components/openstack/glance/patches/04-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/patches/04-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,71 +1,93 @@
 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)
+boto		Not applicable
+
+cinderclient	Not applicable
 
-passlib		No longer applicable
-		(upstream commit b31874284212d49560ddf4f36e5c9ca5d221f605)
+greenlet	Not applicable
+
+kombu		Not applicable
+
+oslo.vmware	Not applicable
 
 pycrypto	Not applicable to Solaris (M2Crypto used instead)
 
-wsgiref		No longer applicable
-		(upstream commit b31874284212d49560ddf4f36e5c9ca5d221f605)
+swiftclient	Not applicable
 
---- 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
-@@ -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
+--- glance-2014.2.2/glance.egg-info/requires.txt.~1~	2015-02-05 07:21:46.000000000 -0800
++++ glance-2014.2.2/glance.egg-info/requires.txt	2015-02-23 14:39:12.013101917 -0800
+@@ -1,5 +1,4 @@
+ pbr>=0.6,!=0.7,<1.0
+-greenlet>=0.3.2
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+ anyjson>=0.3.3
+ eventlet>=0.15.1,<0.16.0
+@@ -7,11 +6,8 @@ PasteDeploy>=1.5.0
+ Routes>=1.12.3,!=2.0
+ WebOb>=1.2.3
+ argparse
+-boto>=2.32.1,<2.35.0
+ sqlalchemy-migrate==0.9.1
+ httplib2>=0.7.5
+-kombu>=2.5.0
 -pycrypto>=2.6
- iso8601>=0.1.8
- oslo.config>=1.2.0
- python-swiftclient>=1.5,<2.0.0
--lxml>=2.3
+ iso8601>=0.1.9
+ ordereddict
+ oslo.config>=1.4.0  # Apache-2.0
+@@ -20,11 +16,8 @@ netaddr>=0.7.12
+ keystonemiddleware>=1.0.0
+ WSME>=0.6
+ posix_ipc
+-python-swiftclient>=2.2.0
+-oslo.vmware>=0.6.0,<0.9.0               # Apache-2.0
  Paste
--passlib
- jsonschema>=1.3.0,!=1.4.0
- python-cinderclient>=1.0.6
- python-keystoneclient>=0.3.2
+ jsonschema>=2.0.0,<3.0.0
+-python-cinderclient>=1.1.0
+ python-keystoneclient>=0.10.0
  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
-@@ -12,29 +12,20 @@
- PasteDeploy>=1.5.0
- Routes>=1.12.3
- WebOb>=1.2.3,<1.3
--wsgiref>=0.1.2
+ six>=1.7.0
+--- glance-2014.2.2/requirements.txt.~1~	2015-02-05 07:19:44.000000000 -0800
++++ glance-2014.2.2/requirements.txt	2015-02-23 14:39:03.037319077 -0800
+@@ -3,11 +3,6 @@
+ # process, which may cause wedges in the gate later.
+ 
+ pbr>=0.6,!=0.7,<1.0
+-#
+-# The greenlet package must be compiled with gcc and needs
+-# the Python.h headers. Make sure you install the python-dev
+-# package to get the right headers...
+-greenlet>=0.3.2
+ 
+ # < 0.8.0/0.8 does not work, see https://bugs.launchpad.net/bugs/1153983
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+@@ -17,11 +12,8 @@ PasteDeploy>=1.5.0
+ Routes>=1.12.3,!=2.0
+ WebOb>=1.2.3
  argparse
- boto>=2.4.0,!=2.13.0
- sqlalchemy-migrate>=0.7.2
- httplib2
- kombu>=2.4.8
+-boto>=2.32.1,<2.35.0
+ sqlalchemy-migrate==0.9.1
+ httplib2>=0.7.5
+-kombu>=2.5.0
 -pycrypto>=2.6
- iso8601>=0.1.8
- oslo.config>=1.2.0
+ iso8601>=0.1.9
+ ordereddict
+ oslo.config>=1.4.0  # Apache-2.0
+@@ -32,17 +24,10 @@ WSME>=0.6
+ # For openstack/common/lockutils
+ posix_ipc
  
- # 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 Swift storage backend.
+-python-swiftclient>=2.2.0
+-
+-# For VMware storage backed.
+-oslo.vmware>=0.6.0,<0.9.0               # Apache-2.0
 -
  # 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
+ jsonschema>=2.0.0,<3.0.0
+-python-cinderclient>=1.1.0
+ python-keystoneclient>=0.10.0
+ pyOpenSSL>=0.11
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/05-CVE-2015-1881.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,85 @@
+Errata patch for CVE-2015-1881
+https://review.openstack.org/156553
+git fetch https://review.openstack.org/openstack/glance refs/changes/53/156553/1 && git format-patch -1 --stdout FETCH_HEAD
+Fixed upstream and in a future release.
+---
+From: abhishekkekane <[email protected]>
+Date: Thu, 12 Feb 2015 04:09:14 -0800
+Subject: [PATCH] Image data remains in backend for deleted image
+
+Trying to delete image created using task api (import-from) image gets
+deleted from the database, but image data remains in the backend. Import
+task does not update the location of the image and it remains None even
+image becomes active. Location entry is not added in the database in
+image_locations table.
+
+Added location information to the image before saving the image in
+the database.
+
+SecurityImpact
+
+Conflicts:
+    glance/common/scripts/image_import/main.py
+
+Change-Id: Ie389de6538a9b98dc51c7d781b81b3ab10b83842
+Closes-Bug: #1420696
+(cherry picked from commit 78b5b0a9575cd5e9c4543ec0e8fd6072af1f0ebb) 
+--- glance-2014.2.2/glance/common/scripts/image_import/main.py
++++ glance-2014.2.2/glance/common/scripts/image_import/main.py
+@@ -84,29 +84,29 @@ def import_image(image_repo, image_factory, task_input, task_id, uri):
+     # NOTE: set image status to saving just before setting data
+     original_image.status = 'saving'
+     image_repo.save(original_image)
+-    set_image_data(original_image, uri, None)
+-
+-    # NOTE: Check if the Image is not deleted after setting the data
+-    # before setting it's status to active. We need to set the status
+-    # explicitly here using the Image object returned from image_repo .The
+-    # Image object returned from create_image method does not have appropriate
+-    # factories wrapped around it.
+     image_id = original_image.image_id
++
++    # NOTE: Retrieving image from the database because the Image object
++    # returned from create_image method does not have appropriate factories
++    # wrapped around it.
+     new_image = image_repo.get(image_id)
+-    if new_image.status in ['saving']:
+-        new_image.status = 'active'
+-        new_image.size = original_image.size
+-        new_image.virtual_size = original_image.virtual_size
+-        new_image.checksum = original_image.checksum
++    set_image_data(new_image, uri, None)
++
++    # NOTE: Check if the Image is not deleted after setting the data
++    # before saving the active image. Here if image status is
++    # saving, then new_image is saved as it contains updated location,
++    # size, virtual_size and checksum information and the status of
++    # new_image is already set to active in set_image_data() call.
++    image = image_repo.get(image_id)
++    if image.status == 'saving':
++        image_repo.save(new_image)
++        return image_id
+     else:
+         msg = _LE("The Image %(image_id)s object being created by this task "
+                   "%(task_id)s, is no longer in valid status for further "
+                   "processing." % {"image_id": new_image.image_id,
+                                    "task_id": task_id})
+         raise exception.Conflict(msg)
+-    image_repo.save(new_image)
+-
+-    return image_id
+ 
+ 
+ def create_image(image_repo, image_factory, image_properties, task_id):
+--- glance-2014.2.2/glance/tests/unit/common/scripts/image_import/test_main.py
++++ glance-2014.2.2/glance/tests/unit/common/scripts/image_import/test_main.py
+@@ -56,7 +56,8 @@ class TestImageImport(test_utils.BaseTestCase):
+                     image_id,
+                     image_import_script.import_image(image_repo, image_factory,
+                                                      task_input, None, uri))
+-                self.assertEqual('active', image.status)
++                # Check image is in saving state before image_repo.save called
++                self.assertEqual('saving', image.status)
+                 self.assertTrue(image_repo.save.called)
+                 mock_set_img_data.assert_called_once_with(image, uri, None)
+                 self.assertTrue(image_repo.get.called)
--- a/components/openstack/glance/patches/05-launchpad-1255556.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-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
-@@ -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
-@@ -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
-@@ -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
-@@ -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
-@@ -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
-@@ -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/glance/patches/06-CVE-2014-5356.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,187 +0,0 @@
-Upstream patch to fix CVE-2014-5356.  This fix will be included in
-future 2013.2.4 and 2014.1.3 releases.
-
-From 12f43cfed5a47cd16f08b7dad2424da0fc362e47 Mon Sep 17 00:00:00 2001
-From: Tom Leaman <[email protected]>
-Date: Fri, 2 May 2014 10:09:20 +0000
-Subject: [PATCH] Enforce image_size_cap on v2 upload
-
-image_size_cap should be checked and enforced on upload
-
-Enforcement is in two places:
-- on image metadata save
-- during image save to backend store
-
-(cherry picked from commit 92ab00fca6926eaf3f7f92a955a5e07140063718)
-Conflicts:
-	glance/location.py
-	glance/tests/functional/v2/test_images.py
-	glance/tests/unit/test_store_image.py
-
-Closes-Bug: 1315321
-Change-Id: I45bfb360703617bc394e9e27fe17adf43b09c0e1
-Co-Author: Manuel Desbonnet <[email protected]>
----
- glance/db/__init__.py                     |    5 ++++
- glance/store/__init__.py                  |    5 +++-
- glance/tests/functional/__init__.py       |    2 ++
- glance/tests/functional/v2/test_images.py |   42 +++++++++++++++++++++++++++++
- glance/tests/unit/test_store_image.py     |    6 +++--
- glance/tests/unit/utils.py                |    5 +++-
- 6 files changed, 61 insertions(+), 4 deletions(-)
-
-diff --git a/glance/db/__init__.py b/glance/db/__init__.py
-index 56f4dac..8ac3606 100644
---- a/glance/db/__init__.py
-+++ b/glance/db/__init__.py
-@@ -32,6 +32,7 @@ db_opt = cfg.BoolOpt('use_tpool',
-                      'all DB API calls')
- 
- CONF = cfg.CONF
-+CONF.import_opt('image_size_cap', 'glance.common.config')
- CONF.import_opt('metadata_encryption_key', 'glance.common.config')
- CONF.register_opt(db_opt)
- 
-@@ -148,6 +149,8 @@ class ImageRepo(object):
- 
-     def add(self, image):
-         image_values = self._format_image_to_db(image)
-+        if image_values['size'] > CONF.image_size_cap:
-+            raise exception.ImageSizeLimitExceeded
-         # the updated_at value is not set in the _format_image_to_db
-         # function since it is specific to image create
-         image_values['updated_at'] = image.updated_at
-@@ -159,6 +162,8 @@ class ImageRepo(object):
- 
-     def save(self, image):
-         image_values = self._format_image_to_db(image)
-+        if image_values['size'] > CONF.image_size_cap:
-+            raise exception.ImageSizeLimitExceeded
-         try:
-             new_values = self.db_api.image_update(self.context,
-                                                   image.image_id,
-diff --git a/glance/store/__init__.py b/glance/store/__init__.py
-index fa17f4b..fd25e27 100644
---- a/glance/store/__init__.py
-+++ b/glance/store/__init__.py
-@@ -646,7 +646,10 @@ class ImageProxy(glance.domain.proxy.Image):
-             size = 0  # NOTE(markwash): zero -> unknown size
-         location, size, checksum, loc_meta = self.store_api.add_to_backend(
-                 self.context, CONF.default_store,
--                self.image.image_id, utils.CooperativeReader(data), size)
-+                self.image.image_id,
-+                utils.LimitingReader(utils.CooperativeReader(data),
-+                                     CONF.image_size_cap),
-+                size)
-         self.image.locations = [{'url': location, 'metadata': loc_meta}]
-         self.image.size = size
-         self.image.checksum = checksum
-diff --git a/glance/tests/functional/__init__.py b/glance/tests/functional/__init__.py
-index 1256133..18a1a7e 100644
---- a/glance/tests/functional/__init__.py
-+++ b/glance/tests/functional/__init__.py
-@@ -279,6 +279,7 @@ class ApiServer(Server):
-         self.pid_file = pid_file or os.path.join(self.test_dir, "api.pid")
-         self.scrubber_datadir = os.path.join(self.test_dir, "scrubber")
-         self.log_file = os.path.join(self.test_dir, "api.log")
-+        self.image_size_cap = 1099511627776
-         self.s3_store_host = "s3.amazonaws.com"
-         self.s3_store_access_key = ""
-         self.s3_store_secret_key = ""
-@@ -332,6 +333,7 @@ metadata_encryption_key = %(metadata_encryption_key)s
- registry_host = 127.0.0.1
- registry_port = %(registry_port)s
- log_file = %(log_file)s
-+image_size_cap = %(image_size_cap)d
- s3_store_host = %(s3_store_host)s
- s3_store_access_key = %(s3_store_access_key)s
- s3_store_secret_key = %(s3_store_secret_key)s
-diff --git a/glance/tests/functional/v2/test_images.py b/glance/tests/functional/v2/test_images.py
-index a9f9147..c25d4e2 100644
---- a/glance/tests/functional/v2/test_images.py
-+++ b/glance/tests/functional/v2/test_images.py
-@@ -259,6 +259,48 @@ class TestImages(functional.FunctionalTest):
- 
-         self.stop_servers()
- 
-+    def test_image_size_cap(self):
-+        self.api_server.image_size_cap = 128
-+        self.start_servers(**self.__dict__.copy())
-+        # create an image
-+        path = self._url('/v2/images')
-+        headers = self._headers({'content-type': 'application/json'})
-+        data = json.dumps({'name': 'image-size-cap-test-image',
-+                           'type': 'kernel', 'disk_format': 'aki',
-+                           'container_format': 'aki'})
-+        response = requests.post(path, headers=headers, data=data)
-+        self.assertEqual(201, response.status_code)
-+
-+        image = json.loads(response.text)
-+        image_id = image['id']
-+
-+        #try to populate it with oversized data
-+        path = self._url('/v2/images/%s/file' % image_id)
-+        headers = self._headers({'Content-Type': 'application/octet-stream'})
-+
-+        class StreamSim(object):
-+            # Using a one-shot iterator to force chunked transfer in the PUT
-+            # request
-+            def __init__(self, size):
-+                self.size = size
-+
-+            def __iter__(self):
-+                yield 'Z' * self.size
-+
-+        response = requests.put(path, headers=headers, data=StreamSim(
-+                                self.api_server.image_size_cap + 1))
-+        self.assertEqual(413, response.status_code)
-+
-+        # hashlib.md5('Z'*129).hexdigest()
-+        #     == '76522d28cb4418f12704dfa7acd6e7ee'
-+        # If the image has this checksum, it means that the whole stream was
-+        # accepted and written to the store, which should not be the case.
-+        path = self._url('/v2/images/{0}'.format(image_id))
-+        headers = self._headers({'content-type': 'application/json'})
-+        response = requests.get(path, headers=headers)
-+        image_checksum = json.loads(response.text).get('checksum')
-+        self.assertNotEqual(image_checksum, '76522d28cb4418f12704dfa7acd6e7ee')
-+
-     def test_permissions(self):
-         # Create an image that belongs to TENANT1
-         path = self._url('/v2/images')
-diff --git a/glance/tests/unit/test_store_image.py b/glance/tests/unit/test_store_image.py
-index f9f5d85..5bdd51e 100644
---- a/glance/tests/unit/test_store_image.py
-+++ b/glance/tests/unit/test_store_image.py
-@@ -126,8 +126,10 @@ class TestStoreImage(utils.BaseTestCase):
- 
-         self.stubs.Set(unit_test_utils.FakeStoreAPI, 'get_from_backend',
-                        fake_get_from_backend)
--
--        self.assertEquals(image1.get_data().fd, 'ZZZ')
-+        # This time, image1.get_data() returns the data wrapped in a
-+        # LimitingReader|CooperativeReader pipeline, so peeking under
-+        # the hood of those objects to get at the underlying string.
-+        self.assertEquals(image1.get_data().data.fd, 'ZZZ')
-         image1.locations.pop(0)
-         self.assertEquals(len(image1.locations), 1)
-         image2.delete()
-diff --git a/glance/tests/unit/utils.py b/glance/tests/unit/utils.py
-index dff87b1..ec62828 100644
---- a/glance/tests/unit/utils.py
-+++ b/glance/tests/unit/utils.py
-@@ -149,7 +149,10 @@ class FakeStoreAPI(object):
-             if image_id in location:
-                 raise exception.Duplicate()
-         if not size:
--            size = len(data.fd)
-+            # 'data' is a string wrapped in a LimitingReader|CooperativeReader
-+            # pipeline, so peek under the hood of those objects to get at the
-+            # string itself.
-+            size = len(data.data.fd)
-         if (current_store_size + size) > store_max_size:
-             raise exception.StorageFull()
-         if context.user == USER2:
--- 
-1.7.9.5
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/06-CVE-2014-9684.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,82 @@
+Errata patch for CVE-2014-9684
+https://review.openstack.org/157067 
+git fetch https://review.openstack.org/openstack/glance refs/changes/67/157067/3 && git format-patch -1 --stdout FETCH_HEAD
+Fixed upstream and in a future release.
+---
+From: Mike Fedosin <[email protected]>
+Date: Thu, 18 Sep 2014 18:07:42 +0400
+Subject: [PATCH] Initiate deletion of image files if the import was
+ interrupted
+
+If the image is deleted by appropriate API call while its content
+is still being uploaded in import task in v2, an exception is raised
+and it is not handled in the API code. This leads to the fact that
+the uploaded image file stays in a storage and clogs it.
+
+There existed code that safely removes image files if the exception
+occurs.
+
+SecurityImpact
+
+Conflicts:
+    glance/common/scripts/image_import/main.py
+
+Closes-Bug: 1371118
+Change-Id: I4f7d1aa103f4ce7abf4026e7097b9e76c24135fa
+(cherry picked from commit 7858d4d95154c8596720365e465cca7858cfec5c) 
+--- glance-2014.2.2/glance/common/scripts/image_import/main.py
++++ glance-2014.2.2/glance/common/scripts/image_import/main.py
+@@ -22,6 +22,7 @@ import six
+ from glance.api.v2 import images as v2_api
+ from glance.common import exception
+ from glance.common.scripts import utils as script_utils
++from glance.common import store_utils
+ from glance.common import utils as common_utils
+ from glance import i18n
+ from glance.openstack.common import excutils
+@@ -92,21 +93,30 @@ def import_image(image_repo, image_factory, task_input, task_id, uri):
+     new_image = image_repo.get(image_id)
+     set_image_data(new_image, uri, None)
+ 
+-    # NOTE: Check if the Image is not deleted after setting the data
+-    # before saving the active image. Here if image status is
+-    # saving, then new_image is saved as it contains updated location,
+-    # size, virtual_size and checksum information and the status of
+-    # new_image is already set to active in set_image_data() call.
+-    image = image_repo.get(image_id)
+-    if image.status == 'saving':
+-        image_repo.save(new_image)
+-        return image_id
+-    else:
+-        msg = _LE("The Image %(image_id)s object being created by this task "
+-                  "%(task_id)s, is no longer in valid status for further "
+-                  "processing." % {"image_id": new_image.image_id,
+-                                   "task_id": task_id})
+-        raise exception.Conflict(msg)
++    try:
++        # NOTE: Check if the Image is not deleted after setting the data
++        # before saving the active image. Here if image status is
++        # saving, then new_image is saved as it contains updated location,
++        # size, virtual_size and checksum information and the status of
++        # new_image is already set to active in set_image_data() call.
++        image = image_repo.get(image_id)
++        if image.status == 'saving':
++            image_repo.save(new_image)
++            return image_id
++        else:
++            msg = _("The Image %(image_id)s object being created by this task "
++                    "%(task_id)s, is no longer in valid status for further "
++                    "processing.") % {"image_id": image_id,
++                                      "task_id": task_id}
++            raise exception.Conflict(msg)
++    except (exception.Conflict, exception.NotFound):
++        with excutils.save_and_reraise_exception():
++            if new_image.locations:
++                for location in new_image.locations:
++                    store_utils.delete_image_location_from_backend(
++                        new_image.context,
++                        image_id,
++                        location)
+ 
+ 
+ def create_image(image_repo, image_factory, image_properties, task_id):
--- a/components/openstack/glance/patches/07-CVE-2014-9493.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-This patch fixes bug 1400966 for Havana.
-https://bugs.launchpad.net/glance/+bug/1400966
-
-commit 8bdb7ed9f5beaf816e7abba726904646bf3680dd
-Author: Zhi Yan Liu <[email protected]>
-Date:   Mon Dec 15 12:29:55 2014 +0800
-
-    To prevent client use v2 patch api to handle file and swift location
-
-    The change will be used to restrict client to download and delete any
-    file in glance-api server. The same resone and logic as what we did in
-    v1:
-    https://github.com/openstack/glance/blob/master/glance/api/v1/images.py#L429
-
-    Closes-Bug: bug/1400966
-    DocImpact
-
-    Conflicts:
-        glance/api/v1/images.py
-        glance/common/store_utils.py
-        glance/location.py
-        glance/tests/functional/v1/test_copy_to_file.py
-        glance/tests/functional/v2/test_images.py
-        glance/tests/unit/test_store_image.py
-        glance/tests/unit/test_store_location.py
-        glance/tests/unit/utils.py
-        glance/tests/unit/v1/test_api.py
-
-    (cherry picked from commit 4afdb017aa1ccef01482f117cb8d0736a6da38ed)
-    Signed-off-by: Zhi Yan Liu <[email protected]>
-    Change-Id: I72dbead3cb2dcb87f52658ddb880e26880cc229b 
-
---- glance-2013.2.3/glance/api/v1/images.py.orig	2014-12-23 08:16:59.633230138 -0800
-+++ glance-2013.2.3/glance/api/v1/images.py	2014-12-23 08:19:15.059375018 -0800
-@@ -50,7 +50,8 @@ import glance.registry.client.v1.api as
- from glance.store import (get_from_backend,
-                           get_size_from_backend,
-                           get_store_from_location,
--                          get_store_from_scheme)
-+                          get_store_from_scheme,
-+                          validate_external_location)
- 
- LOG = logging.getLogger(__name__)
- SUPPORTED_PARAMS = glance.api.v1.SUPPORTED_PARAMS
-@@ -375,20 +376,19 @@ class Controller(controller.BaseControll
-     @staticmethod
-     def _validate_source(source, req):
-         """
--        External sources (as specified via the location or copy-from headers)
--        are supported only over non-local store types, i.e. S3, Swift, HTTP.
--        Note the absence of file:// for security reasons, see LP bug #942118.
--        If the above constraint is violated, we reject with 400 "Bad Request".
-+        To validate if external sources (as specified via the location
-+        or copy-from headers) are supported. Otherwise we reject
-+        with 400 "Bad Request".
-         """
-         if source:
--            for scheme in ['s3', 'swift', 'http', 'rbd', 'sheepdog', 'cinder']:
--                if source.lower().startswith(scheme):
--                    return source
--            msg = _("External sourcing not supported for store %s") % source
--            LOG.debug(msg)
--            raise HTTPBadRequest(explanation=msg,
--                                 request=req,
--                                 content_type="text/plain")
-+            if validate_external_location(source):
-+                return source
-+            else:
-+                msg = _("External source are not supported: '%s'") % source
-+                LOG.debug(msg)
-+                raise HTTPBadRequest(explanation=msg,
-+                                     request=req,
-+                                     content_type="text/plain")
- 
-     @staticmethod
-     def _copy_from(req):
---- glance-2013.2.3/glance/store/__init__.py.orig	2014-12-23 08:20:52.254600393 -0800
-+++ glance-2013.2.3/glance/store/__init__.py	2014-12-23 08:23:48.661399000 -0800
-@@ -21,6 +21,7 @@ import sys
- import time
- 
- from oslo.config import cfg
-+import six.moves.urllib.parse as urlparse
- 
- from glance.common import crypt
- from glance.common import exception
-@@ -369,6 +370,24 @@ def set_acls(context, location_uri, publ
-         LOG.debug(_("Skipping store.set_acls... not implemented."))
- 
- 
-+def validate_external_location(uri):
-+    """
-+    Validate if URI of external location are supported.
-+
-+    Only over non-local store types are OK, i.e. S3, Swift,
-+    HTTP. Note the absence of 'file://' for security reasons,
-+    see LP bug #942118, 1400966, 'swift+config://' is also
-+    absent for security reasons, see LP bug #1334196.
-+
-+    :param uri: The URI of external image location.
-+    :return: Whether given URI of external image location are OK.
-+    """
-+    pieces = urlparse.urlparse(uri)
-+    valid_schemes = [scheme for scheme in location.SCHEME_TO_CLS_MAP.keys()
-+                     if scheme != 'file' and scheme != 'swift+config']
-+    return pieces.scheme in valid_schemes
-+
-+
- class ImageRepoProxy(glance.domain.proxy.Repo):
- 
-     def __init__(self, image_repo, context, store_api):
-@@ -401,22 +420,23 @@ class ImageRepoProxy(glance.domain.proxy
- 
- 
- def _check_location_uri(context, store_api, uri):
--    """
--    Check if an image location uri is valid.
-+    """Check if an image location is valid.
- 
-     :param context: Glance request context
-     :param store_api: store API module
-     :param uri: location's uri string
-     """
-+
-     is_ok = True
-     try:
--        size = store_api.get_size_from_backend(context, uri)
-         # NOTE(zhiyan): Some stores return zero when it catch exception
--        is_ok = size > 0
-+        is_ok = (store_api.validate_external_location(uri) and
-+                 store_api.get_size_from_backend(context, uri) > 0)
-     except (exception.UnknownScheme, exception.NotFound):
-         is_ok = False
-     if not is_ok:
--        raise exception.BadStoreUri(_('Invalid location: %s') % uri)
-+        reason = _('Invalid location')
-+        raise exception.BadStoreUri(message=reason)
- 
- 
- def _check_image_location(context, store_api, location):
--- a/components/openstack/glance/patches/08-CVE-2014-9623.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-# This patch is taken from community. Fix is present in version 2015.2.2
-# This fix could be found in following URL
-# https://review.openstack.org/gitweb?p=openstack/glance.git;a=commit;h=f1260cc771ee068651aa62b972bef49d9af81eb0
-
---- glance-2013.2.3.orginal/glance/api/authorization.py 2015-02-20 03:57:20.678874000 -0600
-+++ glance-2013.2.3//glance/api/authorization.py        2015-02-20 04:07:24.881647830 -0600
-@@ -119,10 +119,10 @@
-             raise exception.Forbidden(message
-                                       % self.image.image_id)
- 
--    def save(self, image_member):
-+    def save(self, image_member, from_state=None):
-         if (self.context.is_admin or
-             self.context.owner == image_member.member_id):
--            updated_member = self.member_repo.save(image_member)
-+            updated_member = self.member_repo.save(image_member, from_state=from_state)
-             return proxy_member(self.context, updated_member)
-         else:
-             message = _("You cannot update image member %s")
-
---- glance-2013.2.3.orginal/glance/api/policy.py        2015-02-20 03:57:20.670610060 -0600
-+++ glance-2013.2.3//glance/api/policy.py       2015-02-20 04:33:34.232748980 -0600
-@@ -174,9 +174,9 @@
-         self.policy.enforce(self.context, 'get_images', {})
-         return super(ImageRepoProxy, self).list(*args, **kwargs)
- 
--    def save(self, image):
-+    def save(self, image, from_state=None):
-         self.policy.enforce(self.context, 'modify_image', {})
--        return super(ImageRepoProxy, self).save(image)
-+        return super(ImageRepoProxy, self).save(image, from_state=from_state)
- 
-     def add(self, image):
-         self.policy.enforce(self.context, 'add_image', {})
-@@ -271,9 +271,9 @@
-         self.policy.enforce(self.context, 'get_member', {})
-         return self.member_repo.get(member_id)
- 
--    def save(self, member):
-+    def save(self, member, from_state=None):
-         self.policy.enforce(self.context, 'modify_member', {})
--        return self.member_repo.save(member)
-+        return self.member_repo.save(member, from_state=from_state)
- 
-     def list(self, *args, **kwargs):
-         self.policy.enforce(self.context, 'get_members', {})
-
---- glance-2013.2.3.old/glance/api/v1/upload_utils.py   2014-04-03 11:43:55.000000000 -0700
-+++ glance-2013.2.3/glance/api/v1/upload_utils.py       2015-03-08 23:28:12.600039932 -0700
-@@ -139,13 +139,24 @@
-         update_data = {'checksum': checksum,
-                        'size': size}
-         try:
--            image_meta = registry.update_image_metadata(req.context,
--                                                        image_id,
--                                                        update_data)
--
--        except exception.NotFound as e:
--            msg = _("Image %s could not be found after upload. The image may "
--                    "have been deleted during the upload.") % image_id
-+          try:
-+              state = 'saving'
-+              image_meta = registry.update_image_metadata(req.context,
-+                                                      image_id,
-+                                                       update_data,
-+                                                       from_state=state)
-+              image = registry.get_image_metadata(req.context, image_id)
-+              if image['status'] == 'deleted':
-+                  raise exception.NotFound()
-+          except exception.Duplicate:
-+              image = registry.get_image_metadata(req.context, image_id)
-+              if image['status'] == 'deleted':
-+                  raise exception.NotFound()
-+              else:
-+                  raise
-+        except exception.NotFound:
-+            msg = _("Image %s could not be found after upload. The image may"
-+                   " have been deleted during the upload.") % image_id
-             LOG.info(msg)
- 
-             # NOTE(jculp): we need to clean up the datastore if an image
-
---- glance-2013.2.3.orginal/glance/api/v2/image_data.py 2015-02-20 03:57:20.678035080 -0600
-+++ glance-2013.2.3//glance/api/v2/image_data.py        2015-02-20 05:49:21.505608540 -0600
-@@ -24,6 +24,7 @@
- import glance.domain
- import glance.gateway
- import glance.notifier
-+from glance.openstack.common import excutils
- import glance.openstack.common.log as logging
- import glance.store
- 
-@@ -53,11 +54,12 @@
-             try:
-                 image_repo.save(image)
-                 image.set_data(data, size)
--                image_repo.save(image)
--            except exception.NotFound as e:
--                msg = (_("Image %s could not be found after upload."
--                       "The image may have been deleted during the upload: %s")
--                       % (image_id, e))
-+                image_repo.save(image, from_state='saving')
-+            except (exception.NotFound, exception.Conflict):
-+                msg = (_("Image %s could not be found after upload. "
-+                         "The image may have been deleted during the "
-+                         "upload, cleaning up the chunks uploaded.") %
-+                       image_id)
-                 LOG.warn(msg)
-                 raise webob.exc.HTTPGone(explanation=msg,
-                                          request=req,
-@@ -111,6 +113,10 @@
-             raise webob.exc.HTTPServiceUnavailable(explanation=msg,
-                                                    request=req)
- 
-+        except webob.exc.HTTPGone as e:
-+            with excutils.save_and_reraise_exception():
-+                LOG.error(_("Failed to upload image data due to HTTP error"))
-+
-         except webob.exc.HTTPError as e:
-             LOG.error(_("Failed to upload image data due to HTTP error"))
-             raise
-
-
-
-
-diff --git glance-2013.2.3/glance/db/__init__.py glance-2013.2.3/glance/db/__init__.py
-
-index a59447d..379cf6f 100644 (file)
-
-
---- glance-2013.2.3/glance/db/__init__.py
-+++ glance-2013.2.3/glance/db/__init__.py
-@@ -162,7 +162,7 @@ class ImageRepo(object):
-         image.created_at = new_values['created_at']
-         image.updated_at = new_values['updated_at']
- 
--    def save(self, image):
-+    def save(self, image, from_state=None):
-         image_values = self._format_image_to_db(image)
-         if image_values['size'] > CONF.image_size_cap:
-             raise exception.ImageSizeLimitExceeded
-@@ -170,7 +170,8 @@ class ImageRepo(object):
-             new_values = self.db_api.image_update(self.context,
-                                                   image.image_id,
-                                                   image_values,
--                                                  purge_props=True)
-+                                                  purge_props=True,
-+                                                  from_state=from_state)
-         except (exception.NotFound, exception.Forbidden):
-             msg = _("No image found with ID %s") % image.image_id
-             raise exception.NotFound(msg)
-@@ -263,7 +264,7 @@ class ImageMemberRepo(object):
-             msg = _("The specified member %s could not be found")
-             raise exception.NotFound(msg % image_member.id)
- 
--    def save(self, image_member):
-+    def save(self, image_member, from_state=None):
-         image_member_values = self._format_image_member_to_db(image_member)
-         try:
-             new_values = self.db_api.image_member_update(self.context,
-
-
-diff --git glance-2013.2.3/glance/domain/proxy.py glance-2013.2.3/glance/domain/proxy.py
-
-index 89f138c..b27b448 100644 (file)
-
-
---- glance-2013.2.3/glance/domain/proxy.py
-+++ glance-2013.2.3/glance/domain/proxy.py
-@@ -94,9 +94,9 @@ class Repo(object):
-         result = self.base.add(base_item)
-         return self.helper.proxy(result)
- 
--    def save(self, item):
-+    def save(self, item, from_state=None):
-         base_item = self.helper.unproxy(item)
--        result = self.base.save(base_item)
-+        result = self.base.save(base_item, from_state=from_state)
-         return self.helper.proxy(result)
- 
-     def remove(self, item):
-
-
-
-diff --git glance-2013.2.3/glance/store/__init__.py glance-2013.2.3/glance/store/__init__.py
-
-index 273b7c7..ae3b4c8 100644 (file)
-
-
---- glance-2013.2.3/glance/store/__init__.py
-+++ glance-2013.2.3/glance/store/__init__.py
-@@ -446,7 +446,7 @@ class ImageRepoProxy(glance.domain.proxy.Repo):
-         self._set_acls(image)
-         return result
- 
--    def save(self, image):
-+    def save(self, image, from_state=None):
-         result = super(ImageRepoProxy, self).save(image)
-         self._set_acls(image)
-         return result
-
---- glance-2013.2.3.orginal/glance/quota/__init__.py    2015-02-20 03:57:20.466150810 -0600
-+++ glance-2013.2.3/glance/quota/__init__.py    2015-02-25 04:44:45.714636070 -0600
-@@ -36,6 +36,28 @@
-                                              item_proxy_class=ImageProxy,
-                                              item_proxy_kwargs=proxy_kwargs)
- 
-+    def _enforce_image_property_quota(self, attempted):
-+        if CONF.image_property_quota < 0:
-+            # If value is negative, allow unlimited number of properties
-+            return
-+
-+        maximum = CONF.image_property_quota
-+        if attempted > maximum:
-+            kwargs = {'attempted': attempted, 'maximum': maximum}
-+            exc = exception.ImagePropertyLimitExceeded(**kwargs)
-+            LOG.debug(six.text_type(exc))
-+            raise exc
-+
-+    def save(self, image, from_state=None):
-+        if image.added_new_properties():
-+            self._enforce_image_property_quota(len(image.extra_properties))
-+        return super(ImageRepoProxy, self).save(image, from_state=from_state)
-+
-+    def add(self, image):
-+        self._enforce_image_property_quota(len(image.extra_properties))
-+        return super(ImageRepoProxy, self).add(image)
-+
-+
- 
- class ImageFactoryProxy(glance.domain.proxy.ImageFactory):
-     def __init__(self, factory, context, db_api):
-
---- glance-2013.2.3.orginal/glance/registry/client/v1/api.py    2015-02-20 03:57:20.477473040 -0600
-+++ glance-2013.2.3/glance/registry/client/v1/api.py    2015-02-26 02:15:02.437773030 -0600
-@@ -164,11 +164,11 @@
- 
- 
- def update_image_metadata(context, image_id, image_meta,
--                          purge_props=False):
-+                          purge_props=False, from_state=None):
-     LOG.debug(_("Updating image metadata for image %s..."), image_id)
-     c = get_registry_client(context)
--    return c.update_image(image_id, image_meta, purge_props)
--
-+    return c.update_image(image_id, image_meta, purge_props,
-+                          from_state=from_state)
- 
- def delete_image_metadata(context, image_id):
-     LOG.debug(_("Deleting image metadata for image %s..."), image_id)
-
---- glance-2013.2.3.orginal/glance/registry/client/v1/client.py 2015-02-20 03:57:20.477107680 -0600
-+++ glance-2013.2.3/glance/registry/client/v1/client.py 2015-02-26 02:25:21.498753360 -0600
-@@ -165,7 +165,8 @@
-         image = data['image']
-         return self.decrypt_metadata(image)
- 
--    def update_image(self, image_id, image_metadata, purge_props=False):
-+    def update_image(self, image_id, image_metadata, purge_props=False,
-+                     from_state=None):
-         """
-         Updates Registry's information about an image
-         """
-@@ -174,6 +175,7 @@
- 
-         encrypted_metadata = self.encrypt_metadata(image_metadata['image'])
-         image_metadata['image'] = encrypted_metadata
-+        image_metadata['from_state'] = from_state
-         body = json.dumps(image_metadata)
- 
-         headers = {
-
--- a/components/openstack/glance/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/glance/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,10 +1,9 @@
 library/python-2/eventlet-26
 library/python-2/m2crypto-26
-library/python-2/oslo.config-26
+library/python-2/python-mysql-26
+library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
-library/python/eventlet-26
-library/python/m2crypto-26
+library/python/iniparse-26
 library/python/oslo.config-26
-library/python/sqlalchemy-migrate-26
 runtime/python-26
 system/core-os
--- a/components/openstack/heat/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -22,21 +22,23 @@
 #
 # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		heat
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:5e1f437f75fd831bc6cbd23986d8e60a4008cf7a0a775e7a7405d56b335b1800
+    sha256:ac9ad74d9571ec2441d2eec22dbe3ef9f39f7378f62238ad70911e26435d516f
 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/heat
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
 
-TPNO=			18176
+TPNO=			21821
 
 include $(WS_TOP)/make-rules/prep.mk
 include $(WS_TOP)/make-rules/setup.py.mk
@@ -48,9 +50,26 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
 PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
+#
+# heat-api-cfn, heat-api-cloudwatch, heat-api, and heat-engine depend
+# on heat-db and heat-upgrade so copy all of the service manifests
+# into the proto directory for pkgdepend(1) to find.
+#
+COMPONENT_POST_INSTALL_ACTION += \
+        ($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+         $(CP) \
+             files/heat-api-cfn.xml \
+             files/heat-api-cloudwatch.xml \
+             files/heat-api.xml \
+             files/heat-db.xml \
+             files/heat-engine.xml \
+             files/heat-upgrade.xml \
+             $(PROTO_DIR)/lib/svc/manifest/application/openstack)
+
 # common targets
 build:		$(BUILD_NO_ARCH)
 
--- a/components/openstack/heat/files/api-paste.ini	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-
-# heat-api pipeline
-[pipeline:heat-api]
-pipeline = faultwrap versionnegotiation authtoken context apiv1app
-
-# heat-api pipeline for standalone heat
-# ie. uses alternative auth backend that authenticates users against keystone
-# using username and password instead of validating token (which requires
-# an admin/service token).
-# To enable, in heat.conf:
-#   [paste_deploy]
-#   flavor = standalone
-#
-[pipeline:heat-api-standalone]
-pipeline = faultwrap versionnegotiation authpassword context apiv1app
-
-# heat-api pipeline for custom cloud backends
-# i.e. in heat.conf:
-#   [paste_deploy]
-#   flavor = custombackend
-#
-[pipeline:heat-api-custombackend]
-pipeline = faultwrap versionnegotiation context custombackendauth apiv1app
-
-# heat-api-cfn pipeline
-[pipeline:heat-api-cfn]
-pipeline = cfnversionnegotiation ec2authtoken authtoken context apicfnv1app
-
-# heat-api-cfn pipeline for standalone heat
-# relies exclusively on authenticating with ec2 signed requests
-[pipeline:heat-api-cfn-standalone]
-pipeline = cfnversionnegotiation ec2authtoken context apicfnv1app
-
-# heat-api-cloudwatch pipeline
-[pipeline:heat-api-cloudwatch]
-pipeline = versionnegotiation ec2authtoken authtoken context apicwapp
-
-# heat-api-cloudwatch pipeline for standalone heat
-# relies exclusively on authenticating with ec2 signed requests
-[pipeline:heat-api-cloudwatch-standalone]
-pipeline = versionnegotiation ec2authtoken context apicwapp
-
-[app:apiv1app]
-paste.app_factory = heat.common.wsgi:app_factory
-heat.app_factory = heat.api.openstack.v1:API
-
-[app:apicfnv1app]
-paste.app_factory = heat.common.wsgi:app_factory
-heat.app_factory = heat.api.cfn.v1:API
-
-[app:apicwapp]
-paste.app_factory = heat.common.wsgi:app_factory
-heat.app_factory = heat.api.cloudwatch:API
-
-[filter:versionnegotiation]
-paste.filter_factory = heat.common.wsgi:filter_factory
-heat.filter_factory = heat.api.openstack:version_negotiation_filter
-
-[filter:faultwrap]
-paste.filter_factory = heat.common.wsgi:filter_factory
-heat.filter_factory = heat.api.openstack:faultwrap_filter
-
-[filter:cfnversionnegotiation]
-paste.filter_factory = heat.common.wsgi:filter_factory
-heat.filter_factory = heat.api.cfn:version_negotiation_filter
-
-[filter:cwversionnegotiation]
-paste.filter_factory = heat.common.wsgi:filter_factory
-heat.filter_factory = heat.api.cloudwatch:version_negotiation_filter
-
-[filter:context]
-paste.filter_factory = heat.common.context:ContextMiddleware_filter_factory
-
-[filter:ec2authtoken]
-paste.filter_factory = heat.api.aws.ec2token:EC2Token_filter_factory
-
-# Auth middleware that validates token against keystone
-[filter:authtoken]
-paste.filter_factory = heat.common.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%
-
-# Auth middleware that validates username/password against keystone
-[filter:authpassword]
-paste.filter_factory = heat.common.auth_password:filter_factory
-
-# Auth middleware that validates against custom backend
-[filter:custombackendauth]
-paste.filter_factory = heat.common.custom_backend_auth:filter_factory
--- a/components/openstack/heat/files/heat-api-cfn.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat-api-cfn.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the heat_db service so the Heat
          services do not collide when creating the database -->
     <dependency name='heat_db' grouping='optional_all' restart_on='error'
@@ -42,6 +47,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/heat/files/heat-api-cloudwatch.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat-api-cloudwatch.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the heat_db service so the Heat
          services do not collide when creating the database -->
     <dependency name='heat_db' grouping='optional_all' restart_on='error'
@@ -42,6 +47,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/heat/files/heat-api.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat-api.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the heat_db service so the Heat
          services do not collide when creating the database -->
     <dependency name='heat_db' grouping='optional_all' restart_on='error'
@@ -42,6 +47,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/heat/files/heat-db.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat-db.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -29,11 +29,21 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/heat/files/heat-engine.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat-engine.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-upgrade' />
+    </dependency>
+
     <!-- create a dependency on the heat_db service so the Heat
          services do not collide when creating the database -->
     <dependency name='heat_db' grouping='optional_all' restart_on='error'
@@ -42,6 +47,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,258 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+HEAT_CONF_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'stack_user_domain'): ('DEFAULT', 'stack_user_domain_id'),
+    ('DEFAULT', 'rabbit_durable_queues'): ('DEFAULT', 'amqp_durable_queues'),
+    ('rpc_notifier2', 'topics'): ('DEFAULT', 'notification_topics'),
+    ('DEFAULT', 'log_config'): ('DEFAULT', 'log_config_append'),
+    ('DEFAULT', 'logfile'): ('DEFAULT', 'log_file'),
+    ('DEFAULT', 'logdir'): ('DEFAULT', 'log_dir'),
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DATABASE', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+    ('DEFAULT', 'memcache_servers'):
+        ('keystone_authtoken', 'memcached_servers'),
+    ('DEFAULT', 'matchmaker_ringfile'): ('matchmaker_ring', 'ringfile'),
+    # No longer referenced by the service or causes a DeprecationWarning
+    ('DEFAULT', 'instance_user'): (None, None),
+    ('DEFAULT', 'onready'): (None, None),
+    ('DEFAULT', 'list_notifier_drivers'): (None, None),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/heat'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/heat/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/heat/api-paste.ini')
+        modify_conf('/etc/heat/heat.conf', HEAT_CONF_MAPPINGS)
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/heat/heat.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+
+        if db_connection.startswith('mysql'):
+            engine = sqlalchemy.create_engine(db_connection)
+            if engine.url.username != '%SERVICE_USER%':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in heat tables"
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="heat">
+
+  <service version="1" type="service"
+    name="application/openstack/heat/heat-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/heat-upgrade %m">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-upgrade is a transient service to upgrade the Heat
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/heat/files/heat.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -4,31 +4,41 @@
 # Options defined in heat.common.config
 #
 
-# The SQLAlchemy connection string used to connect to the
-# database (string value)
-sql_connection=sqlite:////var/lib/heat/heat.sqlite
+# Name of the engine node. This can be an opaque identifier.
+# It is not necessarily a hostname, FQDN, or IP address.
+# (string value)
+#host=heat
+
 
-# timeout before idle sql connections are reaped (integer
-# value)
-#sql_idle_timeout=3600
+#
+# Options defined in heat.common.config
+#
 
-# The default user for new instances (string value)
-#instance_user=ec2-user
+# The default user for new instances. This option is
+# deprecated and will be removed in the Juno release. If it's
+# empty, Heat will use the default user set up with your cloud
+# image (for OS::Nova::Server) or 'ec2-user' (for
+# AWS::EC2::Instance). (string value)
+instance_user=
 
-# Driver to use for controlling instances (string value)
+# Driver to use for controlling instances. (string value)
 #instance_driver=heat.engine.nova
 
-# List of directories to search for Plugins (list value)
-#plugin_dirs=/usr/lib/heat
+# List of directories to search for plug-ins. (list value)
+plugin_dirs=/usr/lib/heat
 
-# The directory to search for environment files (string value)
+# The directory to search for environment files. (string
+# value)
 #environment_dir=/etc/heat/environment.d
 
-# Select deferred auth method, stored password or trusts
+# Select deferred auth method, stored password or trusts.
 # (string value)
 #deferred_auth_method=password
 
-# Subset of trustor roles to be delegated to heat (list value)
+# Subset of trustor roles to be delegated to heat. If
+# trusts_delegated_roles is set to [], all roles of a user
+# will be delegated to heat when creating a stack. (list
+# value)
 #trusts_delegated_roles=heat_stack_owner
 
 # Maximum resources allowed per top-level stack. (integer
@@ -39,6 +49,10 @@
 # one time. (integer value)
 #max_stacks_per_tenant=100
 
+# Number of times to retry to bring a resource to a non-error
+# state. Set to 0 to disable retries. (integer value)
+#action_retry_limit=5
+
 # Controls how many events will be pruned whenever a  stack's
 # events exceed max_events_per_stack. Set this lower to keep
 # more events at the expense of more frequent purges. (integer
@@ -50,33 +64,78 @@
 # unlimited events per stack. (integer value)
 #max_events_per_stack=1000
 
-# Name of the engine node. This can be an opaque identifier.It
-# is not necessarily a hostname, FQDN, or IP address. (string
+# Timeout in seconds for stack action (ie. create or update).
+# (integer value)
+#stack_action_timeout=3600
+
+# RPC timeout for the engine liveness check that is used for
+# stack locking. (integer value)
+#engine_life_check_timeout=2
+
+# Enable the legacy OS::Heat::CWLiteAlarm resource. (boolean
 # value)
-#host=heat
+#enable_cloud_watch_lite=true
+
+# Enable the preview Stack Abandon feature. (boolean value)
+#enable_stack_abandon=false
+
+# Enable the preview Stack Adopt feature. (boolean value)
+#enable_stack_adopt=false
 
-# seconds between running periodic tasks (integer value)
+# Deprecated. (string value)
+#onready=<None>
+
+
+#
+# Options defined in heat.common.config
+#
+
+# Seconds between running periodic tasks. (integer value)
 #periodic_interval=60
 
-# URL of the Heat metadata server (string value)
+# URL of the Heat metadata server. (string value)
 #heat_metadata_server_url=
 
-# URL of the Heat waitcondition server (string value)
+# URL of the Heat waitcondition server. (string value)
 #heat_waitcondition_server_url=
 
-# URL of the Heat cloudwatch server (string value)
+# URL of the Heat CloudWatch server. (string value)
 #heat_watch_server_url=
 
-# Instance connection to cfn/cw API via https (string value)
+# Instance connection to CFN/CW API via https. (string value)
 #instance_connection_is_secure=0
 
-# Instance connection to cfn/cw API validate certs if ssl
-# (string value)
+# Instance connection to CFN/CW API validate certs if SSL is
+# used. (string value)
 #instance_connection_https_validate_certificates=1
 
-# Keystone role for heat template-defined users (string value)
+# Default region name used to get services endpoints. (string
+# value)
+#region_name_for_services=<None>
+
+# Keystone role for heat template-defined users. (string
+# value)
 #heat_stack_user_role=heat_stack_user
 
+# Keystone domain ID which contains heat template-defined
+# users. If this option is set, stack_user_domain_name option
+# will be ignored. (string value)
+# Deprecated group/name - [DEFAULT]/stack_user_domain
+#stack_user_domain_id=<None>
+
+# Keystone domain name which contains heat template-defined
+# users. If `stack_user_domain_id` option is set, this option
+# is ignored. (string value)
+#stack_user_domain_name=<None>
+
+# Keystone username, a user with roles sufficient to manage
+# users and projects in the stack_user_domain. (string value)
+#stack_domain_admin=<None>
+
+# Keystone password for stack_domain_admin user. (string
+# value)
+#stack_domain_admin_password=<None>
+
 # Maximum raw byte size of any template. (integer value)
 #max_template_size=524288
 
@@ -84,14 +143,9 @@
 # value)
 #max_nested_stack_depth=3
 
-
-#
-# Options defined in heat.common.crypt
-#
-
-# Encryption key used for authentication info in database
-# (string value)
-#auth_encryption_key=notgood but just long enough i think
+# Number of heat-engine processes to fork and run. (integer
+# value)
+#num_engine_workers=1
 
 
 #
@@ -104,43 +158,255 @@
 
 
 #
-# Options defined in heat.db.api
+# Options defined in oslo.messaging
 #
 
-# The backend to use for db (string value)
-#db_backend=sqlalchemy
+# Use durable queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
+#amqp_durable_queues=false
+
+# Auto-delete queues in AMQP. (boolean value)
+#amqp_auto_delete=false
+
+# Size of RPC connection pool. (integer value)
+#rpc_conn_pool_size=30
+
+# Qpid broker hostname. (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port. (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs. (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for Qpid connection. (string value)
+#qpid_username=
+
+# Password for Qpid connection. (string value)
+#qpid_password=
+
+# Space separated list of SASL mechanisms to use for auth.
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats. (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl'. (string value)
+#qpid_protocol=tcp
+
+# Whether to disable the Nagle algorithm. (boolean value)
+#qpid_tcp_nodelay=true
+
+# The number of prefetched messages held by receiver. (integer
+# value)
+#qpid_receiver_capacity=1
+
+# The qpid topology version to use.  Version 1 is what was
+# originally used by impl_qpid.  Version 2 includes some
+# backwards-incompatible changes that allow broker federation
+# to work.  Users should update to version 2 when they are
+# able to take everything down, as it requires a clean break.
+# (integer value)
+#qpid_topology_version=1
+
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1 and SSLv23. SSLv2 and SSLv3 may be available on
+# some distributions. (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled). (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled). (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL
+# enabled). (string value)
+#kombu_ssl_ca_certs=
+
+# How long to wait before reconnecting in response to an AMQP
+# consumer cancel notification. (floating point value)
+#kombu_reconnect_delay=1.0
+
+# The RabbitMQ broker address where a single node is used.
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used.
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs. (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# Connect over SSL for RabbitMQ. (boolean value)
+#rabbit_use_ssl=false
+
+# The RabbitMQ userid. (string value)
+#rabbit_userid=guest
+
+# The RabbitMQ password. (string value)
+#rabbit_password=guest
+
+# The RabbitMQ login method. (string value)
+#rabbit_login_method=AMQPLAIN
+
+# The RabbitMQ virtual host. (string value)
+#rabbit_virtual_host=/
+
+# How frequently to retry connecting with RabbitMQ. (integer
+# value)
+#rabbit_retry_interval=1
+
+# How long to backoff for between retries when connecting to
+# RabbitMQ. (integer value)
+#rabbit_retry_backoff=2
+
+# Maximum number of RabbitMQ connection retries. Default is 0
+# (infinite retry count). (integer value)
+#rabbit_max_retries=0
+
+# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
+# this option, you must wipe the RabbitMQ database. (boolean
+# value)
+#rabbit_ha_queues=false
+
+# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
+# (boolean value)
+#fake_rabbit=false
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
+
+# MatchMaker driver. (string value)
+#rpc_zmq_matchmaker=oslo.messaging._drivers.matchmaker.MatchMakerLocalhost
+
+# ZeroMQ receiver listening port. (integer value)
+#rpc_zmq_port=9501
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
+
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=heat
+
+# Seconds to wait before a cast expires (TTL). Only supported
+# by impl_zmq. (integer value)
+#rpc_cast_timeout=30
+
+# Heartbeat frequency. (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+# Size of RPC greenthread pool. (integer value)
+#rpc_thread_pool_size=64
+
+# Driver or drivers to handle sending notifications. (multi
+# valued)
+#notification_driver=
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+#notification_topics=notifications
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
+
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include qpid and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=openstack
+
+
+#
+# Options defined in heat.api.middleware.ssl
+#
+
+# The HTTP Header that will be used to determine which the
+# original request protocol scheme was, even if it was removed
+# by an SSL terminator proxy. (string value)
+#secure_proxy_ssl_header=X-Forwarded-Proto
+
+
+#
+# Options defined in heat.common.crypt
+#
+
+# Encryption key used for authentication info in database.
+# (string value)
+#auth_encryption_key=notgood but just long enough i think
+
+
+#
+# Options defined in heat.common.heat_keystoneclient
+#
+
+# Fully qualified class name to use as a keystone backend.
+# (string value)
+#keystone_backend=heat.common.heat_keystoneclient.KeystoneClientV3
 
 
 #
 # Options defined in heat.engine.clients
 #
 
-# Cloud module to use as a backend. Defaults to OpenStack.
+# Fully qualified class name to use as a client backend.
 # (string value)
-#cloud_backend=<None>
+#cloud_backend=heat.engine.clients.OpenStackClients
+
+
+#
+# Options defined in heat.engine.notification
+#
+
+# Default notification level for outgoing notifications.
+# (string value)
+#default_notification_level=INFO
+
+# Default publisher_id for outgoing notifications. (string
+# value)
+#default_publisher_id=<None>
+
+# List of drivers to send notifications (DEPRECATED). (multi
+# valued)
+#list_notifier_drivers=<None>
 
 
 #
 # Options defined in heat.engine.resources.loadbalancer
 #
 
-# Custom template for the built-in loadbalancer nested stack
+# Custom template for the built-in loadbalancer nested stack.
 # (string value)
 #loadbalancer_template=<None>
 
 
 #
-# Options defined in heat.openstack.common.db.sqlalchemy.session
-#
-
-# the filename to use with sqlite (string value)
-#sqlite_db=heat.sqlite
-
-# If true, use synchronous mode for sqlite (boolean value)
-#sqlite_synchronous=true
-
-
-#
 # Options defined in heat.openstack.common.eventlet_backdoor
 #
 
@@ -159,7 +425,7 @@
 # Options defined in heat.openstack.common.lockutils
 #
 
-# Whether to disable inter-process locks (boolean value)
+# Enables or disables inter-process locks. (boolean value)
 #disable_process_locking=false
 
 # Directory to use for lock files. (string value)
@@ -178,48 +444,50 @@
 # of default WARNING level). (boolean value)
 #verbose=false
 
-# Log output to standard error (boolean value)
+# Log output to standard error. (boolean value)
 #use_stderr=true
 
-# format string to use for log messages with context (string
+# Format string to use for log messages with context. (string
 # value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
 
-# format string to use for log messages without context
+# Format string to use for log messages without context.
 # (string value)
 #logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
 
-# data to append to log format when level is DEBUG (string
+# Data to append to log format when level is DEBUG. (string
 # value)
 #logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
 
-# prefix each line of exception output with this format
+# Prefix each line of exception output with this format.
 # (string value)
 #logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
 
-# list of logger=LEVEL pairs (list value)
-#default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
+# List of logger=LEVEL pairs. (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN
 
-# publish error events (boolean value)
+# Enables or disables publication of error events. (boolean
+# value)
 #publish_errors=false
 
-# make deprecations fatal (boolean value)
+# Enables or disables fatal status of deprecations. (boolean
+# value)
 #fatal_deprecations=false
 
-# If an instance is passed with the log message, format it
-# like this (string value)
+# The format for an instance that is passed with the log
+# message.  (string value)
 #instance_format="[instance: %(uuid)s] "
 
-# If an instance UUID is passed with the log message, format
-# it like this (string value)
+# The format for an instance UUID that is passed with the log
+# message.  (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>
+# The name of a logging configuration file. This file is
+# appended to any existing logging configuration files. For
+# details about logging configuration files, see the Python
+# logging module documentation. (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
 
 # DEPRECATED. A logging.Formatter log message format string
 # which may use any of the available logging.LogRecord
@@ -229,362 +497,463 @@
 #log_format=<None>
 
 # Format string for %%(asctime)s in log records. Default:
-# %(default)s (string value)
+# %(default)s . (string value)
 #log_date_format=%Y-%m-%d %H:%M:%S
 
 # (Optional) Name of log file to output to. If no default is
 # set, logging will go to stdout. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
 #log_file=<None>
 
 # (Optional) The base directory used for relative --log-file
-# paths (string value)
+# paths. (string value)
+# Deprecated group/name - [DEFAULT]/logdir
 #log_dir=<None>
 
-# Use syslog for logging. (boolean value)
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# during I, and will change in J to honor RFC5424. (boolean
+# value)
 #use_syslog=false
 
-# syslog facility to receive log lines (string value)
-#syslog_log_facility=LOG_USER
-
-
-#
-# Options defined in heat.openstack.common.notifier.api
-#
-
-# Driver or drivers to handle sending notifications (multi
-# valued)
-#notification_driver=
-
-# Default notification level for outgoing notifications
-# (string value)
-#default_notification_level=INFO
-
-# Default publisher_id for outgoing notifications (string
+# (Optional) Enables or disables syslog rfc5424 format for
+# logging. If enabled, prefixes the MSG part of the syslog
+# message with APP-NAME (RFC5424). The format without the APP-
+# NAME is deprecated in I, and will be removed in J. (boolean
 # value)
-#default_publisher_id=<None>
-
-
-#
-# Options defined in heat.openstack.common.notifier.list_notifier
-#
+#use_syslog_rfc_format=false
 
-# List of drivers to send notifications (multi valued)
-#list_notifier_drivers=heat.openstack.common.notifier.no_op_notifier
-
-
-#
-# Options defined in heat.openstack.common.notifier.rpc_notifier
-#
-
-# AMQP topic used for openstack notifications (list value)
-#notification_topics=notifications
+# Syslog facility to receive log lines. (string value)
+#syslog_log_facility=LOG_USER
 
 
 #
 # Options defined in heat.openstack.common.policy
 #
 
-# JSON file containing policy (string value)
+# The JSON file that defines policies. (string value)
 #policy_file=policy.json
 
-# Rule enforced when requested rule is not found (string
-# value)
+# Default rule. Enforced when a requested rule is not found.
+# (string value)
 #policy_default_rule=default
 
 
+[auth_password]
+
 #
-# Options defined in heat.openstack.common.rpc
+# Options defined in heat.common.config
+#
+
+# Allow orchestration of multiple clouds. (boolean value)
+#multi_cloud=false
+
+# Allowed keystone endpoints for auth_uri when multi_cloud is
+# enabled. At least one endpoint needs to be specified. (list
+# value)
+#allowed_auth_uris=
+
+
+[clients]
+
+#
+# Options defined in heat.common.config
 #
 
-# The messaging module to use, defaults to kombu. (string
-# value)
-#rpc_backend=heat.openstack.common.rpc.impl_kombu
-
-# Size of RPC thread pool (integer value)
-#rpc_thread_pool_size=64
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=publicURL
 
-# Size of RPC connection pool (integer value)
-#rpc_conn_pool_size=30
-
-# Seconds to wait for a response from call or multicall
-# (integer value)
-#rpc_response_timeout=60
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
 
-# Seconds to wait before a cast expires (TTL). Only supported
-# by impl_zmq. (integer value)
-#rpc_cast_timeout=30
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
 
-# Modules of exceptions that are permitted to be recreatedupon
-# receiving exception data from an rpc call. (list value)
-#allowed_rpc_exception_modules=heat.openstack.common.exception,heat.common.exception,nova.exception,cinder.exception,exceptions
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
 
-# 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
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=false
 
 
+[clients_ceilometer]
+
 #
-# Options defined in heat.openstack.common.rpc.amqp
+# Options defined in heat.common.config
 #
 
-# Use durable queues in amqp. (boolean value)
-#amqp_durable_queues=false
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
+
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
+
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
+
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
+
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
+
+
+[clients_cinder]
 
-# Auto-delete queues in amqp. (boolean value)
-#amqp_auto_delete=false
+#
+# Options defined in heat.common.config
+#
+
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
+
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
+
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
+
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
+
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
 
 #
-# Options defined in heat.openstack.common.rpc.impl_kombu
+# Options defined in heat.common.config
+#
+
+# Allow client's debug log output. (boolean value)
+#http_log_debug=false
+
+
+[clients_glance]
+
+#
+# Options defined in heat.common.config
 #
 
-# SSL version to use (valid only if SSL enabled). valid values
-# are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some
-# distributions (string value)
-#kombu_ssl_version=
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
 
-# SSL key file (valid only if SSL enabled) (string value)
-#kombu_ssl_keyfile=
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
 
-# SSL cert file (valid only if SSL enabled) (string value)
-#kombu_ssl_certfile=
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
 
-# SSL certification authority file (valid only if SSL enabled)
+# Optional PEM-formatted file that contains the private key.
 # (string value)
-#kombu_ssl_ca_certs=
-
-# The RabbitMQ broker address where a single node is used
-# (string value)
-#rabbit_host=localhost
+#key_file=<None>
 
-# The RabbitMQ broker port where a single node is used
-# (integer value)
-#rabbit_port=5672
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
-# RabbitMQ HA cluster host:port pairs (list value)
-#rabbit_hosts=$rabbit_host:$rabbit_port
+
+[clients_heat]
 
-# connect over SSL for RabbitMQ (boolean value)
-#rabbit_use_ssl=false
-
-# the RabbitMQ userid (string value)
-#rabbit_userid=guest
+#
+# Options defined in heat.common.config
+#
 
-# the RabbitMQ password (string value)
-#rabbit_password=guest
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
 
-# the RabbitMQ virtual host (string value)
-#rabbit_virtual_host=/
-
-# how frequently to retry connecting with RabbitMQ (integer
+# Optional CA cert file to use in SSL connections. (string
 # value)
-#rabbit_retry_interval=1
+#ca_file=<None>
 
-# how long to backoff for between retries when connecting to
-# RabbitMQ (integer value)
-#rabbit_retry_backoff=2
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
 
-# maximum retries with trying to connect to RabbitMQ (the
-# default of 0 implies an infinite retry count) (integer
-# value)
-#rabbit_max_retries=0
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
 
-# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
-# wipe RabbitMQ database when changing this option. (boolean
-# value)
-#rabbit_ha_queues=false
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
 
 #
-# Options defined in heat.openstack.common.rpc.impl_qpid
+# Options defined in heat.common.config
+#
+
+# Optional heat url in format like
+# http://0.0.0.0:8004/v1/%(tenant_id)s. (string value)
+#url=
+
+
+[clients_keystone]
+
+#
+# Options defined in heat.common.config
+#
+
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
+
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
+
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
+
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
+
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
+
+
+[clients_neutron]
+
+#
+# Options defined in heat.common.config
 #
 
-# Qpid broker hostname (string value)
-#qpid_hostname=localhost
-
-# Qpid broker port (integer value)
-#qpid_port=5672
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
 
-# Qpid HA cluster host:port pairs (list value)
-#qpid_hosts=$qpid_hostname:$qpid_port
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
 
-# Username for qpid connection (string value)
-#qpid_username=
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
 
-# Password for qpid connection (string value)
-#qpid_password=
-
-# Space separated list of SASL mechanisms to use for auth
+# Optional PEM-formatted file that contains the private key.
 # (string value)
-#qpid_sasl_mechanisms=
+#key_file=<None>
+
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
-# Seconds between connection keepalive heartbeats (integer
-# value)
-#qpid_heartbeat=60
+
+[clients_nova]
 
-# Transport to use, either 'tcp' or 'ssl' (string value)
-#qpid_protocol=tcp
+#
+# Options defined in heat.common.config
+#
 
-# Disable Nagle algorithm (boolean value)
-#qpid_tcp_nodelay=true
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
+
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
 
-# 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
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
+
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
+
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
 
 #
-# Options defined in heat.openstack.common.rpc.impl_zmq
+# Options defined in heat.common.config
+#
+
+# Allow client's debug log output. (boolean value)
+#http_log_debug=false
+
+
+[clients_swift]
+
+#
+# Options defined in heat.common.config
 #
 
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet
-# interface, or IP. The "host" option should point or resolve
-# to this address. (string value)
-#rpc_zmq_bind_address=*
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
 
-# MatchMaker driver (string value)
-#rpc_zmq_matchmaker=heat.openstack.common.rpc.matchmaker.MatchMakerLocalhost
-
-# ZeroMQ receiver listening port (integer value)
-#rpc_zmq_port=9501
+# Optional CA cert file to use in SSL connections. (string
+# value)
+#ca_file=<None>
 
-# 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>
+# Optional PEM-formatted certificate chain file. (string
+# value)
+#cert_file=<None>
 
-# Directory for holding IPC sockets (string value)
-#rpc_zmq_ipc_dir=/var/run/openstack
+# Optional PEM-formatted file that contains the private key.
+# (string value)
+#key_file=<None>
 
-# Name of this node. Must be a valid hostname, FQDN, or IP
-# address. Must match "host" option, if running Nova. (string
-# value)
-#rpc_zmq_host=heat
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
 
 
+[clients_trove]
+
 #
-# Options defined in heat.openstack.common.rpc.matchmaker
+# Options defined in heat.common.config
 #
 
-# Heartbeat frequency (integer value)
-#matchmaker_heartbeat_freq=300
-
-# Heartbeat time-to-live. (integer value)
-#matchmaker_heartbeat_ttl=600
-
+# Type of endpoint in Identity service catalog to use for
+# communication with the OpenStack service. (string value)
+#endpoint_type=<None>
 
-[ssl]
-
-#
-# Options defined in heat.openstack.common.sslutils
-#
-
-# CA certificate file to use to verify connecting clients
-# (string value)
+# Optional CA cert file to use in SSL connections. (string
+# value)
 #ca_file=<None>
 
-# Certificate file to use when starting the server securely
-# (string value)
+# Optional PEM-formatted certificate chain file. (string
+# value)
 #cert_file=<None>
 
-# Private key file to use when starting the server securely
+# Optional PEM-formatted file that contains the private key.
 # (string value)
 #key_file=<None>
 
+# If set, then the server's certificate will not be verified.
+# (boolean value)
+#insecure=<None>
+
 
 [database]
 
 #
-# Options defined in heat.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 heat.openstack.common.db.sqlalchemy.session
+# Options defined in oslo.db
 #
 
-# The SQLAlchemy connection string used to connect to the
-# database (string value)
-connection=sqlite:////var/lib/heat/heat.sqlite
+# The file name to use with SQLite. (string value)
+#sqlite_db=oslo.sqlite
+
+# If True, SQLite uses synchronous mode. (boolean value)
+#sqlite_synchronous=true
+
+# The back end to use for the database. (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend=sqlalchemy
+
+# The SQLAlchemy connection string to use to connect to the
+# database. (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/heat
 
-# The SQLAlchemy connection string used to connect to the
-# slave database (string value)
-#slave_connection=
+# The SQLAlchemy connection string to use to connect to the
+# slave database. (string value)
+#slave_connection=<None>
 
-# timeout before idle sql connections are reaped (integer
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
 # value)
+#mysql_sql_mode=TRADITIONAL
+
+# Timeout before idle SQL connections are reaped. (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
 #idle_timeout=3600
 
-# Minimum number of SQL connections to keep open in a pool
+# Minimum number of SQL connections to keep open in a pool.
 # (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
 #min_pool_size=1
 
-# Maximum number of SQL connections to keep open in a pool
+# Maximum number of SQL connections to keep open in a pool.
 # (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
 #max_pool_size=<None>
 
-# maximum db connection retries during startup. (setting -1
-# implies an infinite retry count) (integer value)
+# Maximum number of database connection retries during
+# startup. Set to -1 to specify an infinite retry count.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
 #max_retries=10
 
-# interval between retries of opening a sql connection
+# Interval between retries of opening a SQL connection.
 # (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
 #retry_interval=10
 
-# If set, use this value for max_overflow with sqlalchemy
+# If set, use this value for max_overflow with SQLAlchemy.
 # (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
 #max_overflow=<None>
 
-# Verbosity of SQL debugging information. 0=None,
-# 100=Everything (integer value)
+# Verbosity of SQL debugging information: 0=None,
+# 100=Everything. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
 #connection_debug=0
 
-# Add python stack traces to SQL as comment strings (boolean
+# Add Python stack traces to SQL as comment strings. (boolean
 # value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
 #connection_trace=false
 
-# If set, use this value for pool_timeout with sqlalchemy
+# If set, use this value for pool_timeout with SQLAlchemy.
 # (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
 #pool_timeout=<None>
 
-
-[paste_deploy]
+# Enable the experimental use of database reconnect on
+# connection lost. (boolean value)
+#use_db_reconnect=false
 
-#
-# Options defined in heat.common.config
-#
-
-# The flavor to use (string value)
-#flavor=<None>
+# Seconds between database connection retries. (integer value)
+#db_retry_interval=1
 
-# The API paste config file to use (string value)
-#api_paste_config=api-paste.ini
-
-
-[rpc_notifier2]
+# If True, increases the interval between database connection
+# retries up to db_max_retry_interval. (boolean value)
+#db_inc_retry_interval=true
 
-#
-# Options defined in heat.openstack.common.notifier.rpc_notifier2
-#
+# If db_inc_retry_interval is set, the maximum seconds between
+# database connection retries. (integer value)
+#db_max_retry_interval=10
 
-# AMQP topic(s) used for openstack notifications (list value)
-#topics=notifications
+# Maximum database connection retries before error is raised.
+# Set to -1 to specify an infinite retry count. (integer
+# value)
+#db_max_retries=20
 
 
 [ec2authtoken]
@@ -593,10 +962,10 @@
 # Options defined in heat.api.aws.ec2token
 #
 
-# Authentication Endpoint URI (string value)
+# Authentication Endpoint URI. (string value)
 #auth_uri=<None>
 
-# Allow orchestration of multiple clouds (boolean value)
+# Allow orchestration of multiple clouds. (boolean value)
 #multi_cloud=false
 
 # Allowed keystone endpoints for auth_uri when multi_cloud is
@@ -605,73 +974,38 @@
 #allowed_auth_uris=
 
 
-[heat_api_cloudwatch]
-
-#
-# Options defined in heat.common.wsgi
-#
-
-# Address to bind the server.  Useful when selecting a
-# particular network interface. (string value)
-#bind_host=0.0.0.0
-
-# The port on which the server will listen. (integer value)
-#bind_port=8003
-
-# Number of backlog requests to configure the socket with
-# (integer value)
-#backlog=4096
-
-# Location of the SSL Certificate File to use for SSL mode
-# (string value)
-#cert_file=<None>
-
-# Location of the SSL Key File to use for enabling SSL mode
-# (string value)
-#key_file=<None>
-
-# Number of workers for Heat service (integer value)
-#workers=0
-
-# Maximum line size of message headers to be accepted.
-# max_header_line may need to be increased when using large
-# tokens (typically those generated by the Keystone v3 API
-# with big service catalogs (integer value)
-#max_header_line=16384
-
-
 [heat_api]
 
 #
 # Options defined in heat.common.wsgi
 #
 
-# Address to bind the server.  Useful when selecting a
+# Address to bind the server. Useful when selecting a
 # particular network interface. (string value)
 #bind_host=0.0.0.0
 
 # The port on which the server will listen. (integer value)
 #bind_port=8004
 
-# Number of backlog requests to configure the socket with
+# Number of backlog requests to configure the socket with.
 # (integer value)
 #backlog=4096
 
-# Location of the SSL Certificate File to use for SSL mode
+# Location of the SSL certificate file to use for SSL mode.
 # (string value)
 #cert_file=<None>
 
-# Location of the SSL Key File to use for enabling SSL mode
+# Location of the SSL key file to use for enabling SSL mode.
 # (string value)
 #key_file=<None>
 
-# Number of workers for Heat service (integer value)
+# Number of workers for Heat service. (integer value)
 #workers=0
 
 # Maximum line size of message headers to be accepted.
 # max_header_line may need to be increased when using large
 # tokens (typically those generated by the Keystone v3 API
-# with big service catalogs (integer value)
+# with big service catalogs). (integer value)
 #max_header_line=16384
 
 
@@ -681,73 +1015,350 @@
 # Options defined in heat.common.wsgi
 #
 
-# Address to bind the server.  Useful when selecting a
+# Address to bind the server. Useful when selecting a
 # particular network interface. (string value)
 #bind_host=0.0.0.0
 
 # The port on which the server will listen. (integer value)
 #bind_port=8000
 
-# Number of backlog requests to configure the socket with
+# Number of backlog requests to configure the socket with.
 # (integer value)
 #backlog=4096
 
-# Location of the SSL Certificate File to use for SSL mode
+# Location of the SSL certificate file to use for SSL mode.
 # (string value)
 #cert_file=<None>
 
-# Location of the SSL Key File to use for enabling SSL mode
+# Location of the SSL key file to use for enabling SSL mode.
 # (string value)
 #key_file=<None>
 
-# Number of workers for Heat service (integer value)
+# Number of workers for Heat service. (integer value)
+#workers=0
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs). (integer value)
+#max_header_line=16384
+
+
+[heat_api_cloudwatch]
+
+#
+# Options defined in heat.common.wsgi
+#
+
+# Address to bind the server. Useful when selecting a
+# particular network interface. (string value)
+#bind_host=0.0.0.0
+
+# The port on which the server will listen. (integer value)
+#bind_port=8003
+
+# Number of backlog requests to configure the socket with.
+# (integer value)
+#backlog=4096
+
+# Location of the SSL certificate file to use for SSL mode.
+# (string value)
+#cert_file=<None>
+
+# Location of the SSL key file to use for enabling SSL mode.
+# (string value)
+#key_file=<None>
+
+# Number of workers for Heat service. (integer value)
 #workers=0
 
 # Maximum line size of message headers to be accepted.
 # max_header_line may need to be increased when using large
 # tokens (typically those generated by the Keystone v3 API
-# with big service catalogs (integer value)
+# with big service catalogs.) (integer value)
 #max_header_line=16384
 
 
-[auth_password]
+[keystone_authtoken]
+
+#
+# Options defined in keystonemiddleware.auth_token
+#
+
+# Prefix to prepend at the beginning of the path. Deprecated,
+# use identity_uri. (string value)
+#auth_admin_prefix=
+
+# Host providing the admin Identity API endpoint. Deprecated,
+# use identity_uri. (string value)
+#auth_host=127.0.0.1
+
+# Port of the admin Identity API endpoint. Deprecated, use
+# identity_uri. (integer value)
+#auth_port=35357
+
+# Protocol of the admin Identity API endpoint (http or https).
+# Deprecated, use identity_uri. (string value)
+#auth_protocol=https
+
+# Complete public Identity API endpoint (string value)
+auth_uri=http://127.0.0.1:5000/v2.0/
+
+# Complete admin Identity API endpoint. This should specify
+# the unversioned root endpoint e.g. https://localhost:35357/
+# (string value)
+identity_uri=http://127.0.0.1:35357/
+
+# API version of the admin Identity API endpoint (string
+# value)
+#auth_version=<None>
+
+# Do not handle authorization requests within the middleware,
+# but delegate the authorization decision to downstream WSGI
+# components (boolean value)
+#delay_auth_decision=false
+
+# Request timeout value for communicating with Identity API
+# server. (boolean value)
+#http_connect_timeout=<None>
+
+# How many times are we trying to reconnect when communicating
+# with Identity API Server. (integer value)
+#http_request_max_retries=3
+
+# This option is deprecated and may be removed in a future
+# release. Single shared secret with the Keystone
+# configuration used for bootstrapping a Keystone
+# installation, or otherwise bypassing the normal
+# authentication process. This option should not be used, use
+# `admin_user` and `admin_password` instead. (string value)
+#admin_token=<None>
+
+# Keystone account username (string value)
+admin_user=%SERVICE_USER%
+
+# Keystone account password (string value)
+admin_password=%SERVICE_PASSWORD%
+
+# Keystone service account tenant name to validate user tokens
+# (string value)
+admin_tenant_name=%SERVICE_TENANT_NAME%
+
+# Env key for the swift cache (string value)
+#cache=<None>
+
+# Required if Keystone server requires client certificate
+# (string value)
+#certfile=<None>
+
+# Required if Keystone server requires client certificate
+# (string value)
+#keyfile=<None>
+
+# A PEM encoded Certificate Authority to use when verifying
+# HTTPs connections. Defaults to system CAs. (string value)
+#cafile=<None>
+
+# Verify HTTPS connections. (boolean value)
+#insecure=false
+
+# Directory used to cache files related to PKI tokens (string
+# value)
+signing_dir=/var/lib/heat/keystone-signing
+
+# Optionally specify a list of memcached server(s) to use for
+# caching. If left undefined, tokens will instead be cached
+# in-process. (list value)
+# Deprecated group/name - [DEFAULT]/memcache_servers
+#memcached_servers=<None>
+
+# In order to prevent excessive effort spent validating
+# tokens, the middleware caches previously-seen tokens for a
+# configurable duration (in seconds). Set to -1 to disable
+# caching completely. (integer value)
+#token_cache_time=300
+
+# Determines the frequency at which the list of revoked tokens
+# is retrieved from the Identity service (in seconds). A high
+# number of revocation events combined with a low cache
+# duration may significantly reduce performance. (integer
+# value)
+#revocation_cache_time=10
+
+# (optional) if defined, indicate whether token data should be
+# authenticated or authenticated and encrypted. Acceptable
+# values are MAC or ENCRYPT.  If MAC, token data is
+# authenticated (with HMAC) in the cache. If ENCRYPT, token
+# data is encrypted and authenticated in the cache. If the
+# value is not one of these options or empty, auth_token will
+# raise an exception on initialization. (string value)
+#memcache_security_strategy=<None>
+
+# (optional, mandatory if memcache_security_strategy is
+# defined) this string is used for key derivation. (string
+# value)
+#memcache_secret_key=<None>
+
+# (optional) number of seconds memcached server is considered
+# dead before it is tried again. (integer value)
+#memcache_pool_dead_retry=300
+
+# (optional) max total number of open connections to every
+# memcached server. (integer value)
+#memcache_pool_maxsize=10
+
+# (optional) socket timeout in seconds for communicating with
+# a memcache server. (integer value)
+#memcache_pool_socket_timeout=3
+
+# (optional) number of seconds a connection to memcached is
+# held unused in the pool before it is closed. (integer value)
+#memcache_pool_unused_timeout=60
+
+# (optional) number of seconds that an operation will wait to
+# get a memcache client connection from the pool. (integer
+# value)
+#memcache_pool_conn_get_timeout=10
+
+# (optional) use the advanced (eventlet safe) memcache client
+# pool. The advanced pool will only work under python 2.x.
+# (boolean value)
+#memcache_use_advanced_pool=false
+
+# (optional) indicate whether to set the X-Service-Catalog
+# header. If False, middleware will not ask for service
+# catalog on token validation and will not set the X-Service-
+# Catalog header. (boolean value)
+#include_service_catalog=true
+
+# Used to control the use and type of token binding. Can be
+# set to: "disabled" to not check token binding. "permissive"
+# (default) to validate binding information if the bind type
+# is of a form known to the server and ignore it if not.
+# "strict" like "permissive" but if the bind type is unknown
+# the token will be rejected. "required" any form of token
+# binding is needed to be allowed. Finally the name of a
+# binding method that must be present in tokens. (string
+# value)
+#enforce_token_bind=permissive
+
+# If true, the revocation list will be checked for cached
+# tokens. This requires that PKI tokens are configured on the
+# Keystone server. (boolean value)
+#check_revocations_for_cached=false
+
+# Hash algorithms to use for hashing PKI tokens. This may be a
+# single algorithm or multiple. The algorithms are those
+# supported by Python standard hashlib.new(). The hashes will
+# be tried in the order given, so put the preferred one first
+# for performance. The result of the first hash will be stored
+# in the cache. This will typically be set to multiple values
+# only while migrating from a less secure algorithm to a more
+# secure one. Once all the old tokens are expired this option
+# should be set to a single value for better performance.
+# (list value)
+#hash_algorithms=md5
+
+
+[matchmaker_redis]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Host to locate redis. (string value)
+#host=127.0.0.1
+
+# Use this port to connect to redis host. (integer value)
+#port=6379
+
+# Password for Redis server (optional). (string value)
+#password=<None>
+
+
+[matchmaker_ring]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Matchmaker ring file (JSON). (string value)
+# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
+#ringfile=/etc/oslo/matchmaker_ring.json
+
+
+[oslo_messaging_amqp]
+
+#
+# Options defined in oslo.messaging
+#
+# NOTE: Options in this group are supported when using oslo.messaging >=1.5.0.
+
+# address prefix used when sending to a specific server
+# (string value)
+#server_request_prefix=exclusive
+
+# address prefix used when broadcasting to all servers (string
+# value)
+#broadcast_prefix=broadcast
+
+# address prefix when sending to any server in group (string
+# value)
+#group_request_prefix=unicast
+
+# Name for the AMQP container (string value)
+#container_name=<None>
+
+# Timeout for inactive connections (in seconds) (integer
+# value)
+#idle_timeout=0
+
+# Debug: dump AMQP frames to stdout (boolean value)
+#trace=false
+
+# CA certificate PEM file for verifing server certificate
+# (string value)
+#ssl_ca_file=
+
+# Identifying certificate PEM file to present to clients
+# (string value)
+#ssl_cert_file=
+
+# Private key PEM file used to sign cert_file certificate
+# (string value)
+#ssl_key_file=
+
+# Password for decrypting ssl_key_file (if encrypted) (string
+# value)
+#ssl_key_password=<None>
+
+# Accept clients using either SSL or plain TCP (boolean value)
+#allow_insecure_clients=false
+
+
+[paste_deploy]
 
 #
 # Options defined in heat.common.config
 #
 
-# Allow orchestration of multiple clouds (boolean value)
-#multi_cloud=false
+# The flavor to use. (string value)
+#flavor=<None>
 
-# Allowed keystone endpoints for auth_uri when multi_cloud is
-# enabled. At least one endpoint needs to be specified. (list
-# value)
-#allowed_auth_uris=
+# The API paste config file to use. (string value)
+#api_paste_config=api-paste.ini
 
 
-[matchmaker_ring]
+[revision]
 
 #
-# Options defined in heat.openstack.common.rpc.matchmaker_ring
+# Options defined in heat.common.config
 #
 
-# Matchmaker ring file (JSON) (string value)
-#ringfile=/etc/oslo/matchmaker_ring.json
+# Heat build revision. If you would prefer to manage your
+# build revision separately, you can move this section to a
+# different file and add it as another config option. (string
+# value)
+#heat_revision=unknown
 
 
-[matchmaker_redis]
-
-#
-# Options defined in heat.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>
-
-
--- a/components/openstack/heat/files/heat.exec_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat.exec_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,1 +1,2 @@
-OpenStack Orchestration:solaris:cmd:RO::/usr/bin/heat-manage:uid=heat;gid=heat
+OpenStack Orchestration Management:solaris:cmd:RO::/usr/bin/heat-manage:\
+uid=heat;gid=heat
--- a/components/openstack/heat/files/heat.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/files/heat.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,10 +1,12 @@
-OpenStack Orchestration:RO::\
+OpenStack Orchestration Management:RO::\
 Manage OpenStack Heat:\
-auths=solaris.admin.edit/etc/heat/api-paste.ini,\
-solaris.admin.edit/etc/heat/heat.conf,\
-solaris.admin.edit/etc/heat/policy.json,\
+auths=solaris.admin.edit/etc/heat/*.conf,\
+solaris.admin.edit/etc/heat/*.ini,\
+solaris.admin.edit/etc/heat/*.json,\
+solaris.admin.edit/etc/heat/environment.d/*.yaml,\
+solaris.admin.edit/etc/heat/templates/*.yaml,\
 solaris.smf.manage.heat,\
 solaris.smf.value.heat;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
 
-OpenStack Management:RO:::profiles=OpenStack Orchestration
+OpenStack Management:RO:::profiles=OpenStack Orchestration Management
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,1 @@
+heat::RO::profiles=OpenStack Orchestration Management
--- a/components/openstack/heat/heat.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/heat.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,7 +28,7 @@
 set name=pkg.summary value="OpenStack Heat (Orchestration Service)"
 set name=pkg.description \
     value="OpenStack Heat is a service to orchestrate multiple composite cloud applications using templates, through both an OpenStack-native ReST API and a CloudFormation-compatible Query API."
-set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Heat, the OpenStack orchestration service"
 set name=com.oracle.info.tpno value=$(TPNO)
@@ -40,12 +40,14 @@
 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/236
+set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/236 \
+    value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 #
 dir  path=etc/heat owner=heat group=heat mode=0700
-file files/api-paste.ini path=etc/heat/api-paste.ini owner=heat group=heat \
-    mode=0644 overlay=allow preserve=renamenew
+file path=etc/heat/api-paste.ini owner=heat group=heat mode=0644 overlay=allow \
+    preserve=renamenew
 file path=etc/heat/environment.d/default.yaml owner=heat group=heat mode=0644 \
     overlay=allow preserve=renamenew
 file files/heat.conf path=etc/heat/heat.conf owner=heat group=heat mode=0644 \
@@ -62,15 +64,15 @@
     group=sys
 file files/heat.prof_attr path=etc/security/prof_attr.d/cloud:openstack:heat \
     group=sys
-file files/heat-api-cfn.xml \
-    path=lib/svc/manifest/application/openstack/heat-api-cfn.xml
-file files/heat-api-cloudwatch.xml \
-    path=lib/svc/manifest/application/openstack/heat-api-cloudwatch.xml
-file files/heat-api.xml path=lib/svc/manifest/application/openstack/heat-api.xml
-file files/heat-db.xml path=lib/svc/manifest/application/openstack/heat-db.xml
-file files/heat-engine.xml \
-    path=lib/svc/manifest/application/openstack/heat-engine.xml
+file files/heat.user_attr path=etc/user_attr.d/cloud:openstack:heat group=sys
+file path=lib/svc/manifest/application/openstack/heat-api-cfn.xml
+file path=lib/svc/manifest/application/openstack/heat-api-cloudwatch.xml
+file path=lib/svc/manifest/application/openstack/heat-api.xml
+file path=lib/svc/manifest/application/openstack/heat-db.xml
+file path=lib/svc/manifest/application/openstack/heat-engine.xml
+file path=lib/svc/manifest/application/openstack/heat-upgrade.xml
 file files/heat-smf-method path=lib/svc/method/heat-smf-method
+file files/heat-upgrade path=lib/svc/method/heat-upgrade
 file path=usr/bin/heat-manage
 file usr/bin/heat-keystone-setup \
     path=usr/demo/openstack/keystone/heat-keystone-setup mode=0555
@@ -81,7 +83,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/__init__.py
@@ -100,14 +104,21 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cloudwatch/watch.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/fault.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/ssl.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/version_negotiation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/build_info.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/events.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/resources.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/software_configs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/software_deployments.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/stacks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/views/stacks_view.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/views/views_common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/boothook.sh
@@ -118,7 +129,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/cmd/manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/auth_password.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/auth_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/auth_url.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/context.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/crypt.py
@@ -126,9 +137,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/environment_format.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/heat_keystoneclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/identifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/lifecycle_plugin_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/messaging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/param_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/plugin_loader.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/serializers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/short_id.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/template_format.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/timeutils.py
@@ -136,10 +152,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/README
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/manage.py
@@ -158,104 +173,151 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/026_user_creds_drop_aws.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/027_user_creds_trusts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/028_text_mysql_longtext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/029_event_id_to_uuid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/030_remove_uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/031_stack_lock.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/032_decrypt_method.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/033_software_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/034_raw_template_files.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/035_event_uuid_to_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/036_stack_domain_project.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/037_migrate_hot_template.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/038_software_config_json_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/039_user_creds_nullable.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/040_software_deployment_no_signal_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/041_migrate_hot_template_resources.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/042_software_deployment_domain_project.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/043_migrate_template_versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/044_snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/045_stack_backup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/046_properties_data.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/mutable.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sync.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/doc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/doc/resources.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/attributes.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/components.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/cfn/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/cfn/functions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/cfn/template.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/client_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/ceilometer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/cinder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/glance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/heat_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/keystone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/neutron.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/nova.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/sahara.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients/os/trove.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/constraints.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/dependencies.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/environment.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/event.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/function.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot/functions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot/parameters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot/template.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/lifecycle_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/notification/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/notification/autoscaling.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/notification/stack.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/parameter_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/parameters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/parser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/plugin_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/properties.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resource.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/autoscaling.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/aws/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/aws/launch_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/aws/scaling_policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/ceilometer/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/ceilometer/alarm.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/cloud_watch.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/eip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/glance_image.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/internet_gateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/iso_8601.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/loadbalancer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/network_interface.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/firewall.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/floatingip.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/loadbalancer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/metering.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/net.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/network_gateway.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/neutron.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/port.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/provider_net.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/security_group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/subnet.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/vpnservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/nova_floatingip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/nova_keypair.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/nova_servergroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/nova_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/openstack/scaling_policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/os_database.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/random_string.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/resource_group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/route_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/s3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/sahara_cluster.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/sahara_templates.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/security_group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/cloud_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/multi_part.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/software_component.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/software_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/software_deployment.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/software_config/structured_config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/stack.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/subnet.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/swiftsignal.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/template_resource.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/user.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/vpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/wait_condition.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/rsrc_defn.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/signal_responder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/stack.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/stack_lock.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/stack_resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/stack_user.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/support.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/template.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/timestamp.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/update.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/watchrule.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/bs/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/cs/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/da/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/de/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_AU/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_GB/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_US/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/es/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/fr/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/it/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ja/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ko/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/pt_BR/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ru/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/tl/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/tr/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/uk/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/zh_CN/LC_MESSAGES/heat.po
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/zh_TW/LC_MESSAGES/heat.po
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/README
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/config/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/config/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/context.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/migration.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/session.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/crypto/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/crypto/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/eventlet_backdoor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/excutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/fileutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/gettextutils.py
@@ -265,42 +327,25 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/log.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/loopingcall.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/network_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/list_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/log_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rabbit_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rpc_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rpc_notifier2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/test_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/middleware/request_id.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/processutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/amqp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/dispatcher.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_fake.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_kombu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_zmq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker_redis.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker_ring.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/proxy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/securemessage.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/serializer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/zmq_receiver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/sslutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/systemd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/threadgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/versionutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/scaling/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/scaling/cooldown.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/scaling/template.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heat/version.py
 dir  path=var/lib/heat owner=heat group=heat mode=0700
 dir  path=var/log/heat owner=heat group=heat mode=0700
@@ -308,47 +353,95 @@
 group groupname=heat gid=87
 user username=heat ftpuser=false gcos-field="OpenStack Heat" group=heat \
     home-dir=/var/lib/heat uid=87
+#
 license heat.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
 depend type=group fmri=library/python-2/anyjson-$(PYV)
 
-# force a group dependency on the optional ceilometerclient; pkgdepend work is
-# needed to flush this out.
-depend type=group fmri=library/python/ceilometerclient-$(PYV)
-
-# force a group dependency on the optional cinderclient; pkgdepend work is
-# needed to flush this out.
-depend type=group fmri=library/python/cinderclient-$(PYV)
+# force a group dependency on the optional netaddr; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/netaddr-$(PYV)
 
-# force a group dependency on the optional neutronclient; pkgdepend work is
-# needed to flush this out.
-depend type=group fmri=library/python/neutronclient-$(PYV)
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
 
-# force a group dependency on the optional swiftclient; pkgdepend work is needed
-# to flush this out.
-depend type=group fmri=library/python/swiftclient-$(PYV)
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
 
 # force a dependency on babel; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/babel-$(PYV)
 
+# force a dependency on ceilometerclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/ceilometerclient-$(PYV)
+
+# force a dependency on cinderclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/cinderclient-$(PYV)
+
+# force a dependency on glanceclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/glanceclient-$(PYV)
+
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/greenlet-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-$(PYV)
+# force a dependency on heatclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/heatclient-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
 
 # force a dependency on lxml; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/lxml-$(PYV)
 
-# force a dependency on netaddr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/netaddr-$(PYV)
+# force a dependency on m2crypto; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/m2crypto-$(PYV)
+
+# force a dependency on neutronclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/neutronclient-$(PYV)
+
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-$(PYV)
+
+# force a dependency on oslo.db; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.db-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python-2/paste.deploy-$(PYV)
 
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on posix_ipc; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/posix_ipc-$(PYV)
+
 # force a dependency on pyyaml; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/pyyaml-$(PYV)
 
@@ -358,24 +451,18 @@
 # force a dependency on routes; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/routes-$(PYV)
 
-# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/sqlalchemy-$(PYV)
+# force a dependency on saharaclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/saharaclient-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
+
+# force a dependency on swiftclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/swiftclient-$(PYV)
+
+# force a dependency on troveclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/troveclient-$(PYV)
 
 # force a dependency on webob; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/webob-$(PYV)
-
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
-
-# force a dependency on keystoneclient; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/keystoneclient-$(PYV)
-
-# force a dependency on novaclient; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/novaclient-$(PYV)
-
-# force a dependency on pbr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/pbr-$(PYV)
-
-# force a dependency on six; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/six-$(PYV)
--- a/components/openstack/heat/patches/01-CVE-2014-3801.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-Patch for Upstream bug 1311223.  This addresses CVE-2014-3801.  It has
-been fixed in Icehouse 2014.1.1 and Havana 2013.2.4.
-
-From 7e114a38712da8947ee7ad93eabda34f5e4aa65a Mon Sep 17 00:00:00 2001
-From: Angus Salkeld <[email protected]>
-Date: Thu, 1 May 2014 11:20:55 +1000
-Subject: Don't dynamically create provider types in the global env
-
-Only support this in user environments.
-Note: this is only when you have the following in your template
-resources:
-  thingy:
-    type: http://example.com/foo.template
-
-Doing this will avoid tenant-specific provider template URLs being
-shown globally in the resource-type listing.
-
-Co-Authored-By: Angus Salkeld <[email protected]>
-Closes-Bug: #1311223
-Change-Id: Ifa18108afacbda390b19b46a8f41bc4f018e95d6
-(cherry picked from commit a02ff20509171346d2a1d2a9df7c81aada134c52)
-
-diff --git a/heat/engine/environment.py b/heat/engine/environment.py
-index 6dd73f0..db9f2e2 100644
---- a/heat/engine/environment.py
-+++ b/heat/engine/environment.py
-@@ -187,7 +187,10 @@ class ResourceRegistry(object):
-         registry[name] = info
- 
-     def iterable_by(self, resource_type, resource_name=None):
--        if resource_type.endswith(('.yaml', '.template')):
-+        is_templ_type = resource_type.endswith(('.yaml', '.template'))
-+        if self.global_registry is not None and is_templ_type:
-+            # we only support dynamic resource types in user environments
-+            # not the global environment.
-             # resource with a Type == a template
-             # we dynamically create an entry as it has not been registered.
-             if resource_type not in self._registry:
-diff --git a/heat/tests/test_provider_template.py b/heat/tests/test_provider_template.py
-index 500cc59..e2af880 100644
---- a/heat/tests/test_provider_template.py
-+++ b/heat/tests/test_provider_template.py
-@@ -398,6 +398,8 @@ class ProviderTemplateTest(HeatTestCase):
-             self.assertIn(attrib, templ_resource.attributes)
-         for k, v in json_snippet.get("Properties").items():
-             self.assertEqual(v, templ_resource.properties[k])
-+        self.assertNotIn('WordPress_Single_Instance.yaml',
-+                         resources.global_env().registry._registry)
- 
-     def test_system_template_retrieve_by_file(self):
-         # make sure that a TemplateResource defined in the global environment
--- 
-cgit v0.10.1
-
--- a/components/openstack/heat/patches/02-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/patches/02-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,41 +1,69 @@
 In-house patch to remove unnecessary dependencies from Heat's
 requirements files. The specific reasons are as follows:
 
-argparse	No longer applicable
+httplib2	Not applicable
 
-httplib2	No longer applicable
+kombu		Not applicable
 
 pycrypto	Not applicable to Solaris (M2Crypto used instead)
 
---- heat-2013.2.3/heat.egg-info/requires.txt.orig	2014-04-03 11:47:55.000000000 -0700
-+++ heat-2013.2.3/heat.egg-info/requires.txt	2014-07-07 03:03:36.128102921 -0700
-@@ -1,8 +1,6 @@
- pbr>=0.5.21,<1.0
--pycrypto>=2.6
- eventlet>=0.13.0
- greenlet>=0.3.2
--httplib2
- iso8601>=0.1.8
- kombu>=2.4.8
- lxml>=2.3
-@@ -22,4 +20,4 @@
- PyYAML>=3.1.0
- paramiko>=1.8.0
+qpid-python	Not applicable
+
+--- heat-2014.2.2/heat.egg-info/requires.txt.~1~	2015-02-05 08:30:41.000000000 -0800
++++ heat-2014.2.2/heat.egg-info/requires.txt	2015-02-23 14:53:28.397432548 -0800
+@@ -3,10 +3,8 @@ argparse
  Babel>=1.3
--oslo.config>=1.2.0
-\ No newline at end of file
-+oslo.config>=1.2.0
---- heat-2013.2.3/requirements.txt.orig	2014-04-03 11:44:49.000000000 -0700
-+++ heat-2013.2.3/requirements.txt	2014-07-07 03:03:32.472531751 -0700
-@@ -1,11 +1,8 @@
- pbr>=0.5.21,<1.0
+ eventlet>=0.15.1,<0.16.0
+ greenlet>=0.3.2
+-httplib2>=0.7.5
+ iso8601>=0.1.9
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
+ lxml>=2.3
+ netaddr>=0.7.12
+ oslo.config>=1.4.0  # Apache-2.0
+@@ -16,7 +14,6 @@ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.utils>=1.0.0                       # Apache-2.0
+ PasteDeploy>=1.5.0
+ posix_ipc
 -pycrypto>=2.6
- eventlet>=0.13.0
+ python-ceilometerclient>=1.0.6
+ python-cinderclient>=1.1.0
+ python-glanceclient>=0.14.0
+@@ -28,7 +25,6 @@ python-saharaclient>=0.7.3
+ python-swiftclient>=2.2.0
+ python-troveclient>=1.0.4
+ PyYAML>=3.1.0
+-qpid-python
+ requests>=1.2.1,!=2.4.0
+ Routes>=1.12.3,!=2.0
+ six>=1.7.0
+--- heat-2014.2.2/requirements.txt.~1~	2015-02-05 08:27:27.000000000 -0800
++++ heat-2014.2.2/requirements.txt	2015-02-23 14:53:35.541352823 -0800
+@@ -7,10 +7,8 @@ argparse
+ Babel>=1.3
+ eventlet>=0.15.1,<0.16.0
  greenlet>=0.3.2
--httplib2
- iso8601>=0.1.8
- kombu>=2.4.8
--argparse
+-httplib2>=0.7.5
+ iso8601>=0.1.9
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
  lxml>=2.3
- netaddr
- six>=1.4.1
+ netaddr>=0.7.12
+ oslo.config>=1.4.0  # Apache-2.0
+@@ -20,7 +18,6 @@ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.utils>=1.0.0                       # Apache-2.0
+ PasteDeploy>=1.5.0
+ posix_ipc
+-pycrypto>=2.6
+ python-ceilometerclient>=1.0.6
+ python-cinderclient>=1.1.0
+ python-glanceclient>=0.14.0
+@@ -32,7 +29,6 @@ python-saharaclient>=0.7.3
+ python-swiftclient>=2.2.0
+ python-troveclient>=1.0.4
+ PyYAML>=3.1.0
+-qpid-python
+ requests>=1.2.1,!=2.4.0
+ Routes>=1.12.3,!=2.0
+ six>=1.7.0
--- a/components/openstack/heat/patches/04-nopycrypto.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/patches/04-nopycrypto.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,38 +1,18 @@
 In-house removal of PyCrypto dependency in Heat. This patch is
 Solaris-specific and not suitable for upstream.
 
-Convert encrypt() and decrypt() to use M2Crypto instead of PyCrypto.
-
---- heat-2013.2.3/heat/common/crypt.py.~1~	2014-04-03 11:44:49.000000000 -0700
-+++ heat-2013.2.3/heat/common/crypt.py	2014-07-07 03:26:19.115102209 -0700
-@@ -14,9 +14,9 @@
- #    under the License.
+--- heat-2014.2.2/heat/common/crypt.py.~1~	2014-12-04 21:02:27.000000000 -0800
++++ heat-2014.2.2/heat/common/crypt.py	2015-01-31 16:56:20.917251751 -0800
+@@ -13,7 +13,7 @@
  
  import base64
+ 
 -from Crypto.Cipher import AES
- from os import urandom
- 
 +from M2Crypto.EVP import Cipher
  from oslo.config import cfg
  
- from heat.openstack.common import log as logging
-@@ -36,9 +36,12 @@
- def encrypt(auth_info):
-     if auth_info is None:
-         return None
--    iv = urandom(AES.block_size)
--    cipher = AES.new(cfg.CONF.auth_encryption_key[:32], AES.MODE_CFB, iv)
--    res = base64.b64encode(iv + cipher.encrypt(auth_info))
-+    iv = urandom(16)
-+    cipher = Cipher(alg='aes_256_cfb', key=cfg.CONF.auth_encryption_key[:32],
-+                    iv=iv, op=1)
-+    padded = cipher.update(auth_info)
-+    padded = padded + cipher.final()
-+    res = base64.b64encode(iv + padded)
-     return res
- 
- 
-@@ -46,7 +49,9 @@
+ from heat.openstack.common.crypto import utils
+@@ -57,7 +57,9 @@ def heat_decrypt(auth_info):
      if auth_info is None:
          return None
      auth = base64.b64decode(auth_info)
@@ -45,3 +25,193 @@
 +    padded = cipher.update(auth[16:])
 +    res = padded + cipher.final()
      return res
+--- heat-2014.2.2/heat/openstack/common/crypto/utils.py.~1~	2014-12-04 21:02:30.000000000 -0800
++++ heat-2014.2.2/heat/openstack/common/crypto/utils.py	2015-01-31 16:56:20.917680985 -0800
+@@ -14,8 +14,8 @@
+ 
+ import base64
+ 
+-from Crypto.Hash import HMAC
+-from Crypto import Random
++from M2Crypto import EVP
++from M2Crypto import Rand
+ import six
+ 
+ from heat.openstack.common.gettextutils import _
+@@ -23,6 +23,24 @@ from heat.openstack.common import import
+ 
+ bchr = six.int2byte
+ 
++# Provide a mapping between the names of hash types used by PyCrypto to
++# their digest sizes and the corresponding algorithm name used by
++# M2Crypto/OpenSSL.
++hashmap = {
++    'SHA224':   (28, 'sha224'),
++    'SHA256':   (32, 'sha256'),
++    'SHA384':   (48, 'sha384'),
++    'SHA512':   (64, 'sha512')
++}
++
++# Provide a mapping between the length of a key and the algorithm name
++# used by M2Crypto/OpenSSL.
++algomap = {
++    16:         'aes_128_cbc',
++    24:         'aes_192_cbc',
++    32:         'aes_256_cbc'
++}
++
+ 
+ class CryptoutilsException(Exception):
+     """Generic Exception for Crypto utilities."""
+@@ -39,6 +57,33 @@ class CipherBlockLengthTooBig(Cryptoutil
+         super(CryptoutilsException, self).__init__(message)
+ 
+ 
++class CipherKeyLengthInvalid(CryptoutilsException):
++    """The encryption key length is invalid for AES-CBC."""
++
++    def __init__(self, keylen):
++        msg = _("Encryption key length of %d is invalid for AES-CBC.")
++        message = msg % keylen
++        super(CryptoutilsException, self).__init__(message)
++
++
++class CipherTypeNotSupported(CryptoutilsException):
++    """The encryption cipher type is not supported."""
++
++    def __init__(self, enctype):
++        msg = _("Encryption cipher type %s is not supported")
++        message = msg % enctype
++        super(CryptoutilsException, self).__init__(message)
++
++
++class HashTypeNotSupported(CryptoutilsException):
++    """The message authentication hash function is not supported."""
++
++    def __init__(self, hashtype):
++        msg = _("Message authentication hash function %s is not supported")
++        message = msg % hashtype
++        super(CryptoutilsException, self).__init__(message)
++
++
+ class HKDFOutputLengthTooLong(CryptoutilsException):
+     """The amount of Key Material asked is too much."""
+ 
+@@ -55,8 +100,10 @@ class HKDF(object):
+     """
+ 
+     def __init__(self, hashtype='SHA256'):
+-        self.hashfn = importutils.import_module('Crypto.Hash.' + hashtype)
+-        self.max_okm_length = 255 * self.hashfn.digest_size
++        if hashtype not in hashmap:
++            raise HashTypeNotSupported(hashtype)
++        (self.digest_size, self.algo) = hashmap[hashtype]
++        self.max_okm_length = 255 * self.digest_size
+ 
+     def extract(self, ikm, salt=None):
+         """An extract function that can be used to derive a robust key given
+@@ -67,9 +114,9 @@ class HKDF(object):
+         :param salt: optional salt value (a non-secret random value)
+         """
+         if salt is None:
+-            salt = b'\x00' * self.hashfn.digest_size
++            salt = b'\x00' * self.digest_size
+ 
+-        return HMAC.new(salt, ikm, self.hashfn).digest()
++        return EVP.hmac(salt, ikm, self.algo)
+ 
+     def expand(self, prk, info, length):
+         """An expand function that will return arbitrary length output that can
+@@ -83,12 +130,12 @@ class HKDF(object):
+         if length > self.max_okm_length:
+             raise HKDFOutputLengthTooLong(length, self.max_okm_length)
+ 
+-        N = (length + self.hashfn.digest_size - 1) // self.hashfn.digest_size
++        N = (length + self.digest_size - 1) // self.digest_size
+ 
+         okm = b""
+         tmp = b""
+         for block in range(1, N + 1):
+-            tmp = HMAC.new(prk, tmp + info + bchr(block), self.hashfn).digest()
++            tmp = EVP.hmac(prk, tmp + info + bchr(block), self.algo)
+             okm += tmp
+ 
+         return okm[:length]
+@@ -108,11 +155,15 @@ class SymmetricCrypto(object):
+     """
+ 
+     def __init__(self, enctype='AES', hashtype='SHA256'):
+-        self.cipher = importutils.import_module('Crypto.Cipher.' + enctype)
+-        self.hashfn = importutils.import_module('Crypto.Hash.' + hashtype)
++        if enctype != 'AES':
++            raise CipherTypeNotSupported(enctype)
++        if hashtype not in hashmap:
++            raise HashTypeNotSupported(hashtype)
++        self.algo = hashmap[hashtype][1]
++        self.block_size = 16
+ 
+     def new_key(self, size):
+-        return Random.new().read(size)
++        return Rand.rand_bytes(size)
+ 
+     def encrypt(self, key, msg, b64encode=True):
+         """Encrypt the provided msg and returns the cyphertext optionally
+@@ -129,19 +180,14 @@ class SymmetricCrypto(object):
+ 
+         :returns enc: a block of encrypted data.
+         """
+-        iv = Random.new().read(self.cipher.block_size)
+-        cipher = self.cipher.new(key, self.cipher.MODE_CBC, iv)
+-
+-        # CBC mode requires a fixed block size. Append padding and length of
+-        # padding.
+-        if self.cipher.block_size > MAX_CB_SIZE:
+-            raise CipherBlockLengthTooBig(self.cipher.block_size, MAX_CB_SIZE)
+-        r = len(msg) % self.cipher.block_size
+-        padlen = self.cipher.block_size - r - 1
+-        msg += b'\x00' * padlen
+-        msg += bchr(padlen)
++        keylen = len(key)
++        if keylen not in algomap:
++            raise CipherKeyLengthInvalid(keylen)
++        iv = Rand.rand_bytes(self.block_size)
++        cipher = EVP.Cipher(algomap[keylen], key, iv, 1)
+ 
+-        enc = iv + cipher.encrypt(msg)
++        enc = iv + cipher.update(msg)
++        enc += cipher.final()
+         if b64encode:
+             enc = base64.b64encode(enc)
+         return enc
+@@ -157,14 +203,16 @@ class SymmetricCrypto(object):
+ 
+         :returns plain: the plaintext message.
+         """
++        keylen = len(key)
++        if keylen not in algomap:
++            raise CipherKeyLengthInvalid(keylen)
+         if b64decode:
+             msg = base64.b64decode(msg)
+-        iv = msg[:self.cipher.block_size]
+-        cipher = self.cipher.new(key, self.cipher.MODE_CBC, iv)
++        iv = msg[:self.block_size]
++        cipher = EVP.Cipher(algomap[keylen], key, iv, 0)
+ 
+-        padded = cipher.decrypt(msg[self.cipher.block_size:])
+-        l = ord(padded[-1:]) + 1
+-        plain = padded[:-l]
++        padded = cipher.update(msg[self.block_size:])
++        plain = padded + cipher.final()
+         return plain
+ 
+     def sign(self, key, msg, b64encode=True):
+@@ -177,8 +225,7 @@ class SymmetricCrypto(object):
+ 
+         :returns out: a base64 encoded signature.
+         """
+-        h = HMAC.new(key, msg, self.hashfn)
+-        out = h.digest()
++        out = EVP.hmac(key, msg, self.algo)
+         if b64encode:
+             out = base64.b64encode(out)
+         return out
--- a/components/openstack/heat/patches/05-neutron-names-required.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/patches/05-neutron-names-required.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -2,21 +2,20 @@
 instead of hyphens on Solaris.  This patch has not yet been submitted
 upstream.
 
---- heat-2013.2.3/heat/engine/resources/neutron/neutron.py.orig     2014-07-22 18:07:26.583195123 -0600
-+++ heat-2013.2.3/heat/engine/resources/neutron/neutron.py  2014-07-22 18:08:49.115350165 -0600
-@@ -13,6 +13,8 @@
+--- heat-2014.2.2/heat/engine/resources/neutron/neutron.py.orig     2014-07-22 18:07:26.583195123 -0600
++++ heat-2014.2.2/heat/engine/resources/neutron/neutron.py  2014-07-22 18:08:49.115350165 -0600
+@@ -11,6 +11,7 @@
  #    License for the specific language governing permissions and limitations
  #    under the License.
 
 +import platform
-+
- from neutronclient.common.exceptions import NeutronClientException
+ import warnings
 
  from heat.common import exception
-@@ -147,3 +149,10 @@
-                     else:
-                         raise
-         return seclist
+@@ -188,3 +189,10 @@ class NeutronResource(resource.Resource)
+     def check_delete_complete(self, delete_task):
+         # if the resource was already deleted, delete_task will be None
+         return delete_task is None or delete_task.step()
 +
 +    def physical_resource_name(self):
 +        name = super(NeutronResource, self).physical_resource_name()
--- a/components/openstack/heat/patches/06-heat-keystone-setup.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/patches/06-heat-keystone-setup.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -4,8 +4,8 @@
 Launchpad bug 1260556. This is a Solaris-specific patch and is not
 suitable for the upstream.
 
---- heat-2013.2.3/bin/heat-keystone-setup.~1~	2014-04-03 11:44:49.000000000 -0700
-+++ heat-2013.2.3/bin/heat-keystone-setup	2014-07-16 20:28:16.316132723 -0700
+--- heat-2014.2.2/bin/heat-keystone-setup.orig	2014-08-07 15:08:53.000000000 -0700
++++ heat-2014.2.2/bin/heat-keystone-setup	2014-09-20 21:44:41.866870651 -0700
 @@ -2,12 +2,14 @@
  
  set +e
@@ -22,26 +22,26 @@
 +    CONFIG_ADMIN_PORT=$(tr -d '[\t ]' < $KEYSTONE_CONF | grep ^admin_port= | cut -d'=' -f2)
  fi
  
- SERVICE_TOKEN=${SERVICE_TOKEN:-$CONFIG_SERVICE_TOKEN}
-@@ -35,7 +37,7 @@
+ SERVICE_TOKEN=${OS_SERVICE_TOKEN:-$CONFIG_SERVICE_TOKEN}
+@@ -102,7 +104,7 @@ get_data() {
      shift 3
  
-     echo $("$@" | \
+     output=$("$@" | \
 -           awk -F'|' \
 +           nawk -F'|' \
                 "! /^\+/ && \$${match_column} ~ \"^ *${regex} *\$\" \
                  { print \$${output_column} }")
- }
-@@ -47,7 +49,7 @@
+ 
+@@ -116,7 +118,7 @@ get_id () {
  get_column_num() {
      local name=$1
      shift
--    $@ | awk -F'|' "NR == 2 { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1) }"
-+    $@ | nawk -F'|' "/^\|/ { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1); exit }"
+-    $@ | awk -F'|' "NR == 2 && /^|/ { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1) }"
++    $@ | nawk -F'|' "NR == 2 && /^\|/ { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1) }"
  }
  
  get_user() {
-@@ -137,7 +139,7 @@
+@@ -208,7 +210,7 @@ delete_endpoint() {
  
      local url=$(get_data 1 "${service_type}[.]publicURL" 2 \
                  get_endpoint $service_type 2>/dev/null | \
@@ -50,10 +50,10 @@
  
      if [ -n "$url" ]; then
          local endpoints=$(get_data 3 $url 1 keystone endpoint-list)
-@@ -199,7 +201,7 @@
- 
-     ADMIN_ROLE=$(get_data 2 admin 1 keystone role-list)
+@@ -280,7 +282,7 @@ keystone_setup() {
+     die_if_not_set $LINENO ADMIN_ROLE "Fail to get ADMIN_ROLE by 'keystone role-list' "
      SERVICE_TENANT=$(get_data 2 service 1 keystone tenant-list)
+     die_if_not_set $LINENO SERVICE_TENANT "Fail to get service tenant 'keystone tenant-list' "
 -    SERVICE_PASSWORD=${SERVICE_PASSWORD:-$OS_PASSWORD}
 +    SERVICE_PASSWORD=${SERVICE_PASSWORD:-heat}
      SERVICE_HOST=${SERVICE_HOST:-localhost}
--- a/components/openstack/heat/patches/07-heat-plugin-defaults.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/patches/07-heat-plugin-defaults.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -2,14 +2,14 @@
 plugin directories searched by Heat.  This patch is Solaris specific
 and not suitable for upstream contribution.
 
---- heat-2013.2.3/heat/common/config.py.orig	2014-07-17 12:48:08.249427463 -0600
-+++ heat-2013.2.3/heat/common/config.py	2014-07-17 12:48:31.499385628 -0600
-@@ -85,7 +85,7 @@
+--- heat-2014.2.2/heat/common/config.py.~1~	2014-12-04 21:02:30.000000000 -0800
++++ heat-2014.2.2/heat/common/config.py	2014-12-13 13:31:30.350162153 -0800
+@@ -94,7 +94,7 @@ engine_opts = [
                 default='heat.engine.nova',
-                help='Driver to use for controlling instances'),
+                help='Driver to use for controlling instances.'),
      cfg.ListOpt('plugin_dirs',
 -                default=['/usr/lib64/heat', '/usr/lib/heat'],
 +                default=['/usr/lib/heat'],
-                 help='List of directories to search for Plugins'),
+                 help='List of directories to search for plug-ins.'),
      cfg.StrOpt('environment_dir',
                 default='/etc/heat/environment.d',
--- a/components/openstack/heat/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/heat/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,11 @@
 library/python-2/eventlet-26
+library/python-2/python-mysql-26
 library/python-2/setuptools-26
+library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
+library/python/iniparse-26
 library/python/oslo.config-26
+library/python/six-26
 runtime/python-26
 shell/bash
 system/core-os
--- a/components/openstack/horizon/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,25 +20,190 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
+include ../../../make-rules/shared-targets.mk
+
+PATCH_EACH_ARCHIVE = 1
 
 COMPONENT_NAME=		horizon
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:de9b87ee62d8b28792399be0fc867ba99618eaaad289cf9842b5c7084e12620f
+    sha256:f639cdb8fc7fd26725d689d42c426f09bbd5a77554910800b1315f182879558e
 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
-IPS_COMPONENT_VERSION=  0.$(COMPONENT_VERSION)
+COMPONENT_BUGDB=	service/horizon
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+COMPONENT_PATCHES=	\
+	01-osprofiler.patch \
+	02-change-angular-imports.patch \
+	03-remove-qunit.patch \
+	04-remove-jasmine.patch \
+	05-disable-unsupported-bootsource.patch \
+	06-remove-security-groups.patch \
+	07-remove-image-source.patch \
+	08-_get_reachable_subnets.patch \
+	11-requirements.patch
+
+TPNO_HORIZON=		21822
+TPNO_ANGULAR=		21640
+TPNO_BOOTSTRAP_DP=	20670
+TPNO_BOOTSTRAP_SCSS=	20671
+TPNO_D3=		20822
+TPNO_FONT_AWESOME=	21641
+TPNO_HOGAN=		21827
+TPNO_JQUERY=		21642
+TPNO_JQUERY_MIGRATE=	13315
+TPNO_JQUERY_UI=		18416
+TPNO_JQUERY_QUICKSEARCH=20396
+TPNO_JQUERY_TABLESORTER=20824
+TPNO_JSENCRYPT=		20397
+TPNO_RICKSHAW=		20673
+TPNO_SPIN=		20674
+
+NUM_EXTRA_ARCHIVES=	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+
+#
+# Starting with Juno, Horizon depends on a number of XStatic modules
+# to deliver the required JavaScript modules.  This delivery method
+# may be changing in future releases, so the XStatic modules for now
+# are built as part of Horizon rather than being stand alone
+# components/packages.  The NUM_EXTRA_ARCHIVES parameter should
+# enumerate the numbers of all the extra XStatic archives to be
+# included in the Horizon build.
+#
+# XStatic itself is only used during the build process and so while it
+# is downloaded and installed in the proto area, none of its
+# components are delivered in the Horizon package itself.
+#
+COMPONENT_NAME_1 =	XStatic
+VERSION_XSTATIC =	1.0.1
+COMPONENT_ARCHIVE_1 =	XStatic-$(VERSION_XSTATIC).tar.gz
+COMPONENT_ARCHIVE_HASH_1 = \
+	sha256:0ec93d7c66ebb9e0d31b664753437dc8634cb66e13310cb47c9eb1e0bc66d726
+COMPONENT_ARCHIVE_URL_1 = $(call pypi_url,1)
+
+COMPONENT_NAME_2 =	XStatic-Angular
+VERSION_ANGULAR =	1.3.7.0
+COMPONENT_ARCHIVE_2 =	XStatic-Angular-$(VERSION_ANGULAR).tar.gz
+COMPONENT_ARCHIVE_HASH_2 = \
+	sha256:7cad216b226399cbe8d2909ed5b9f28d724907b9c9e1e078e6e25d320a3d5dd7
+COMPONENT_ARCHIVE_URL_2 = $(call pypi_url,2)
+PKG_MACROS +=		VERSION_ANGULAR=$(VERSION_ANGULAR)
+
+COMPONENT_NAME_3 =	XStatic-Bootstrap-Datepicker
+VERSION_BOOTSTRAP_DP=	1.3.1.0
+COMPONENT_ARCHIVE_3 =	XStatic-Bootstrap-Datepicker-$(VERSION_BOOTSTRAP_DP).tar.gz
+COMPONENT_ARCHIVE_HASH_3 = \
+	sha256:9edc9b77501001fcee9fbf4bf0a722c263efd928ef928b40081a8269fdd9a944
+COMPONENT_ARCHIVE_URL_3 = $(call pypi_url,3)
+PKG_MACROS +=		VERSION_BOOTSTRAP_DP=$(VERSION_BOOTSTRAP_DP)
+
+COMPONENT_NAME_4 =	XStatic-Bootstrap-SCSS
+VERSION_BOOTSTRAP_SCSS=	3.2.0.0
+COMPONENT_ARCHIVE_4 =	XStatic-Bootstrap-SCSS-$(VERSION_BOOTSTRAP_SCSS).tar.gz
+COMPONENT_ARCHIVE_HASH_4 = \
+	sha256:7e9858737e2e6aac921ec7a3fca627e522901c3061611e154ebc0b8a892c7018
+COMPONENT_ARCHIVE_URL_4 = $(call pypi_url,4)
+PKG_MACROS +=		VERSION_BOOTSTRAP_SCSS=$(VERSION_BOOTSTRAP_SCSS)
+
+COMPONENT_NAME_5 =	XStatic-D3
+VERSION_D3 =		3.1.6.2
+COMPONENT_ARCHIVE_5 =	XStatic-D3-$(VERSION_D3).tar.gz
+COMPONENT_ARCHIVE_HASH_5 = \
+	sha256:46fe521f8dad99f5e20f6702180510c37b81d11f1d78119d308fcec31381f90e
+COMPONENT_ARCHIVE_URL_5 = $(call pypi_url,5)
+PKG_MACROS +=		VERSION_D3=$(VERSION_D3)
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+COMPONENT_NAME_6 =	XStatic-Font-Awesome
+VERSION_FONT_AWESOME =	4.2.0.0
+COMPONENT_ARCHIVE_6 =	XStatic-Font-Awesome-$(VERSION_FONT_AWESOME).tar.gz
+COMPONENT_ARCHIVE_HASH_6 = \
+	sha256:b7fdbf1ed316f3a207eeb9ee1c052820e55b4e31d247d81c8ea059e21f555a73
+COMPONENT_ARCHIVE_URL_6 = $(call pypi_url,6)
+PKG_MACROS +=		VERSION_FONT_AWESOME=$(VERSION_FONT_AWESOME)
+
+COMPONENT_NAME_7 =	XStatic-Hogan
+VERSION_HOGAN =		2.0.0.2
+COMPONENT_ARCHIVE_7 =	XStatic-Hogan-$(VERSION_HOGAN).tar.gz
+COMPONENT_ARCHIVE_HASH_7 = \
+	sha256:5941bc7fb2a09916b8837848e6fc2a13b2dfc271811e9b522c61e1337d5fc2bd
+COMPONENT_ARCHIVE_URL_7 = $(call pypi_url,7)
+PKG_MACROS +=		VERSION_HOGAN=$(VERSION_HOGAN)
+
+COMPONENT_NAME_8 =	XStatic-jQuery
+VERSION_JQUERY =	1.10.2.1
+COMPONENT_ARCHIVE_8 =	XStatic-jQuery-$(VERSION_JQUERY).tar.gz
+COMPONENT_ARCHIVE_HASH_8 = \
+	sha256:83416a6bb86e8534858c4d1ddca45e881c87639da6f78000c28c3a193fe91305
+COMPONENT_ARCHIVE_URL_8 = $(call pypi_url,8)
+PKG_MACROS +=		VERSION_JQUERY=$(VERSION_JQUERY)
+
+COMPONENT_NAME_9 =	XStatic-JQuery-Migrate
+VERSION_JQUERY_MIGRATE=	1.2.1.1
+COMPONENT_ARCHIVE_9 =	XStatic-JQuery-Migrate-$(VERSION_JQUERY_MIGRATE).tar.gz
+COMPONENT_ARCHIVE_HASH_9 = \
+	sha256:e2959b3df49afdddb00d36b74cca727a91b994b9f4edb993d7264731a750900e
+COMPONENT_ARCHIVE_URL_9 = $(call pypi_url,9)
+PKG_MACROS +=		VERSION_JQUERY_MIGRATE=$(VERSION_JQUERY_MIGRATE)
+
+COMPONENT_NAME_10 =	XStatic-jquery-ui
+VERSION_JQUERY_UI =	1.11.0.1
+COMPONENT_ARCHIVE_10 =	XStatic-jquery-ui-$(VERSION_JQUERY_UI).tar.gz
+COMPONENT_ARCHIVE_HASH_10 = \
+	sha256:099b1836eb0d91b8dc98f5b8a6b856a2631d43af0d47f33ef90ee72ed37bda58
+COMPONENT_ARCHIVE_URL_10 = $(call pypi_url,10)
+PKG_MACROS +=		VERSION_JQUERY_UI=$(VERSION_JQUERY_UI)
+
+COMPONENT_NAME_11 =	XStatic-JQuery.quicksearch
+VERSION_JQUERY_QS =	2.0.3.1
+COMPONENT_ARCHIVE_11 =	XStatic-JQuery.quicksearch-$(VERSION_JQUERY_QS).tar.gz
+COMPONENT_ARCHIVE_HASH_11 = \
+	sha256:1271571b420417add56c274fd935e81bfc79e0d54a03559d6ba5ef369f358477
+COMPONENT_ARCHIVE_URL_11 = $(call pypi_url,11)
+PKG_MACROS +=		VERSION_JQUERY_QS=$(VERSION_JQUERY_QS)
+
+COMPONENT_NAME_12 =	XStatic-JQuery.TableSorter
+VERSION_JQUERY_TS =	2.14.5.1
+COMPONENT_ARCHIVE_12 =	XStatic-JQuery.TableSorter-$(VERSION_JQUERY_TS).tar.gz
+COMPONENT_ARCHIVE_HASH_12 = \
+	sha256:3ba24aecd9a3dc71a79dd4096fa5a8a041c3a7b892c61d05e6e46de0605070f0
+COMPONENT_ARCHIVE_URL_12 = $(call pypi_url,12)
+PKG_MACROS +=		VERSION_JQUERY_TS=$(VERSION_JQUERY_TS)
+
+COMPONENT_NAME_13 =	XStatic-JSEncrypt
+VERSION_JSENCRYPT =	2.0.0.2
+COMPONENT_ARCHIVE_13 =	XStatic-JSEncrypt-$(VERSION_JSENCRYPT).tar.gz
+COMPONENT_ARCHIVE_HASH_13 = \
+	sha256:5852892afc6f80c7848f4110b6dad190a54aeb908271d67aaeae9d966f4a26b5
+COMPONENT_ARCHIVE_URL_13 = $(call pypi_url,13)
+PKG_MACROS +=		VERSION_JSENCRYPT=$(VERSION_JSENCRYPT)
+
+COMPONENT_NAME_14 =	XStatic-Rickshaw
+VERSION_RICKSHAW =	1.5.0.0
+COMPONENT_ARCHIVE_14 =	XStatic-Rickshaw-$(VERSION_RICKSHAW).tar.gz
+COMPONENT_ARCHIVE_HASH_14 = \
+	sha256:147574228757254442700a9eea5150f14acb1224ef0612f896b663ab58406de8
+COMPONENT_ARCHIVE_URL_14 = $(call pypi_url,14)
+PKG_MACROS +=		VERSION_RICKSHAW=$(VERSION_RICKSHAW)
+
+COMPONENT_NAME_15 =	XStatic-Spin
+VERSION_SPIN =		1.2.5.2
+COMPONENT_ARCHIVE_15 =	XStatic-Spin-$(VERSION_SPIN).tar.gz
+COMPONENT_ARCHIVE_HASH_15 = \
+	sha256:7f46ef0e45e047019ba6eda22c432fb96f681b97bbe7f1749aa9209e07727192
+COMPONENT_ARCHIVE_URL_15 = $(call pypi_url,15)
+PKG_MACROS +=		VERSION_SPIN=$(VERSION_SPIN)
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,25 +211,98 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+# Django's manage.py needs to be run with Python 2.6, since that's what this
+# ecosystem runs under right now.
+PYTHON_VERSION=		2.6
+
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
+PROTO_PYTHON_LIB =	$(PROTO_DIR)$(PYTHON_LIB)
+
+# Copy the Oracle branding files and Django app customizations into place
+COMPONENT_POST_INSTALL_ACTION += \
+	($(MKDIR) $(PROTO_PYTHON_LIB)/openstack_dashboard/templates/solaris; \
+	 $(CP) files/branding/css/solaris.css \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard/static/dashboard/css; \
+	 $(CP) files/branding/img/* \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard/static/dashboard/img; \
+	 $(CP) files/branding/theme/_stylesheets.html \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard/templates/solaris; \
+	 $(CP) files/overrides.py $(PROTO_PYTHON_LIB)/openstack_dashboard);
+
+# Generate .pyc files for the files in the proto directory
+COMPONENT_POST_INSTALL_ACTION += \
+	$(PYTHON) -m compileall $(PROTO_PYTHON_LIB);
+
+# Collect the JavaScript files and compress the static assets
 COMPONENT_POST_INSTALL_ACTION += \
-	($(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/css; \
-	 $(CP) files/branding/css/solaris.css $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/css; \
-	 $(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/img; \
-	 $(CP) files/branding/img/* $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/img; \
-	 $(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/openstack_dashboard/static/solaris/theme; \
-	 $(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)
-	
+	(set -e; $(CP) $(SOURCE_DIR)/manage.py \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard; \
+	 $(TOUCH) $(PROTO_PYTHON_LIB)/xstatic/__init__.py; \
+	 $(TOUCH) $(PROTO_PYTHON_LIB)/xstatic/pkg/__init__.py; \
+	 cd $(PROTO_PYTHON_LIB)/openstack_dashboard; \
+	 $(ENV) PYTHONPATH=$(PROTO_PYTHON_LIB) ./manage.py \
+	     collectstatic --noinput; \
+	 $(ENV) PYTHONPATH=$(PROTO_PYTHON_LIB) ./manage.py compress --force; \
+	 $(CP) -R $(PROTO_PYTHON_LIB)/static \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard; \
+	 $(RM) -r \
+	     $(PROTO_PYTHON_LIB)/XStatic* \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard/local/.secret_key_store \
+	     $(PROTO_PYTHON_LIB)/openstack_dashboard/manage.py \
+	     $(PROTO_PYTHON_LIB)/static \
+	     $(PROTO_PYTHON_LIB)/xstatic); (( $$? )) && exit 1;
+
+# Patch openstack_dashboard/settings.py to remove the xstatic imports
+# and use.  This is done after 'gmake prep' because we need the
+# xstatic imports for static asset collection.
+COMPONENT_POST_INSTALL_ACTION += \
+	 $(GPATCH) -d $(PROTO_DIR) $(GPATCH_FLAGS) \
+	     < patches/99-remove.xstatic.patch
+
+#
+# The xstatic target builds each XStatic component alongside Horizon.
+# This is done because the Django script which collects
+# the JavaScript libraries and compresses the static assets
+# (manage.py) requires the packages be "installed".  Rather than
+# forcing a CBE update for any revision of any XStatic module, we use
+# what's specified above.
+#
+# This extra work is done at package build time rather than when the
+# application runs because a) compressing the assets ahead of time
+# makes things faster and b) this allows the package to be entirely
+# contained in /usr rather than having a separate spot in /var for the
+# webservd user to write compressed assets to as they get used.
+#
+.PHONY:	xstatic
+xstatic:	$(PROTO_DIR) build
+	for xs_archive in $$(ls -d XStatic-* | grep -v .tar.gz); do \
+		cd $$xs_archive; \
+		$(ENV) $(PYTHON.$(BITS)) ./setup.py build; \
+		$(ENV) $(PYTHON.$(BITS)) ./setup.py install \
+		    --force \
+		    --install-data=$(PYTHON_DATA) \
+		    --install-lib=$(PYTHON_LIB) \
+		    --install-platlib=$(PYTHON_LIB) \
+		    --install-purelib=$(PYTHON_LIB) \
+		    --root $(PROTO_DIR); \
+		cd ../; \
+	done
+
 # common targets
 build:		$(BUILD_NO_ARCH)
 
-install:	$(INSTALL_NO_ARCH)
+# make sure all of the xstatic modules are built
+install:	$(INSTALL_NO_ARCH) xstatic
 
 test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
 
+clean::
+	gfind $(COMPONENT_DIR) -maxdepth 1 -type d -name "XStatic*" \
+	    -exec rm -r {} \;
+
 include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/angular.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/bootstrap-datepicker.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,218 @@
+The following applies to all products licensed under the Apache 2.0 License:
+
+You may not use the identified files except in compliance with the
+Apache License, Version 2.0 (the "License.")
+ 
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0.  A copy of the license is
+also reproduced below.
+
+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.
+
+		                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/bootstrap-scss.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,19 @@
+Copyright (c) 2011-2014 Twitter, Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/d3.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,26 @@
+Copyright (c) 2013, Michael Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+* The name Michael Bostock may not be used to endorse or promote products
+derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- a/components/openstack/horizon/files/branding/css/solaris.css	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/branding/css/solaris.css	Mon Apr 20 12:35:51 2015 -0700
@@ -1,1712 +1,9161 @@
 /*
- * Bootstrap v2.0.1
+ *  Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you
+ *  may not use this file except in compliance with the License. You may
+ *  obtain a copy of the License at
  *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
+ *  http://www.apache.org/licenses/LICENSE-2.0
  *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ *  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.
  */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-audio:not([controls]) {
-  display: none;
-}
+
 html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
+  font-family: sans-serif;
   -ms-text-size-adjust: 100%;
-}
-a:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-a:hover,
-a:active {
-  outline: 0;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  max-width: 100%;
-  height: auto;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button,
-input {
-  *overflow: visible;
-  line-height: normal;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  cursor: pointer;
-  -webkit-appearance: button;
-}
-input[type="search"] {
-  -webkit-appearance: textfield;
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-.clearfix {
-  *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-}
-.clearfix:after {
-  clear: both;
-}
-*:focus { outline: 0; }
+  -webkit-text-size-adjust: 100%;
+}
 
 body {
-  margin: 0;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 18px;
-  color: #333333;
-  background-color: #ffffff;
-}
+	margin: 0;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+
+audio, canvas, progress, video {
+	display: inline-block;
+	vertical-align: baseline; 
+}
+
+audio:not([controls]) {
+	display: none;
+	height: 0; 
+}
+
+[hidden], template {
+	display: none; 
+}
+
 a {
-  color: #005D9D;
-  text-decoration: none;
-}
-a:hover {
-  color: #005D9D;
-  text-decoration: underline;
-}
-.row {
-  margin-left: -20px;
-  *zoom: 1;
-}
-.row:before,
-.row:after {
-  display: table;
-  content: "";
-}
-.row:after {
-  clear: both;
-}
-[class*="span"] {
-  float: left;
-  margin-left: 20px;
-}
-.span1 {
-  width: 60px;
-}
-.span2 {
-  width: 140px;
-}
-.span3 {
-  width: 220px;
-}
-.span4 {
-  width: 300px;
-}
-.span5 {
-  width: 380px;
-}
-.span6 {
-  width: 460px;
-}
-.span7 {
-  width: 540px;
-}
-.span8 {
-  width: 620px;
-}
-.span9 {
-  width: 700px;
-}
-.span10 {
-  width: 780px;
-}
-.span11 {
-  width: 860px;
-}
-.span12,
-.container {
-  width: 940px;
-}
-.offset1 {
-  margin-left: 100px;
-}
-.offset2 {
-  margin-left: 180px;
-}
-.offset3 {
-  margin-left: 260px;
-}
-.offset4 {
-  margin-left: 340px;
-}
-.offset5 {
-  margin-left: 420px;
-}
-.offset6 {
-  margin-left: 500px;
-}
-.offset7 {
-  margin-left: 580px;
-}
-.offset8 {
-  margin-left: 660px;
-}
-.offset9 {
-  margin-left: 740px;
-}
-.offset10 {
-  margin-left: 820px;
-}
-.offset11 {
-  margin-left: 900px;
-}
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-.row-fluid:before,
-.row-fluid:after {
-  display: table;
-  content: "";
-}
-.row-fluid:after {
-  clear: both;
-}
-.row-fluid > [class*="span"] {
-  float: left;
-  margin-left: 2.127659574%;
-}
-.row-fluid > [class*="span"]:first-child {
-  margin-left: 0;
-}
-.row-fluid > .span1 {
-  width: 6.382978723%;
-}
-.row-fluid > .span2 {
-  width: 14.89361702%;
-}
-.row-fluid > .span3 {
-  width: 23.404255317%;
-}
-.row-fluid > .span4 {
-  width: 31.914893614%;
-}
-.row-fluid > .span5 {
-  width: 40.425531911%;
-}
-.row-fluid > .span6 {
-  width: 48.93617020799999%;
-}
-.row-fluid > .span7 {
-  width: 57.446808505%;
-}
-.row-fluid > .span8 {
-  width: 65.95744680199999%;
-}
-.row-fluid > .span9 {
-  width: 74.468085099%;
-}
-.row-fluid > .span10 {
-  width: 82.97872339599999%;
-}
-.row-fluid > .span11 {
-  width: 91.489361693%;
-}
-.row-fluid > .span12 {
-  width: 99.99999998999999%;
-}
-.container {
-  width: 940px;
-  margin-left: auto;
-  margin-right: auto;
-  *zoom: 1;
-}
-.container:before,
-.container:after {
-  display: table;
-  content: "";
-}
-.container:after {
-  clear: both;
-}
-.container-fluid {
-  padding-left: 20px;
-  padding-right: 20px;
-  *zoom: 1;
-}
-.container-fluid:before,
-.container-fluid:after {
-  display: table;
-  content: "";
-}
-.container-fluid:after {
-  clear: both;
-}
+	background: transparent; 
+}
+
+a:active, a:hover {
+	outline: 0; 
+}
+
+abbr[title] {
+	border-bottom: 1px dotted; }
+
+b, strong {
+	font-weight: bold; }
+
+dfn {
+	font-style: italic; }
+
+h1 {
+	font-size: 2em;
+	margin: 0.67em 0; }
+
+mark {
+	background: #ff0;
+	color: #000; }
+
+small {
+font-size: 80%; }
+
+sub, sup {
+	font-size: 75%;
+	line-height: 0;
+                              position: relative;
+                              vertical-align: baseline; }
+
+sup {
+	top: -0.5em; }
+
+sub {
+	bottom: -0.25em; }
+
+img {
+	border: 0; }
+	
+svg:not(:root) {
+	overflow: hidden; }
+
+figure {
+	margin: 1em 40px; }
+
+hr {
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+	height: 0; }
+
+pre {
+	overflow: auto; }
+
+code, kbd, pre, samp {
+	font-family: monospace, monospace;
+	font-size: 1em; }
+
+button, input, optgroup, select, textarea {
+	color: inherit;
+	font: inherit;
+	margin: 0; }
+
+button {
+	overflow: visible; }
+
+button, select {
+	text-transform: none; }
+
+button, html input[type="button"], 
+input[type="reset"], 
+input[type="submit"] {
+	-webkit-appearance: button;
+	cursor: pointer; }
+
+button[disabled], html input[disabled] {
+	cursor: default; }
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+	border: 0;
+	padding: 0; }
+
+input {
+	line-height: normal; }
+
+input[type="checkbox"], input[type="radio"] {
+	box-sizing: border-box;
+	padding: 0; }
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+	height: auto; }
+
+input[type="search"] {
+	-webkit-appearance: textfield;
+	-moz-box-sizing: content-box;
+	-webkit-box-sizing: content-box;
+	box-sizing: content-box; }
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+	-webkit-appearance: none; }
+
+fieldset {
+	border: 1px solid #c0c0c0;
+	margin: 0 2px;
+	padding: 0.35em 0.625em 0.75em; }
+
+legend {
+	border: 0;
+	padding: 0; }
+
+textarea {
+	overflow: auto; }
+
+optgroup {
+	font-weight: bold; }
+
+table {
+	border-collapse: collapse;
+	border-spacing: 0; }
+
+td, th {
+	padding: 0; 
+}
+	
+@media print {
+	* {
+		text-shadow: none !important;
+	    color: #000 !important;
+	    background: transparent !important;
+	    box-shadow: none !important;   
+	    }
+	a, a:visited {
+		text-decoration: underline;   
+	}
+	a[href]:after {
+	content: " (" attr(href) ")";   }
+	abbr[title]:after {
+		content: " (" attr(title) ")";   }
+	a[href^="javascript:"]:after, a[href^="#"]:after {
+	content: "";   }
+	pre, blockquote {
+		border: 1px solid #999;
+	    page-break-inside: avoid;   }
+	thead {
+		display: table-header-group;   }
+	tr, img {
+		page-break-inside: avoid;   }
+	img {
+		max-width: 100% !important;   }
+	p, h2, h3 {
+		orphans: 3;
+	   	widows: 3;   }
+	h2, h3 {
+		page-break-after: avoid;   }
+	select {
+		background: #fff !important;   }
+		.navbar {
+		display: none;   }
+	  	.table td, .table th {
+		background-color: #fff !important;  
+	}
+	.btn > .caret, .dropup > .btn > .caret {
+		border-top-color: #000 !important;   }
+	.label {
+		border: 1px solid #000;   }
+	.table {
+		border-collapse: collapse !important;   
+	}
+	.table-bordered th, .table-bordered td {
+		border: 1px solid #ddd !important;   
+	}
+}
+
+@font-face {
+  font-family: 'Glyphicons Halflings';
+  src: url('/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot?7ad17c6085de');
+  src: url('/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot?&7ad17c6085de#iefix') format('embedded-opentype'),
+    url('/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff?68ed1dac06bf') format('woff'),
+    url('/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf?e49d52e74b76') format('truetype'),
+    url('/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.svg?32941d633004#glyphicons_halflingsregular') format('svg'); }
+
+.glyphicon, .membership .role_dropdown li i {
+	position: relative;
+	top: 1px;
+	display: inline-block;
+	font-family: 'Glyphicons Halflings';
+	font-style: normal;
+	font-weight: normal;
+	line-height: 1;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale; }
+
+.glyphicon-asterisk:before {
+	content: "\2a"; }
+
+.glyphicon-plus:before {
+  content: "\2b"; }
+
+.glyphicon-euro:before {
+  content: "\20ac"; }
+
+.glyphicon-minus:before {
+  content: "\2212"; }
+
+.glyphicon-cloud:before {
+  content: "\2601"; }
+
+.glyphicon-envelope:before {
+  content: "\2709"; }
+
+.glyphicon-pencil:before {
+  content: "\270f"; }
+
+.glyphicon-glass:before {
+  content: "\e001"; }
+
+.glyphicon-music:before {
+  content: "\e002"; }
+
+.glyphicon-search:before {
+  content: "\e003"; }
+
+.glyphicon-heart:before {
+  content: "\e005"; }
+
+.glyphicon-star:before {
+  content: "\e006"; }
+
+.glyphicon-star-empty:before {
+  content: "\e007"; }
+
+.glyphicon-user:before {
+  content: "\e008"; }
+
+.glyphicon-film:before {
+  content: "\e009"; }
+
+.glyphicon-th-large:before {
+  content: "\e010"; }
+
+.glyphicon-th:before {
+  content: "\e011"; }
+
+.glyphicon-th-list:before {
+  content: "\e012"; }
+
+.glyphicon-ok:before {
+  content: "\e013"; }
+
+.glyphicon-remove:before {
+  content: "\e014"; }
+
+.glyphicon-zoom-in:before {
+  content: "\e015"; }
+
+.glyphicon-zoom-out:before {
+  content: "\e016"; }
+
+.glyphicon-off:before {
+  content: "\e017"; }
+
+.glyphicon-signal:before {
+  content: "\e018"; }
+
+.glyphicon-cog:before {
+  content: "\e019"; 
+  margin: 0px 4px 0px 0px;  
+}
+
+.glyphicon-trash:before {
+  content: "\e020"; }
+
+.glyphicon-home:before {
+  content: "\e021"; }
+
+.glyphicon-file:before {
+  content: "\e022"; }
+
+.glyphicon-time:before {
+  content: "\e023"; }
+
+.glyphicon-road:before {
+  content: "\e024"; }
+
+.glyphicon-download-alt:before {
+  content: "\e025"; }
+
+.glyphicon-download:before {
+  content: "\e026"; }
+
+.glyphicon-upload:before {
+  content: "\e027"; }
+
+.glyphicon-inbox:before {
+  content: "\e028"; }
+
+.glyphicon-play-circle:before {
+  content: "\e029"; }
+
+.glyphicon-repeat:before {
+  content: "\e030"; }
+
+.glyphicon-refresh:before {
+  content: "\e031"; }
+
+.glyphicon-list-alt:before {
+  /*content: "\e032"; */
+}
+
+.glyphicon-lock:before {
+  content: "\e033"; }
+
+.glyphicon-flag:before {
+  content: "\e034"; }
+
+.glyphicon-headphones:before {
+  content: "\e035"; }
+
+.glyphicon-volume-off:before {
+  content: "\e036"; }
+
+.glyphicon-volume-down:before {
+  content: "\e037"; }
+
+.glyphicon-volume-up:before {
+  content: "\e038"; }
+
+.glyphicon-qrcode:before {
+  content: "\e039"; }
+
+.glyphicon-barcode:before {
+  content: "\e040"; }
+
+.glyphicon-tag:before {
+  content: "\e041"; }
+
+.glyphicon-tags:before {
+  content: "\e042"; }
+
+.glyphicon-book:before {
+  content: "\e043"; }
+
+.glyphicon-bookmark:before {
+  content: "\e044"; }
+
+.glyphicon-print:before {
+  content: "\e045"; }
+
+.glyphicon-camera:before {
+  content: "\e046"; }
+
+.glyphicon-font:before {
+  content: "\e047"; }
+
+.glyphicon-bold:before {
+  content: "\e048"; }
+
+.glyphicon-italic:before {
+  content: "\e049"; }
+
+.glyphicon-text-height:before {
+  content: "\e050"; }
+
+.glyphicon-text-width:before {
+  content: "\e051"; }
+
+.glyphicon-align-left:before {
+  content: "\e052"; }
+
+.glyphicon-align-center:before {
+  content: "\e053"; }
+
+.glyphicon-align-right:before {
+  content: "\e054"; }
+
+.glyphicon-align-justify:before {
+  content: "\e055"; }
+
+.glyphicon-list:before {
+  content: "\e056"; }
+
+.glyphicon-indent-left:before {
+  content: "\e057"; }
+
+.glyphicon-indent-right:before {
+  content: "\e058"; }
+
+.glyphicon-facetime-video:before {
+  content: "\e059"; }
+
+.glyphicon-picture:before {
+  content: "\e060"; }
+
+.glyphicon-map-marker:before {
+  content: "\e062"; }
+
+.glyphicon-adjust:before {
+  content: "\e063"; }
+
+.glyphicon-tint:before {
+  content: "\e064"; }
+
+.glyphicon-edit:before {
+  content: "\e065"; }
+
+.glyphicon-share:before {
+  content: "\e066"; }
+
+.glyphicon-check:before {
+  content: "\e067"; }
+
+.glyphicon-move:before {
+  content: "\e068"; }
+
+.glyphicon-step-backward:before {
+  content: "\e069"; }
+
+.glyphicon-fast-backward:before {
+  content: "\e070"; }
+
+.glyphicon-backward:before {
+  content: "\e071"; }
+
+.glyphicon-play:before {
+  content: "\e072"; }
+
+.glyphicon-pause:before {
+  content: "\e073"; }
+
+.glyphicon-stop:before {
+  content: "\e074"; }
+
+.glyphicon-forward:before {
+  content: "\e075"; }
+
+.glyphicon-fast-forward:before {
+  content: "\e076"; }
+
+.glyphicon-step-forward:before {
+  content: "\e077"; }
+
+.glyphicon-eject:before {
+  content: "\e078"; }
+
+.glyphicon-chevron-left:before {
+  content: "\e079"; }
+
+.glyphicon-chevron-right:before {
+  content: "\e080"; }
+
+.glyphicon-plus-sign:before {
+  content: "\e081"; }
+
+.glyphicon-minus-sign:before {
+  content: "\e082"; }
+
+.glyphicon-remove-sign:before {
+  content: "\e083"; }
+
+.glyphicon-ok-sign:before {
+  content: "\e084"; }
+
+.glyphicon-question-sign:before {
+  content: "\e085"; }
+
+.glyphicon-info-sign:before {
+  content: "\e086"; }
+
+.glyphicon-screenshot:before {
+  content: "\e087"; }
+
+.glyphicon-remove-circle:before {
+  content: "\e088"; }
+
+.glyphicon-ok-circle:before {
+  content: "\e089"; }
+
+.glyphicon-ban-circle:before {
+  content: "\e090"; }
+
+.glyphicon-arrow-left:before {
+  content: "\e091"; }
+
+.glyphicon-arrow-right:before {
+  content: "\e092"; }
+
+.glyphicon-arrow-up:before {
+  content: "\e093"; }
+
+.glyphicon-arrow-down:before {
+  content: "\e094"; }
+
+.glyphicon-share-alt:before {
+  content: "\e095"; }
+
+.glyphicon-resize-full:before {
+  content: "\e096"; }
+
+.glyphicon-resize-small:before {
+  content: "\e097"; }
+
+.glyphicon-exclamation-sign:before {
+  content: "\e101"; }
+
+.glyphicon-gift:before {
+  content: "\e102"; }
+
+.glyphicon-leaf:before {
+  content: "\e103"; }
+
+.glyphicon-fire:before {
+  content: "\e104"; }
+
+.glyphicon-eye-open:before {
+  content: "\e105"; }
+
+.glyphicon-eye-close:before {
+  content: "\e106"; }
+
+.glyphicon-warning-sign:before {
+  content: "\e107"; }
+
+.glyphicon-plane:before {
+  content: "\e108"; }
+
+.glyphicon-calendar:before {
+  content: "\e109"; }
+
+.glyphicon-random:before {
+  content: "\e110"; }
+
+.glyphicon-comment:before {
+  content: "\e111"; }
+
+.glyphicon-magnet:before {
+  content: "\e112"; }
+
+.glyphicon-chevron-up:before {
+  content: "\e113"; }
+
+.glyphicon-chevron-down:before {
+  content: "\e114"; }
+
+.glyphicon-retweet:before {
+  content: "\e115"; }
+
+.glyphicon-shopping-cart:before {
+  content: "\e116"; }
+
+.glyphicon-folder-close:before {
+  content: "\e117"; }
+
+.glyphicon-folder-open:before {
+  content: "\e118"; }
+
+.glyphicon-resize-vertical:before {
+  content: "\e119"; }
+
+.glyphicon-resize-horizontal:before {
+  content: "\e120"; }
+
+.glyphicon-hdd:before {
+  content: "\e121"; }
+
+.glyphicon-bullhorn:before {
+  content: "\e122"; }
+
+.glyphicon-bell:before {
+  content: "\e123"; }
+
+.glyphicon-certificate:before {
+  content: "\e124"; }
+
+.glyphicon-thumbs-up:before {
+  content: "\e125"; }
+
+.glyphicon-thumbs-down:before {
+  content: "\e126"; }
+
+.glyphicon-hand-right:before {
+  content: "\e127"; }
+
+.glyphicon-hand-left:before {
+  content: "\e128"; }
+
+.glyphicon-hand-up:before {
+  content: "\e129"; }
+
+.glyphicon-hand-down:before {
+  content: "\e130"; }
+
+.glyphicon-circle-arrow-right:before {
+  content: "\e131"; }
+
+.glyphicon-circle-arrow-left:before {
+  content: "\e132"; }
+
+.glyphicon-circle-arrow-up:before {
+  content: "\e133"; }
+
+.glyphicon-circle-arrow-down:before {
+  content: "\e134"; }
+
+.glyphicon-globe:before {
+  content: "\e135"; }
+
+.glyphicon-wrench:before {
+  content: "\e136"; }
+
+.glyphicon-tasks:before {
+  content: "\e137"; }
+
+.glyphicon-filter:before {
+  content: "\e138"; }
+
+.glyphicon-briefcase:before {
+  content: "\e139"; }
+
+.glyphicon-fullscreen:before {
+  content: "\e140"; }
+
+.glyphicon-dashboard:before {
+  content: "\e141"; }
+
+.glyphicon-paperclip:before {
+  content: "\e142"; }
+
+.glyphicon-heart-empty:before {
+  content: "\e143"; }
+
+.glyphicon-link:before {
+  content: "\e144"; }
+
+.glyphicon-phone:before {
+  content: "\e145"; }
+
+.glyphicon-pushpin:before {
+  content: "\e146"; }
+
+.glyphicon-usd:before {
+  content: "\e148"; }
+
+.glyphicon-gbp:before {
+  content: "\e149"; }
+
+.glyphicon-sort:before {
+  content: "\e150"; }
+
+.glyphicon-sort-by-alphabet:before {
+  content: "\e151"; }
+
+.glyphicon-sort-by-alphabet-alt:before {
+  content: "\e152"; }
+
+.glyphicon-sort-by-order:before {
+  content: "\e153"; }
+
+.glyphicon-sort-by-order-alt:before {
+  content: "\e154"; }
+
+.glyphicon-sort-by-attributes:before {
+  content: "\e155"; }
+
+.glyphicon-sort-by-attributes-alt:before {
+  content: "\e156"; }
+
+.glyphicon-unchecked:before {
+  content: "\e157"; }
+
+.glyphicon-expand:before {
+  content: "\e158"; }
+
+.glyphicon-collapse-down:before {
+  content: "\e159"; }
+
+.glyphicon-collapse-up:before {
+  content: "\e160"; }
+
+.glyphicon-log-in:before {
+  content: "\e161"; }
+
+.glyphicon-flash:before {
+  content: "\e162"; }
+
+.glyphicon-log-out:before {
+  content: "\e163"; }
+
+.glyphicon-new-window:before {
+  content: "\e164"; }
+
+.glyphicon-record:before {
+  content: "\e165"; }
+
+.glyphicon-save:before {
+  content: "\e166"; }
+
+.glyphicon-open:before {
+  content: "\e167"; }
+
+.glyphicon-saved:before {
+  content: "\e168"; }
+
+.glyphicon-import:before {
+  content: "\e169"; }
+
+.glyphicon-export:before {
+  content: "\e170"; }
+
+.glyphicon-send:before {
+  content: "\e171"; }
+
+.glyphicon-floppy-disk:before {
+  content: "\e172"; }
+
+.glyphicon-floppy-saved:before {
+  content: "\e173"; }
+
+.glyphicon-floppy-remove:before {
+  content: "\e174"; }
+
+.glyphicon-floppy-save:before {
+  content: "\e175"; }
+
+.glyphicon-floppy-open:before {
+  content: "\e176"; }
+
+.glyphicon-credit-card:before {
+  content: "\e177"; }
+
+.glyphicon-transfer:before {
+  content: "\e178"; }
+
+.glyphicon-cutlery:before {
+  content: "\e179"; }
+
+.glyphicon-header:before {
+  content: "\e180"; }
+
+.glyphicon-compressed:before {
+  content: "\e181"; }
+
+.glyphicon-earphone:before {
+  content: "\e182"; }
+
+.glyphicon-phone-alt:before {
+  content: "\e183"; }
+
+.glyphicon-tower:before {
+  content: "\e184"; }
+
+.glyphicon-stats:before {
+  content: "\e185"; }
+
+.glyphicon-sd-video:before {
+  content: "\e186"; }
+
+.glyphicon-hd-video:before {
+  content: "\e187"; }
+
+.glyphicon-subtitles:before {
+  content: "\e188"; }
+
+.glyphicon-sound-stereo:before {
+  content: "\e189"; }
+
+.glyphicon-sound-dolby:before {
+  content: "\e190"; }
+
+.glyphicon-sound-5-1:before {
+  content: "\e191"; }
+
+.glyphicon-sound-6-1:before {
+  content: "\e192"; }
+
+.glyphicon-sound-7-1:before {
+  content: "\e193"; }
+
+.glyphicon-copyright-mark:before {
+  content: "\e194"; }
+
+.glyphicon-registration-mark:before {
+  content: "\e195"; }
+
+.glyphicon-cloud-download:before {
+  content: "\e197"; }
+
+.glyphicon-cloud-upload:before {
+  content: "\e198"; }
+
+.glyphicon-tree-conifer:before {
+  content: "\e199"; }
+
+.glyphicon-tree-deciduous:before {
+  content: "\e200"; }
+
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box; }
+
+*:before, *:after {
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box; }
+
+html {
+	font-size: 10px;
+	-webkit-tap-highlight-color: transparent; }
+
+body {
+	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+	font-size: 13px;
+	line-height: 1.5;
+	color: #333;
+	background-color: #fff; }
+
+input, button, select, textarea {
+	font-family: inherit;
+	font-size: inherit;
+	line-height: inherit; }
+a {
+	color: #005D9D;
+	text-decoration: none;
+}
+a:hover, a:focus  {
+	color: #005D9D;
+	text-decoration: underline;
+}    
+a:focus {
+    outline: thin dotted;
+	outline: 5px auto -webkit-focus-ring-color;
+	outline-offset: -2px; }
+
+figure {
+	margin: 0; }
+
+img {
+	vertical-align: middle; }
+
+.img-responsive {
+  display: block;
+  width: 100% \9;
+  max-width: 100%;
+  height: auto; }
+
+.img-rounded {
+    border-radius: 6px; }
+
+.img-thumbnail {
+	padding: 4px;
+	line-height: 1.5;
+	background-color: #fff;
+	border: 1px solid #ddd;
+	border-radius: 4px;
+	-webkit-transition: all 0.2s ease-in-out;
+	-o-transition: all 0.2s ease-in-out;
+	transition: all 0.2s ease-in-out;
+	display: inline-block;
+	width: 100% \9;
+	max-width: 100%;
+	height: auto; }
+
+.img-circle {
+	border-radius: 50%; }
+
+hr {
+    margin-top: 18px;
+    margin-bottom: 18px;
+    border: 0;
+    border-top: 1px solid #eee; }
+
+.sr-only {
+    position: absolute;
+    width: 1px;
+    height: 1px;
+    margin: -1px;
+    padding: 0;
+    overflow: hidden;
+    clip: rect(0, 0, 0, 0);
+    border: 0; }
+
+.sr-only-focusable:active, .sr-only-focusable:focus {
+    position: static;
+    width: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    clip: auto; }
+    
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+  font-weight: 600;
+  line-height: 1.2;
+  color: #333333;  
+}
+  h1 small, h1 .small, h2 small, h2 .small, h3 small, h3 .small, h4 small,
+  h4 .small, h5 small, h5 .small, h6 small, h6 .small, .h1 small, .h1 .small,
+  .h2 small, .h2 .small, .h3 small, .h3 .small, .h4 small, .h4 .small, .h5 small,
+  .h5 .small, .h6 small, .h6 .small {
+    font-weight: normal;
+    line-height: 1;
+    color: #333333; }
+
+h1, .h1, h2, .h2, h3, .h3 {
+  margin-top: 18px;
+  margin-bottom: 9px; }
+  h1 small, h1 .small, .h1 small, .h1 .small, h2 small, h2 .small, .h2 small,
+  .h2 .small, h3 small, h3 .small, .h3 small, .h3 .small {
+    font-size: 65%; }
+
+h4, .h4, h5, .h5, h6, .h6 {
+  margin-top: 9px;
+  margin-bottom: 9px; }
+  h4 small, h4 .small, .h4 small, .h4 .small, h5 small, h5 .small, .h5 small,
+  .h5 .small, h6 small, h6 .small, .h6 small, .h6 .small {
+    font-size: 75%; }
+
+h1, .h1 {
+  font-size: 33px; }
+
+h2, .h2 {
+	font-size: 27px; }
+
+h3, .h3 {
+	font-size: 23px; }
+
+h4, .h4 {
+	font-size: 17px; }
+
+h5, .h5 {
+	font-size: 13px; }
+
+h6, .h6 {
+	font-size: 12px; }
+
 p {
-  margin: 0 0 9px;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 18px;
-}
-p small {
-  font-size: 11px;
-  color: #999999;
-}
+	margin: 0 0 9px; }
+
+#container {
+	width: 100%;
+	height: 100%;
+}
+
 .lead {
-  margin-bottom: 18px;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 27px;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin: 0;
-  font-weight: bold;
-  color: #333333;
-  text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
-  font-weight: normal;
-  color: #999999;
-}
-h1 {
-  font-size: 30px;
-  line-height: 36px;
-}
-h1 small {
-  font-size: 18px;
-}
-h2 {
-  font-size: 24px;
-  line-height: 36px;
-}
-h2 small {
-  font-size: 18px;
-}
-h3 {
-  line-height: 27px;
-  font-size: 16px;
-}
-h3 small {
-  font-size: 14px;
-}
-h4,
-h5,
-h6 {
-  line-height: 18px;
-}
-h4 {
-  font-size: 14px;
-}
-h4 small {
-  font-size: 12px;
-}
-h5 {
-  font-size: 12px;
-}
-h6 {
-  font-size: 11px;
-  color: #999999;
-  text-transform: uppercase;
-}
+	margin-bottom: 18px;
+	font-size: 14px;
+	font-weight: 300;
+	line-height: 1.4; }
+
+@media (min-width: 768px) {
+	.lead {
+	font-size: 19.5px;   }
+}
+
+small, .small {
+  font-size: 92%; }
+
+cite {
+    font-style: normal; }
+
+mark, .mark {
+	background-color: #fcf8e3;
+	padding: 0.2em; }
+
+.text-left {
+	text-align: left; }
+
+.text-right {
+	text-align: right; }
+
+.text-center {
+	text-align: center; }
+
+.text-justify {
+	text-align: justify; }
+
+.text-nowrap {
+    white-space: nowrap; }
+
+.text-lowercase {
+	text-transform: lowercase; }
+
+.text-uppercase {
+	text-transform: uppercase; }
+
+.text-capitalize {
+	text-transform: capitalize; }
+
+.text-muted {
+	color: #777; }
+
+.bg-primary {
+	color: #fff; }
+
 .page-header {
-  padding-bottom: 17px;
-  margin: 18px 0;
-  border-bottom: 1px solid #eeeeee;
-}
-.page-header h1 {
-  line-height: 1;
-}
-ul,
-ol {
-  padding: 0;
-  margin: 0 0 9px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-ul {
-  list-style: disc;
-}
-ol {
-  list-style: decimal;
-}
-li {
-  line-height: 18px;
-}
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-table ul {
-  margin: 0;
-  list-style-type: none;
-}
+	padding-bottom: 8px;
+	margin: 36px 0 18px;
+    /*border-bottom: 1px solid #eee; */}
+
+ul, ol {
+  margin-top: 0;
+  margin-bottom: 9px; }
+ul ul, ul ol, ol ul, ol ol {
+    margin-bottom: 0; }
+
+.list-unstyled, .list-inline {
+  padding-left: 0;
+  list-style: none; }
+
+.list-inline {
+	margin-left: -5px; }
+.list-inline > li {
+      display: inline-block;
+      padding-left: 5px;
+      padding-right: 5px; }
+
 dl {
-  margin-bottom: 18px;
-}
-dt,
-dd {
-  line-height: 18px;
-}
+  margin-top: 0;
+  margin-bottom: 18px; }
+
+dt, dd {
+	line-height: 1.5; }
+
 dt {
-  font-weight: bold;
-}
+	font-weight: bold; }
+
 dd {
-  margin-left: 9px;
-}
-hr {
-  margin: 18px 0;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-  border-bottom: 1px solid #ffffff;
-}
-strong {
-  font-weight: bold;
-}
-em {
-  font-style: italic;
-}
-.muted {
-  color: #999999;
-}
-abbr {
-  font-size: 90%;
-  text-transform: uppercase;
-  border-bottom: 1px dotted #ddd;
+	margin-left: 0; }
+
+@media (min-width: 768px) {
+	.dl-horizontal dt {
+		loat: left;
+		width: 160px;
+		clear: left;
+		text-align: right;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;   }
+		.dl-horizontal dd {
+		margin-left: 180px;   }
+}
+
+abbr[title], abbr[data-original-title] {
   cursor: help;
-}
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 18px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p {
-  margin-bottom: 0;
-  font-size: 16px;
-  font-weight: 300;
-  line-height: 22.5px;
-}
-blockquote small {
-  display: block;
-  line-height: 18px;
-  color: #999999;
-}
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-blockquote.pull-right {
-  float: right;
+  border-bottom: 1px dotted #777; }
+
+  .initialism {
+    font-size: 90%;
+    text-transform: uppercase; }
+
+    blockquote {
+      padding: 9px 18px;
+      margin: 0 0 18px;
+      font-size: 16.25px;
+      border-left: 5px solid #eee; }
+      blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child {
+        margin-bottom: 0; }
+      blockquote footer, blockquote small, blockquote .small {
+        display: block;
+        font-size: 80%;
+        line-height: 1.5;
+        color: #777; }
+        blockquote footer:before, blockquote small:before, blockquote .small:before {
+          content: '\2014 \00A0'; }
+
+.blockquote-reverse, blockquote.pull-right {
+  padding-right: 15px;
   padding-left: 0;
-  padding-right: 15px;
+  border-right: 5px solid #eee;
   border-left: 0;
-  border-right: 5px solid #eeeeee;
-}
-blockquote.pull-right p,
-blockquote.pull-right small {
-  text-align: right;
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  display: block;
-  margin-bottom: 18px;
-  line-height: 18px;
-  font-style: normal;
-}
-small {
-  font-size: 100%;
-}
-cite {
-  font-style: normal;
-}
-code,
-pre {
-  padding: 0 3px 2px;
-  font-family: Menlo, Monaco, "Courier New", monospace;
-  font-size: 12px;
-  color: #333333;
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  border-radius: 0px;
-}
+  text-align: right; }
+  .blockquote-reverse footer:before, .blockquote-reverse small:before,
+  .blockquote-reverse .small:before, blockquote.pull-right footer:before,
+  blockquote.pull-right small:before, blockquote.pull-right .small:before {
+    content: ''; }
+    .blockquote-reverse footer:after, .blockquote-reverse small:after,
+    .blockquote-reverse .small:after, blockquote.pull-right footer:after,
+    blockquote.pull-right small:after, blockquote.pull-right .small:after {
+      content: '\00A0 \2014'; }
+
+blockquote:before, blockquote:after {
+  content: ""; }
+
+  address {
+    margin-bottom: 18px;
+    font-style: normal;
+    line-height: 1.5; }
+.text-primary {
+  color: #428bca; }
+
+  a.text-primary:hover {
+    color: #3071a9; }
+
+    .text-success {
+      color: #3c763d; }
+
+      a.text-success:hover {
+        color: #2b542c; }
+
+        .text-info {
+          color: #31708f; }
+
+          a.text-info:hover {
+            color: #245269; }
+
+            .text-warning {
+              color: #8a6d3b; }
+
+              a.text-warning:hover {
+                color: #66512c; }
+
+                .text-danger {
+                  color: #a94442; }
+
+                  a.text-danger:hover {
+                    color: #843534; }
+.bg-primary {
+  background-color: #428bca; }
+
+  a.bg-primary:hover {
+    background-color: #3071a9; }
+
+    .bg-success {
+      background-color: #dff0d8; }
+
+      a.bg-success:hover {
+        background-color: #c1e2b3; }
+
+        .bg-info {
+          background-color: #d9edf7; }
+
+          a.bg-info:hover {
+            background-color: #afd9ee; }
+
+            .bg-warning {
+              background-color: #fcf8e3; }
+
+              a.bg-warning:hover {
+                background-color: #f7ecb5; }
+
+                .bg-danger {
+                  background-color: #f2dede; }
+
+                  a.bg-danger:hover {
+                    background-color: #e4b9b9; }
+.dl-horizontal dd:before, .dl-horizontal dd:after {
+  content: " ";
+  display: table; }
+  .dl-horizontal dd:after {
+    clear: both; }
+.container:before, .container:after {
+  content: " ";
+  display: table; }
+  .container:after {
+    clear: both; }
+    .container-fluid:before, .container-fluid:after {
+      content: " ";
+      display: table; }
+      .container-fluid:after {
+        clear: both; }
+        .row:before, .row:after {
+          content: " ";
+          display: table; }
+          .row:after {
+            clear: both; }
+.form-horizontal .form-group:before, .form-horizontal .form-group:after {
+	content: " ";
+	display: table; }
+.form-horizontal .form-group:after {
+	clear: both; }
+.btn-toolbar:before, .btn-toolbar:after {
+  content: " ";
+  display: table; }
+  .btn-toolbar:after {
+    clear: both; }
+    .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
+      content: " ";
+      display: table; }
+      .btn-group-vertical > .btn-group:after {
+        clear: both; }
+.nav:before, .nav:after {
+  content: " ";
+  display: table; }
+  .nav:after {
+    clear: both; }
+    .navbar:before, .navbar:after {
+      content: " ";
+      display: table; }
+      .navbar:after {
+        clear: both; }
+        .navbar-header:before, .navbar-header:after {
+          content: " ";
+          display: table; }
+          .navbar-header:after {
+            clear: both; }
+            .navbar-collapse:before, .navbar-collapse:after {
+              content: " ";
+              display: table; }
+              .navbar-collapse:after {
+                clear: both; }
+                .pager:before, .pager:after {
+                  content: " ";
+                  display: table; }
+                  .pager:after {
+                    clear: both; }
+                    .panel-body:before, .panel-body:after {
+                      content: " ";
+                      display: table; }
+                      .panel-body:after {
+                        clear: both; }
+                        .modal-footer:before, .modal-footer:after {
+                          content: " ";
+                          display: table; }
+                          .modal-footer:after {
+                            clear: both; }
+                            .clearfix:before, .clearfix:after {
+                              content: " ";
+                              display: table; }
+                              .clearfix:after {
+                                clear: both; }
+code, kbd, pre, samp {
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace; }
+
 code {
-  padding: 3px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-}
+    padding: 2px 4px;
+    font-size: 90%;
+    color: #c7254e;
+    background-color: #f9f2f4;
+    border-radius: 4px; }
+
+kbd {
+	padding: 2px 4px;
+	font-size: 90%;
+	color: #fff;
+	background-color: #333;
+	border-radius: 3px;
+	box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }
+	
+kbd kbd {
+    padding: 0;
+    font-size: 100%;
+    box-shadow: none; }
+
 pre {
   display: block;
   padding: 8.5px;
   margin: 0 0 9px;
   font-size: 12px;
-  line-height: 18px;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  border-radius: 0px;
-  white-space: pre;
-  white-space: pre-wrap;
+  line-height: 1.5;
   word-break: break-all;
   word-wrap: break-word;
-}
-pre.prettyprint {
-  margin-bottom: 18px;
-}
+  color: #333;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px; }
+  
 pre code {
-  padding: 0;
-  color: inherit;
-  background-color: transparent;
-  border: 0;
-}
+    padding: 0;
+    font-size: inherit;
+    color: inherit;
+    white-space: pre-wrap;
+    background-color: transparent;
+    border-radius: 0; }
+
 .pre-scrollable {
   max-height: 340px;
-  overflow-y: scroll;
-}
-form {
-  margin: 0 0 18px;
-}
+  overflow-y: scroll; }
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px; }
+  @media (min-width: 768px) {
+    .container {
+      width: 750px;   }
+}
+    @media (min-width: 992px) {
+      .container {
+        width: 970px;   }
+}
+      @media (min-width: 1200px) {
+        .container {
+          width: 1170px;   }
+}
+
+.container-fluid {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px; }
+
+.row {
+    margin-left: -15px;
+    margin-right: -15px; }
+    
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2,
+.col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4,
+.col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6,
+.col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7,
+.col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9,
+.col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11,
+.col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12,
+.col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-left: 15px;
+  padding-right: 15px; }
+
+  .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7,
+  .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+    float: left; }
+
+    .col-xs-1 {
+      width: 8.33333%; }
+
+      .col-xs-2 {
+        width: 16.66667%; }
+
+        .col-xs-3 {
+          width: 25%; }
+
+          .col-xs-4 {
+            width: 33.33333%; }
+
+            .col-xs-5 {
+              width: 41.66667%; }
+
+              .col-xs-6 {
+                width: 50%; }
+
+                .col-xs-7 {
+                  width: 58.33333%; }
+
+                  .col-xs-8 {
+                    width: 66.66667%; }
+
+                    .col-xs-9 {
+                      width: 75%; }
+
+                      .col-xs-10 {
+                        width: 83.33333%; }
+
+                        .col-xs-11 {
+                          width: 91.66667%; }
+
+                          .col-xs-12 {
+                            width: 100%; }
+
+                            .col-xs-pull-0 {
+                              right: auto; }
+
+                              .col-xs-pull-1 {
+                                right: 8.33333%; }
+
+                                .col-xs-pull-2 {
+                                  right: 16.66667%; }
+
+                                  .col-xs-pull-3 {
+                                    right: 25%; }
+
+                                    .col-xs-pull-4 {
+                                      right: 33.33333%; }
+
+                                      .col-xs-pull-5 {
+                                        right: 41.66667%; }
+
+                                        .col-xs-pull-6 {
+                                          right: 50%; }
+
+                                          .col-xs-pull-7 {
+                                            right: 58.33333%; }
+
+                                            .col-xs-pull-8 {
+                                              right: 66.66667%; }
+
+                                              .col-xs-pull-9 {
+                                                right: 75%; }
+
+                                                .col-xs-pull-10 {
+                                                  right: 83.33333%; }
+
+                                                  .col-xs-pull-11 {
+                                                    right: 91.66667%; }
+
+                                                    .col-xs-pull-12 {
+                                                      right: 100%; }
+
+                                                      .col-xs-push-0 {
+                                                        left: auto; }
+
+                                                        .col-xs-push-1 {
+                                                          left: 8.33333%; }
+
+                                                          .col-xs-push-2 {
+                                                            left: 16.66667%; }
+
+                                                            .col-xs-push-3 {
+                                                              left: 25%; }
+
+                                                              .col-xs-push-4 {
+                                                                left: 33.33333%; }
+
+                                                                .col-xs-push-5 {
+                                                                  left: 41.66667%; }
+
+                                                                  .col-xs-push-6 {
+                                                                    left: 50%; }
+
+                                                                    .col-xs-push-7 {
+                                                                      left: 58.33333%; }
+
+                                                                      .col-xs-push-8 {
+                                                                        left: 66.66667%; }
+
+                                                                        .col-xs-push-9 {
+                                                                          left: 75%; }
+
+                                                                          .col-xs-push-10 {
+                                                                            left: 83.33333%; }
+
+                                                                            .col-xs-push-11 {
+                                                                              left: 91.66667%; }
+
+                                                                              .col-xs-push-12 {
+                                                                                left: 100%; }
+
+                                                                                .col-xs-offset-0 {
+                                                                                  margin-left: 0%; }
+
+                                                                                  .col-xs-offset-1 {
+                                                                                    margin-left: 8.33333%; }
+
+                                                                                    .col-xs-offset-2 {
+                                                                                      margin-left: 16.66667%; }
+
+                                                                                      .col-xs-offset-3 {
+                                                                                        margin-left: 25%; }
+
+                                                                                        .col-xs-offset-4 {
+                                                                                          margin-left: 33.33333%; }
+
+                                                                                          .col-xs-offset-5 {
+                                                                                            margin-left: 41.66667%; }
+
+                                                                                            .col-xs-offset-6 {
+                                                                                              margin-left: 50%; }
+
+                                                                                              .col-xs-offset-7 {
+                                                                                                margin-left: 58.33333%; }
+
+                                                                                                .col-xs-offset-8 {
+                                                                                                  margin-left: 66.66667%; }
+
+                                                                                                  .col-xs-offset-9 {
+                                                                                                    margin-left: 75%; }
+
+                                                                                                    .col-xs-offset-10 {
+                                                                                                      margin-left: 83.33333%; }
+
+                                                                                                      .col-xs-offset-11 {
+                                                                                                        margin-left: 91.66667%; }
+
+                                                                                                        .col-xs-offset-12 {
+                                                                                                          margin-left: 100%; }
+                                                                                                          @media (min-width: 768px) {
+                                                                                                            .col-xs-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7,
+                                                                                                            .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+                                                                                                              float: left;   }
+                                                                                                              .col-sm-1 {
+                                                                                                                width: 8.33333%;   }
+                                                                                                                .col-sm-2 {
+                                                                                                                  width: 16.66667%;   }
+                                                                                                                  .col-sm-3 {
+                                                                                                                    width: 25%;   }
+                                                                                                                    .col-sm-4 {
+                                                                                                                      width: 33.33333%;   }
+                                                                                                                      .col-sm-5 {
+                                                                                                                        width: 41.66667%;   }
+                                                                                                                        .col-sm-6 {
+                                                                                                                          width: 50%;   }
+                                                                                                                          .col-sm-7 {
+                                                                                                                            width: 58.33333%;   }
+                                                                                                                            .col-sm-8 {
+                                                                                                                              width: 66.66667%;   }
+                                                                                                                              .col-sm-9 {
+                                                                                                                                width: 75%;   }
+                                                                                                                                .col-sm-10 {
+                                                                                                                                  width: 83.33333%;   }
+                                                                                                                                  .col-sm-11 {
+                                                                                                                                    width: 91.66667%;   }
+                                                                                                                                    .col-sm-12 {
+                                                                                                                                      width: 100%;   }
+                                                                                                                                      .col-sm-pull-0 {
+                                                                                                                                        right: auto;   }
+                                                                                                                                        .col-sm-pull-1 {
+                                                                                                                                          right: 8.33333%;   }
+                                                                                                                                          .col-sm-pull-2 {
+                                                                                                                                            right: 16.66667%;   }
+                                                                                                                                            .col-sm-pull-3 {
+                                                                                                                                              right: 25%;   }
+                                                                                                                                              .col-sm-pull-4 {
+                                                                                                                                                right: 33.33333%;   }
+                                                                                                                                                .col-sm-pull-5 {
+                                                                                                                                                  right: 41.66667%;   }
+                                                                                                                                                  .col-sm-pull-6 {
+                                                                                                                                                    right: 50%;   }
+                                                                                                                                                    .col-sm-pull-7 {
+                                                                                                                                                      right: 58.33333%;   }
+                                                                                                                                                      .col-sm-pull-8 {
+                                                                                                                                                        right: 66.66667%;   }
+                                                                                                                                                        .col-sm-pull-9 {
+                                                                                                                                                          right: 75%;   }
+                                                                                                                                                          .col-sm-pull-10 {
+                                                                                                                                                            right: 83.33333%;   }
+                                                                                                                                                            .col-sm-pull-11 {
+                                                                                                                                                              right: 91.66667%;   }
+                                                                                                                                                              .col-sm-pull-12 {
+                                                                                                                                                                right: 100%;   }
+                                                                                                                                                                .col-sm-push-0 {
+                                                                                                                                                                  left: auto;   }
+                                                                                                                                                                  .col-sm-push-1 {
+                                                                                                                                                                    left: 8.33333%;   }
+                                                                                                                                                                    .col-sm-push-2 {
+                                                                                                                                                                      left: 16.66667%;   }
+                                                                                                                                                                      .col-sm-push-3 {
+                                                                                                                                                                        left: 25%;   }
+                                                                                                                                                                        .col-sm-push-4 {
+                                                                                                                                                                          left: 33.33333%;   }
+                                                                                                                                                                          .col-sm-push-5 {
+                                                                                                                                                                            left: 41.66667%;   }
+                                                                                                                                                                            .col-sm-push-6 {
+                                                                                                                                                                              left: 50%;   }
+                                                                                                                                                                              .col-sm-push-7 {
+                                                                                                                                                                                left: 58.33333%;   }
+                                                                                                                                                                                .col-sm-push-8 {
+                                                                                                                                                                                  left: 66.66667%;   }
+                                                                                                                                                                                  .col-sm-push-9 {
+                                                                                                                                                                                    left: 75%;   }
+                                                                                                                                                                                    .col-sm-push-10 {
+                                                                                                                                                                                      left: 83.33333%;   }
+                                                                                                                                                                                      .col-sm-push-11 {
+                                                                                                                                                                                        left: 91.66667%;   }
+                                                                                                                                                                                        .col-sm-push-12 {
+                                                                                                                                                                                          left: 100%;   }
+                                                                                                                                                                                          .col-sm-offset-0 {
+                                                                                                                                                                                            margin-left: 0%;   }
+                                                                                                                                                                                            .col-sm-offset-1 {
+                                                                                                                                                                                              margin-left: 8.33333%;   }
+                                                                                                                                                                                              .col-sm-offset-2 {
+                                                                                                                                                                                                margin-left: 16.66667%;   }
+                                                                                                                                                                                                .col-sm-offset-3 {
+                                                                                                                                                                                                  margin-left: 25%;   }
+                                                                                                                                                                                                  .col-sm-offset-4 {
+                                                                                                                                                                                                    margin-left: 33.33333%;   }
+                                                                                                                                                                                                    .col-sm-offset-5 {
+                                                                                                                                                                                                      margin-left: 41.66667%;   }
+                                                                                                                                                                                                      .col-sm-offset-6 {
+                                                                                                                                                                                                        margin-left: 50%;   }
+                                                                                                                                                                                                        .col-sm-offset-7 {
+                                                                                                                                                                                                          margin-left: 58.33333%;   }
+                                                                                                                                                                                                          .col-sm-offset-8 {
+                                                                                                                                                                                                            margin-left: 66.66667%;   }
+                                                                                                                                                                                                            .col-sm-offset-9 {
+                                                                                                                                                                                                              margin-left: 75%;   }
+                                                                                                                                                                                                              .col-sm-offset-10 {
+                                                                                                                                                                                                                margin-left: 83.33333%;   }
+                                                                                                                                                                                                                .col-sm-offset-11 {
+                                                                                                                                                                                                                  margin-left: 91.66667%;   }
+                                                                                                                                                                                                                  .col-sm-offset-12 {
+                                                                                                                                                                                                                    margin-left: 100%;   }
+}
+                                                                                                                                                                                                                  @media (min-width: 992px) {
+                                                                                                                                                                                                                    .col-xs-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7,
+                                                                                                                                                                                                                    .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+                                                                                                                                                                                                                      float: left;   }
+                                                                                                                                                                                                                      .col-md-1 {
+                                                                                                                                                                                                                        width: 8.33333%;   }
+                                                                                                                                                                                                                        .col-md-2 {
+                                                                                                                                                                                                                          width: 16.66667%;   }
+                                                                                                                                                                                                                          .col-md-3 {
+                                                                                                                                                                                                                            width: 25%;   }
+                                                                                                                                                                                                                            .col-md-4 {
+                                                                                                                                                                                                                              width: 33.33333%;   }
+                                                                                                                                                                                                                              .col-md-5 {
+                                                                                                                                                                                                                                width: 41.66667%;   }
+                                                                                                                                                                                                                                .col-md-6 {
+                                                                                                                                                                                                                                  width: 50%;   }
+                                                                                                                                                                                                                                  .col-md-7 {
+                                                                                                                                                                                                                                    width: 58.33333%;   }
+                                                                                                                                                                                                                                    .col-md-8 {
+                                                                                                                                                                                                                                      width: 66.66667%;   }
+                                                                                                                                                                                                                                      .col-md-9 {
+                                                                                                                                                                                                                                        width: 75%;   }
+                                                                                                                                                                                                                                        .col-md-10 {
+                                                                                                                                                                                                                                          width: 83.33333%;   }
+                                                                                                                                                                                                                                          .col-md-11 {
+                                                                                                                                                                                                                                            width: 91.66667%;   }
+                                                                                                                                                                                                                                            .col-md-12 {
+                                                                                                                                                                                                                                              width: 100%;   }
+                                                                                                                                                                                                                                              .col-md-pull-0 {
+                                                                                                                                                                                                                                                right: auto;   }
+                                                                                                                                                                                                                                                .col-md-pull-1 {
+                                                                                                                                                                                                                                                  right: 8.33333%;   }
+                                                                                                                                                                                                                                                  .col-md-pull-2 {
+                                                                                                                                                                                                                                                    right: 16.66667%;   }
+                                                                                                                                                                                                                                                    .col-md-pull-3 {
+                                                                                                                                                                                                                                                      right: 25%;   }
+                                                                                                                                                                                                                                                      .col-md-pull-4 {
+                                                                                                                                                                                                                                                        right: 33.33333%;   }
+                                                                                                                                                                                                                                                        .col-md-pull-5 {
+                                                                                                                                                                                                                                                          right: 41.66667%;   }
+                                                                                                                                                                                                                                                          .col-md-pull-6 {
+                                                                                                                                                                                                                                                            right: 50%;   }
+                                                                                                                                                                                                                                                            .col-md-pull-7 {
+                                                                                                                                                                                                                                                              right: 58.33333%;   }
+                                                                                                                                                                                                                                                              .col-md-pull-8 {
+                                                                                                                                                                                                                                                                right: 66.66667%;   }
+                                                                                                                                                                                                                                                                .col-md-pull-9 {
+                                                                                                                                                                                                                                                                  right: 75%;   }
+                                                                                                                                                                                                                                                                  .col-md-pull-10 {
+                                                                                                                                                                                                                                                                    right: 83.33333%;   }
+                                                                                                                                                                                                                                                                    .col-md-pull-11 {
+                                                                                                                                                                                                                                                                      right: 91.66667%;   }
+                                                                                                                                                                                                                                                                      .col-md-pull-12 {
+                                                                                                                                                                                                                                                                        right: 100%;   }
+                                                                                                                                                                                                                                                                        .col-md-push-0 {
+                                                                                                                                                                                                                                                                          left: auto;   }
+                                                                                                                                                                                                                                                                          .col-md-push-1 {
+                                                                                                                                                                                                                                                                            left: 8.33333%;   }
+                                                                                                                                                                                                                                                                            .col-md-push-2 {
+                                                                                                                                                                                                                                                                              left: 16.66667%;   }
+                                                                                                                                                                                                                                                                              .col-md-push-3 {
+                                                                                                                                                                                                                                                                                left: 25%;   }
+                                                                                                                                                                                                                                                                                .col-md-push-4 {
+                                                                                                                                                                                                                                                                                  left: 33.33333%;   }
+                                                                                                                                                                                                                                                                                  .col-md-push-5 {
+                                                                                                                                                                                                                                                                                    left: 41.66667%;   }
+                                                                                                                                                                                                                                                                                    .col-md-push-6 {
+                                                                                                                                                                                                                                                                                      left: 50%;   }
+                                                                                                                                                                                                                                                                                      .col-md-push-7 {
+                                                                                                                                                                                                                                                                                        left: 58.33333%;   }
+                                                                                                                                                                                                                                                                                        .col-md-push-8 {
+                                                                                                                                                                                                                                                                                          left: 66.66667%;   }
+                                                                                                                                                                                                                                                                                          .col-md-push-9 {
+                                                                                                                                                                                                                                                                                            left: 75%;   }
+                                                                                                                                                                                                                                                                                            .col-md-push-10 {
+                                                                                                                                                                                                                                                                                              left: 83.33333%;   }
+                                                                                                                                                                                                                                                                                              .col-md-push-11 {
+                                                                                                                                                                                                                                                                                                left: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                .col-md-push-12 {
+                                                                                                                                                                                                                                                                                                  left: 100%;   }
+                                                                                                                                                                                                                                                                                                  .col-md-offset-0 {
+                                                                                                                                                                                                                                                                                                    margin-left: 0%;   }
+                                                                                                                                                                                                                                                                                                    .col-md-offset-1 {
+                                                                                                                                                                                                                                                                                                      margin-left: 8.33333%;   }
+                                                                                                                                                                                                                                                                                                      .col-md-offset-2 {
+                                                                                                                                                                                                                                                                                                        margin-left: 16.66667%;   }
+                                                                                                                                                                                                                                                                                                        .col-md-offset-3 {
+                                                                                                                                                                                                                                                                                                          margin-left: 25%;   }
+                                                                                                                                                                                                                                                                                                          .col-md-offset-4 {
+                                                                                                                                                                                                                                                                                                            margin-left: 33.33333%;   }
+                                                                                                                                                                                                                                                                                                            .col-md-offset-5 {
+                                                                                                                                                                                                                                                                                                              margin-left: 41.66667%;   }
+                                                                                                                                                                                                                                                                                                              .col-md-offset-6 {
+                                                                                                                                                                                                                                                                                                                margin-left: 50%;   }
+                                                                                                                                                                                                                                                                                                                .col-md-offset-7 {
+                                                                                                                                                                                                                                                                                                                  margin-left: 58.33333%;   }
+                                                                                                                                                                                                                                                                                                                  .col-md-offset-8 {
+                                                                                                                                                                                                                                                                                                                    margin-left: 66.66667%;   }
+                                                                                                                                                                                                                                                                                                                    .col-md-offset-9 {
+                                                                                                                                                                                                                                                                                                                      margin-left: 75%;   }
+                                                                                                                                                                                                                                                                                                                      .col-md-offset-10 {
+                                                                                                                                                                                                                                                                                                                        margin-left: 83.33333%;   }
+                                                                                                                                                                                                                                                                                                                        .col-md-offset-11 {
+                                                                                                                                                                                                                                                                                                                          margin-left: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                                          .col-md-offset-12 {
+                                                                                                                                                                                                                                                                                                                            margin-left: 100%;   }
+}
+                                                                                                                                                                                                                                                                                                                          @media (min-width: 1200px) {
+                                                                                                                                                                                                                                                                                                                            .col-xs-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7,
+                                                                                                                                                                                                                                                                                                                            .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+                                                                                                                                                                                                                                                                                                                              float: left;   }
+                                                                                                                                                                                                                                                                                                                              .col-lg-1 {
+                                                                                                                                                                                                                                                                                                                                width: 8.33333%;   }
+                                                                                                                                                                                                                                                                                                                                .col-lg-2 {
+                                                                                                                                                                                                                                                                                                                                  width: 16.66667%;   }
+                                                                                                                                                                                                                                                                                                                                  .col-lg-3 {
+                                                                                                                                                                                                                                                                                                                                    width: 25%;   }
+                                                                                                                                                                                                                                                                                                                                    .col-lg-4 {
+                                                                                                                                                                                                                                                                                                                                      width: 33.33333%;   }
+                                                                                                                                                                                                                                                                                                                                      .col-lg-5 {
+                                                                                                                                                                                                                                                                                                                                        width: 41.66667%;   }
+                                                                                                                                                                                                                                                                                                                                        .col-lg-6 {
+                                                                                                                                                                                                                                                                                                                                          width: 50%;   }
+                                                                                                                                                                                                                                                                                                                                          .col-lg-7 {
+                                                                                                                                                                                                                                                                                                                                            width: 58.33333%;   }
+                                                                                                                                                                                                                                                                                                                                            .col-lg-8 {
+                                                                                                                                                                                                                                                                                                                                              width: 66.66667%;   }
+                                                                                                                                                                                                                                                                                                                                              .col-lg-9 {
+                                                                                                                                                                                                                                                                                                                                                width: 75%;   }
+                                                                                                                                                                                                                                                                                                                                                .col-lg-10 {
+                                                                                                                                                                                                                                                                                                                                                  width: 83.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                  .col-lg-11 {
+                                                                                                                                                                                                                                                                                                                                                    width: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                    .col-lg-12 {
+                                                                                                                                                                                                                                                                                                                                                      width: 100%;   }
+                                                                                                                                                                                                                                                                                                                                                      .col-lg-pull-0 {
+                                                                                                                                                                                                                                                                                                                                                        right: auto;   }
+                                                                                                                                                                                                                                                                                                                                                        .col-lg-pull-1 {
+                                                                                                                                                                                                                                                                                                                                                          right: 8.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                          .col-lg-pull-2 {
+                                                                                                                                                                                                                                                                                                                                                            right: 16.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                            .col-lg-pull-3 {
+                                                                                                                                                                                                                                                                                                                                                              right: 25%;   }
+                                                                                                                                                                                                                                                                                                                                                              .col-lg-pull-4 {
+                                                                                                                                                                                                                                                                                                                                                                right: 33.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                .col-lg-pull-5 {
+                                                                                                                                                                                                                                                                                                                                                                  right: 41.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                  .col-lg-pull-6 {
+                                                                                                                                                                                                                                                                                                                                                                    right: 50%;   }
+                                                                                                                                                                                                                                                                                                                                                                    .col-lg-pull-7 {
+                                                                                                                                                                                                                                                                                                                                                                      right: 58.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                      .col-lg-pull-8 {
+                                                                                                                                                                                                                                                                                                                                                                        right: 66.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                        .col-lg-pull-9 {
+                                                                                                                                                                                                                                                                                                                                                                          right: 75%;   }
+                                                                                                                                                                                                                                                                                                                                                                          .col-lg-pull-10 {
+                                                                                                                                                                                                                                                                                                                                                                            right: 83.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                            .col-lg-pull-11 {
+                                                                                                                                                                                                                                                                                                                                                                              right: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                              .col-lg-pull-12 {
+                                                                                                                                                                                                                                                                                                                                                                                right: 100%;   }
+                                                                                                                                                                                                                                                                                                                                                                                .col-lg-push-0 {
+                                                                                                                                                                                                                                                                                                                                                                                  left: auto;   }
+                                                                                                                                                                                                                                                                                                                                                                                  .col-lg-push-1 {
+                                                                                                                                                                                                                                                                                                                                                                                    left: 8.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                    .col-lg-push-2 {
+                                                                                                                                                                                                                                                                                                                                                                                      left: 16.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                      .col-lg-push-3 {
+                                                                                                                                                                                                                                                                                                                                                                                        left: 25%;   }
+                                                                                                                                                                                                                                                                                                                                                                                        .col-lg-push-4 {
+                                                                                                                                                                                                                                                                                                                                                                                          left: 33.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                          .col-lg-push-5 {
+                                                                                                                                                                                                                                                                                                                                                                                            left: 41.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                            .col-lg-push-6 {
+                                                                                                                                                                                                                                                                                                                                                                                              left: 50%;   }
+                                                                                                                                                                                                                                                                                                                                                                                              .col-lg-push-7 {
+                                                                                                                                                                                                                                                                                                                                                                                                left: 58.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                .col-lg-push-8 {
+                                                                                                                                                                                                                                                                                                                                                                                                  left: 66.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                  .col-lg-push-9 {
+                                                                                                                                                                                                                                                                                                                                                                                                    left: 75%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                    .col-lg-push-10 {
+                                                                                                                                                                                                                                                                                                                                                                                                      left: 83.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                      .col-lg-push-11 {
+                                                                                                                                                                                                                                                                                                                                                                                                        left: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                        .col-lg-push-12 {
+                                                                                                                                                                                                                                                                                                                                                                                                          left: 100%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                          .col-lg-offset-0 {
+                                                                                                                                                                                                                                                                                                                                                                                                            margin-left: 0%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                            .col-lg-offset-1 {
+                                                                                                                                                                                                                                                                                                                                                                                                              margin-left: 8.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                              .col-lg-offset-2 {
+                                                                                                                                                                                                                                                                                                                                                                                                                margin-left: 16.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                .col-lg-offset-3 {
+                                                                                                                                                                                                                                                                                                                                                                                                                  margin-left: 25%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                  .col-lg-offset-4 {
+                                                                                                                                                                                                                                                                                                                                                                                                                    margin-left: 33.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                    .col-lg-offset-5 {
+                                                                                                                                                                                                                                                                                                                                                                                                                      margin-left: 41.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                      .col-lg-offset-6 {
+                                                                                                                                                                                                                                                                                                                                                                                                                        margin-left: 50%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                        .col-lg-offset-7 {
+                                                                                                                                                                                                                                                                                                                                                                                                                          margin-left: 58.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                          .col-lg-offset-8 {
+                                                                                                                                                                                                                                                                                                                                                                                                                            margin-left: 66.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                            .col-lg-offset-9 {
+                                                                                                                                                                                                                                                                                                                                                                                                                              margin-left: 75%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                              .col-lg-offset-10 {
+                                                                                                                                                                                                                                                                                                                                                                                                                                margin-left: 83.33333%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                                .col-lg-offset-11 {
+                                                                                                                                                                                                                                                                                                                                                                                                                                  margin-left: 91.66667%;   }
+                                                                                                                                                                                                                                                                                                                                                                                                                                  .col-lg-offset-12 {
+                                                                                                                                                                                                                                                                                                                                                                                                                                    margin-left: 100%;   }
+}
+
+table {
+  background-color: transparent; }
+
+th {
+    text-align: left; }
+
+.table {
+	width: 100%;
+    max-width: 100%;
+    margin-bottom: 18px; 
+    border: 1px solid #ffffff; }
+      
+.table > thead > tr > th, .table > thead > tr > td, .table > tbody > tr > th,
+.table > tbody > tr > td, .table > tfoot > tr > th, .table > tfoot > tr > td {
+    padding: 8px 0px;
+    line-height: 1.5;
+    vertical-align: top;
+    border-top: 1px solid #d5dfe6; }
+    
+.table > thead > tr > th {
+        vertical-align: bottom;
+        border-bottom: 1px solid #d5dfe6; }
+.table > caption + thead > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > th,
+.table > thead:first-child > tr:first-child > td {
+	border-top: 0; }
+.table > tbody + tbody {
+	border-top: 1px solid #d5dfe6; }
+.table .table {
+	background-color: #fff; }
+
+.table-condensed > thead > tr > th, .table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > th, .table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > th, .table-condensed > tfoot > tr > td {
+  padding: 5px; }
+
+.table-bordered {
+  border: 1px solid #ddd; }
+.table-bordered > thead > tr > th, .table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > th, .table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > th, .table-bordered > tfoot > tr > td {
+    border: 1px solid #eeeeee; 
+    padding: 8px 12px; }
+.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {
+    border-bottom-width: 2px; }
+
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+  background-color: #f9f9f9; }
+
+.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
+  background-color: #f5f5f5; }
+
+table col[class*="col-"] {
+  position: static;
+  float: none;
+  display: table-column; }
+
+  table td[class*="col-"], table th[class*="col-"] {
+    position: static;
+    float: none;
+    display: table-cell; }
+
+@media screen and (max-width: 767px) {
+  .table-responsive {
+    width: 100%;
+    margin-bottom: 13.5px;
+    overflow-y: hidden;
+    overflow-x: auto;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid #ddd;
+    -webkit-overflow-scrolling: touch;   }
+    .table-responsive > .table {
+      margin-bottom: 0;   }
+      .table-responsive > .table > thead > tr > th,
+      .table-responsive > .table > thead > tr > td,
+      .table-responsive > .table > tbody > tr > th,
+      .table-responsive > .table > tbody > tr > td,
+      .table-responsive > .table > tfoot > tr > th,
+      .table-responsive > .table > tfoot > tr > td {
+        white-space: nowrap;   }
+    .table-responsive > .table-bordered {
+      border: 0;   }
+      .table-responsive > .table-bordered > thead > tr > th:first-child,
+      .table-responsive > .table-bordered > thead > tr > td:first-child,
+      .table-responsive > .table-bordered > tbody > tr > th:first-child,
+      .table-responsive > .table-bordered > tbody > tr > td:first-child,
+      .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+      .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+        border-left: 0;   }
+        .table-responsive > .table-bordered > thead > tr > th:last-child,
+        .table-responsive > .table-bordered > thead > tr > td:last-child,
+        .table-responsive > .table-bordered > tbody > tr > th:last-child,
+        .table-responsive > .table-bordered > tbody > tr > td:last-child,
+        .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+        .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+          border-right: 0;   }
+      .table-responsive > .table-bordered > tbody > tr:last-child > th,
+      .table-responsive > .table-bordered > tbody > tr:last-child > td,
+      .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+      .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+        border-bottom: 0;   }
+}
+.table > thead > tr > td.active, .table > thead > tr > th.active,
+.table > thead > tr.active > td, .table > thead > tr.active > th,
+.table > tbody > tr > td.active, .table > tbody > tr > th.active,
+.table > tbody > tr.active > td, .table > tbody > tr.active > th,
+.table > tfoot > tr > td.active, .table > tfoot > tr > th.active,
+.table > tfoot > tr.active > td, .table > tfoot > tr.active > th {
+  background-color: #f5f5f5; }
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+  background-color: #e8e8e8; }
+
+.table > thead > tr > td.success, .table > thead > tr > th.success,
+.table > thead > tr.success > td, .table > thead > tr.success > th,
+.table > tbody > tr > td.success, .table > tbody > tr > th.success,
+.table > tbody > tr.success > td, .table > tbody > tr.success > th,
+.table > tfoot > tr > td.success, .table > tfoot > tr > th.success,
+.table > tfoot > tr.success > td, .table > tfoot > tr.success > th {
+  background-color: #dff0d8; }
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+  background-color: #d0e9c6; }
+
+.table > thead > tr > td.info, .table > thead > tr > th.info,
+.table > thead > tr.info > td, .table > thead > tr.info > th,
+.table > tbody > tr > td.info, .table > tbody > tr > th.info,
+.table > tbody > tr.info > td, .table > tbody > tr.info > th,
+.table > tfoot > tr > td.info, .table > tfoot > tr > th.info,
+.table > tfoot > tr.info > td, .table > tfoot > tr.info > th {
+  background-color: #d9edf7; }
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+  background-color: #c4e3f3; }
+
+.table > thead > tr > td.warning, .table > thead > tr > th.warning,
+.table > thead > tr.warning > td, .table > thead > tr.warning > th,
+.table > tbody > tr > td.warning, .table > tbody > tr > th.warning,
+.table > tbody > tr.warning > td, .table > tbody > tr.warning > th,
+.table > tfoot > tr > td.warning, .table > tfoot > tr > th.warning,
+.table > tfoot > tr.warning > td, .table > tfoot > tr.warning > th {
+  background-color: #fcf8e3; }
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+  background-color: #faf2cc; }
+
+.table > thead > tr > td.danger, .table > thead > tr > th.danger,
+.table > thead > tr.danger > td, .table > thead > tr.danger > th,
+.table > tbody > tr > td.danger, .table > tbody > tr > th.danger,
+.table > tbody > tr.danger > td, .table > tbody > tr.danger > th,
+.table > tfoot > tr > td.danger, .table > tfoot > tr > th.danger,
+.table > tfoot > tr.danger > td, .table > tfoot > tr.danger > th {
+  background-color: #f2dede; }
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background-color: #ebcccc; }
 fieldset {
   padding: 0;
   margin: 0;
   border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 27px;
-  font-size: 19.5px;
-  line-height: 36px;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #eee;
-}
-legend small {
-  font-size: 13.5px;
-  color: #999999;
-}
-label,
-input,
-button,
-select,
-textarea {
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 18px;
-}
-input,
-button,
-select,
-textarea {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-label {
-  display: block;
-  margin-bottom: 5px;
-  color: #333333;
-}
-input,
-textarea,
-select,
-.uneditable-input {
-  display: inline-block;
-  width: 210px;
-  height: 18px;
-  padding: 4px;
-  margin-bottom: 9px;
-  font-size: 13px;
-  line-height: 18px;
-  color: #555555;
-  border: 1px solid #ccc;
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  border-radius: 0px;
-}
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-label input,
-label textarea,
-label select {
+  min-width: 0; }
+
+  legend {
+    display: block;
+    width: 100%;
+    padding: 0;
+    margin-bottom: 18px;
+    font-size: 19.5px;
+    line-height: inherit;
+    color: #333;
+    border: 0;
+    border-bottom: 1px solid #e5e5e5; }
+
+    label {
+      display: inline-block;
+      max-width: 100%;
+      margin-bottom: 5px;
+      font-weight: bold; }
+
+      input[type="search"] {
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        box-sizing: border-box; }
+
+        input[type="radio"], input[type="checkbox"] {
+          margin: 4px 0 0;
+          margin-top: 1px \9;
+          line-height: normal; }
+
+          input[type="file"] {
+            display: block; }
+
+            input[type="range"] {
+              display: block;
+              width: 100%; }
+
+              select[multiple], select[size] {
+                height: auto; }
+
+                input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus {
+                  outline: thin dotted;
+                  outline: 5px auto -webkit-focus-ring-color;
+                  outline-offset: -2px; }
+
+                  output {
+                    display: block;
+                    padding-top: 7px;
+                    font-size: 13px;
+                    line-height: 1.5;
+                    color: #555; }
+
+                    .form-control, .datepicker input {
+                      display: block;
+                      width: 100%;
+                      height: 32px;
+                      padding: 6px 12px;
+                      font-size: 13px;
+                      line-height: 1.5;
+                      color: #555;
+                      background-color: #fff;
+                      background-image: none;
+                      border: 1px solid #ccc;
+                      border-radius: 4px;
+                      -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+                      box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+                      -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+                      -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+                      transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }
+                      .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control,
+                      .datepicker input[disabled], .datepicker input[readonly],
+                      fieldset[disabled] .datepicker input, .datepicker fieldset[disabled] input {
+                        cursor: not-allowed;
+                        background-color: #eee;
+                        opacity: 1; }
+
+textarea.form-control, .datepicker textareainput {
+  height: auto; }
+
+  input[type="search"] {
+    -webkit-appearance: none; }
+
+    input[type="date"], input[type="time"], input[type="datetime-local"],
+    input[type="month"] {
+      line-height: 32px;
+      line-height: 1.5 \0; }
+      input[type="date"].input-sm, input[type="time"].input-sm,
+      input[type="datetime-local"].input-sm, input[type="month"].input-sm,
+      .form-horizontal .form-group-sm input[type="datetime-local"].form-control,
+      .form-horizontal .form-group-sm input[type="time"].form-control,
+      .form-horizontal .form-group-sm input[type="month"].form-control,
+      .form-horizontal .form-group-sm input[type="date"].form-control,
+      .input-group-sm input[type="datetime-local"].form-control,
+      .input-group-sm input[type="datetime-local"].input-group-addon,
+      .input-group-sm > .input-group-btn input[type="datetime-local"].btn,
+      .input-group-sm input[type="time"].form-control,
+      .input-group-sm input[type="time"].input-group-addon,
+      .input-group-sm > .input-group-btn input[type="time"].btn,
+      .input-group-sm input[type="month"].form-control,
+      .input-group-sm input[type="month"].input-group-addon,
+      .input-group-sm > .input-group-btn input[type="month"].btn,
+      .input-group-sm input[type="date"].form-control,
+      .input-group-sm input[type="date"].input-group-addon,
+      .input-group-sm > .input-group-btn input[type="date"].btn,
+      .input-group-sm .datepicker input[type="month"],
+      .datepicker .input-group-sm input[type="month"],
+      .input-group-sm .datepicker input[type="time"],
+      .datepicker .input-group-sm input[type="time"],
+      .form-horizontal .form-group-sm .datepicker input[type="datetime-local"],
+      .datepicker .form-horizontal .form-group-sm input[type="datetime-local"],
+      .input-group-sm .datepicker input[type="date"],
+      .datepicker .input-group-sm input[type="date"],
+      .form-horizontal .form-group-sm .datepicker input[type="month"],
+      .datepicker .form-horizontal .form-group-sm input[type="month"],
+      .form-horizontal .form-group-sm .datepicker input[type="date"],
+      .datepicker .form-horizontal .form-group-sm input[type="date"],
+      .form-horizontal .form-group-sm .datepicker input[type="time"],
+      .datepicker .form-horizontal .form-group-sm input[type="time"],
+      .input-group-sm .datepicker input[type="datetime-local"],
+      .datepicker .input-group-sm input[type="datetime-local"] {
+        line-height: 30px; }
+        input[type="date"].input-lg, input[type="time"].input-lg,
+        input[type="datetime-local"].input-lg, input[type="month"].input-lg,
+        .form-horizontal .form-group-lg input[type="date"].form-control,
+        .form-horizontal .form-group-lg input[type="month"].form-control,
+        .form-horizontal .form-group-lg input[type="datetime-local"].form-control,
+        .form-horizontal .form-group-lg input[type="time"].form-control,
+        .input-group-lg input[type="date"].form-control,
+        .input-group-lg input[type="date"].input-group-addon,
+        .input-group-lg > .input-group-btn input[type="date"].btn,
+        .input-group-lg input[type="month"].form-control,
+        .input-group-lg input[type="month"].input-group-addon,
+        .input-group-lg > .input-group-btn input[type="month"].btn,
+        .input-group-lg input[type="datetime-local"].form-control,
+        .input-group-lg input[type="datetime-local"].input-group-addon,
+        .input-group-lg > .input-group-btn input[type="datetime-local"].btn,
+        .input-group-lg input[type="time"].form-control,
+        .input-group-lg input[type="time"].input-group-addon,
+        .input-group-lg > .input-group-btn input[type="time"].btn,
+        .form-horizontal .form-group-lg .datepicker input[type="time"],
+        .datepicker .form-horizontal .form-group-lg input[type="time"],
+        .input-group-lg .datepicker input[type="datetime-local"],
+        .datepicker .input-group-lg input[type="datetime-local"],
+        .form-horizontal .form-group-lg .datepicker input[type="date"],
+        .datepicker .form-horizontal .form-group-lg input[type="date"],
+        .input-group-lg .datepicker input[type="month"],
+        .datepicker .input-group-lg input[type="month"],
+        .form-horizontal .form-group-lg .datepicker input[type="month"],
+        .datepicker .form-horizontal .form-group-lg input[type="month"],
+        .form-horizontal .form-group-lg .datepicker input[type="datetime-local"],
+        .datepicker .form-horizontal .form-group-lg input[type="datetime-local"],
+        .input-group-lg .datepicker input[type="time"],
+        .datepicker .input-group-lg input[type="time"],
+        .input-group-lg .datepicker input[type="date"],
+        .datepicker .input-group-lg input[type="date"] {
+          line-height: 45px; }
+
+.form-group {
+	margin-bottom: 15px; }
+  
+.radio, .checkbox {
+	position: relative;
+    display: block;
+    min-height: 18px;
+    margin-top: 10px;
+    margin-bottom: 10px; }
+.radio label, .checkbox label {
+	padding-left: 20px;
+      margin-bottom: 0;
+      font-weight: normal;
+      cursor: pointer; }
+
+.radio input[type="radio"], .radio-inline input[type="radio"],
+.checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-left: -20px;
+  margin-top: 4px \9; }
+
+  .radio + .radio, .checkbox + .checkbox {
+    margin-top: -5px; }
+
+    .radio-inline, .checkbox-inline {
+      display: inline-block;
+      padding-left: 20px;
+      margin-bottom: 0;
+      vertical-align: middle;
+      font-weight: normal;
+      cursor: pointer; }
+
+      .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
+        margin-top: 0;
+        margin-left: 10px; }
+
+        input[type="radio"][disabled], input[type="radio"].disabled,
+        fieldset[disabled] input[type="radio"], input[type="checkbox"][disabled],
+        input[type="checkbox"].disabled, fieldset[disabled] input[type="checkbox"] {
+          cursor: not-allowed; }
+
+.radio-inline.disabled, fieldset[disabled] .radio-inline,
+.checkbox-inline.disabled, fieldset[disabled] .checkbox-inline {
+  cursor: not-allowed; }
+
+.radio.disabled label, fieldset[disabled] .radio label, .checkbox.disabled label,
+fieldset[disabled] .checkbox label {
+  cursor: not-allowed; }
+
+.form-control-static {
+  padding-top: 7px;
+  padding-bottom: 7px;
+  margin-bottom: 0; }
+  .form-control-static.input-lg, .form-control-static.input-sm,
+  .form-horizontal .form-group-lg .form-control-static.form-control,
+  .form-horizontal .form-group-sm .form-control-static.form-control,
+  .input-group-lg .form-control-static.form-control,
+  .input-group-lg .form-control-static.input-group-addon,
+  .input-group-lg > .input-group-btn .form-control-static.btn,
+  .input-group-sm .form-control-static.form-control,
+  .input-group-sm .form-control-static.input-group-addon,
+  .input-group-sm > .input-group-btn .form-control-static.btn,
+  .input-group-lg .datepicker input.form-control-static,
+  .datepicker .input-group-lg input.form-control-static,
+  .form-horizontal .form-group-lg .datepicker input.form-control-static,
+  .datepicker .form-horizontal .form-group-lg input.form-control-static,
+  .form-horizontal .form-group-sm .datepicker input.form-control-static,
+  .datepicker .form-horizontal .form-group-sm input.form-control-static,
+  .input-group-sm .datepicker input.form-control-static,
+  .datepicker .input-group-sm input.form-control-static {
+    padding-left: 0;
+    padding-right: 0; }
+
+.has-feedback {
+  position: relative; }
+  .has-feedback .form-control, .has-feedback .datepicker input,
+  .datepicker .has-feedback input {
+    padding-right: 40px; }
+
+.form-control-feedback {
+  position: absolute;
+  top: 23px;
+  right: 0;
+  z-index: 2;
   display: block;
-}
-input[type="image"],
-input[type="checkbox"],
-input[type="radio"] {
-  width: auto;
-  height: auto;
-  padding: 0;
-  margin: 3px 0;
-  *margin-top: 0;
-  /* IE7 */
-
-  line-height: normal;
-  cursor: pointer;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-  border: 0 \9;
-  /* IE9 and down */
-
-}
-input[type="image"] {
-  border: 0;
-}
-input[type="file"] {
-  width: auto;
-  padding: initial;
-  line-height: initial;
-  border: initial;
-  background-color: #ffffff;
-  background-color: initial;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  width: auto;
-  height: auto;
-}
-select,
-input[type="file"] {
-  height: 28px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
-  *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-
-  line-height: 28px;
-}
-input[type="file"] {
-  line-height: 18px \9;
-}
-select {
-  width: 220px;
-  background-color: #ffffff;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="image"] {
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-textarea {
-  height: auto;
-}
-input[type="hidden"] {
-  display: none;
-}
-.radio,
-.checkbox {
-  padding-left: 18px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -18px;
-}
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px;
-}
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-input,
-textarea {
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-  transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus,
-textarea:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus,
-select:focus {
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.input-mini {
-  width: 60px;
-}
-.input-small {
-  width: 90px;
-}
-.input-medium {
-  width: 150px;
-}
-.input-large {
-  width: 210px;
-}
-.input-xlarge {
-  width: 270px;
-}
-.input-xxlarge {
-  width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input {
-  float: none;
-  margin-left: 0;
-}
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
-  width: 50px;
-}
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
-  width: 130px;
-}
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
-  width: 210px;
-}
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
-  width: 290px;
-}
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
-  width: 370px;
-}
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
-  width: 450px;
-}
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
-  width: 530px;
-}
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
-  width: 610px;
-}
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
-  width: 690px;
-}
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
-  width: 770px;
-}
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
-  width: 850px;
-}
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
-  width: 930px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  background-color: #f5f5f5;
-  border-color: #ddd;
-  cursor: not-allowed;
-}
-.control-group.warning > label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
-  color: #c09853;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  color: #c09853;
-  border-color: #c09853;
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
-  border-color: #a47e3c;
-  -webkit-box-shadow: 0 0 6px #dbc59e;
-  -moz-box-shadow: 0 0 6px #dbc59e;
-  box-shadow: 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
-  color: #c09853;
-  background-color: #fcf8e3;
-  border-color: #c09853;
-}
-.control-group.error > label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
-  color: #b94a48;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  color: #b94a48;
-  border-color: #b94a48;
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
-  border-color: #953b39;
-  -webkit-box-shadow: 0 0 6px #d59392;
-  -moz-box-shadow: 0 0 6px #d59392;
-  box-shadow: 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
-  color: #b94a48;
-  background-color: #f2dede;
-  border-color: #b94a48;
-}
-.control-group.success > label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
-  color: #468847;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  color: #468847;
-  border-color: #468847;
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
-  border-color: #356635;
-  -webkit-box-shadow: 0 0 6px #7aba7b;
-  -moz-box-shadow: 0 0 6px #7aba7b;
-  box-shadow: 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
-  color: #468847;
-  background-color: #dff0d8;
-  border-color: #468847;
-}
-input:focus:required:invalid,
-textarea:focus:required:invalid,
-select:focus:required:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-}
-input:focus:required:invalid:focus,
-textarea:focus:required:invalid:focus,
-select:focus:required:invalid:focus {
-  border-color: #e9322d;
-  -webkit-box-shadow: 0 0 6px #f8b9b7;
-  -moz-box-shadow: 0 0 6px #f8b9b7;
-  box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
-  padding: 17px 20px 18px;
-  margin-top: 18px;
-  margin-bottom: 18px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-}
-.uneditable-input {
-  display: block;
-  background-color: #ffffff;
-  border-color: #eee;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  cursor: not-allowed;
-}
-:-moz-placeholder {
-  color: #999999;
-}
-::-webkit-input-placeholder {
-  color: #999999;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 0;
-  color: #999999;
-}
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-  margin-bottom: 9px;
-  vertical-align: middle;
-  padding-left: 5px;
-}
-.input-prepend,
-.input-append {
-  margin-bottom: 5px;
-  *zoom: 1;
-}
-.input-prepend:before,
-.input-append:before,
-.input-prepend:after,
-.input-append:after {
-  display: table;
-  content: "";
-}
-.input-prepend:after,
-.input-append:after {
-  clear: both;
-}
-.input-prepend input,
-.input-append input,
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend input:focus,
-.input-append input:focus,
-.input-prepend .uneditable-input:focus,
-.input-append .uneditable-input:focus {
-  position: relative;
-  z-index: 2;
-}
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
-  border-left-color: #ccc;
-}
-.input-prepend .add-on,
-.input-append .add-on {
-  float: left;
-  display: block;
-  width: auto;
-  min-width: 16px;
-  height: 18px;
-  margin-right: -1px;
-  padding: 4px 5px;
-  font-weight: normal;
-  line-height: 18px;
-  color: #999999;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-prepend .active,
-.input-append .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-.input-prepend .add-on {
-  *margin-top: 1px;
-  /* IE6-7 */
-
-}
-.input-append input,
-.input-append .uneditable-input {
-  float: left;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append .uneditable-input {
-  border-left-color: #eee;
-  border-right-color: #ccc;
-}
-.input-append .add-on {
-  margin-right: 0;
-  margin-left: -1px;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append input:first-child {
-  *margin-left: -160px;
-}
-.input-append input:first-child + .add-on {
-  *margin-left: -21px;
-}
-.search-query {
-  padding-left: 14px;
-  padding-right: 14px;
-  margin-bottom: 0;
-  -webkit-border-radius: 14px;
-  -moz-border-radius: 14px;
-  border-radius: 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input {
-  display: inline-block;
-  margin-bottom: 0;
-}
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
-  display: none;
-}
-.form-search label,
-.form-inline label,
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  display: inline-block;
-}
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on,
-.form-search .input-append .add-on,
-.form-inline .input-prepend .add-on {
-  vertical-align: middle;
-}
-.form-search .radio,
-.form-inline .radio,
-.form-search .checkbox,
-.form-inline .checkbox {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+  text-align: center; }
+
+  .input-lg + .form-control-feedback,
+  .form-horizontal .form-group-lg .form-control + .form-control-feedback,
+  .input-group-lg .form-control + .form-control-feedback,
+  .input-group-lg .input-group-addon + .form-control-feedback,
+  .input-group-lg > .input-group-btn .btn + .form-control-feedback,
+  .input-group-lg .datepicker input + .form-control-feedback,
+  .datepicker .input-group-lg input + .form-control-feedback,
+  .form-horizontal .form-group-lg .datepicker input + .form-control-feedback,
+  .datepicker .form-horizontal .form-group-lg input + .form-control-feedback {
+    width: 45px;
+    height: 45px;
+    line-height: 45px; }
+
+    .input-sm + .form-control-feedback,
+    .form-horizontal .form-group-sm .form-control + .form-control-feedback,
+    .input-group-sm .form-control + .form-control-feedback,
+    .input-group-sm .input-group-addon + .form-control-feedback,
+    .input-group-sm > .input-group-btn .btn + .form-control-feedback,
+    .input-group-sm .datepicker input + .form-control-feedback,
+    .datepicker .input-group-sm input + .form-control-feedback,
+    .form-horizontal .form-group-sm .datepicker input + .form-control-feedback,
+    .datepicker .form-horizontal .form-group-sm input + .form-control-feedback {
+      width: 30px;
+      height: 30px;
+      line-height: 30px; }
+
+      .has-feedback label.sr-only ~ .form-control-feedback {
+        top: 0; }
+
+        .help-block {
+          display: block;
+          margin-top: 5px;
+          margin-bottom: 10px;
+          color: #737373; }
+
+@media (min-width: 768px) {
+.form-inline .form-group, .navbar-form .form-group, .table_actions .form-group {
+	display: inline-block;
+	margin-bottom: 0;
+	vertical-align: middle;   }
+.form-inline .form-control, .navbar-form .form-control,
+.table_actions .form-control, .form-inline .datepicker input,
+.datepicker .form-inline input, .table_actions .datepicker input,
+.datepicker .table_actions input, .navbar-form .datepicker input,
+.datepicker .navbar-form input {
+	background: #ffffff;
+	display: inline-block;
+	width: auto;
+	vertical-align: middle;   }
+.form-inline .input-group, .navbar-form .input-group, .table_actions .input-group {
+                  display: inline-table;
+                  vertical-align: middle;   }
+                  .form-inline .input-group .input-group-addon,
+                  .form-inline .input-group .input-group-btn,
+                  .form-inline .input-group .form-control,
+                  .navbar-form .input-group .input-group-btn,
+                  .navbar-form .input-group .form-control,
+                  .navbar-form .input-group .input-group-addon,
+                  .table_actions .input-group .input-group-btn,
+                  .table_actions .input-group .form-control,
+                  .table_actions .input-group .input-group-addon,
+                  .navbar-form .input-group .datepicker input,
+                  .datepicker .navbar-form .input-group input,
+                  .form-inline .input-group .datepicker input,
+                  .datepicker .form-inline .input-group input,
+                  .table_actions .input-group .datepicker input,
+                  .datepicker .table_actions .input-group input {
+                    width: auto;   }
+            .form-inline .input-group > .form-control,
+            .navbar-form .input-group > .form-control,
+            .table_actions .input-group > .form-control,
+            .table_actions .input-group .datepicker > input,
+            .datepicker .table_actions .input-group > input,
+            .form-inline .input-group .datepicker > input,
+            .datepicker .form-inline .input-group > input,
+            .navbar-form .input-group .datepicker > input,
+            .datepicker .navbar-form .input-group > input {
+              width: 100%;   }
+              .form-inline .control-label, .navbar-form .control-label,
+              .table_actions .control-label {
+                margin-bottom: 0;
+                vertical-align: middle;   }
+                .form-inline .radio, .form-inline .checkbox, .navbar-form .radio,
+                .navbar-form .checkbox, .table_actions .radio, .table_actions .checkbox {
+                  display: inline-block;
+                  margin-top: 0;
+                  margin-bottom: 0;
+                  vertical-align: middle;   }
+                  .form-inline .radio label, .form-inline .checkbox label, .navbar-form .radio label,
+                  .navbar-form .checkbox label, .table_actions .radio label,
+                  .table_actions .checkbox label {
+                    padding-left: 0;   }
+            .form-inline .radio input[type="radio"],
+            .form-inline .checkbox input[type="checkbox"],
+            .navbar-form .checkbox input[type="checkbox"],
+            .navbar-form .radio input[type="radio"],
+            .table_actions .checkbox input[type="checkbox"],
+            .table_actions .radio input[type="radio"] {
+              position: relative;
+              margin-left: 0;   }
+              .form-inline .has-feedback .form-control-feedback,
+              .navbar-form .has-feedback .form-control-feedback,
+              .table_actions .has-feedback .form-control-feedback {
+                top: 0;   }
+}
+
+.form-horizontal .radio, .form-horizontal .checkbox,
+.form-horizontal .radio-inline, .form-horizontal .checkbox-inline {
+  margin-top: 0;
   margin-bottom: 0;
-  vertical-align: middle;
-}
-.control-group {
-  margin-bottom: 9px;
-}
-legend + .control-group {
-  margin-top: 18px;
-  -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
-  margin-bottom: 18px;
-  *zoom: 1;
-}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
+  padding-top: 7px; }
+  .form-horizontal .radio, .form-horizontal .checkbox {
+    min-height: 25px; }
+    .form-horizontal .form-group {
+      margin-left: -15px;
+      margin-right: -15px; }
+      @media (min-width: 768px) {
+        .form-horizontal .control-label {
+          text-align: right;
+          margin-bottom: 0;
+          padding-top: 7px;   }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+  top: 0;
+  right: 15px; }
+  @media (min-width: 768px) {
+    .form-horizontal .form-group-lg .control-label {
+      padding-top: 14.3px;   }
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-sm .control-label {
+    padding-top: 6px;   }
+}
+.form-control:focus, .datepicker input:focus {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }
+
+.input-sm, .form-horizontal .form-group-sm .form-control,
+.input-group-sm .form-control, .input-group-sm .input-group-addon,
+.input-group-sm > .input-group-btn .btn,
+.form-horizontal .form-group-sm .datepicker input,
+.datepicker .form-horizontal .form-group-sm input,
+.input-group-sm .datepicker input, .datepicker .input-group-sm input {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px; }
+
+  select.input-sm, .form-horizontal .form-group-sm select.form-control,
+  .input-group-sm select.form-control, .input-group-sm select.input-group-addon,
+  .input-group-sm > .input-group-btn select.btn,
+  .input-group-sm .datepicker selectinput, .datepicker .input-group-sm selectinput,
+  .form-horizontal .form-group-sm .datepicker selectinput,
+  .datepicker .form-horizontal .form-group-sm selectinput {
+    height: 30px;
+    line-height: 30px; }
+
+    textarea.input-sm, select[multiple].input-sm,
+    .form-horizontal .form-group-sm textarea.form-control,
+    .form-horizontal .form-group-sm select[multiple].form-control,
+    .input-group-sm textarea.form-control, .input-group-sm textarea.input-group-addon,
+    .input-group-sm > .input-group-btn textarea.btn,
+    .input-group-sm select[multiple].form-control,
+    .input-group-sm select[multiple].input-group-addon,
+    .input-group-sm > .input-group-btn select[multiple].btn,
+    .form-horizontal .form-group-sm .datepicker selectinput[multiple],
+    .datepicker .form-horizontal .form-group-sm selectinput[multiple],
+    .form-horizontal .form-group-sm .datepicker textareainput,
+    .datepicker .form-horizontal .form-group-sm textareainput,
+    .input-group-sm .datepicker selectinput[multiple],
+    .datepicker .input-group-sm selectinput[multiple],
+    .input-group-sm .datepicker textareainput,
+    .datepicker .input-group-sm textareainput {
+      height: auto; }
+
+      .input-lg, .form-horizontal .form-group-lg .form-control,
+      .input-group-lg .form-control, .input-group-lg .input-group-addon,
+      .input-group-lg > .input-group-btn .btn, .input-group-lg .datepicker input,
+      .datepicker .input-group-lg input,
+      .form-horizontal .form-group-lg .datepicker input,
+      .datepicker .form-horizontal .form-group-lg input {
+        height: 45px;
+        padding: 10px 16px;
+        font-size: 17px;
+        line-height: 1.33;
+        border-radius: 6px; }
+
+        select.input-lg, .form-horizontal .form-group-lg select.form-control,
+        .input-group-lg select.form-control, .input-group-lg select.input-group-addon,
+        .input-group-lg > .input-group-btn select.btn,
+        .input-group-lg .datepicker selectinput, .datepicker .input-group-lg selectinput,
+        .form-horizontal .form-group-lg .datepicker selectinput,
+        .datepicker .form-horizontal .form-group-lg selectinput {
+          height: 45px;
+          line-height: 45px; }
+
+          textarea.input-lg, select[multiple].input-lg,
+          .form-horizontal .form-group-lg select[multiple].form-control,
+          .form-horizontal .form-group-lg textarea.form-control,
+          .input-group-lg select[multiple].form-control,
+          .input-group-lg select[multiple].input-group-addon,
+          .input-group-lg > .input-group-btn select[multiple].btn,
+          .input-group-lg textarea.form-control, .input-group-lg textarea.input-group-addon,
+          .input-group-lg > .input-group-btn textarea.btn,
+          .input-group-lg .datepicker selectinput[multiple],
+          .datepicker .input-group-lg selectinput[multiple],
+          .form-horizontal .form-group-lg .datepicker textareainput,
+          .datepicker .form-horizontal .form-group-lg textareainput,
+          .form-horizontal .form-group-lg .datepicker selectinput[multiple],
+          .datepicker .form-horizontal .form-group-lg selectinput[multiple],
+          .input-group-lg .datepicker textareainput,
+          .datepicker .input-group-lg textareainput {
+            height: auto; }
+            .has-success .help-block, .has-success .control-label, .has-success .radio,
+            .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline {
+              color: #3c763d; }
+              .has-success .form-control, .has-success .datepicker input,
+              .datepicker .has-success input {
+                border-color: #3c763d;
+                -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+                box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
+                .has-success .form-control:focus, .has-success .datepicker input:focus,
+                .datepicker .has-success input:focus {
+                  border-color: #2b542c;
+                  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+                  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }
+            .has-success .input-group-addon {
+              color: #3c763d;
+              border-color: #3c763d;
+              background-color: #dff0d8; }
+              .has-success .form-control-feedback {
+                color: #3c763d; }
+                .has-warning .help-block, .has-warning .control-label, .has-warning .radio,
+                .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline {
+                  color: #8a6d3b; }
+                  .has-warning .form-control, .has-warning .datepicker input,
+                  .datepicker .has-warning input {
+                    border-color: #8a6d3b;
+                    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+                    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
+                    .has-warning .form-control:focus, .has-warning .datepicker input:focus,
+                    .datepicker .has-warning input:focus {
+                      border-color: #66512c;
+                      -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+                      box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }
+            .has-warning .input-group-addon {
+              color: #8a6d3b;
+              border-color: #8a6d3b;
+              background-color: #fcf8e3; }
+              .has-warning .form-control-feedback {
+                color: #8a6d3b; }
+                .has-error .help-block, .has-error .control-label, .has-error .radio,
+                .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline {
+                  color: #a94442; }
+                  .has-error .form-control, .has-error .datepicker input,
+                  .datepicker .has-error input {
+                    border-color: #a94442;
+                    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+                    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
+                    .has-error .form-control:focus, .has-error .datepicker input:focus,
+                    .datepicker .has-error input:focus {
+                      border-color: #843534;
+                      -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+                      box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }
+            .has-error .input-group-addon {
+              color: #a94442;
+              border-color: #a94442;
+              background-color: #f2dede; }
+              .has-error .form-control-feedback {
+                color: #a94442; }
+.form-control::-moz-placeholder, .datepicker input::-moz-placeholder {
+  color: #777;
+  opacity: 1; }
+  .form-control:-ms-input-placeholder, .datepicker input:-ms-input-placeholder {
+    color: #777; }
+    .form-control::-webkit-input-placeholder,
+    .datepicker input::-webkit-input-placeholder {
+      color: #777; }
+.input-group-addon.input-lg,
+.form-horizontal .form-group-lg .input-group-addon.form-control,
+.input-group-lg .input-group-addon.form-control,
+.input-group-lg .input-group-addon,
+.input-group-lg > .input-group-btn .input-group-addon.btn,
+.form-horizontal .form-group-lg .datepicker input.input-group-addon,
+.datepicker .form-horizontal .form-group-lg input.input-group-addon,
+.input-group-lg .datepicker input.input-group-addon,
+.datepicker .input-group-lg input.input-group-addon {
+  padding: 10px 16px;
+  font-size: 17px;
+  border-radius: 6px; }
+  .input-group-addon.input-sm,
+  .form-horizontal .form-group-sm .input-group-addon.form-control,
+  .input-group-sm .input-group-addon.form-control,
+  .input-group-sm .input-group-addon,
+  .input-group-sm > .input-group-btn .input-group-addon.btn,
+  .input-group-sm .datepicker input.input-group-addon,
+  .datepicker .input-group-sm input.input-group-addon,
+  .form-horizontal .form-group-sm .datepicker input.input-group-addon,
+  .datepicker .form-horizontal .form-group-sm input.input-group-addon {
+    padding: 5px 10px;
+    font-size: 12px;
+    border-radius: 3px; }
+
+.input-group {
+  position: relative;
   display: table;
-  content: "";
-}
-.form-horizontal .control-group:after {
-  clear: both;
-}
-.form-horizontal .control-label {
-  float: left;
-  width: 140px;
-  padding-top: 5px;
-  text-align: right;
-}
-.form-horizontal .controls {
-  margin-left: 160px;
-}
-.form-horizontal .form-actions {
-  padding-left: 160px;
-}
-table {
-  max-width: 100%;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-.table {
-  width: 100%;
-  margin-bottom: 18px;
-}
-.table th,
-.table td {
-  padding: 8px;
-  line-height: 18px;
-  text-align: left;
-  vertical-align: top;
-  border-bottom: 1px solid #EEEEEE;
-}
-.table th {
-  font-weight: bold;
-}
-.table thead th {
-  vertical-align: bottom;
-}
-.table thead:first-child tr th,
-.table thead:first-child tr td {
-  border-top: 0;
-}
-.table tbody + tbody {
-  border-top: 2px solid #C4CED8;
-}
-.table-condensed th,
-.table-condensed td {
-  padding: 4px 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-  border-collapse: separate;
-  *border-collapse: collapsed;
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  border-radius: 0px;
-}
-.table-bordered th + th,
-.table-bordered td + td,
-.table-bordered th + td,
-.table-bordered td + th {
-  /*border-left: 1px solid #D5DFE6;*/
-}
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
-  border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child th:first-child,
-.table-bordered tbody:first-child tr:first-child td:first-child {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.table-bordered thead:first-child tr:first-child th:last-child,
-.table-bordered tbody:first-child tr:first-child td:last-child {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.table-bordered thead:last-child tr:last-child th:first-child,
-.table-bordered tbody:last-child tr:last-child td:first-child {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.table-bordered thead:last-child tr:last-child th:last-child,
-.table-bordered tbody:last-child tr:last-child td:last-child {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
-  background-color: #f9f9f9;
-}
-.table tbody tr:hover td,
-.table tbody tr:hover th {
-  background-color: #EBECED;
-}
-table .span1 {
-  float: none;
-  width: 44px;
-  margin-left: 0;
-}
-table .span2 {
-  float: none;
-  width: 124px;
-  margin-left: 0;
-}
-table .span3 {
-  float: none;
-  width: 204px;
-  margin-left: 0;
-}
-table .span4 {
-  float: none;
-  width: 284px;
-  margin-left: 0;
-}
-table .span5 {
-  float: none;
-  width: 364px;
-  margin-left: 0;
-}
-table .span6 {
-  float: none;
-  width: 444px;
-  margin-left: 0;
-}
-table .span7 {
-  float: none;
-  width: 524px;
-  margin-left: 0;
-}
-table .span8 {
-  float: none;
-  width: 604px;
-  margin-left: 0;
-}
-table .span9 {
-  float: none;
-  width: 684px;
-  margin-left: 0;
-}
-table .span10 {
-  float: none;
-  width: 764px;
-  margin-left: 0;
-}
-table .span11 {
-  float: none;
-  width: 844px;
-  margin-left: 0;
-}
-table .span12 {
-  float: none;
-  width: 924px;
-  margin-left: 0;
-}
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline-block;
-  width: 0px;
-  height: 0px;
-  line-height: 14px;
-  vertical-align: text-top;
-  /*xbackground-image: url('/static/bootstrap/img/glyphicons-halflings.png?531d4b607365');*/
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-  *margin-right: .3em;
-}
-[class^="icon-"]:last-child,
-[class*=" icon-"]:last-child {
-  *margin-left: 0;
-}
-.icon-white {
-  /*xbackground-image: url('/static/bootstrap/img/glyphicons-halflings-white.png?11118ae8db79');*/
-}
-.icon-glass {
-  background-position: 0      0;
-}
-.icon-music {
-  background-position: -24px 0;
-}
-.icon-search {
-  background-position: -48px 0;
-}
-.icon-envelope {
-  background-position: -72px 0;
-}
-.icon-heart {
-  background-position: -96px 0;
-}
-.icon-star {
-  background-position: -120px 0;
-}
-.icon-star-empty {
-  background-position: -144px 0;
-}
-.icon-user {
-  background-position: -168px 0;
-}
-.icon-film {
-  background-position: -192px 0;
-}
-.icon-th-large {
-  background-position: -216px 0;
-}
-.icon-th {
-  background-position: -240px 0;
-}
-.icon-th-list {
-  background-position: -264px 0;
-}
-.icon-ok {
-  background-position: -288px 0;
-}
-.icon-remove {
-  background-position: -312px 0;
-}
-.icon-zoom-in {
-  background-position: -336px 0;
-}
-.icon-zoom-out {
-  background-position: -360px 0;
-}
-.icon-off {
-  background-position: -384px 0;
-}
-.icon-signal {
-  background-position: -408px 0;
-}
-.icon-cog {
-  background-position: -432px 0;
-}
-.icon-trash {
-  background-position: -456px 0;
-}
-.icon-home {
-  background-position: 0 -24px;
-}
-.icon-file {
-  background-position: -24px -24px;
-}
-.icon-time {
-  background-position: -48px -24px;
-}
-.icon-road {
-  background-position: -72px -24px;
-}
-.icon-download-alt {
-  background-position: -96px -24px;
-}
-.icon-download {
-  background-position: -120px -24px;
-}
-.icon-upload {
-  background-position: -144px -24px;
-}
-.icon-inbox {
-  background-position: -168px -24px;
-}
-.icon-play-circle {
-  background-position: -192px -24px;
-}
-.icon-repeat {
-  background-position: -216px -24px;
-}
-.icon-refresh {
-  background-position: -240px -24px;
-}
-.icon-list-alt {
-  background-position: -264px -24px;
-}
-.icon-lock {
-  background-position: -287px -24px;
-}
-.icon-flag {
-  background-position: -312px -24px;
-}
-.icon-headphones {
-  background-position: -336px -24px;
-}
-.icon-volume-off {
-  background-position: -360px -24px;
-}
-.icon-volume-down {
-  background-position: -384px -24px;
-}
-.icon-volume-up {
-  background-position: -408px -24px;
-}
-.icon-qrcode {
-  background-position: -432px -24px;
-}
-.icon-barcode {
-  background-position: -456px -24px;
-}
-.icon-tag {
-  background-position: 0 -48px;
-}
-.icon-tags {
-  background-position: -25px -48px;
-}
-.icon-book {
-  background-position: -48px -48px;
-}
-.icon-bookmark {
-  background-position: -72px -48px;
-}
-.icon-print {
-  background-position: -96px -48px;
-}
-.icon-camera {
-  background-position: -120px -48px;
-}
-.icon-font {
-  background-position: -144px -48px;
-}
-.icon-bold {
-  background-position: -167px -48px;
-}
-.icon-italic {
-  background-position: -192px -48px;
-}
-.icon-text-height {
-  background-position: -216px -48px;
-}
-.icon-text-width {
-  background-position: -240px -48px;
-}
-.icon-align-left {
-  background-position: -264px -48px;
-}
-.icon-align-center {
-  background-position: -288px -48px;
-}
-.icon-align-right {
-  background-position: -312px -48px;
-}
-.icon-align-justify {
-  background-position: -336px -48px;
-}
-.icon-list {
-  background-position: -360px -48px;
-}
-.icon-indent-left {
-  background-position: -384px -48px;
-}
-.icon-indent-right {
-  background-position: -408px -48px;
-}
-.icon-facetime-video {
-  background-position: -432px -48px;
-}
-.icon-picture {
-  background-position: -456px -48px;
-}
-.icon-pencil {
-  background-position: 0 -72px;
-}
-.icon-map-marker {
-  background-position: -24px -72px;
-}
-.icon-adjust {
-  background-position: -48px -72px;
-}
-.icon-tint {
-  background-position: -72px -72px;
-}
-.icon-edit {
-  background-position: -96px -72px;
-}
-.icon-share {
-  background-position: -120px -72px;
-}
-.icon-check {
-  background-position: -144px -72px;
-}
-.icon-move {
-  background-position: -168px -72px;
-}
-.icon-step-backward {
-  background-position: -192px -72px;
-}
-.icon-fast-backward {
-  background-position: -216px -72px;
-}
-.icon-backward {
-  background-position: -240px -72px;
-}
-.icon-play {
-  background-position: -264px -72px;
-}
-.icon-pause {
-  background-position: -288px -72px;
-}
-.icon-stop {
-  background-position: -312px -72px;
-}
-.icon-forward {
-  background-position: -336px -72px;
-}
-.icon-fast-forward {
-  background-position: -360px -72px;
-}
-.icon-step-forward {
-  background-position: -384px -72px;
-}
-.icon-eject {
-  background-position: -408px -72px;
-}
-.icon-chevron-left {
-  background-position: -432px -72px;
-}
-.icon-chevron-right {
-  background-position: -456px -72px;
-}
-.icon-plus-sign {
-  background-position: 0 -96px;
-}
-.icon-minus-sign {
-  background-position: -24px -96px;
-}
-.icon-remove-sign {
-  background-position: -48px -96px;
-}
-.icon-ok-sign {
-  background-position: -72px -96px;
-}
-.icon-question-sign {
-  background-position: -96px -96px;
-}
-.icon-info-sign {
-  background-position: -120px -96px;
-}
-.icon-screenshot {
-  background-position: -144px -96px;
-}
-.icon-remove-circle {
-  background-position: -168px -96px;
-}
-.icon-ok-circle {
-  background-position: -192px -96px;
-}
-.icon-ban-circle {
-  background-position: -216px -96px;
-}
-.icon-arrow-left {
-  background-position: -240px -96px;
-}
-.icon-arrow-right {
-  background-position: -264px -96px;
-}
-.icon-arrow-up {
-  background-position: -289px -96px;
-}
-.icon-arrow-down {
-  background-position: -312px -96px;
-}
-.icon-share-alt {
-  background-position: -336px -96px;
-}
-.icon-resize-full {
-  background-position: -360px -96px;
-}
-.icon-resize-small {
-  background-position: -384px -96px;
-}
-.icon-plus {
-  background-position: -408px -96px;
-}
-.icon-minus {
-  background-position: -433px -96px;
-}
-.icon-asterisk {
-  background-position: -456px -96px;
-}
-.icon-exclamation-sign {
-  background-position: 0 -120px;
-}
-.icon-gift {
-  background-position: -24px -120px;
-}
-.icon-leaf {
-  background-position: -48px -120px;
-}
-.icon-fire {
-  background-position: -72px -120px;
-}
-.icon-eye-open {
-  background-position: -96px -120px;
-}
-.icon-eye-close {
-  background-position: -120px -120px;
-}
-.icon-warning-sign {
-  background-position: -144px -120px;
-}
-.icon-plane {
-  background-position: -168px -120px;
-}
-.icon-calendar {
-  background-position: -192px -120px;
-}
-.icon-random {
-  background-position: -216px -120px;
-}
-.icon-comment {
-  background-position: -240px -120px;
-}
-.icon-magnet {
-  background-position: -264px -120px;
-}
-.icon-chevron-up {
-  background-position: -288px -120px;
-}
-.icon-chevron-down {
-  background-position: -313px -119px;
-}
-.icon-retweet {
-  background-position: -336px -120px;
-}
-.icon-shopping-cart {
-  background-position: -360px -120px;
-}
-.icon-folder-close {
-  background-position: -384px -120px;
-}
-.icon-folder-open {
-  background-position: -408px -120px;
-}
-.icon-resize-vertical {
-  background-position: -432px -119px;
-}
-.icon-resize-horizontal {
-  background-position: -456px -118px;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  border: 1px solid #eeeeee;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
+  border-collapse: separate; }
+  .input-group[class*="col-"] {
+    float: none;
+    padding-left: 0;
+    padding-right: 0; }
+    .input-group .form-control, .input-group .datepicker input,
+    .datepicker .input-group input {
+      position: relative;
+      z-index: 2;
+      float: left;
+      width: 100%;
+      margin-bottom: 0; }
+
+.input-group-addon, .input-group-btn, .input-group .form-control,
+.input-group .datepicker input, .datepicker .input-group input {
+  display: table-cell; }
+  .input-group-addon:not(:first-child):not(:last-child),
+  .input-group-btn:not(:first-child):not(:last-child),
+  .input-group .form-control:not(:first-child):not(:last-child),
+  .input-group .datepicker input:not(:first-child):not(:last-child),
+  .datepicker .input-group input:not(:first-child):not(:last-child) {
+    border-radius: 0; }
+
+.input-group-addon, .input-group-btn {
+  width: 1%;
+  white-space: nowrap;
+  vertical-align: middle; }
+
+  .input-group-addon {
+    padding: 6px 12px;
+    font-size: 13px;
+    font-weight: normal;
+    line-height: 1;
+    color: #555;
+    text-align: center;
+    background-color: #eee;
+    border: 1px solid #ccc;
+    border-radius: 4px; }
+    .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] {
+      margin-top: 0; }
+
+.input-group .form-control:first-child, .input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn,
+.input-group .datepicker input:first-child,
+.datepicker .input-group input:first-child {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0; }
+
+  .input-group-addon:first-child {
+    border-right: 0; }
+
+    .input-group .form-control:last-child, .input-group-addon:last-child,
+    .input-group-btn:last-child > .btn,
+    .input-group-btn:last-child > .btn-group > .btn,
+    .input-group-btn:last-child > .dropdown-toggle,
+    .input-group-btn:first-child > .btn:not(:first-child),
+    .input-group-btn:first-child > .btn-group:not(:first-child) > .btn,
+    .input-group .datepicker input:last-child,
+    .datepicker .input-group input:last-child {
+      border-bottom-left-radius: 0;
+      border-top-left-radius: 0; }
+
+      .input-group-addon:last-child {
+        border-left: 0; }
+
+        .input-group-btn {
+          position: relative;
+          font-size: 0;
+          white-space: nowrap; }
+          .input-group-btn > .btn {
+            position: relative; }
+            .input-group-btn > .btn + .btn {
+              margin-left: -1px; }
+              .input-group-btn > .btn:hover, .input-group-btn > .btn:focus,
+              .input-group-btn > .btn:active {
+                z-index: 2; }
+          .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group {
+            margin-right: -1px; }
+          .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group {
+            margin-left: -1px; }
+.btn {
+	display: inline-block;
+	margin-bottom: 0;
+	font-weight: normal;
+	text-align: center;
+	vertical-align: middle;
+	cursor: pointer;
+	background-image: none;
+	border: 1px solid transparent;
+	white-space: nowrap;
+	padding: 6px 12px;
+	font-size: 13px;
+	line-height: 1.5;
+	border-radius: 4px;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none; }
+.btn:focus, .btn:active:focus, .btn.active:focus {
+    outline: thin dotted;
+    outline: 5px auto -webkit-focus-ring-color;
+    outline-offset: -2px; }
+.btn:hover, .btn:focus {
+    color: #333;
+    text-decoration: none; }
+.btn:active, .btn.active {
+	outline: 0;
+	background-image: none;
+	-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.12);
+	box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.12); }
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+	cursor: not-allowed;
+	pointer-events: none;
+	opacity: 0.65;
+	filter: alpha(opacity=65);
+	-webkit-box-shadow: none;
+	box-shadow: none; }
+
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc; }
+
+.btn-primary {
+ 	font-weight: 700;
+    color: #ffffff !important;
+    background: #0572ce !important;
+    border-color: #0572ce !important; 
+   }
+
+.btn-success {
+	color: #fff;
+	background-color: #5cb85c;
+	border-color: #4cae4c; }
+
+.btn-info {
+	color: #fff;
+	background-color: #5bc0de;
+	border-color: #46b8da; }
+
+.btn-warning {
+	color: #fff;
+	background-color: #f0ad4e;
+	border-color: #eea236; }
+
+.table_actions .btn-danger {
+	color: #ffffff !important;
+	background: #0572ce !important;
+	border: 1px solid #0572ce !important; }
+
+.actions_column .btn-danger:hover, .actions_column .btn-danger:focus, .actions_column .btn-danger:active  {
+	background: #eeeeee !important;
+	border-color: #cccccc !important;
+	color: #000000;
+}
+	
+.btn-link {
+	color: #428bca;
+	font-weight: normal;
+	cursor: pointer;
+	border-radius: 0; }
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+	background-color: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none; }
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+	border-color: transparent; }
+.btn-link:hover, .btn-link:focus {
+	color: #005D9D;
+	text-decoration: underline;
+	background-color: transparent; }
+.btn-link[disabled]:hover, .btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus {
+	color: #777;
+	text-decoration: none; }
+
+.btn-lg, .btn-group-lg .btn {
+  padding: 10px 16px;
+  font-size: 17px;
+  line-height: 1.33;
+  border-radius: 6px; }
+
+.btn-sm, .btn-group-sm .btn {
+    padding: 5px 10px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px; }
+
+.btn-xs, .btn-group-xs .btn {
+	padding: 1px 5px;
+	font-size: 12px;
+	line-height: 1.5;
+	border-radius: 3px; 
+	background: #0572ce;
+	border: 1px solid #0572ce;
+	color: #ffffff;
+	font-weight: 400;
+	}
+
+.btn-xs:hover, .btn-group-xs .btn:hover,
+.btn-sm:hover, .btn-group-sm .btn:hover {
+	background: #0572ce;
+	border: 1px solid 0572ce;	
+}
+
+.actions_column .btn-sm:hover {
+	background: #ffffff;
+}
+
+.btn-block {
+	display: block;
+	width: 100%; }
+
+.btn-block + .btn-block {
+	margin-top: 5px; }
+
+input[type="submit"].btn-block, input[type="reset"].btn-block,
+input[type="button"].btn-block {
+	width: 100%; }	
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active,
+.open > .btn-default.dropdown-toggle {
+	color: #333;
+	background-color: #e6e6e6;
+	border-color: #adadad; }
+.btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle {
+    background-image: none; }
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus,
+.btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled],
+.btn-default[disabled]:hover, .btn-default[disabled]:focus,
+.btn-default[disabled]:active, .btn-default[disabled].active,
+fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover,
+fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active,
+fieldset[disabled] .btn-default.active {
+	background-color: #fff;
+	border-color: #ccc; }
+.btn-default .badge {
+	color: #fff;
+	background-color: #333; }
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active,
+.open > .btn-primary.dropdown-toggle, .btn-danger:hover {
+	color: #fff;
+    background-color: 0572ce !important;
+    border-color: 0572ce !important; 
+}
+.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {
+	background-image: none; }
+.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus,
+.btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled],
+.btn-primary[disabled]:hover, .btn-primary[disabled]:focus,
+.btn-primary[disabled]:active, .btn-primary[disabled].active,
+fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover,
+fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active,
+fieldset[disabled] .btn-primary.active {
+	background-color: #428bca;
+	border-color: #357ebd; }
+.btn-primary .badge {
+	color: #428bca;
+	background-color: #fff; }
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active,
+.open > .btn-success.dropdown-toggle {
+	color: #fff;
+    background-color: #449d44;
+    border-color: #398439; }
+.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {
+	background-image: none; }
+.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus,
+.btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled],
+.btn-success[disabled]:hover, .btn-success[disabled]:focus,
+.btn-success[disabled]:active, .btn-success[disabled].active,
+	fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover,
+	fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active,
+	fieldset[disabled] .btn-success.active {
+	background-color: #5cb85c;
+	border-color: #4cae4c; }
+.btn-success .badge {
+	color: #5cb85c;
+	background-color: #fff; }
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active,
+.open > .btn-info.dropdown-toggle {
+    color: #fff;
+    background-color: #31b0d5;
+    border-color: #269abc; }
+.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {
+	background-image: none; }
+.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus,
+.btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled],
+.btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active,
+.btn-info[disabled].active, fieldset[disabled] .btn-info,
+	fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus,
+	fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
+	background-color: #5bc0de;
+	border-color: #46b8da; }
+.btn-info .badge {
+	color: #5bc0de;
+	background-color: #fff; }
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active,
+.open > .btn-warning.dropdown-toggle {
+    color: #fff;
+    background-color: #ec971f;
+	border-color: #d58512; }
+.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {
+	background-image: none; }
+.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus,
+.btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled],
+.btn-warning[disabled]:hover, .btn-warning[disabled]:focus,
+.btn-warning[disabled]:active, .btn-warning[disabled].active,
+fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover,
+fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active,
+fieldset[disabled] .btn-warning.active {
+	background-color: #f0ad4e;
+	border-color: #eea236; }
+.btn-warning .badge {
+	color: #f0ad4e;
+	background-color: #fff; }
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active,
+.open > .btn-danger.dropdown-toggle {
+	color: #ffffff;
+	background: 0572ce;
+	border-color: 0572ce;	
+   }
+.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {
+	background-image: none; }
+.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus,
+.btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled],
+.btn-danger[disabled]:hover, .btn-danger[disabled]:focus,
+.btn-danger[disabled]:active, .btn-danger[disabled].active,
+fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover,
+fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active,
+fieldset[disabled] .btn-danger.active {
+	background-color: #dde7ee;
+	border-color: #cedae2; }
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #fff; }
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+  -o-transition: opacity 0.15s linear;
+  transition: opacity 0.15s linear; }
+  .fade.in {
+    opacity: 1; }
+
+.collapse {
+  display: none; }
+  .collapse.in {
+    display: block; }
+
+tr.collapse.in {
+  display: table-row; }
+
+  tbody.collapse.in {
+    display: table-row-group; }
+
+    .collapsing {
+      position: relative;
+      height: 0;
+      overflow: hidden;
+      -webkit-transition: height 0.35s ease;
+      -o-transition: height 0.35s ease;
+      transition: height 0.35s ease; }
 .caret {
   display: inline-block;
   width: 0;
   height: 0;
-  text-indent: -99999px;
-  *text-indent: 0;
-  vertical-align: top;
-  border-left: 4px solid transparent;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top: 4px solid;
   border-right: 4px solid transparent;
-  border-top: 4px solid #000000;
-  opacity: 0.3;
-  filter: alpha(opacity=30);
-  content: "\2193";
-}
-.dropdown .caret {
+  border-left: 4px solid transparent; }
+
+  .dropdown {
+    position: relative; }
+
+    .dropdown-toggle:focus {
+      outline: 0; }
+
+.dropdown-menu {
+	position: absolute;
+	top: 100%;
+	left: 0;
+	z-index: 1000;
+	display: none;
+	float: left;
+	min-width: 160px;
+	padding: 5px 0;
+	margin: 2px 0 0;
+	list-style: none;
+	font-size: 13px;
+	text-align: left;
+	background-color: #fff;
+	border: 1px solid #c4ced7;
+	border-radius: 2px;
+	-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.17);
+	box-shadow: 0 6px 12px rgba(0, 0, 0, 0.17);
+	background-clip: padding-box; }
+.dropdown-menu.pull-right {
+	right: 0;
+	left: auto; }
+.dropdown-menu .divider {
+	height: 1px;
+	margin: 8px 0;
+	overflow: hidden;
+	background-color: #e5e5e5; }
+.dropdown-menu > li > a {
+	display: block;
+	padding: 3px 20px;
+	clear: both;
+	font-weight: normal;
+	line-height: 1.5;
+	color: #333;
+	white-space: nowrap; }
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+  text-decoration: none;
+  color: #262626;
+  background-color: #f5f5f5; }
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  background-color: #428bca; }
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #777; }
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  cursor: not-allowed; }
+
+.open > .dropdown-menu {
+  display: block; }
+  .open > a {
+    outline: 0; }
+
+#editor_list li a {
+	border: 1px solid #ffffff;
+	background: #ffffff;
+	color: #000000;
+	height: 30px;
+	width: 100%;
+	line-height: 30px;
+	padding-left: 12px;
+	vertical-align: middle;
+}
+
+#editor_list li a:hover {
+	border: 1px solid #ebeced;
+	background: #ebeced;
+}
+
+.dropdown-menu-right {
+  left: auto;
+  right: 0; }
+
+  .dropdown-menu-left {
+    left: 0;
+    right: auto; }
+
+    .dropdown-header {
+      display: block;
+      padding: 3px 20px;
+      font-size: 12px;
+      line-height: 1.5;
+      color: #777;
+      white-space: nowrap; }
+
+      .dropdown-backdrop {
+        position: fixed;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        top: 0;
+        z-index: 990; }
+
+        .pull-right > .dropdown-menu {
+          right: 0;
+          left: auto; }
+
+          .dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+            border-top: 0;
+            border-bottom: 4px solid;
+            content: ""; }
+            .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+              top: auto;
+              bottom: 100%;
+              margin-bottom: 1px; }
+
+@media (min-width: 768px) {
+  .navbar-right .dropdown-menu {
+    right: 0;
+    left: auto;   }
+    .navbar-right .dropdown-menu-left {
+      left: 0;
+      right: auto;   }
+}
+.btn-group, .btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle; }
+  .btn-group > .btn, .btn-group-vertical > .btn {
+    position: relative;
+    float: left; }
+    .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active,
+    .btn-group > .btn.active, .btn-group-vertical > .btn:hover,
+    .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active,
+    .btn-group-vertical > .btn.active {
+      z-index: 2; }
+      .btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+        outline: 0; }
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+  margin-left: -1px; }
+
+.btn-toolbar {
+	margin-left: -5px; }
+.btn-toolbar .btn-group, .btn-toolbar .input-group {
+	float: left; }
+.btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group {
+	margin-left: 5px; }
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0; }
+
+.btn-group > .btn:first-child {
+	margin-left: 0; }
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+	border-bottom-right-radius: 0;
+	border-top-right-radius: 0; }
+
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0; }
+
+.btn-group > .btn-group {
+    float: left; }
+
+.btn-group a:hover {
+	background: #ffffff;
+	border: 1px solid #cccccc;
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+	border-radius: 0; }
+
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+	border-bottom-right-radius: 0;
+	border-top-right-radius: 0; }
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0; }
+
+  .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+    outline: 0; }
+
+    .btn-group > .btn-lg + .dropdown-toggle,
+    .btn-group .btn-group-lg > .btn + .dropdown-toggle,
+    .btn-group-lg .btn-group > .btn + .dropdown-toggle {
+      padding-left: 12px;
+      padding-right: 12px; }
+
+      .btn-lg .caret, .btn-group-lg .btn .caret {
+        border-width: 5px 5px 0;
+        border-bottom-width: 0; }
+
+        .dropup .btn-lg .caret, .dropup .btn-group-lg .btn .caret,
+        .btn-group-lg .dropup .btn .caret {
+          border-width: 0 5px 5px; }
+
+          .btn-group > .btn + .dropdown-toggle {
+            padding-left: 8px;
+            padding-right: 8px; }
+
+            .btn-group.open .dropdown-toggle {
+              -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.12);
+              box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.12); }
+              .btn-group.open .dropdown-toggle.btn-link {
+                -webkit-box-shadow: none;
+                box-shadow: none; }
+
+.btn .caret {
+  margin-left: 0; }
+
+  .btn-group-vertical > .btn, .btn-group-vertical > .btn-group,
+  .btn-group-vertical > .btn-group > .btn {
+    display: block;
+    float: none;
+    width: 100%;
+    max-width: 100%; }
+    .btn-group-vertical > .btn-group > .btn {
+      float: none; }
+  .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group,
+  .btn-group-vertical > .btn-group + .btn,
+  .btn-group-vertical > .btn-group + .btn-group {
+    margin-top: -1px;
+    margin-left: 0; }
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+  border-radius: 0; }
+  .btn-group-vertical > .btn:first-child:not(:last-child) {
+    border-top-right-radius: 4px;
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0; }
+    .btn-group-vertical > .btn:last-child:not(:first-child) {
+      border-bottom-left-radius: 4px;
+      border-top-right-radius: 0;
+      border-top-left-radius: 0; }
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0; }
+
+  .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+  .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0; }
+
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0; }
+
+  .btn-group-justified {
+    display: table;
+    width: 100%;
+    table-layout: fixed;
+    border-collapse: separate; }
+    .btn-group-justified > .btn, .btn-group-justified > .btn-group {
+      float: none;
+      display: table-cell;
+      width: 1%; }
+      .btn-group-justified > .btn-group .btn {
+        width: 100%; }
+        .btn-group-justified > .btn-group .dropdown-menu {
+          left: auto; }
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+	position: absolute;
+	z-index: -1;
+	opacity: 0;
+	filter: alpha(opacity=0); }
+.navbar-btn.btn-xs, .btn-group-xs .navbar-btn.btn {
+	margin-top: 14px;
+	margin-bottom: 14px; }
+.navbar-btn.btn-sm, .btn-group-sm .navbar-btn.btn {
+	margin-top: 10px;
+    margin-bottom: 10px; }
+
+.navbar {
+	position: relative;
+	min-height: 50px;
+	margin-bottom: 18px;
+	border: 1px solid transparent; }
+@media (min-width: 768px) {
+    .navbar {
+      border-radius: 4px;   }
+}
+
+@media (min-width: 768px) {
+  .navbar-header {
+    float: left;   }
+}
+
+.navbar-collapse {
+  overflow-x: visible;
+  padding-right: 15px;
+  padding-left: 15px;
+  border-top: 1px solid transparent;
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
+  -webkit-overflow-scrolling: touch; }
+  .navbar-collapse.in {
+    overflow-y: auto; }
+    @media (min-width: 768px) {
+      .navbar-collapse {
+        width: auto;
+        border-top: 0;
+        box-shadow: none;   }
+        .navbar-collapse.collapse {
+          display: block !important;
+          height: auto !important;
+          padding-bottom: 0;
+          overflow: visible !important;   }
+          .navbar-collapse.in {
+            overflow-y: visible;   }
+            .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse,
+            .navbar-fixed-bottom .navbar-collapse {
+              padding-left: 0;
+              padding-right: 0;   }
+}
+
+.navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse {
+  max-height: 340px; }
+  @media (max-width: 480px) and (orientation: landscape) {
+    .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse {
+      max-height: 200px;   }
+}
+
+.container > .navbar-header, .container > .navbar-collapse,
+.container-fluid > .navbar-header, .container-fluid > .navbar-collapse {
+  margin-right: -15px;
+  margin-left: -15px; }
+  @media (min-width: 768px) {
+    .container > .navbar-header, .container > .navbar-collapse,
+    .container-fluid > .navbar-header, .container-fluid > .navbar-collapse {
+      margin-right: 0;
+      margin-left: 0;   }
+}
+
+.navbar-static-top {
+  z-index: 1000;
+  border-width: 0 0 1px; }
+  @media (min-width: 768px) {
+    .navbar-static-top {
+      border-radius: 0;   }
+}
+
+.navbar-fixed-top, .navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0); }
+  @media (min-width: 768px) {
+    .navbar-fixed-top, .navbar-fixed-bottom {
+      border-radius: 0;   }
+}
+
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px; }
+
+  .navbar-fixed-bottom {
+    bottom: 0;
+    margin-bottom: 0;
+    border-width: 1px 0 0; }
+
+    .navbar-brand {
+      float: left;
+      padding: 16px 15px;
+      font-size: 17px;
+      line-height: 18px;
+      height: 50px; }
+      .navbar-brand:hover, .navbar-brand:focus {
+        text-decoration: none; }
+        @media (min-width: 768px) {
+          .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand {
+            margin-left: -15px;   }
+}
+
+.navbar-toggle {
+  position: relative;
+  float: right;
+  margin-right: 15px;
+  padding: 9px 10px;
   margin-top: 8px;
-  margin-left: 2px;
-}
-.dropdown:hover .caret,
-.open.dropdown .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.dropdown-menu {
+  margin-bottom: 8px;
+  background-color: transparent;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px; }
+  .navbar-toggle:focus {
+    outline: 0; }
+    .navbar-toggle .icon-bar {
+      display: block;
+      width: 22px;
+      height: 2px;
+      border-radius: 1px; }
+      .navbar-toggle .icon-bar + .icon-bar {
+        margin-top: 4px; }
+        @media (min-width: 768px) {
+          .navbar-toggle {
+            display: none;   }
+}
+
+.navbar-nav {
+  margin: 8px -15px; }
+  .navbar-nav > li > a {
+    padding-top: 10px;
+    padding-bottom: 10px;
+    line-height: 18px; }
+    @media (max-width: 767px) {
+      .navbar-nav .open .dropdown-menu {
+        position: static;
+        float: none;
+        width: auto;
+        margin-top: 0;
+        background-color: transparent;
+        border: 0;
+        box-shadow: none;   }
+        .navbar-nav .open .dropdown-menu > li > a,
+        .navbar-nav .open .dropdown-menu .dropdown-header {
+          padding: 5px 15px 5px 25px;   }
+          .navbar-nav .open .dropdown-menu > li > a {
+            line-height: 18px;   }
+            .navbar-nav .open .dropdown-menu > li > a:hover,
+            .navbar-nav .open .dropdown-menu > li > a:focus {
+              background-image: none;   }
+}
+  @media (min-width: 768px) {
+    .navbar-nav {
+      float: left;
+      margin: 0;   }
+      .navbar-nav > li {
+        float: left;   }
+        .navbar-nav > li > a {
+          padding-top: 16px;
+          padding-bottom: 16px;   }
+      .navbar-nav.navbar-right:last-child {
+        margin-right: -15px;   }
+}
+
+@media (min-width: 768px) {
+  .navbar-left {
+    float: left !important;   }
+    .navbar-right {
+      float: right !important;   }
+}
+
+.navbar-form {
+  margin-left: -15px;
+  margin-right: -15px;
+  padding: 10px 15px;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  margin-top: 9px;
+  margin-bottom: 9px; }
+  @media (max-width: 767px) {
+    .navbar-form .form-group {
+      margin-bottom: 5px;   }
+}
+  @media (min-width: 768px) {
+    .navbar-form {
+      width: auto;
+      border: 0;
+      margin-left: 0;
+      margin-right: 0;
+      padding-top: 0;
+      padding-bottom: 0;
+      -webkit-box-shadow: none;
+      box-shadow: none;   }
+      .navbar-form.navbar-right:last-child {
+        margin-right: -15px;   }
+}
+
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0; }
+
+  .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0; }
+
+    .navbar-btn {
+      margin-top: 9px;
+      margin-bottom: 9px; }
+
+      .navbar-text {
+        margin-top: 16px;
+        margin-bottom: 16px; }
+        @media (min-width: 768px) {
+          .navbar-text {
+            float: left;
+            margin-left: 15px;
+            margin-right: 15px;   }
+            .navbar-text.navbar-right:last-child {
+              margin-right: 0;   }
+}
+
+.navbar-default {
+  background-color: #f8f8f8;
+  border-color: #e7e7e7; }
+  .navbar-default .navbar-brand {
+    color: #777; }
+    .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
+      color: #5e5e5e;
+      background-color: transparent; }
+  .navbar-default .navbar-text {
+    color: #777; }
+    .navbar-default .navbar-nav > li > a {
+      color: #777; }
+      .navbar-default .navbar-nav > li > a:hover,
+      .navbar-default .navbar-nav > li > a:focus {
+        color: #333;
+        background-color: transparent; }
+    .navbar-default .navbar-nav > .active > a,
+    .navbar-default .navbar-nav > .active > a:hover,
+    .navbar-default .navbar-nav > .active > a:focus {
+      color: #555;
+      background-color: #e7e7e7; }
+    .navbar-default .navbar-nav > .disabled > a,
+    .navbar-default .navbar-nav > .disabled > a:hover,
+    .navbar-default .navbar-nav > .disabled > a:focus {
+      color: #ccc;
+      background-color: transparent; }
+  .navbar-default .navbar-toggle {
+    border-color: #ddd; }
+    .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
+      background-color: #ddd; }
+      .navbar-default .navbar-toggle .icon-bar {
+        background-color: #888; }
+  .navbar-default .navbar-collapse, .navbar-default .navbar-form {
+    border-color: #e7e7e7; }
+    .navbar-default .navbar-nav > .open > a,
+    .navbar-default .navbar-nav > .open > a:hover,
+    .navbar-default .navbar-nav > .open > a:focus {
+      background-color: #e7e7e7;
+      color: #555; }
+    @media (max-width: 767px) {
+      .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+        color: #777;   }
+        .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+        .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+          color: #333;
+          background-color: transparent;   }
+      .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+      .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+      .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+        color: #555;
+        background-color: #e7e7e7;   }
+      .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+      .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+      .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+        color: #ccc;
+        background-color: transparent;   }
+}
+  .navbar-default .navbar-link {
+    color: #777; }
+    .navbar-default .navbar-link:hover {
+      color: #333; }
+  .navbar-default .btn-link {
+    color: #777; }
+    .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {
+      color: #333; }
+      .navbar-default .btn-link[disabled]:hover,
+      .navbar-default .btn-link[disabled]:focus,
+      fieldset[disabled] .navbar-default .btn-link:hover,
+      fieldset[disabled] .navbar-default .btn-link:focus {
+        color: #ccc; }
+
+.navbar-inverse {
+  background-color: #222;
+  border-color: #080808; }
+  .navbar-inverse .navbar-brand {
+    color: #777; }
+    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
+      color: #fff;
+      background-color: transparent; }
+  .navbar-inverse .navbar-text {
+    color: #777; }
+    .navbar-inverse .navbar-nav > li > a {
+      color: #777; }
+      .navbar-inverse .navbar-nav > li > a:hover,
+      .navbar-inverse .navbar-nav > li > a:focus {
+        color: #fff;
+        background-color: transparent; }
+    .navbar-inverse .navbar-nav > .active > a,
+    .navbar-inverse .navbar-nav > .active > a:hover,
+    .navbar-inverse .navbar-nav > .active > a:focus {
+      color: #fff;
+      background-color: #080808; }
+    .navbar-inverse .navbar-nav > .disabled > a,
+    .navbar-inverse .navbar-nav > .disabled > a:hover,
+    .navbar-inverse .navbar-nav > .disabled > a:focus {
+      color: #444;
+      background-color: transparent; }
+  .navbar-inverse .navbar-toggle {
+    border-color: #333; }
+    .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
+      background-color: #333; }
+      .navbar-inverse .navbar-toggle .icon-bar {
+        background-color: #fff; }
+  .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
+    border-color: #101010; }
+    .navbar-inverse .navbar-nav > .open > a,
+    .navbar-inverse .navbar-nav > .open > a:hover,
+    .navbar-inverse .navbar-nav > .open > a:focus {
+      background-color: #080808;
+      color: #fff; }
+    @media (max-width: 767px) {
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+        border-color: #080808;   }
+        .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+          background-color: #080808;   }
+          .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+            color: #777;   }
+            .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+            .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+              color: #fff;
+              background-color: transparent;   }
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+        color: #fff;
+        background-color: #080808;   }
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+      .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+        color: #444;
+        background-color: transparent;   }
+}
+  .navbar-inverse .navbar-link {
+    color: #777; }
+    .navbar-inverse .navbar-link:hover {
+      color: #fff; }
+  .navbar-inverse .btn-link {
+    color: #777; }
+    .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {
+      color: #fff; }
+      .navbar-inverse .btn-link[disabled]:hover,
+      .navbar-inverse .btn-link[disabled]:focus,
+      fieldset[disabled] .navbar-inverse .btn-link:hover,
+      fieldset[disabled] .navbar-inverse .btn-link:focus {
+        color: #444; }
+.btn-xs .badge, .btn-group-xs .btn .badge {
+  top: 0;
+  padding: 1px 5px; }
+
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  color: #fff;
+  line-height: 1;
+  vertical-align: baseline;
+  white-space: nowrap;
+  text-align: center;
+  background-color: #777;
+  border-radius: 10px; }
+  .badge:empty {
+    display: none; }
+    .btn .badge {
+      position: relative;
+      top: -1px; }
+a.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
+	color: #428bca;
+	background-color: #fff; }
+.nav-pills > li > a > .badge {
+	margin-left: 3px; }
+
+a.badge:hover, a.badge:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer; }
+.nav {
+  margin-bottom: 0;
+  padding-left: 0;
+  list-style: none; }
+  .nav > li {
+    position: relative;
+    display: block; }
+    .nav > li > a {
+      position: relative;
+      display: block;
+      padding: 10px 15px; }
+      .nav > li > a:hover, .nav > li > a:focus {
+        text-decoration: none;
+        background-color: #eee; }
+    .nav > li.disabled > a {
+      color: #777; }
+      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
+        color: #777;
+        text-decoration: none;
+        background-color: transparent;
+        cursor: not-allowed; }
+.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
+	background-color: #eee;
+    border-color: #428bca; }
+.nav .nav-divider {
+    height: 1px;
+    margin: 8px 0;
+    overflow: hidden;
+    background-color: #e5e5e5; }
+    .nav > li > a > img {
+      max-width: none; }
+
+.nav-tabs {
+  border-bottom: 1px solid #dddddd; }
+.nav-tabs > li {
+    float: left;
+    margin-bottom: -1px; }
+.nav-tabs > li > a {
+      margin-right: 2px;
+      line-height: 1.5;
+      border: 1px solid transparent;
+}
+      
+.nav-tabs > li > a:hover {
+	border: 1px solid transparent;
+	border-bottom: 1px solid #dddddd;
+	/*border-color: #eee #eee #ddd;*/ 
+	text-decoration: underline;
+	background: #ffffff;
+}
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+	/*color: #555;*/
+	font-weight: 600;
+	background-color: #fff;
+	border: 1px solid #ddd;
+	border-bottom-color: #fff;
+	text-decoration: none;
+	background: url(../img/content_tab_bkgd_selected.png) repeat-x;
+	cursor: default; }
+
+.nav-justified, .nav-tabs.nav-justified {
+  width: 100%; }
+  .nav-justified > li, .nav-tabs.nav-justified > li {
+    float: none; }
+    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
+      text-align: center;
+      margin-bottom: 5px; }
+  .nav-justified > .dropdown .dropdown-menu,
+  .nav-tabs.nav-justified > .dropdown .dropdown-menu {
+    top: auto;
+    left: auto; }
+    @media (min-width: 768px) {
+      .nav-justified > li, .nav-tabs.nav-justified > li {
+        display: table-cell;
+        width: 1%;   }
+        .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
+          margin-bottom: 0;   }
+}
+
+.nav-tabs-justified, .nav-tabs.nav-justified {
+  border-bottom: 0; }
+  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
+    margin-right: 0;
+    border-radius: 4px; }
+    .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover,
+    .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a,
+    .nav-tabs.nav-justified > .active > a:hover,
+    .nav-tabs.nav-justified > .active > a:focus {
+      border: 1px solid #ddd; }
+      @media (min-width: 768px) {
+        .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
+          border-bottom: 1px solid #ddd;
+          border-radius: 4px 4px 0 0;   }
+          .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover,
+          .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a,
+          .nav-tabs.nav-justified > .active > a:hover,
+          .nav-tabs.nav-justified > .active > a:focus {
+            border-bottom-color: #fff;   }
+}
+
+.nav-pills > li {
+	float: left; }
+.nav-pills > li > a {
+    border-radius: 4px; }
+.nav-pills > li + li {
+	margin-left: 2px; }
+.nav-pills > li.active > a, .nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+	color: #fff;
+	background-color: #428bca; }
+
+.nav-stacked > li {
+  float: none; }
+  .nav-stacked > li + li {
+    margin-top: 2px;
+    margin-left: 0; }
+
+.tab-content > .tab-pane {
+  display: none; }
+  .tab-content > .active {
+    display: block; }
+
+.nav-tabs .dropdown-menu {
+  margin-top: -1px;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0; }
+.form-inline, .navbar-form, .table_actions {
+  display: inline; }
+.form-inline input, .form-inline button, .form-inline a.btn, .navbar-form input,
+.navbar-form button, .navbar-form a.btn, .table_actions input,
+.table_actions button, .table_actions a.btn {
+    margin-left: 5px; 
+	background: -moz-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -ms-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f3f4), to(#e3e8ea));
+  	background: -webkit-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -o-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background-repeat: repeat-x;
+  	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+ 	border: 1px solid #C3CED7;
+ 	font-weight: 700;
+}
+
+.form-inline input:hover, .form-inline button:hover, .form-inline a.btn:hover, .navbar-form input:hover,
+.navbar-form button:hover, .navbar-form a.btn:hover, .table_actions input:hover,
+.table_actions button:hover, .table_actions a.btn:hover {
+  background: -moz-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -ms-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -webkit-gradient(linear, 0 0, 0 100%, from(#F8F9FA), to(#F1F4F5));
+  background: -webkit-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -o-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: linear-gradient(top, #F8F9FA, #F1F4F5);  
+  text-decoration: none;
+}
+
+.table_count {
+	font-weight: 700;
+}
+
+.clearfix:after {
+  visibility: hidden;
+  display: block;
+  font-size: 0;
+  content: " ";
+  clear: both;
+  height: 0; }
+
+* html .clearfix {
+	zoom: 1; }
+
+*:first-child + html .clearfix {
+	zoom: 1; }
+	
+@font-face {
+	font-family: 'anivers';
+        src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?5f61443eb372');
+        src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix&5f61443eb372') format('eot'),
+                url('/static/dashboard/fonts/Anivers_Regular-webfont.woff?2c3db88030ec') format('woff'),
+                url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf?6a7822aa21cf') format('truetype'),
+                url('/static/dashboard/fonts/Anivers_Regular-webfont.svg?1dbc53d268e6#webfont3JLVF59W') format('svg');
+	font-weight: normal;
+	font-style: normal; }
+
+body {
+	background-color: #ffffff;
+	color: #333333;
+	min-width: 900px; }
+
+small {
+	font-size: 11px; }
+
+a {
+	color: #145c9e;
+	text-decoration: none; }
+
+a:hover, a:focus {
+	color: #145c9e;
+	text-decoration: underline; }
+
+ul {
+	list-style: none;
+	margin: 0; }
+
+.list-bullet {
+ 	list-style: disc; }
+
+.small-padding {
+	padding-left: 0;
+	padding-right: 5px;
+	padding-bottom: 5px; }
+
+dt {
+	font-weight: bold; }
+
+.topbar {
+	background: url('../img/OpenStack_banner.png') repeat-x;
+	height: 79px;
+	padding: 17px 0px 0px 20px;
+}
+
+.topbar .switcher_bar {
+	display: inline-block;
+	height: auto;
+	width: 160px;
+	max-width: 160px;
+	/*margin-bottom: 0;
+	margin-right: 10px;*/
+	padding: 0;
+	background: url('/static/dashboard/img/dropdown_ena.png') no-repeat;
+	background-position: 140px center;
+}
+
+	
+.topbar .switcher_bar ul#tenant_list a {
+	max-width: 160px;
+	overflow: hidden;
+	text-overflow: ellipsis; }
+
+.topbar .switcher_bar a {
+	margin-left: 0;
+	display: block; 
+	border: 1px solid #f5f5f5;
+	border-radius: 2px;
+	padding: 0px 0px 0px 6px;
+	color: #000000;
+}
+
+.topbar .switcher_bar a:hover, .topbar .switcher_bar a:active {
+	text-decoration: none;
+	border: 1px solid #0572ce;
+	background: url('/static/dashboard/img/dropdown_dwn.png') no-repeat right 6px center #0572ce;
+	color: #ffffff;
+}
+
+.topbar .open a {
+	border: 1px solid #0572ce;
+	background: url('/static/dashboard/img/dropdown_dwn.png') no-repeat right 6px center #0572ce;
+	color: #ffffff;
+}
+
+
+.topbar .switcher_bar ul {
+	width: 130px; }
+
+.topbar .switcher_bar div {
+	padding: 0px 20px 0px 8px;
+	line-height: 28px;
+	text-decoration: none;
+	overflow: hidden;
+	text-overflow: ellipsis; }
+
+.topbar .switcher_bar div:first-letter {
+	text-transform: capitalize;
+}
+
+.topbar .context-box {
+	display: inline; 
+	float: right;
+	position: relative;
+	right: 165px;
+}
+
+.hide_image {
+	background-image: none !important; }
+
+#profile_editor_switcher {
+	width: auto;
+	height: 28px;
+	vertical-align: top;
+	white-space: nowrap;
+	/*background-image: url('/static/dashboard/img/profile_drop.png?94c62ed0a520');*/
+	background-repeat: no-repeat;
+	background-position: right 6px center; 
+	line-height: 28px;
+	position: relative;
+	top: 4px;	
+}
+
+#profile_editor_switcher a, #profile_editor_switcher a:hover {
+	text-decoration: none;
+}
+
+#user_info {
+	margin: 0px;
+	margin-right: -57px;
+}
+
+#user_info > a {
+	color: #145c9e;
+	margin-left: 14px;
+	line-height: 38px;
+	font-size: 13px !important; 
+}
+
+#user_info > a:hover {
+	color: #145c9e;
+}
+
+.page-header {
+	margin: 0px;
+	padding: 19px 0px;
+	font-family: Arial, Helvetica, sans-serif;
+	height: auto;
+	width: 100%; }
+.page-header h2 {
+	margin: 0; }
+
+h2 {
+  color: #333333;
+  font-size: 30px;
+  font-weight: normal; }
+
+#splash .login {
+    background: url('/static/dashboard/img/OracleSolaris_login_banner.png') no-repeat;
+    position: absolute;
+    top: 80px;
+    left: 50%;
+    margin: 0 0 0 -195px;
+    padding-top: 79px;
+    width: 390px;
+    border: 1px solid #dddddd;
+    max-height: none;
+    border-radius: 6px;
+    box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+    background-clip: padding-box; }
+#splash .login form .error {
+	width: 100%; }
+#splash .login form input {
+	width: 100%; }
+#splash .login form select {
+	width: 360px; }
+
+#splash p.help-block {
+  display: none; }
+
+#create_container_form .modal-footer {
+	margin-top: 190px; }
+
+.container-fluid {
+	padding-left: 0; }
+
+.sidebar {
+    border: none;	
+    border-right: 1px solid #c4ced8;
+    border-bottom: 1px solid #c4ced8;
+    float: left;
+    width: 235px;
+    height: 800px; 
+    background: #ebeced;
+}
+
+.sidebar h4 {
+	margin-left: 14px;
+	color: #333333; }
+
+.sidebar .nav-tabs {
+	margin-top: -34px; }
+
+.sidebar .nav-tabs li.active a {
+	background-color: #ffffff; }
+
+h1.brand {
+	width: 100%;
+	margin: 0; }
+
+h1.brand a {
+	background: url('/static/dashboard/img/OracleSolaris_Logo.png') top left no-repeat;
+	display: block;
+	float: left;
+	padding-left: 115px;
+	color: #000000;
+	font-weight: 400;
+	width: 310px;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 19px;
+	line-height: 35px;
+ }
+
+h1.brand a:hover {
+	color: #000000;
+	text-decoration: none;
+}
+
+                  a.current_item {
+                    width: 163px;
+                    float: left; }
+
+                    a.current_item:hover {
+                      text-decoration: none; }
+
+                      a.current_item:hover h3, a.current_item:hover h4 {
+                        color: #005D9D;
+                        border-radius: 4px; }
+
+                        .sidebar .switcher_bar {
+                          width: 190px;
+                          height: 38px;
+                          padding: 5px 0;
+                          margin-left: 14px;
+                          margin-bottom: 15px; }
+
+                          .sidebar .switcher_bar a.dropdown-toggle {
+                            display: block;
+                            padding: 5px 0;
+                            background-image: url('/static/dashboard/img/drop_arrow.png?2ec1100baed3');
+                            border: 1px solid #c0d9e4;
+                            background-color: #e9f5fa;
+                            background-repeat: no-repeat;
+                            background-position: 167px 23px; }
+
+                            .sidebar .switcher_bar a.dropdown-toggle:hover {
+                              text-decoration: none;
+                              background-color: #cde8f4; }
+
+                              .sidebar .switcher_bar:focus {
+                                outline: none; }
+
+                                .sidebar .switcher_bar h3 {
+                                  color: #4790ae;
+                                  font-size: 16px;
+                                  margin: -6px 0 0 14px;
+                                  padding: 0;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                  white-space: nowrap; }
+                                  .sidebar .switcher_bar h3:hover {
+                                    white-space: normal;
+                                    overflow: visible;
+                                    text-overflow: none;
+                                    padding-right: 1em;
+                                    word-wrap: break-word; }
+
+.sidebar .switcher_bar h4 {
+  color: #6fabc4;
+  font-size: 10px;
+  text-transform: uppercase;
+  font-weight: normal;
+  padding: 0; }
+
+  .sidebar .switcher_bar ul {
+    border: 1px solid #c0d9e4;
+    margin-left: -1px;
+    width: 190px; }
+
+    .sidebar .switcher_bar li a:hover {
+      background: #92d6f1; }
+
+      #usage {
+        margin-bottom: 25px;
+        height: 125px; }
+
+        .usage_block {
+          background: #e8f8ff;
+          color: #84b6c5;
+          border: 1px solid #afe3fb;
+          border-radius: 5px;
+          float: left;
+          width: 29%;
+          margin-right: 5%;
+          min-height: 125px; }
+
+          .usage_block.last {
+            margin-right: 0; }
+
+            .usage_block h3 {
+              background: #cef0ff;
+              color: #4fa5bf;
+              font-weight: normal;
+              padding: 0 0 0 10px;
+              border-bottom: 1px solid #c6e7f5;
+              border-top-left-radius: 5px;
+              border-top-right-radius: 5px; }
+
+.usage_block ul {
+	margin: 10px; }
+
+.usage_block .quantity {
+	font-size: 25px; }
+
+.usage_block li {
+	font-size: 11px;
+	margin: 0 0 15px 0; }
+
+.usage_block .unit {
+	font-size: 11px;
+	text-transform: uppercase;
+	padding: 0 0 0 1px; }
+
+.table-bordered {
+	border: none; }
+
+.table_header {
+	min-height: 35px;
+	padding: 5px 0; }
+
+.table_caption th {
+	background-color: transparent;
+	border: none; }
+
+.table-bordered th.table_header {
+	border: none; 
+	padding: 12px 0px;}
+
+#containers tr.table_caption {
+	height: 56px;}
+
+#containers th.table_header,
+#objects th.table_header {
+	padding: 12px;}
+
+.table-bordered tr.table_caption + tr th {
+	border: 1px solid #d5dfe6;
+	padding: 12px;
+	background-color: #ebeced;
+}
+
+.table-bordered tr.table_caption + tr th:first-child,
+.table-bordered tr.table_caption + tr th.hide + th {
+	border-top-left-radius: 4px;
+	border-left: 1px solid #d5dfe6; }
+
+.table-bordered tr.table_caption + tr th:last-child {
+	border-top-right-radius: 4px;
+	border-right: 1px solid #d5dfe6; }
+
+.table-bordered tbody tr td:first-child, .table-bordered tfoot tr td:first-child {
+	border-left: 1px solid #d5dfe6; }
+
+.table-bordered tbody tr td:last-child, .table-bordered tfoot tr td:last-child {
+	border-right: 1px solid #d5dfe6; }
+
+.table-bordered tfoot tr td:first-child {
+	border-bottom: 1px solid #d5dfe6;
+}
+
+.table-bordered tfoot tr td:last-child {
+	background-color: #f9f9f9;
+	padding: 8px 12px;
+	border-bottom: 1px solid #d5dfe6;
+}
+
+.table_title h3, .table_header h3 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-weight: 600;
+	font-size: 16px;
+	line-height: 30px;
+	vertical-align: middle;
+	margin: 0px;
+	float: left; }
+
+                                              .table th.header {
+                                                cursor: pointer; }
+
+                                                .table th.header:hover {
+                                                  background-color: #e8e8e8;
+                                                  text-decoration: underline; }
+
+                                                  .table tbody td.anchor a {
+                                                    display: block; }
+
+                                                    .table tr.table_caption th.header:hover {
+                                                      background-color: transparent;
+                                                      cursor: default; }
+
+                                                      .table th.headerSortUp:hover, .table th.headerSortDown:hover {
+                                                        background-color: #dfdfdf; }
+
+                                                        .table th.headerSortUp, .table th.headerSortDown {
+                                                          background-color: #dfdfdf;
+                                                          background-repeat: no-repeat;
+                                                          background-position: 98% center; }
+
+                                                          .table th.headerSortDown {
+                                                            background-image: url('/static/dashboard/img/drop_arrow.png?2ec1100baed3'); }
+
+                                                            .table th.headerSortUp {
+                                                              background-image: url('/static/dashboard/img/up_arrow.png?4293b62aa222'); }
+
+                                                              .table tr.summation td:first-child, .table tr.summation td:last-child {
+                                                                border-radius: 0;
+                                                                border-bottom: 0 none; }
+
+                                                                .table li {
+                                                                  list-style-position: inside; }
+
+                                                                  th {
+                                                                    background: #f1f1f1; }
+
+                                                                    td.anchor {
+                                                                      padding: 0; }
+
+                                                                      .main_nav {
+                                                                        list-style: none;
+                                                                        width: 222px;
+                                                                        margin: 10px 0 20px 0; }
+
+                                                                        .main_nav a {
+                                                                          color: #999;
+                                                                          width: 185px;
+                                                                          padding: 10px;
+                                                                          display: block;
+                                                                          margin-left: 20px; }
+
+                                                                          .main_nav a.active {
+                                                                            background: #fff;
+                                                                            border: 2px solid #d8d8d8;
+                                                                            border-right: 0;
+                                                                            border-bottom-color: #ccc; }
+
+                                                                            table form {
+                                                                              margin-bottom: 0;
+                                                                              width: 1px; }
+
+                                                                              .messages {
+                                                                                position: fixed;
+                                                                                z-index: 9999;
+                                                                                top: 20px;
+                                                                                right: 20px;
+                                                                                width: 300px; }
+                                                                                .messages .alert {
+                                                                                  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+                                                                                  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); }
+                                                                                  .messages .alert.alert-danger {
+                                                                                    border-width: 1px;
+                                                                                    border-style: solid;
+                                                                                    border-color: #d43f3a; }
+                                                                                    .messages .alert.alert-success {
+                                                                                      border-width: 1px;
+                                                                                      border-style: solid;
+                                                                                      border-color: #4cae4c; }
+
+.alert .alert-actions {
+  margin-top: -23px;
+  margin-right: -23px; }
+
+  .modal > form, .login > form, .alert-actions > form {
+    margin-bottom: 0; }
+
+    .alert p {
+      overflow: hidden;
+      word-wrap: break-word; }
+
+      .alert p:last-child {
+        margin-bottom: 0; }
+
+        #actions.single {
+          width: 90px; }
+
+          .table-striped tr td {
+            transition: background 0.2s;
+            -webkit-transition: background 0.2s;
+            -moz-transition: background 0.2s;
+            -o-transition: background 0.2s; }
+
+            .inspect {
+              float: left;
+              display: block;
+              margin-top: 5px;
+              margin-right: 25px; }
+
+              .table {
+                margin-bottom: 25px; }
+                .table > thead > tr > th, .table > thead > tr > td, .table > tbody > tr > th,
+                .table > tbody > tr > td, .table > tfoot > tr > th, .table > tfoot > tr > td {
+                  vertical-align: middle; }
+
+.table tr td {
+  vertical-align: middle; }
+
+  .table tr.empty td {
+    text-align: center; }
+
+    .table tfoot tr td {
+      border-top: 1px solid #dddddd;
+      background-color: #f1f1f1;
+      font-size: 11px;
+      line-height: 14px; }
+
+      .table_actions {
+        float: right;
+        min-width: 400px; }
+
+        .table_actions .table_search, .table_actions .table_filter {
+          display: inline-block; }
+
+          .table_search input[type="text"] {
+            padding-right: 26px; }
+            .table_search select {
+              width: auto; }
+
+.table_actions .table_actions_menu {
+  display: inline-block;
+  position: relative;
+  margin-left: 5px; }
+  .table_actions .table_actions_menu .dropdown-menu {
+    left: auto;
+    right: 0; }
+    .table_actions .table_actions_menu .dropdown-menu a,
+    .table_actions .table_actions_menu .dropdown-menu button {
+      margin-left: 0px;
+      padding-left: 22px; }
+      .table_actions .table_actions_menu .dropdown-menu a .glyphicon,
+      .table_actions .table_actions_menu .dropdown-menu button .glyphicon,
+      .table_actions .table_actions_menu .dropdown-menu button .membership .role_dropdown li i,
+      .membership .role_dropdown li .table_actions .table_actions_menu .dropdown-menu button i,
+      .table_actions .table_actions_menu .dropdown-menu a .membership .role_dropdown li i,
+      .membership .role_dropdown li .table_actions .table_actions_menu .dropdown-menu a i {
+        margin-left: -14px; }
+
+td.no-transition {
+  -webkit-transition: none !important;
+  -moz-transition: none !important;
+  -o-transition: none !important;
+  -ms-transition: none !important;
+  transition: none !important; }
+
+  td.success {
+    background-color: #dff0d8 !important; }
+
+    td.loading {
+      background-color: #e6e6e6 !important; }
+
+      td.inline_edit_available div.table_cell_wrapper .table_cell_action button.ajax-inline-edit {
+        padding: 9px 12px 9px 12px;
+        position: relative;
+        border-radius: 0px;
+        position: relative;
+        display: block;
+        background: none;
+        border: 0 none; }
+        td.inline_edit_available div.table_cell_wrapper .table_cell_action button.ajax-inline-edit:before {
+          display: inline-block;
+          content: "";
+          width: 18px;
+          height: 20px;
+          margin-top: 0px;
+          *margin-right: 0.3em;
+          line-height: 14px;
+          background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+          background-position: 0 -72px;
+          background-repeat: no-repeat;
+          position: absolute;
+          top: 2px;
+          left: 4px; }
+
+div.table_cell_wrapper {
+  min-height: 18px;
+  position: relative; }
+  div.table_cell_wrapper .inline-edit-label {
+    display: inline; }
+    div.table_cell_wrapper .inline-edit-form {
+      float: left; }
+      div.table_cell_wrapper .inline-edit-actions,
+      div.table_cell_wrapper .table_cell_action {
+        float: right;
+        width: 20px;
+        margin: 0; }
+        div.table_cell_wrapper .inline-edit-actions button.ajax-inline-edit,
+        div.table_cell_wrapper .table_cell_action button.ajax-inline-edit {
+          padding: 10px;
+          position: relative;
+          display: none;
+          background: none;
+          border: 0 none; }
+  div.table_cell_wrapper .table_cell_action {
+    width: auto;
+    margin: auto 0px 0px 0px;
+    display: none;
+    position: absolute;
+    top: -10px;
+    right: 0px;
+    z-index: 99; }
+    div.table_cell_wrapper .inline-edit-error .error {
+      padding: 9px 12px 9px 12px;
+      position: relative;
+      border-radius: 0px;
+      position: absolute;
+      width: 18px;
+      height: 20px;
+      top: 20px;
+      left: 2px;
+      padding: 0; }
+      div.table_cell_wrapper .inline-edit-error .error:before {
+        display: inline-block;
+        content: "";
+        width: 20px;
+        height: 20px;
+        margin-top: 0px;
+        *margin-right: 0.3em;
+        line-height: 14px;
+        background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+        background-position: -144px -120px;
+        background-repeat: no-repeat;
+        position: absolute;
+        top: 0px;
+        left: 0px; }
+  div.table_cell_wrapper .inline-edit-status .success {
+    padding: 9px 12px 9px 12px;
+    position: relative;
+    border-radius: 0px;
+    padding: 0;
+    position: absolute;
+    top: 2px;
+    right: 18px;
+    width: 18px;
+    height: 20px;
+    z-index: 100; }
+    div.table_cell_wrapper .inline-edit-status .success:before {
+      display: inline-block;
+      content: "";
+      width: 20px;
+      height: 20px;
+      margin-top: 0px;
+      *margin-right: 0.3em;
+      line-height: 14px;
+      background-image: url('/static/bootstrap/img/glyphicons-halflings.png');
+      background-position: -288px 0px;
+      background-repeat: no-repeat;
+      position: absolute;
+      top: 0px;
+      left: 0px; }
+  div.table_cell_wrapper .inline-edit-status .loading {
+    padding: 9px 12px 9px 12px;
+    position: relative;
+    border-radius: 0px;
+    padding: 0;
+    position: absolute;
+    top: 0px;
+    right: 24px;
+    width: 18px;
+    height: 20px;
+    z-index: 100; }
+    div.table_cell_wrapper .inline-edit-status .loading:before {
+      display: inline-block;
+      content: "";
+      width: 20px;
+      height: 20px;
+      margin-top: 0px;
+      *margin-right: 0.3em;
+      line-height: 14px;
+      background-image: url('/static/dashboard/img/spinner.gif?a9f731a1424b');
+      background-position: 0px 0px;
+      background-repeat: no-repeat;
+      position: absolute;
+      top: 0px;
+      left: 0px; }
+  div.table_cell_wrapper .inline-edit-status.inline-edit-mod .loading {
+    top: 15px;
+    right: 34px; }
+
+.table_header .table_actions {
+  min-width: 0; }
+
+.table_header .table_actions a, .table_header .table_actions > button,
+.table_header .table_actions .table_search button {
+    display: inline-block;
+    float: none; }
+
+.table_header .table_actions .table_search select {
+      margin-bottom: 0;
+      line-height: 22px; }
+
+.table_header .table_filter {
+	vertical-align: bottom;
+	margin-right: 20px; }
+
+.table_header .table_filter i {
+	vertical-align: middle; }
+
+.table_actions form {
+	float: right;
+	margin-left: 10px; }
+
+.hidden {
+	display: none; }
+
+.table-striped.datatable tbody td {
+	background-clip: padding-box; }
+.table-striped.datatable tbody tr.odd td {
+	background-color: #f9f9f9; 
+	padding: 8px 12px;
+}
+.table-striped.datatable tbody tr.even td {
+	background-color: inherit; 
+	padding: 8px 12px;
+}
+.table-striped.datatable tbody tr.odd:hover td,
+.table-striped.datatable tbody tr.even:hover td,
+.table-striped.datatable tbody tr:hover th {
+	background-color: #e3e9f2; }
+
+.table-striped tbody tr.status_unknown:nth-child(odd) td {
+	background-color: #ffffb5; }
+
+.table-striped tbody tr.status_unknown:nth-child(even) td {
+	background-color: #ffffc6; }
+
+.nowrap-col {
+	white-space: nowrap; }
+
+.overview {
+	font-size: 24px; }
+
+#monitoring {
+          background: #ffffff;
+          font-size: 14px;
+          height: 20px;
+          margin: -18px 0 25px;
+          padding: 10px;
+          border: 1px solid #dddddd;
+          font-family: "anivers"; }
+
+          #monitoring h3 {
+            font-size: 14px;
+            font-weight: normal;
+            float: left;
+            line-height: 18px; }
+
+            #external_links, #external_links li {
+              float: left; }
+
+              #external_links li {
+                margin: 0 0 0 15px; }
+
+                .datatable th.narrow {
+                  width: 1em; }
+                  .datatable input {
+                    padding: 2px 5px;
+                    margin: 0; }
+                    .datatable th span.required:after {
+                      content: "*";
+                      font-weight: bold;
+                      line-height: 0;
+                      padding-left: 4px;
+                      color: #428bca; }
+                      .datatable .normal_column ul {
+                        padding-left: 0; }
+.capabilities .panel-heading .form-control,
+.capabilities .panel-heading .datepicker input,
+.datepicker .capabilities .panel-heading input {
+	width: 150px;
+	margin-left: 20px; }
+
+form label {
+  text-align: left;
+  color: #555555;
+  font-weight: bold;
+  display: inline-block; }
+
+  form .form-group > div.dynamic-select {
+    display: table;
+    border-collapse: separate; }
+    form .form-group > div.dynamic-select > * {
+      display: table-cell; }
+      form .form-group > div.dynamic-select > a {
+        width: 1%; }
+
+.modal.fullscreen .modal-dialog {
+  width: 90%;
+  margin: auto;
+  left: 5%; }
+
+  .modal.loading .modal-dialog {
+    width: 170px; }
+    .modal.loading .modal-dialog .modal-body {
+      height: 170px; }
+
+.modal.loading p {
+  text-align: center;
+  position: absolute;
+  bottom: 0;
+  width: 150px; }
+
+  .modal-body {
+    overflow-y: visible;
+    max-height: none; }
+
+    .modal-body table {
+      margin-bottom: 30px; }
+
+      .modal-body ~ hr {
+        margin-bottom: 0; }
+
+        .static_page {
+          float: left;
+          background-color: #ffffff;
+          border: 1px solid #dddddd; }
+
+          .static_page > form {
+            margin-bottom: 0; }
+
+            .left {
+              float: left;
+              width: 342px;
+              margin-right: 15px; }
+
+              .left form {
+                margin: 0; }
+
+                .right {
+                  float: left;
+                  width: 342px; }
+
+                  .clear {
+                    clear: both;
+                    width: 0;
+                    height: 0;
+                    padding: 0;
+                    margin: 0; }
+
+                    .modal {
+                      top: 0 !important; }
+
+                      .modal-footer input {
+                        width: auto; }
+
+                        .modal-body .modal-footer {
+                          width: 670px;
+                          margin-left: -25px;
+                          margin-right: -15px; }
+
+.modal-footer a.close {
+	background: -moz-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -ms-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f3f4), to(#e3e8ea));
+  	background: -webkit-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -o-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background-repeat: repeat-x;
+  	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+ 	border: 1px solid #C3CED7;
+ 	font-weight: 700;
+	margin-top: 0;
+	margin-right: 5px;
+	font-size: 13px;
+	line-height: 1.5;
+	color: #000000;
+	/*font-weight: normal;*/
+	filter: alpha(opacity=100);
+	-khtml-opacity: 1;
+	-moz-opacity: 1;
+	opacity: 1; }
+
+.modal-footer a.close:hover {
+	color: #000000;
+  	background: -moz-linear-gradient(top, #F8F9FA, #F1F4F5);
+  	background: -ms-linear-gradient(top, #F8F9FA, #F1F4F5);
+  	background: -webkit-gradient(linear, 0 0, 0 100%, from(#F8F9FA), to(#F1F4F5));
+  	background: -webkit-linear-gradient(top, #F8F9FA, #F1F4F5);
+  	background: -o-linear-gradient(top, #F8F9FA, #F1F4F5);
+  	background: linear-gradient(top, #F8F9FA, #F1F4F5);  
+	text-decoration: none; 
+}
+
+                              .modal-body .help-block {
+                                text-align: left;
+                                float: left;
+                                width: 100%;
+                                margin-bottom: 10px; }
+
+                                #create_keypair_modal .clearfix {
+                                  margin-bottom: 115px; }
+
+                                  #actions {
+                                    width: 90px; }
+
+                                    #actions .btn {
+                                      margin-bottom: 5px; }
+
+                                      #actions a.btn {
+                                        width: 70px; }
+
+                                        #actions input.btn {
+                                          text-align: left; }
+
+                                          #images #actions {
+                                            width: 100px; }
+
+                                            .details-modal .modal-body {
+                                              padding-bottom: 20px; }
+
+                                              td.select {
+                                                width: 10px; }
+
+                                                td.actions_column {
+                                                  white-space: nowrap;
+                                                  padding: 10px;
+                                                  position: relative;
+                                                  width: 200px;
+                                                  background-clip: padding-box; }
+
+                                                  td.actions_column .btn-group {
+                                                    display: inline-block; }
+
+                                                    td.actions_column .row_actions a, td.actions_column .row_actions input,
+                                                    td.actions_column .row_actions button, div.table_actions_menu .dropdown-menu a,
+                                                    div.table_actions_menu .dropdown-menu input,
+                                                    div.table_actions_menu .dropdown-menu button {
+                                                      background: none;
+                                                      float: none;
+                                                      display: block;
+                                                      padding: 5px 10px;
+                                                      color: #333333;
+                                                      text-align: left;
+                                                      border-radius: 0;
+                                                      border: 0 none;
+                                                      -webkit-box-shadow: none;
+                                                      box-shadow: none; }
+
+                                                      td.actions_column .row_actions .hide {
+                                                        display: none; }
+
+                                                        td.actions_column .btn-action-required {
+                                                          font-weight: bold; }
+
+                                                          .tab-content {
+                                                            overflow: visible; }
+
+                                                            .btn.hide, .btn-group .hide {
+                                                              display: none; }
+
+                                                              .btn-group .dropdown-toggle:focus {
+                                                                outline: none; }
+
+                                                                .dropdown-menu button {
+                                                                  line-height: 18px;
+                                                                  width: 100%; }
+
+                                                                  .btn-group .dropdown-menu .btn {
+                                                                    border-radius: 0; }
+
+.dropdown-menu .btn.btn-danger, .dropdown-menu .btn.btn-danger:hover,
+.dropdown-menu .btn.btn-success, .dropdown-menu .btn.btn-success:hover,
+.dropdown-menu .btn.btn-info, .dropdown-menu .btn.btn-info:hover {
+	text-shadow: none; }
+.dropdown-menu li:hover {
+	background: none; }
+td.actions_column .dropdown-menu a:hover,
+td.actions_column .dropdown-menu button:hover,
+div.table_actions_menu .dropdown-menu a:hover,
+div.table_actions_menu .dropdown-menu button:hover {
+	background-color: #eeeeee; }
+.dropdown-menu .btn.btn-danger {
+	color: #333333; }
+.dropdown-menu .btn.btn-danger:hover {
+	background-color: #eeeeee !important; }
+	
+tr td.actions_column ul.row_actions.single,
+tr:hover td.actions_column ul.row_actions.single,
+td.actions_column ul.row_actions.single,
+td.actions_column ul.row_actions.single:hover {
+	border: none; }
+
+                                                                                td.actions_column ul.row_actions.single li.action {
+                                                                                  display: block; }
+
+                                                                                  td.actions_column ul.row_actions.single li.action:hover {
+                                                                                    background-color: transparent; }
+
+                                                                                    td.actions_column ul.row_actions.single a,
+                                                                                    td.actions_column ul.row_actions.single input,
+                                                                                    td.actions_column ul.row_actions.single button {
+                                                                                      color: #5bc0de; }
+
+                                                                                      td.actions_column ul.row_actions.single a:hover,
+                                                                                      td.actions_column ul.row_actions.single input:hover,
+                                                                                      td.actions_column ul.row_actions.single button:hover {
+                                                                                        color: #333333; }
+
+                                                                                        th.multi_select_column, td.multi_select_column {
+                                                                                          width: 41px; }
+
+                                                                                          th.multi_select_column, td.multi_select_column {
+                                                                                            text-align: center; }
+
+                                                                                            .table-fixed {
+                                                                                              table-layout: fixed; }
+
+                                                                                              .table input[type="checkbox"] {
+                                                                                                display: inline; }
+
+                                                                                                div.input input[type="checkbox"] {
+                                                                                                  float: left;
+                                                                                                  width: 25px; }
+
+                                                                                                  .table_title a {
+                                                                                                    font-size: 11px;
+                                                                                                    float: right;
+                                                                                                    margin-left: 10px;
+                                                                                                    margin-top: 10px; }
+
+                                                                                                    tr.terminated {
+                                                                                                      color: #999999; }
+
+                                                                                                      #instance_tabs {
+                                                                                                        float: left;
+                                                                                                        width: 100%;
+                                                                                                        border-bottom: 1px solid #e1e1e1; }
+
+                                                                                                        #instance_tabs li a {
+                                                                                                          background: #f2f2f2;
+                                                                                                          display: block;
+                                                                                                          font-size: 14px;
+                                                                                                          float: left;
+                                                                                                          padding: 5px 10px;
+                                                                                                          margin-right: 10px;
+                                                                                                          border: 1px solid #e1e1e1;
+                                                                                                          border-bottom: none; }
+
+                                                                                                          #instance_tabs li.active a {
+                                                                                                            background: #fff;
+                                                                                                            padding-bottom: 8px;
+                                                                                                            margin-bottom: -5px; }
+
+#main_content {
+	position: relative;
+	top: -5px;
+}
+
+                                                                                                            #main_content .nav-tabs {
+                                                                                                              margin-bottom: 0; }
+
+                                                                                                              #main_content .tab-content {
+                                                                                                                border: 1px solid #ddd;
+                                                                                                                border-top: 0 none;
+                                                                                                                padding: 10px; }
+
+                                                                                                                #main_content .workflow .modal-body {
+                                                                                                                  padding-left: 0;
+                                                                                                                  padding-right: 0; }
+
+                                                                                                                  #main_content .workflow .modal-body .tab-content {
+                                                                                                                    border-left: 0 none;
+                                                                                                                    border-right: 0 none;
+                                                                                                                    border-bottom: 0 none; }
+
+                                                                                                                    #content_body {
+                                                                                                                      padding-left: 255px;
+                                                                                                                      padding-right: 25px; }
+
+                                                                                                                      .tab_wrapper {
+                                                                                                                        padding-top: 50px; }
+
+                                                                                                                        .tooltip {
+                                                                                                                          z-index: 12000; }
+
+                                                                                                                          .volume_boot_disclosure {
+                                                                                                                            font-weight: bold;
+                                                                                                                            color: #555;
+                                                                                                                            cursor: pointer;
+                                                                                                                            background-image: url('/static/dashboard/img/right_droparrow.png?b14134630332');
+                                                                                                                            background-repeat: no-repeat;
+                                                                                                                            background-position: 130px center; }
+
+                                                                                                                            .volume_boot_disclosure.on {
+                                                                                                                              width: 334px;
+                                                                                                                              margin-bottom: 10px;
+                                                                                                                              border-bottom: solid 1px #dddddd;
+                                                                                                                              background-image: url('/static/dashboard/img/drop_arrow.png?2ec1100baed3'); }
+
+                                                                                                                              .nav-tabs a {
+                                                                                                                                cursor: pointer; }
+
+                                                                                                                                .nav-tabs li.error a {
+                                                                                                                                  color: #d9534f; }
+
+                                                                                                                                  .nav-tabs li.error a:after {
+                                                                                                                                    content: "*"; }
+
+                                                                                                                                    .nav-tabs li.required a:after, form .form-group.required > label:after,
+                                                                                                                                    form .form-field.required > label:after {
+                                                                                                                                      content: "*";
+                                                                                                                                      font-weight: bold;
+                                                                                                                                      line-height: 0;
+                                                                                                                                      padding-left: 4px;
+                                                                                                                                      color: #428bca; }
+
+                                                                                                                                      #region_selector {
+                                                                                                                                        position: absolute;
+                                                                                                                                        z-index: 9999;
+                                                                                                                                        right: 0;
+                                                                                                                                        top: 24px; }
+
+                                                                                                                                        #region_selector a {
+                                                                                                                                          margin-left: 0; }
+
+                                                                                                                                          #region_selector ul {
+                                                                                                                                            float: left;
+                                                                                                                                            margin-left: 5px;
+                                                                                                                                            padding-right: 21px;
+                                                                                                                                            width: 125px; }
+
+                                                                                                                                            #region_selector ul:hover a {
+                                                                                                                                              display: block; }
+
+                                                                                                                                              #region_selector li a {
+                                                                                                                                                padding: 3px 3px 3px 5px;
+                                                                                                                                                display: none;
+                                                                                                                                                background: #e1e1e1;
+                                                                                                                                                margin-top: -10px; }
+
+                                                                                                                                                #region_selector li:first-child p {
+                                                                                                                                                  background: #ededed url('/static/dashboard/img/drop_arrow.png?2ec1100baed3') no-repeat 106px 9px !important;
+                                                                                                                                                  display: block;
+                                                                                                                                                  border: 1px solid #e1e1e1;
+                                                                                                                                                  padding: 5px; }
+
+                                                                                                                                                  iframe {
+                                                                                                                                                    border: none; }
+
+                                                                                                                                                    .item_detail ul li label {
+                                                                                                                                                      color: #333333;
+                                                                                                                                                      font-weight: bold;
+                                                                                                                                                      display: block;
+                                                                                                                                                      margin-top: 5px; }
+
+                                                                                                                                                      .progress_bar {
+                                                                                                                                                        height: 100%;
+                                                                                                                                                        width: 100%;
+                                                                                                                                                        border: 1px solid #cccccc;
+                                                                                                                                                        background-color: #cccccc; }
+
+                                                                                                                                                        .progress_bar_fill, .progress_bar_selected {
+                                                                                                                                                          height: 100%;
+                                                                                                                                                          float: left; }
+
+                                                                                                                                                          .progress_bar_fill {
+                                                                                                                                                            background-color: #555555; }
+
+                                                                                                                                                            .progress_bar_selected {
+                                                                                                                                                              background-color: #428bca;
+                                                                                                                                                              width: 0; }
+
+                                                                                                                                                              .progress_bar_over {
+                                                                                                                                                                background-color: #d9534f; }
+
+                                                                                                                                                                .d3_quota_bar {
+                                                                                                                                                                  width: 20%;
+                                                                                                                                                                  margin-bottom: 8px;
+                                                                                                                                                                  margin-top: 10px;
+                                                                                                                                                                  float: left;
+                                                                                                                                                                  text-align: center; }
+
+                                                                                                                                                                  .quota-dynamic {
+                                                                                                                                                                    overflow: hidden;
+                                                                                                                                                                    margin-bottom: 8px; }
+
+                                                                                                                                                                    .quota_title {
+                                                                                                                                                                      color: #cccccc;
+                                                                                                                                                                      padding-bottom: 0;
+                                                                                                                                                                      margin-bottom: 8px; }
+
+                                                                                                                                                                      .quota_title strong {
+                                                                                                                                                                        color: #333333; }
+
+                                                                                                                                                                        .quota_title strong span {
+                                                                                                                                                                          font-weight: normal; }
+
+                                                                                                                                                                          .quota_title p {
+                                                                                                                                                                            float: right;
+                                                                                                                                                                            margin-bottom: 0; }
+
+                                                                                                                                                                            .quota_bar {
+                                                                                                                                                                              margin: -8px 0 8px; }
+
+                                                                                                                                                                              div .flavor_table {
+                                                                                                                                                                                border: 1px solid #dddddd;
+                                                                                                                                                                                width: 100%;
+                                                                                                                                                                                margin-bottom: 14px; }
+
+                                                                                                                                                                                .flavor_table .flavor_name {
+                                                                                                                                                                                  white-space: nowrap;
+                                                                                                                                                                                  font-weight: bold;
+                                                                                                                                                                                  text-align: left;
+                                                                                                                                                                                  padding: 7px 12px 7px 7px;
+                                                                                                                                                                                  width: 160px; }
+
+                                                                                                                                                                                  #main_content .row {
+                                                                                                                                                                                    margin: 10px 0 20px; }
+
+                                                                                                                                                                                    #main_content .row:last-child {
+                                                                                                                                                                                      margin-bottom: 0; }
+
+                                                                                                                                                                                      .version_label {
+                                                                                                                                                                                        position: relative;
+                                                                                                                                                                                        text-align: right; }
+
+                                                                                                                                                                                        .header_rule {
+                                                                                                                                                                                          margin: 0 0 10px; }
+
+                                                                                                                                                                                          .item_detail .detail_section {
+                                                                                                                                                                                            margin-bottom: 25px;
+                                                                                                                                                                                            float: left;
+                                                                                                                                                                                            margin-right: 50px; }
+
+                                                                                                                                                                                            .has-error .help-block, .dynamic-error {
+                                                                                                                                                                                              padding: 10px; }
+
+                                                                                                                                                                                              .dynamic-error {
+                                                                                                                                                                                                background: #ffffff;
+                                                                                                                                                                                                border: 1px solid #dddddd;
+                                                                                                                                                                                                color: #d9534f;
+                                                                                                                                                                                                margin-bottom: 0.5em; }
+
+                                                                                                                                                                                                label.log-length {
+                                                                                                                                                                                                  line-height: 28px;
+                                                                                                                                                                                                  margin-right: 10px; }
+
+                                                                                                                                                                                                  .progress-success.bar {
+                                                                                                                                                                                                    background-color: #5eb95e;
+                                                                                                                                                                                                    background-image: -moz-linear-gradient(top, #62c462, #57a957);
+                                                                                                                                                                                                    background-image: -ms-linear-gradient(top, #62c462, #57a957);
+                                                                                                                                                                                                    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+                                                                                                                                                                                                    background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+                                                                                                                                                                                                    background-image: -o-linear-gradient(top, #62c462, #57a957);
+                                                                                                                                                                                                    background-image: linear-gradient(top, #62c462, #57a957);
+                                                                                                                                                                                                    background-repeat: repeat-x;
+                                                                                                                                                                                                    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
+                                                                                                                                                                                                                                                                                                                                                                                                        endColorstr='#57a957', GradientType=0); }
+
+                                                                                                                                                                                                    .progress_bar_fill.progress-warning.bar {
+                                                                                                                                                                                                      background-color: #898989;
+                                                                                                                                                                                                      background-image: -moz-linear-gradient(top, #999999, #333333);
+                                                                                                                                                                                                      background-image: -ms-linear-gradient(top, #999999, #333333);
+                                                                                                                                                                                                      background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#999999), to(#333333));
+                                                                                                                                                                                                      background-image: -webkit-linear-gradient(top, #999999, #333333);
+                                                                                                                                                                                                      background-image: -o-linear-gradient(top, #999999, #333333);
+                                                                                                                                                                                                      background-image: linear-gradient(top, #999999, #333333);
+                                                                                                                                                                                                      background-repeat: repeat-x;
+                                                                                                                                                                                                      filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#999999',
+                                                                                                                                                                                                                                                                                                                                                                                                            endColorstr='#333333', GradientType=0); }
+
+                                                                                                                                                                                                      .progress_bar_over.bar {
+                                                                                                                                                                                                        background-color: #dd514c;
+                                                                                                                                                                                                        background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+                                                                                                                                                                                                        background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+                                                                                                                                                                                                        background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+                                                                                                                                                                                                        background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+                                                                                                                                                                                                        background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+                                                                                                                                                                                                        background-image: linear-gradient(top, #ee5f5b, #c43c35);
+                                                                                                                                                                                                        background-repeat: repeat-x;
+                                                                                                                                                                                                        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
+                                                                                                                                                                                                                                                                                                                                                                                                                endColorstr='#c43c35', GradientType=0); }
+
+                                                                                                                                                                                                        .split_five div.form-group input[type="text"], .split_five div.form-group select {
+                                                                                                                                                                                                          width: 120px; }
+
+                                                                                                                                                                                                          .warning {
+                                                                                                                                                                                                            background-color: #ffffff;
+                                                                                                                                                                                                            border-bottom: 1px solid #d9534f;
+                                                                                                                                                                                                            padding: 5px 10px; }
+                                                                                                                                                                                                            .warning .warning-text {
+                                                                                                                                                                                                              text-align: center; }
+                                                                                                                                                                                                              .warning .warning-text h3, .warning .warning-text a {
+                                                                                                                                                                                                                display: inline-block; }
+                                                                                                                                                                                                                .warning .warning-text h3 {
+                                                                                                                                                                                                                  vertical-align: bottom; }
+
+#admin_warning_detail ul {
+  list-style: circle;
+  padding-left: 20px;
+  margin-bottom: 10px; }
+
+.no_split {
+  margin-top: -60px; }
+
+  .capabilities {
+    min-height: 200px; }
+    .capabilities .panel .list-group {
+      height: 400px;
+      overflow: auto; }
+      .capabilities .dark-stripe {
+        background-color: #f9f9f9; }
+        .capabilities .light-stripe {
+          background-color: white; }
+          .capabilities .list-group-item.level-0 > * {
+            padding-left: 0px; }
+            .capabilities .list-group-item.level-1 > * {
+              padding-left: 15px; }
+              .capabilities .list-group-item.level-2 > * {
+                padding-left: 30px; }
+                .capabilities .list-group-item .leaf {
+                  padding-left: 10px; }
+                  .capabilities .list-group-item span.input-group-addon {
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
+                    width: 50%;
+                    max-width: 140px;
+                    text-align: right; }
+                    .capabilities .list-group-item .label-info {
+                      display: inline-block;
+                      position: absolute;
+                      z-index: 10;
+                      top: 1px;
+                      left: 25px;
+                      max-width: 80%;
+                      overflow: hidden;
+                      text-overflow: ellipsis; }
+                      .capabilities .list-group-item .label-danger {
+                        display: inline-block;
+                        position: absolute;
+                        z-index: 10;
+                        bottom: 1px;
+                        left: 25px; }
+
+.membership {
+	min-height: 200px; }
+.membership .btn-group {
+    margin-left: 0px;
+    padding: 3px 10px;
+    margin-bottom: 0px;
+    border: 1px solid #cccccc;
+    border-bottom: none; }
+.membership .btn-group .active {
+	float: right; }
+.membership a.btn-primary:hover {
+	background-color: #005d9d; 
+}
+.membership .help_text {
+          margin-left: 5px;
+          margin-bottom: 15px;
+          width: 650px; }
+.membership .members_title {
+	color: #555555;
+	font-weight: bold;
+	float: left;
+	line-height: 30px;
+	width: 160px; }
+.membership input[type="text"]:disabled + span.glyphicon-search {
+	color: #cccccc; }
+.membership .fake_table_header {
+	background-color: #ffffff;
+	padding: 10px;
+	border: 1px solid #dddddd;
+	border-bottom: none;
+	overflow: hidden; }
+.membership .fake_table > ul {
+                  padding: 0; }
+                  .membership .fake_table > ul.no_results {
+                    border: 1px solid #dddddd;
+                    padding: 10px; }
+.membership .fake_table ul.btn-group:hover {
+	background-color: #dddddd; 
+}
+  .membership .member {
+    text-align: left;
+    line-height: 32px; }
+    .membership .members ul.btn-group, .membership .available_members ul.btn-group {
+      display: block; }
+      .membership .members ul.btn-group.nav-pills > li > a,
+      .membership .available_members ul.btn-group.nav-pills > li > a {
+        padding: 6px 11px; }
+  .membership .dark_stripe {
+    background-color: #f9f9f9; }
+    .membership .light_stripe {
+      background-color: white; }
+      .membership .last_stripe {
+        border-bottom: 1px solid #dddddd; }
+        .membership .has-feedback {
+          display: inline-block;
+          float: right;
+          margin-bottom: 0; }
+          .membership .filter {
+            width: 130px; }
+            .membership .form-control-feedback {
+              top: 0; }
+              .membership .role_dropdown li {
+                cursor: pointer;
+                background: none;
+                float: none;
+                display: block;
+                padding: 5px 10px;
+                color: #000;
+                text-align: left;
+                border-radius: 0;
+                border: 0 none;
+                -webkit-box-shadow: none;
+                box-shadow: none;
+                z-index: 99999; }
+                .membership .role_dropdown li i {
+                  opacity: 0;
+                  display: inline-block;
+                  width: 14px;
+                  font-size: 12px;
+                  line-height: 14px;
+                  vertical-align: text-top; }
+                  .membership .role_dropdown li i:before {
+                    content: "\e013"; }
+                .membership .role_dropdown li:hover {
+                  background-color: #cdcdcd; }
+                  .membership .role_dropdown li.selected i {
+                    opacity: 1; }
+  .membership .dropdown-menu.role_dropdown {
+    right: 0;
+    left: auto; }
+    .membership .nav .role_options {
+      float: right;
+      padding-right: 5px; }
+
+.add_member_btn {
+  display: inline; }
+
+  #add_member {
+    clear: both; }
+
+    .add_member {
+      float: right;
+      margin-top: 10px;
+      margin-right: 15px; }
+
+      .dropdown_fix {
+        overflow: visible; }
+
+        .loading_gif {
+          margin-right: 0.5em;
+          float: left; }
+
+          .btn-inline {
+            margin-bottom: 9px; }
+
+            .modal-body fieldset .form-field select[data-add-item-url] {
+              width: 275px;
+              margin-right: 2px; }
+
+              #networkListSortContainer {
+                display: none; }
+
+                .networklist {
+                  padding: 6px;
+                  background: #eee;
+                  border: 1px solid #dddddd;
+                  min-height: 2em;
+                  width: auto !important;
+                  -webkit-box-sizing: border-box;
+                  -moz-box-sizing: border-box;
+                  box-sizing: border-box; }
+                  .networklist li {
+                    width: 226px;
+                    list-style-type: none;
+                    margin: 6px auto;
+                    padding: 3px;
+                    background: #ffffff;
+                    border: 1px solid #aaa;
+                    line-height: 18px;
+                    border-radius: 3px;
+                    cursor: move;
+                    padding-left: 23px;
+                    background: #ffffff url('/static/dashboard/img/drag.png?93ec7e23f795') no-repeat 11px 50%; }
+                    .networklist li em {
+                      font-size: 0.5em;
+                      line-height: 1em;
+                      color: #999;
+                      font-style: normal;
+                      margin-left: 0.8em; }
+                      .networklist li i {
+                        margin-right: 5px;
+                        vertical-align: middle; }
+                        .networklist li a.btn {
+                          -webkit-box-sizing: border-box;
+                          -moz-box-sizing: border-box;
+                          box-sizing: border-box;
+                          font-size: 11px;
+                          line-height: 12px;
+                          padding: 2px 5px 3px;
+                          margin-right: 1px;
+                          width: 18px;
+                          text-align: center;
+                          right: 5px;
+                          vertical-align: middle;
+                          float: right; }
+                          .networklist li a.btn:before {
+                            content: "+"; }
+                  .networklist li.ui-sortable-helper {
+                    background-color: #def; }
+                    .networklist li.ui-state-highlight {
+                      border: 1px dotted #cccccc;
+                      background: #efefef;
+                      height: 0.5em; }
+                      .networklist li:after {
+                        visibility: hidden;
+                        display: block;
+                        font-size: 0;
+                        content: " ";
+                        clear: both;
+                        height: 0; }
+
+#selected_network {
+  margin-bottom: 1.5em;
+  counter-reset: v1 0;
+  background: #edf9ff;
+  border: 1px solid #c0d9e4; }
+  #selected_network li {
+    position: relative; }
+    #selected_network li a.btn:before {
+      content: "-"; }
+#selected_network li:before {
+    content: "NIC:" counter(v1);
+    counter-increment: v1;
+    display: inline-block;
+    margin-right: 5px;
+    background: #555555;
+    color: #ffffff;
+    font-size: 90%;
+    padding: 0px 4px;
+    vertical-align: middle;
+    border-radius: 2px;
+    position: absolute;
+    left: -2em; }
+#selected_network.dragging li:before {
+      content: "NIC:";
+      background-color: rgba(102, 102, 102, 0.5);
+      padding-right: 10px; }
+#selected_network.dragging li.ui-state-highlight:before {
+        content: "";
+        background: transparent; }
+
+#topologyCanvasContainer {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 100%;
+	height: auto;
+	padding: 25px;
+	padding-left: 50px;
+	background: #efefef;
+	min-height: 400px; }
+#topologyCanvasContainer div.nodata {
+    font-size: 150%;
+    text-align: center;
+    padding-top: 150px;
+    display: none; }
+#topologyCanvasContainer.noinfo div.nodata {
+	display: block; }
+#topologyCanvasContainer.noinfo #topology_canvas {
+	display: none; }
+
+.topologyNavi {
+  overflow: hidden;
+  margin: 10px 0 20px; }
+.topologyNavi i {
+    margin-right: 3px; }
+.topologyNavi .toggleView {
+	float: left; }
+.topologyNavi .launchButtons {
+	float: right;
+	text-align: right; }
+
+.toggleView .btn,
+.topologyNavi .launchButtons a.btn {
+	margin-left: 10px; 
+	background: -moz-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -ms-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f3f4), to(#e3e8ea));
+  	background: -webkit-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: -o-linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background: linear-gradient(top, #f1f3f4, #e3e8ea);
+  	background-repeat: repeat-x;
+  	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+ 	border: 1px solid #C3CED7;
+ 	font-weight: 700;
+}
+
+.toggleView .btn:hover,
+.topologyNavi .launchButtons a.btn:hover {
+  background: -moz-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -ms-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -webkit-gradient(linear, 0 0, 0 100%, from(#F8F9FA), to(#F1F4F5));
+  background: -webkit-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: -o-linear-gradient(top, #F8F9FA, #F1F4F5);
+  background: linear-gradient(top, #F8F9FA, #F1F4F5);  
+  text-decoration: none;
+}
+
+.topologyBalloon {
+	display: none;
+	background: #ffffff;
+	position: absolute;
+	left: 100px;
+	top: 20px;
+	z-index: 600;
+	border-radius: 5px;
+	color: #333;
+	min-width: 200px;
+	line-height: 1.2;
+	font-size: 11px;
+	-webkit-box-shadow: 0px 1px 6px #777;
+	box-shadow: 0px 1px 6px #777; }
+.topologyBalloon.on {
+    display: block; }
+.topologyBalloon .vnc_window {
+	margin-left: 10px; }
+.topologyBalloon .closeTopologyBalloon {
+    font-size: 16px;
+    line-height: 1;
+    display: block;
+    position: absolute;
+    font-weight: bold;
+    right: 6px;
+    top: 0px;
+    cursor: pointer;
+    padding: 3px;
+    color: #aaa; }
+.topologyBalloon .closeTopologyBalloon:hover {
+	color: #777;
+	text-decoration: none; }
+.topologyBalloon .contentBody {
+    padding: 8px 8px 0; }
+.topologyBalloon span.active:before, .topologyBalloon span.down:before {
+	content: "";
+	width: 9px;
+	height: 9px;
+	display: inline-block;
+	background: #5cb85c;
+	margin-right: 3px;
+	border-radius: 10px;
+	vertical-align: middle; }
+.topologyBalloon span.down:before {
+    background: #d9534f; }
+.topologyBalloon .footer {
+    background: #efefef;
+    border-top: 1px solid #dddddd;
+    padding: 8px;
+    border-radius: 0px 0px 7px 7px; }
+    .topologyBalloon .footer .footerInner {
+      display: table;
+      width: 100%; }
+.topologyBalloon .footer .cell {
+	display: table-cell;
+	padding-right: 5px; }
+.topologyBalloon .footer .link {
+	font-size: 12px; }
+.topologyBalloon .footer .delete {
+	padding-right: 0;
+	text-align: right; }
+.topologyBalloon table.detailInfoTable {
+    margin-bottom: 5px; }
+.topologyBalloon table.detailInfoTable caption {
+      text-align: left;
+      font-size: 12px;
+      color: #000000;
+      font-weight: bold;
+      margin-bottom: 5px; }
+.topologyBalloon table.detailInfoTable th,
+.topologyBalloon table.detailInfoTable td {
+        text-align: left;
+        vertical-align: middle;
+        padding-bottom: 3px;
+        background: transparent; }
+.topologyBalloon table.detailInfoTable th {
+	color: #cccccc;
+	padding-right: 8px;
+	width: 80px; }
+.topologyBalloon table.detailInfoTable th span {
+	vertical-align: middle;
+	width: 80px;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: inline-block; }
+.topologyBalloon table.detailInfoTable th.device {
+	color: #333333;
+	text-align: right; }
+.topologyBalloon table.detailInfoTable td {
+      padding-right: 5px;
+      white-space: nowrap; }
+.topologyBalloon table.detailInfoTable td.delete {
+	padding-right: 0;
+	text-align: right; }
+.topologyBalloon table.detailInfoTable .btn {
+	line-height: 1.4; }
+.topologyBalloon:before {
+    border-top: 7px solid transparent;
+    border-bottom: 7px solid transparent;
+    border-right: 9px solid #dddddd;
+    display: block;
+    position: absolute;
+    top: 30px;
+    left: -9px;
+    width: 0;
+    height: 0;
+    content: ""; }
+.topologyBalloon:after {
+      border-top: 6px solid transparent;
+      border-bottom: 6px solid transparent;
+      border-right: 8px solid #ffffff;
+      display: block;
+      position: absolute;
+      top: 31px;
+      left: -8px;
+      width: 0;
+      height: 0;
+      content: ""; }
+.topologyBalloon.leftPosition:before {
+	border-right: none;
+	border-left: 9px solid #dddddd;
+	right: -9px;
+	top: 30px;
+	left: auto; }
+.topologyBalloon.leftPosition:after {
+	border-right: none;
+	border-left: 8px solid #ffffff;
+	right: -8px;
+	top: 31px;
+	left: auto; }
+
+#topologyMessages {
+	width: 1px;
+	height: 1px;
+	visibility: hidden;
+	position: absolute;
+	top: -100px; }
+
+.quota-heading {
+    /*font-family: anivers;*/
+    font-weight: normal;
+    font-size: 24px;
+    margin-bottom: 10px; }
+
+.link {
+	width: 200px;
+	stroke: #999;
+	stroke-width: 1.5px; }
+
+.node {
+	cursor: pointer; }
+
+.node text {
+	font: 12px sans-serif; }
+
+#resource_container {
+	position: relative; }
+
+#stack_box {
+	position: absolute;
+	width: 300px;
+	top: 10px;
+	left: 10px; }
+
+#stack_box h3 {
+	font-size: 11pt;
+	line-height: 20px; }
+
+#stack_box p {
+	margin: 0;
+	font-size: 9pt;
+	line-height: 14px; }
+
+#stack_box a {
+	margin: 0;
+	font-size: 9pt;
+	line-height: 14px; }
+
+#stack_box img {
+	float: left; }
+
+#stack_box #stack_info {
+	float: left;
+	white-space: normal;
+	width: 200px; }
+
+#info_box {
+	position: absolute;
+	width: 300px;
+	top: 100px;
+	left: 10px; }
+
+                      #info_box h3 {
+                        font-size: 9pt;
+                        line-height: 20px; }
+
+                        #info_box p {
+                          margin: 0;
+                          font-size: 9pt;
+                          line-height: 14px; }
+
+                          #info_box a {
+                            margin: 0;
+                            font-size: 9pt;
+                            line-height: 14px; }
+
+                            #info_box .error {
+                              color: #a02622; }
+
+                              #ruleListSortContainer {
+                                display: none; }
+
+                                .rulelist {
+                                  padding: 6px;
+                                  background: #eee;
+                                  border: 1px solid #dddddd;
+                                  min-height: 2em;
+                                  width: auto !important;
+                                  -webkit-box-sizing: border-box;
+                                  -moz-box-sizing: border-box;
+                                  box-sizing: border-box; }
+                                  .rulelist li {
+                                    width: 226px;
+                                    list-style-type: none;
+                                    margin: 6px auto;
+                                    padding: 3px;
+                                    background: #ffffff;
+                                    border: 1px solid #dddddd;
+                                    line-height: 18px;
+                                    border-radius: 3px;
+                                    cursor: move;
+                                    padding-left: 23px;
+                                    background: #ffffff url('/static/dashboard/img/drag.png?93ec7e23f795') no-repeat 11px 50%; }
+                    .rulelist li em {
+                      font-size: 0.5em;
+                      line-height: 1em;
+                      color: #999;
+                      font-style: normal;
+                      margin-left: 0.8em; }
+                      .rulelist li i {
+                        margin-right: 5px;
+                        vertical-align: middle; }
+                        .rulelist li a.btn {
+                          -webkit-box-sizing: border-box;
+                          -moz-box-sizing: border-box;
+                          box-sizing: border-box;
+                          font-size: 11px;
+                          line-height: 12px;
+                          padding: 2px 5px 3px;
+                          margin-right: 1px;
+                          width: 18px;
+                          text-align: center;
+                          right: 5px;
+                          vertical-align: middle;
+                          float: right; }
+                          .rulelist li a.btn:before {
+                            content: "+"; }
+                  .rulelist li.ui-sortable-helper {
+                    background-color: #def; }
+                    .rulelist li.ui-state-highlight {
+                      border: 1px dotted #dddddd;
+                      background: #efefef;
+                      height: 0.5em; }
+                      .rulelist li:after {
+                        visibility: hidden;
+                        display: block;
+                        font-size: 0;
+                        content: " ";
+                        clear: both;
+                        height: 0; }
+
+#selected_rule {
+  margin-bottom: 1.5em;
+  counter-reset: v1 0;
+  background: #edf9ff;
+  border: 1px solid #dddddd; }
+  #selected_rule li {
+    position: relative; }
+    #selected_rule li a.btn:before {
+      content: "-"; }
+  #selected_rule li:before {
+    content: "rule:" counter(v1);
+    counter-increment: v1;
+    display: inline-block;
+    margin-right: 5px;
+    background: #555555;
+    color: #ffffff;
+    font-size: 90%;
+    padding: 0px 4px;
+    vertical-align: middle;
+    border-radius: 2px;
+    position: absolute;
+    left: -2em; }
+    #selected_rule.dragging li:before {
+      content: "rule:";
+      background-color: rgba(102, 102, 102, 0.5);
+      padding-right: 10px; }
+      #selected_rule.dragging li.ui-state-highlight:before {
+        content: "";
+        background: transparent; }
+
+.tablesorter thead tr th.tablesorter-header {
+  cursor: pointer;
+  background-repeat: no-repeat;
+  background-position: 99% center;
+  background-position: right 5px center; }
+  .tablesorter thead tr th.tablesorter-headerAsc {
+    background-image: url('/static/dashboard/img/up_arrow.png?4293b62aa222'); }
+    .tablesorter thead tr th.tablesorter-headerDesc {
+      background-image: url('/static/dashboard/img/drop_arrow.png?2ec1100baed3'); }
+
+a.link-popover {
+  cursor: default; }
+
+  a:hover.link-popover {
+    text-decoration: none; }
+.breadcrumb {
+  padding: 8px 15px;
+  margin-bottom: 18px;
+  list-style: none;
+  background-color: #f5f5f5;
+  border-radius: 4px; }
+  .breadcrumb > li {
+    display: inline-block; }
+    .breadcrumb > li + li:before {
+      content: "/\00a0";
+      padding: 0 5px;
+      color: #ccc; }
+  .breadcrumb > .active {
+    color: #777; }
+.pagination {
+  display: inline-block;
+  padding-left: 0;
+  margin: 18px 0;
+  border-radius: 4px; }
+  .pagination > li {
+    display: inline; }
+    .pagination > li > a, .pagination > li > span {
+      position: relative;
+      float: left;
+      padding: 6px 12px;
+      line-height: 1.5;
+      text-decoration: none;
+      color: #428bca;
+      background-color: #fff;
+      border: 1px solid #ddd;
+      margin-left: -1px; }
+      .pagination > li:first-child > a, .pagination > li:first-child > span {
+        margin-left: 0;
+        border-bottom-left-radius: 4px;
+        border-top-left-radius: 4px; }
+    .pagination > li:last-child > a, .pagination > li:last-child > span {
+      border-bottom-right-radius: 4px;
+      border-top-right-radius: 4px; }
+  .pagination > li > a:hover, .pagination > li > a:focus,
+  .pagination > li > span:hover, .pagination > li > span:focus {
+    color: #005D9D;
+    background-color: #eee;
+    border-color: #ddd; }
+  .pagination > .active > a, .pagination > .active > a:hover,
+  .pagination > .active > a:focus, .pagination > .active > span,
+  .pagination > .active > span:hover, .pagination > .active > span:focus {
+    z-index: 2;
+    color: #fff;
+    background-color: #428bca;
+    border-color: #428bca;
+    cursor: default; }
+  .pagination > .disabled > span, .pagination > .disabled > span:hover,
+  .pagination > .disabled > span:focus, .pagination > .disabled > a,
+  .pagination > .disabled > a:hover, .pagination > .disabled > a:focus {
+    color: #777;
+    background-color: #fff;
+    border-color: #ddd;
+    cursor: not-allowed; }
+.pagination-lg > li > a, .pagination-lg > li > span {
+  padding: 10px 16px;
+  font-size: 17px; }
+  .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span {
+    border-bottom-left-radius: 6px;
+    border-top-left-radius: 6px; }
+.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span {
+  border-bottom-right-radius: 6px;
+  border-top-right-radius: 6px; }
+.pagination-sm > li > a, .pagination-sm > li > span {
+  padding: 5px 10px;
+  font-size: 12px; }
+  .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span {
+    border-bottom-left-radius: 3px;
+    border-top-left-radius: 3px; }
+.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span {
+  border-bottom-right-radius: 3px;
+  border-top-right-radius: 3px; }
+.pager {
+  padding-left: 0;
+  margin: 18px 0;
+  list-style: none;
+  text-align: center; }
+  .pager li {
+    display: inline; }
+    .pager li > a, .pager li > span {
+      display: inline-block;
+      padding: 5px 14px;
+      background-color: #fff;
+      border: 1px solid #ddd;
+      border-radius: 15px; }
+      .pager li > a:hover, .pager li > a:focus {
+        text-decoration: none;
+        background-color: #eee; }
+  .pager .next > a, .pager .next > span {
+    float: right; }
+  .pager .previous > a, .pager .previous > span {
+    float: left; }
+  .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus,
+  .pager .disabled > span {
+    color: #777;
+    background-color: #fff;
+    cursor: not-allowed; }
+.label {
+  display: inline;
+  padding: 0.2em 0.6em 0.3em;
+  font-size: 75%;
+  font-weight: bold;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: 0.25em; }
+  .label:empty {
+    display: none; }
+    .btn .label {
+      position: relative;
+      top: -1px; }
+
+a.label:hover, a.label:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer; }
+
+.label-default {
+  background-color: #777; }
+
+  .label-primary {
+    background-color: #428bca; }
+
+    .label-success {
+      background-color: #5cb85c; }
+
+      .label-info {
+        background-color: #5bc0de; }
+
+        .label-warning {
+          background-color: #f0ad4e; }
+
+          .label-danger {
+            background-color: #d9534f; }
+.label-default[href]:hover, .label-default[href]:focus {
+  background-color: #5e5e5e; }
+.label-primary[href]:hover, .label-primary[href]:focus {
+  background-color: #3071a9; }
+.label-success[href]:hover, .label-success[href]:focus {
+  background-color: #449d44; }
+.label-info[href]:hover, .label-info[href]:focus {
+  background-color: #31b0d5; }
+.label-warning[href]:hover, .label-warning[href]:focus {
+  background-color: #ec971f; }
+.label-danger[href]:hover, .label-danger[href]:focus {
+  background-color: #c9302c; }
+.jumbotron {
+  padding: 30px;
+  margin-bottom: 30px;
+  color: inherit;
+  background-color: #eee; }
+  .jumbotron h1, .jumbotron .h1 {
+    color: inherit; }
+    .jumbotron p {
+      margin-bottom: 15px;
+      font-size: 20px;
+      font-weight: 200; }
+      .jumbotron > hr {
+        border-top-color: #d5d5d5; }
+        .container .jumbotron {
+          border-radius: 6px; }
+          .jumbotron .container {
+            max-width: 100%; }
+            @media screen and (min-width: 768px) {
+              .jumbotron {
+                padding-top: 48px;
+                padding-bottom: 48px;   }
+                .container .jumbotron {
+                  padding-left: 60px;
+                  padding-right: 60px;   }
+                  .jumbotron h1, .jumbotron .h1 {
+                    font-size: 58.5px;   }
+}
+.thumbnail {
+  display: block;
+  padding: 4px;
+  margin-bottom: 18px;
+  line-height: 1.5;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out; }
+  .thumbnail > img, .thumbnail a > img {
+    display: block;
+    width: 100% \9;
+    max-width: 100%;
+    height: auto;
+    margin-left: auto;
+    margin-right: auto; }
+    .thumbnail .caption {
+      padding: 9px;
+      color: #333; }
+
+a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active {
+  border-color: #428bca; }
+.alert {
+  padding: 15px;
+  margin-bottom: 18px;
+  border: 1px solid transparent;
+  border-radius: 4px; }
+  .alert h4 {
+    margin-top: 0;
+    color: inherit; }
+    .alert .alert-link {
+      font-weight: bold; }
+      .alert > p, .alert > ul {
+        margin-bottom: 0; }
+        .alert > p + p {
+          margin-top: 5px; }
+
+.alert-dismissable, .alert-dismissible {
+  padding-right: 35px; }
+  .alert-dismissable .close, .alert-dismissible .close {
+    position: relative;
+    top: -2px;
+    right: -21px;
+    color: inherit; }
+
+.alert-success {
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+  color: #3c763d; }
+
+  .alert-info {
+    background-color: #d9edf7;
+    border-color: #bce8f1;
+    color: #31708f; }
+
+    .alert-warning {
+      background-color: #fcf8e3;
+      border-color: #faebcc;
+      color: #8a6d3b; }
+
+      .alert-danger {
+        background-color: #f2dede;
+        border-color: #ebccd1;
+        color: #a94442; }
+.alert-success hr {
+  border-top-color: #c9e2b3; }
+  .alert-success .alert-link {
+    color: #2b542c; }
+    .alert-info hr {
+      border-top-color: #a6e1ec; }
+      .alert-info .alert-link {
+        color: #245269; }
+        .alert-warning hr {
+          border-top-color: #f7e1b5; }
+          .alert-warning .alert-link {
+            color: #66512c; }
+            .alert-danger hr {
+              border-top-color: #e4b9c0; }
+              .alert-danger .alert-link {
+                color: #843534; }
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;   }
+    to {
+      background-position: 0 0;   }
+}
+
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;   }
+    to {
+      background-position: 0 0;   }
+}
+
+.progress {
+  overflow: hidden;
+  height: 18px;
+  margin-bottom: 18px;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }
+
+  .progress-bar {
+    float: left;
+    width: 0%;
+    height: 100%;
+    font-size: 12px;
+    line-height: 18px;
+    color: #fff;
+    text-align: center;
+    background-color: #428bca;
+    -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+    -webkit-transition: width 0.6s ease;
+    -o-transition: width 0.6s ease;
+    transition: width 0.6s ease; }
+
+    .progress-striped .progress-bar, .progress-bar-striped {
+      background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent);
+      background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent);
+      background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent);
+      background-size: 40px 40px; }
+
+      .progress.active .progress-bar, .progress-bar.active {
+        -webkit-animation: progress-bar-stripes 2s linear infinite;
+        -o-animation: progress-bar-stripes 2s linear infinite;
+        animation: progress-bar-stripes 2s linear infinite; }
+
+        .progress-bar[aria-valuenow="1"], .progress-bar[aria-valuenow="2"] {
+          min-width: 30px; }
+          .progress-bar[aria-valuenow="0"] {
+            color: #777;
+            min-width: 30px;
+            background-color: transparent;
+            background-image: none;
+            box-shadow: none; }
+
+.progress-bar-success {
+  background-color: #5cb85c; }
+
+  .progress-bar-info {
+    background-color: #5bc0de; }
+
+    .progress-bar-warning {
+      background-color: #f0ad4e; }
+
+      .progress-bar-danger {
+        background-color: #d9534f; }
+.progress-striped .progress-bar-success {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+    transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+    transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+    transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+    transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+    transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+    transparent 75%, transparent); }
+  .progress-striped .progress-bar-info {
+    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+        transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+        transparent 75%, transparent);
+    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+        transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+        transparent 75%, transparent);
+    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+        transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+        transparent 75%, transparent); }
+    .progress-striped .progress-bar-warning {
+      background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent);
+      background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent);
+      background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+            transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+            transparent 75%, transparent); }
+      .progress-striped .progress-bar-danger {
+        background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+                transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+                transparent 75%, transparent);
+        background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+                transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+                transparent 75%, transparent);
+        background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%,
+                transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%,
+                transparent 75%, transparent); }
+.media, .media-body {
+  overflow: hidden;
+  zoom: 1; }
+
+  .media, .media .media {
+    margin-top: 15px; }
+
+    .media:first-child {
+      margin-top: 0; }
+
+      .media-object {
+        display: block; }
+
+        .media-heading {
+          margin: 0 0 5px; }
+
+          .media > .pull-left {
+            margin-right: 10px; }
+            .media > .pull-right {
+              margin-left: 10px; }
+
+.media-list {
+  padding-left: 0;
+  list-style: none; }
+.list-group {
+  margin-bottom: 20px;
+  padding-left: 0; }
+
+  .list-group-item {
+    position: relative;
+    display: block;
+    padding: 10px 15px;
+    margin-bottom: -1px;
+    background-color: #fff;
+    border: 1px solid #ddd; }
+    .list-group-item:first-child {
+      border-top-right-radius: 4px;
+      border-top-left-radius: 4px; }
+      .list-group-item:last-child {
+        margin-bottom: 0;
+        border-bottom-right-radius: 4px;
+        border-bottom-left-radius: 4px; }
+        .list-group-item > .badge {
+          float: right; }
+          .list-group-item > .badge + .badge {
+            margin-right: 5px; }
+
+a.list-group-item {
+  color: #555; }
+  a.list-group-item .list-group-item-heading {
+    color: #333; }
+    a.list-group-item:hover, a.list-group-item:focus {
+      text-decoration: none;
+      color: #555;
+      background-color: #f5f5f5; }
+
+.list-group-item.disabled, .list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  background-color: #eee;
+  color: #777; }
+  .list-group-item.disabled .list-group-item-heading,
+  .list-group-item.disabled:hover .list-group-item-heading,
+  .list-group-item.disabled:focus .list-group-item-heading {
+    color: inherit; }
+    .list-group-item.disabled .list-group-item-text,
+    .list-group-item.disabled:hover .list-group-item-text,
+    .list-group-item.disabled:focus .list-group-item-text {
+      color: #777; }
+.list-group-item.active, .list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #fff;
+  background-color: #428bca;
+  border-color: #428bca; }
+  .list-group-item.active .list-group-item-heading,
+  .list-group-item.active .list-group-item-heading > small,
+  .list-group-item.active .list-group-item-heading > .small,
+  .list-group-item.active:hover .list-group-item-heading,
+  .list-group-item.active:hover .list-group-item-heading > small,
+  .list-group-item.active:hover .list-group-item-heading > .small,
+  .list-group-item.active:focus .list-group-item-heading,
+  .list-group-item.active:focus .list-group-item-heading > small,
+  .list-group-item.active:focus .list-group-item-heading > .small {
+    color: inherit; }
+    .list-group-item.active .list-group-item-text,
+    .list-group-item.active:hover .list-group-item-text,
+    .list-group-item.active:focus .list-group-item-text {
+      color: #e1edf7; }
+
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px; }
+
+  .list-group-item-text {
+    margin-bottom: 0;
+    line-height: 1.3; }
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8; }
+
+  a.list-group-item-success {
+    color: #3c763d; }
+    a.list-group-item-success .list-group-item-heading {
+      color: inherit; }
+      a.list-group-item-success:hover, a.list-group-item-success:focus {
+        color: #3c763d;
+        background-color: #d0e9c6; }
+        a.list-group-item-success.active, a.list-group-item-success.active:hover,
+        a.list-group-item-success.active:focus {
+          color: #fff;
+          background-color: #3c763d;
+          border-color: #3c763d; }
+
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7; }
+
+  a.list-group-item-info {
+    color: #31708f; }
+    a.list-group-item-info .list-group-item-heading {
+      color: inherit; }
+      a.list-group-item-info:hover, a.list-group-item-info:focus {
+        color: #31708f;
+        background-color: #c4e3f3; }
+        a.list-group-item-info.active, a.list-group-item-info.active:hover,
+        a.list-group-item-info.active:focus {
+          color: #fff;
+          background-color: #31708f;
+          border-color: #31708f; }
+
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3; }
+
+  a.list-group-item-warning {
+    color: #8a6d3b; }
+    a.list-group-item-warning .list-group-item-heading {
+      color: inherit; }
+      a.list-group-item-warning:hover, a.list-group-item-warning:focus {
+        color: #8a6d3b;
+        background-color: #faf2cc; }
+        a.list-group-item-warning.active, a.list-group-item-warning.active:hover,
+        a.list-group-item-warning.active:focus {
+          color: #fff;
+          background-color: #8a6d3b;
+          border-color: #8a6d3b; }
+
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede; }
+
+  a.list-group-item-danger {
+    color: #a94442; }
+    a.list-group-item-danger .list-group-item-heading {
+      color: inherit; }
+      a.list-group-item-danger:hover, a.list-group-item-danger:focus {
+        color: #a94442;
+        background-color: #ebcccc; }
+        a.list-group-item-danger.active, a.list-group-item-danger.active:hover,
+        a.list-group-item-danger.active:focus {
+          color: #fff;
+          background-color: #a94442;
+          border-color: #a94442; }
+.panel {
+  margin-bottom: 18px;
+  background-color: #fff;
+  border: 1px solid transparent;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }
+
+  .panel-body {
+    padding: 15px; }
+
+    .panel-heading {
+      padding: 10px 15px;
+      border-bottom: 1px solid transparent;
+      border-top-right-radius: 3px;
+      border-top-left-radius: 3px; }
+      .panel-heading > .dropdown .dropdown-toggle {
+        color: inherit; }
+
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 15px;
+  color: inherit; }
+  .panel-title > a {
+    color: inherit; }
+
+.panel-footer {
+  padding: 10px 15px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px; }
+
+  .panel > .list-group {
+    margin-bottom: 0; }
+    .panel > .list-group .list-group-item {
+      border-width: 1px 0;
+      border-radius: 0; }
+      .panel > .list-group:first-child .list-group-item:first-child {
+        border-top: 0;
+        border-top-right-radius: 3px;
+        border-top-left-radius: 3px; }
+    .panel > .list-group:last-child .list-group-item:last-child {
+      border-bottom: 0;
+      border-bottom-right-radius: 3px;
+      border-bottom-left-radius: 3px; }
+
+.panel-heading + .list-group .list-group-item:first-child {
+  border-top-width: 0; }
+
+.list-group + .panel-footer {
+  border-top-width: 0; }
+
+  .panel > .table, .panel > .table-responsive > .table,
+  .panel > .panel-collapse > .table {
+    margin-bottom: 0; }
+    .panel > .table:first-child,
+    .panel > .table-responsive:first-child > .table:first-child {
+      border-top-right-radius: 3px;
+      border-top-left-radius: 3px; }
+      .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+      .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+      .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+      .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+      .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+      .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+      .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+      .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+        border-top-left-radius: 3px; }
+        .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+        .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+        .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+        .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+        .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+        .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+        .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+        .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+          border-top-right-radius: 3px; }
+  .panel > .table:last-child,
+  .panel > .table-responsive:last-child > .table:last-child {
+    border-bottom-right-radius: 3px;
+    border-bottom-left-radius: 3px; }
+    .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+    .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+    .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+    .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+      border-bottom-left-radius: 3px; }
+      .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+      .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+      .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+      .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+      .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+      .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+      .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+      .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+        border-bottom-right-radius: 3px; }
+  .panel > .panel-body + .table, .panel > .panel-body + .table-responsive {
+    border-top: 1px solid #ddd; }
+    .panel > .table > tbody:first-child > tr:first-child th,
+    .panel > .table > tbody:first-child > tr:first-child td {
+      border-top: 0; }
+      .panel > .table-bordered, .panel > .table-responsive > .table-bordered {
+        border: 0; }
+        .panel > .table-bordered > thead > tr > th:first-child,
+        .panel > .table-bordered > thead > tr > td:first-child,
+        .panel > .table-bordered > tbody > tr > th:first-child,
+        .panel > .table-bordered > tbody > tr > td:first-child,
+        .panel > .table-bordered > tfoot > tr > th:first-child,
+        .panel > .table-bordered > tfoot > tr > td:first-child,
+        .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+        .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+        .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+        .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+        .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+        .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+          border-left: 0; }
+          .panel > .table-bordered > thead > tr > th:last-child,
+          .panel > .table-bordered > thead > tr > td:last-child,
+          .panel > .table-bordered > tbody > tr > th:last-child,
+          .panel > .table-bordered > tbody > tr > td:last-child,
+          .panel > .table-bordered > tfoot > tr > th:last-child,
+          .panel > .table-bordered > tfoot > tr > td:last-child,
+          .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+          .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+          .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+          .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+          .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+          .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+            border-right: 0; }
+        .panel > .table-bordered > thead > tr:first-child > td,
+        .panel > .table-bordered > thead > tr:first-child > th,
+        .panel > .table-bordered > tbody > tr:first-child > td,
+        .panel > .table-bordered > tbody > tr:first-child > th,
+        .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+        .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+        .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+        .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+          border-bottom: 0; }
+        .panel > .table-bordered > tbody > tr:last-child > td,
+        .panel > .table-bordered > tbody > tr:last-child > th,
+        .panel > .table-bordered > tfoot > tr:last-child > td,
+        .panel > .table-bordered > tfoot > tr:last-child > th,
+        .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+        .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+        .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+        .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+          border-bottom: 0; }
+  .panel > .table-responsive {
+    border: 0;
+    margin-bottom: 0; }
+
+.panel-group {
+  margin-bottom: 18px; }
+  .panel-group .panel {
+    margin-bottom: 0;
+    border-radius: 4px; }
+    .panel-group .panel + .panel {
+      margin-top: 5px; }
+  .panel-group .panel-heading {
+    border-bottom: 0; }
+    .panel-group .panel-heading + .panel-collapse > .panel-body {
+      border-top: 1px solid #ddd; }
+  .panel-group .panel-footer {
+    border-top: 0; }
+    .panel-group .panel-footer + .panel-collapse .panel-body {
+      border-bottom: 1px solid #ddd; }
+
+.panel-default {
+  border-color: #ddd; }
+
+  .panel-primary {
+    border-color: #428bca; }
+
+    .panel-success {
+      border-color: #d6e9c6; }
+
+      .panel-info {
+        border-color: #bce8f1; }
+
+        .panel-warning {
+          border-color: #faebcc; }
+
+          .panel-danger {
+            border-color: #ebccd1; }
+.panel-default > .panel-heading {
+  color: #333;
+  background-color: #f5f5f5;
+  border-color: #ddd; }
+  .panel-default > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #ddd; }
+    .panel-default > .panel-heading .badge {
+      color: #f5f5f5;
+      background-color: #333; }
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ddd; }
+.panel-primary > .panel-heading {
+  color: #fff;
+  background-color: #428bca;
+  border-color: #428bca; }
+  .panel-primary > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #428bca; }
+    .panel-primary > .panel-heading .badge {
+      color: #428bca;
+      background-color: #fff; }
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #428bca; }
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6; }
+  .panel-success > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #d6e9c6; }
+    .panel-success > .panel-heading .badge {
+      color: #dff0d8;
+      background-color: #3c763d; }
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #d6e9c6; }
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1; }
+  .panel-info > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #bce8f1; }
+    .panel-info > .panel-heading .badge {
+      color: #d9edf7;
+      background-color: #31708f; }
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #bce8f1; }
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc; }
+  .panel-warning > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #faebcc; }
+    .panel-warning > .panel-heading .badge {
+      color: #fcf8e3;
+      background-color: #8a6d3b; }
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #faebcc; }
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1; }
+  .panel-danger > .panel-heading + .panel-collapse > .panel-body {
+    border-top-color: #ebccd1; }
+    .panel-danger > .panel-heading .badge {
+      color: #f2dede;
+      background-color: #a94442; }
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ebccd1; }
+.embed-responsive {
+  position: relative;
+  display: block;
+  height: 0;
+  padding: 0;
+  overflow: hidden; }
+  .embed-responsive .embed-responsive-item, .embed-responsive iframe,
+  .embed-responsive embed, .embed-responsive object {
+    position: absolute;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    height: 100%;
+    width: 100%;
+    border: 0; }
+    .embed-responsive.embed-responsive-16by9 {
+      padding-bottom: 56.25%; }
+      .embed-responsive.embed-responsive-4by3 {
+        padding-bottom: 75%; }
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }
+  .well blockquote {
+    border-color: #ddd;
+    border-color: rgba(0, 0, 0, 0.15); }
+
+.well-lg {
+  padding: 24px;
+  border-radius: 6px; }
+
+  .well-sm {
+    padding: 9px;
+    border-radius: 3px; }
+.close {
+  float: right;
+  font-size: 19.5px;
+  font-weight: bold;
+  line-height: 1;
+  color: #000;
+  text-shadow: 0 1px 0 #fff;
+  opacity: 0.2;
+  filter: alpha(opacity=20); }
+  .close:hover, .close:focus {
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+    opacity: 0.5;
+    filter: alpha(opacity=50); }
+
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none; }
+.modal-open {
+  overflow: hidden; }
+
+  .modal {
+    display: none;
+    overflow: hidden;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1050;
+    -webkit-overflow-scrolling: touch;
+    outline: 0; }
+    .modal.fade .modal-dialog {
+      -webkit-transform: translate3d(0, -25%, 0);
+      transform: translate3d(0, -25%, 0);
+      -webkit-transition: -webkit-transform 0.3s ease-out;
+      -moz-transition: -moz-transform 0.3s ease-out;
+      -o-transition: -o-transform 0.3s ease-out;
+      transition: transform 0.3s ease-out; }
+      .modal.in .modal-dialog {
+        -webkit-transform: translate3d(0, 0, 0);
+        transform: translate3d(0, 0, 0); }
+
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto; }
+
+  .modal-dialog {
+    position: relative;
+    width: auto;
+    margin: 10px; }
+
+    .modal-content {
+      position: relative;
+      background-color: #fff;
+      border: 1px solid #999;
+      border: 1px solid rgba(0, 0, 0, 0.2);
+      border-radius: 6px;
+      -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+      box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+      background-clip: padding-box;
+      outline: 0; }
+
+      .modal-backdrop {
+        position: fixed;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        z-index: 1040;
+        background-color: #000; }
+        .modal-backdrop.fade {
+          opacity: 0;
+          filter: alpha(opacity=0); }
+          .modal-backdrop.in {
+            opacity: 0.5;
+            filter: alpha(opacity=50); }
+
+.modal-header {
+	/*padding: 15px;
+	min-height: 16.42857px; */
+	height: 39px;
+	padding-top: 0px;
+	padding: 0px 0px 15px 15px;;	
+}
+.modal-header .close {
+	margin-top: -2px;
+	margin-right: 15px;
+}
+.modal-title {
+	margin: 0;
+	line-height: 1.5; }
+.modal-body {
+	position: relative;
+	padding: 15px; }
+.modal-footer {
+	padding: 15px;
+	text-align: right;
+	background: #f5f5f5;
+	border-top: 1px solid #e5e5e5; }
+.modal-footer .btn + .btn {
+	margin-left: 5px;
+	margin-bottom: 0; }
+.modal-footer .btn-group .btn + .btn {
+	margin-left: -1px; }
+.modal-footer .btn-block + .btn-block {
+	margin-left: 0; }
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll; }
+
+  @media (min-width: 768px) {
+    .modal-dialog {
+      width: 732px;
+      margin: 30px auto;   }
+      .modal-content {
+        -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);   }
+        .modal-sm {
+          width: 300px;   }
+}
+
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 900px;   }
+}
+.tooltip {
+  position: absolute;
+  z-index: 1070;
+  display: block;
+  visibility: visible;
+  font-size: 12px;
+  line-height: 1.4;
+  opacity: 0;
+  filter: alpha(opacity=0); }
+  .tooltip.in {
+    opacity: 0.9;
+    filter: alpha(opacity=90); }
+    .tooltip.top {
+      margin-top: -3px;
+      padding: 5px 0; }
+      .tooltip.right {
+        margin-left: 3px;
+        padding: 0 5px; }
+        .tooltip.bottom {
+          margin-top: 3px;
+          padding: 5px 0; }
+          .tooltip.left {
+            margin-left: -3px;
+            padding: 0 5px; }
+
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #fff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000;
+  border-radius: 4px; }
+
+  .tooltip-arrow {
+    position: absolute;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid; }
+
+    .tooltip.top .tooltip-arrow {
+      bottom: 0;
+      left: 50%;
+      margin-left: -5px;
+      border-width: 5px 5px 0;
+      border-top-color: #000; }
+      .tooltip.top-left .tooltip-arrow {
+        bottom: 0;
+        left: 5px;
+        border-width: 5px 5px 0;
+        border-top-color: #000; }
+        .tooltip.top-right .tooltip-arrow {
+          bottom: 0;
+          right: 5px;
+          border-width: 5px 5px 0;
+          border-top-color: #000; }
+          .tooltip.right .tooltip-arrow {
+            top: 50%;
+            left: 0;
+            margin-top: -5px;
+            border-width: 5px 5px 5px 0;
+            border-right-color: #000; }
+            .tooltip.left .tooltip-arrow {
+              top: 50%;
+              right: 0;
+              margin-top: -5px;
+              border-width: 5px 0 5px 5px;
+              border-left-color: #000; }
+              .tooltip.bottom .tooltip-arrow {
+                top: 0;
+                left: 50%;
+                margin-left: -5px;
+                border-width: 0 5px 5px;
+                border-bottom-color: #000; }
+                .tooltip.bottom-left .tooltip-arrow {
+                  top: 0;
+                  left: 5px;
+                  border-width: 0 5px 5px;
+                  border-bottom-color: #000; }
+                  .tooltip.bottom-right .tooltip-arrow {
+                    top: 0;
+                    right: 5px;
+                    border-width: 0 5px 5px;
+                    border-bottom-color: #000; }
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1060;
+  display: none;
+  max-width: 276px;
+  padding: 1px;
+  text-align: left;
+  background-color: #fff;
+  background-clip: padding-box;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  white-space: normal; }
+  .popover.top {
+    margin-top: -10px; }
+    .popover.right {
+      margin-left: 10px; }
+      .popover.bottom {
+        margin-top: 10px; }
+        .popover.left {
+          margin-left: -10px; }
+
+.popover-title {
+  margin: 0;
+  padding: 8px 14px;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 18px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  border-radius: 5px 5px 0 0; }
+
+  .popover-content {
+    padding: 9px 14px; }
+
+    .popover > .arrow, .popover > .arrow:after {
+      position: absolute;
+      display: block;
+      width: 0;
+      height: 0;
+      border-color: transparent;
+      border-style: solid; }
+
+.popover > .arrow {
+  border-width: 11px; }
+
+  .popover > .arrow:after {
+    border-width: 10px;
+    content: ""; }
+
+    .popover.top > .arrow {
+      left: 50%;
+      margin-left: -11px;
+      border-bottom-width: 0;
+      border-top-color: #999;
+      border-top-color: rgba(0, 0, 0, 0.25);
+      bottom: -11px; }
+      .popover.top > .arrow:after {
+        content: " ";
+        bottom: 1px;
+        margin-left: -10px;
+        border-bottom-width: 0;
+        border-top-color: #fff; }
+    .popover.right > .arrow {
+      top: 50%;
+      left: -11px;
+      margin-top: -11px;
+      border-left-width: 0;
+      border-right-color: #999;
+      border-right-color: rgba(0, 0, 0, 0.25); }
+      .popover.right > .arrow:after {
+        content: " ";
+        left: 1px;
+        bottom: -10px;
+        border-left-width: 0;
+        border-right-color: #fff; }
+    .popover.bottom > .arrow {
+      left: 50%;
+      margin-left: -11px;
+      border-top-width: 0;
+      border-bottom-color: #999;
+      border-bottom-color: rgba(0, 0, 0, 0.25);
+      top: -11px; }
+      .popover.bottom > .arrow:after {
+        content: " ";
+        top: 1px;
+        margin-left: -10px;
+        border-top-width: 0;
+        border-bottom-color: #fff; }
+    .popover.left > .arrow {
+      top: 50%;
+      right: -11px;
+      margin-top: -11px;
+      border-right-width: 0;
+      border-left-color: #999;
+      border-left-color: rgba(0, 0, 0, 0.25); }
+      .popover.left > .arrow:after {
+        content: " ";
+        right: 1px;
+        border-right-width: 0;
+        border-left-color: #fff;
+        bottom: -10px; }
+.carousel {
+  position: relative; }
+
+  .carousel-inner {
+    position: relative;
+    overflow: hidden;
+    width: 100%; }
+    .carousel-inner > .item {
+      display: none;
+      position: relative;
+      -webkit-transition: 0.6s ease-in-out left;
+      -o-transition: 0.6s ease-in-out left;
+      transition: 0.6s ease-in-out left; }
+      .carousel-inner > .item > img, .carousel-inner > .item > a > img {
+        display: block;
+        width: 100% \9;
+        max-width: 100%;
+        height: auto;
+        line-height: 1; }
+    .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev {
+      display: block; }
+      .carousel-inner > .active {
+        left: 0; }
+        .carousel-inner > .next, .carousel-inner > .prev {
+          position: absolute;
+          top: 0;
+          width: 100%; }
+          .carousel-inner > .next {
+            left: 100%; }
+            .carousel-inner > .prev {
+              left: -100%; }
+              .carousel-inner > .next.left, .carousel-inner > .prev.right {
+                left: 0; }
+                .carousel-inner > .active.left {
+                  left: -100%; }
+                  .carousel-inner > .active.right {
+                    left: 100%; }
+
+.carousel-control {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  width: 15%;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+  font-size: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }
+  .carousel-control.left {
+    background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
+    background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
+    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.0001));
+    background-repeat: repeat-x;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',
+        endColorstr='#00000000', GradientType=1); }
+    .carousel-control.right {
+      left: auto;
+      right: 0;
+      background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
+      background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
+      background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001), rgba(0, 0, 0, 0.5));
+      background-repeat: repeat-x;
+      filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',
+            endColorstr='#80000000', GradientType=1); }
+      .carousel-control:hover, .carousel-control:focus {
+        outline: 0;
+        color: #fff;
+        text-decoration: none;
+        opacity: 0.9;
+        filter: alpha(opacity=90); }
+        .carousel-control .icon-prev, .carousel-control .icon-next,
+        .carousel-control .glyphicon-chevron-left,
+        .carousel-control .glyphicon-chevron-right {
+          position: absolute;
+          top: 50%;
+          z-index: 5;
+          display: inline-block; }
+          .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left {
+            left: 50%;
+            margin-left: -10px; }
+            .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right {
+              right: 50%;
+              margin-right: -10px; }
+              .carousel-control .icon-prev, .carousel-control .icon-next {
+                width: 20px;
+                height: 20px;
+                margin-top: -10px;
+                font-family: serif; }
+                .carousel-control .icon-prev:before {
+                  content: '\2039'; }
+  .carousel-control .icon-next:before {
+    content: '\203a'; }
+
+.carousel-indicators {
+  position: absolute;
+  bottom: 10px;
+  left: 50%;
+  z-index: 15;
+  width: 60%;
+  margin-left: -30%;
+  padding-left: 0;
+  list-style: none;
+  text-align: center; }
+  .carousel-indicators li {
+    display: inline-block;
+    width: 10px;
+    height: 10px;
+    margin: 1px;
+    text-indent: -999px;
+    border: 1px solid #fff;
+    border-radius: 10px;
+    cursor: pointer;
+    background-color: #000 \9;
+    background-color: transparent; }
+    .carousel-indicators .active {
+      margin: 0;
+      width: 12px;
+      height: 12px;
+      background-color: #fff; }
+
+.carousel-caption {
+  position: absolute;
+  left: 15%;
+  right: 15%;
+  bottom: 20px;
+  z-index: 10;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }
+  .carousel-caption .btn {
+    text-shadow: none; }
+
+@media screen and (min-width: 768px) {
+  .carousel-control .glyphicon-chevron-left,
+  .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev,
+  .carousel-control .icon-next {
+    width: 30px;
+    height: 30px;
+    margin-top: -15px;
+    font-size: 30px;   }
+    .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev {
+      margin-left: -15px;   }
+      .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next {
+        margin-right: -15px;   }
+  .carousel-caption {
+    left: 20%;
+    right: 20%;
+    padding-bottom: 30px;   }
+    .carousel-indicators {
+      bottom: 20px;   }
+}
+.center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto; }
+
+  .pull-right {
+    float: right !important; }
+
+    .pull-left {
+      float: left !important; }
+
+      .hide {
+        display: none !important; }
+
+        .show {
+          display: block !important; }
+
+          .invisible {
+            visibility: hidden; }
+
+            .text-hide {
+              font: 0 / 0 a;
+              color: transparent;
+              text-shadow: none;
+              background-color: transparent;
+              border: 0; }
+
+              .hidden {
+                display: none !important;
+                visibility: hidden !important; }
+
+                .affix {
+                  position: fixed;
+                  -webkit-transform: translate3d(0, 0, 0);
+                  transform: translate3d(0, 0, 0); }
+@-ms-viewport {
+  width: device-width; }
+
+  .visible-xs-block, .visible-xs-inline, .visible-xs-inline-block, .visible-sm-block,
+  .visible-sm-inline, .visible-sm-inline-block, .visible-md-block,
+  .visible-md-inline, .visible-md-inline-block, .visible-lg-block,
+  .visible-lg-inline, .visible-lg-inline-block {
+    display: none !important; }
+
+    @media (max-width: 767px) {
+      .visible-xs-block {
+        display: block !important;   }
+}
+
+@media (max-width: 767px) {
+  .visible-xs-inline {
+    display: inline !important;   }
+}
+
+@media (max-width: 767px) {
+  .visible-xs-inline-block {
+    display: inline-block !important;   }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-block {
+    display: block !important;   }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline {
+    display: inline !important;   }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline-block {
+    display: inline-block !important;   }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-block {
+    display: block !important;   }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline {
+    display: inline !important;   }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline-block {
+    display: inline-block !important;   }
+}
+
+@media (min-width: 1200px) {
+  .visible-lg-block {
+    display: block !important;   }
+}
+
+@media (min-width: 1200px) {
+  .visible-lg-inline {
+    display: inline !important;   }
+}
+
+@media (min-width: 1200px) {
+  .visible-lg-inline-block {
+    display: inline-block !important;   }
+}
+
+.visible-print-block {
+  display: none !important; }
+  @media print {
+    .visible-print-block {
+      display: block !important;   }
+}
+
+.visible-print-inline {
+  display: none !important; }
+  @media print {
+    .visible-print-inline {
+      display: inline !important;   }
+}
+
+.visible-print-inline-block {
+  display: none !important; }
+  @media print {
+    .visible-print-inline-block {
+      display: inline-block !important;   }
+}
+.visible-xs, .visible-sm, .visible-md, .visible-lg {
+  display: none !important; }
+  @media (max-width: 767px) {
+    .visible-xs {
+      display: block !important;   }
+      table.visible-xs {
+        display: table;   }
+        tr.visible-xs {
+          display: table-row !important;   }
+          th.visible-xs, td.visible-xs {
+            display: table-cell !important;   }
+}
+          @media (min-width: 768px) and (max-width: 991px) {
+            .visible-sm {
+              display: block !important;   }
+              table.visible-sm {
+                display: table;   }
+                tr.visible-sm {
+                  display: table-row !important;   }
+                  th.visible-sm, td.visible-sm {
+                    display: table-cell !important;   }
+}
+                  @media (min-width: 992px) and (max-width: 1199px) {
+                    .visible-md {
+                      display: block !important;   }
+                      table.visible-md {
+                        display: table;   }
+                        tr.visible-md {
+                          display: table-row !important;   }
+                          th.visible-md, td.visible-md {
+                            display: table-cell !important;   }
+}
+                          @media (min-width: 1200px) {
+                            .visible-lg {
+                              display: block !important;   }
+                              table.visible-lg {
+                                display: table;   }
+                                tr.visible-lg {
+                                  display: table-row !important;   }
+                                  th.visible-lg, td.visible-lg {
+                                    display: table-cell !important;   }
+}
+                                  @media (max-width: 767px) {
+                                    .hidden-xs {
+                                      display: none !important;   }
+}
+                                    @media (min-width: 768px) and (max-width: 991px) {
+                                      .hidden-sm {
+                                        display: none !important;   }
+}
+                                      @media (min-width: 992px) and (max-width: 1199px) {
+                                        .hidden-md {
+                                          display: none !important;   }
+}
+                                        @media (min-width: 1200px) {
+                                          .hidden-lg {
+                                            display: none !important;   }
+}
+
+.visible-print {
+  display: none !important; }
+  @media print {
+    .visible-print {
+      display: block !important;   }
+      table.visible-print {
+        display: table;   }
+        tr.visible-print {
+          display: table-row !important;   }
+          th.visible-print, td.visible-print {
+            display: table-cell !important;   }
+}
+@media print {
+            .hidden-print {
+              display: none !important;   }
+}
+.datepicker {
+	padding: 4px;
+	-webkit-border-radius: 4px;
+	-moz-border-radius: 4px;
+	border-radius: 4px;
+	direction: ltr; }
+
+.datepicker-inline {
+	width: 220px; }
+
+.datepicker.datepicker-rtl {
+	direction: rtl; }
+
+.datepicker.datepicker-rtl table tr td span {
+	float: right; }
+
+.datepicker-dropdown {
+	top: 0;
+	left: 0; }
+
+.datepicker-dropdown:before {
+            content: '';
+            display: inline-block;
+            border-left: 7px solid transparent;
+            border-right: 7px solid transparent;
+            border-bottom: 7px solid #ccc;
+            border-top: 0;
+            border-bottom-color: rgba(0, 0, 0, 0.2);
+            position: absolute; }
+
+            .datepicker-dropdown:after {
+              content: '';
+              display: inline-block;
+              border-left: 6px solid transparent;
+              border-right: 6px solid transparent;
+              border-bottom: 6px solid #ffffff;
+              border-top: 0;
+              position: absolute; }
+
+              .datepicker-dropdown.datepicker-orient-left:before {
+                left: 6px; }
+
+                .datepicker-dropdown.datepicker-orient-left:after {
+                  left: 7px; }
+
+                  .datepicker-dropdown.datepicker-orient-right:before {
+                    right: 6px; }
+
+                    .datepicker-dropdown.datepicker-orient-right:after {
+                      right: 7px; }
+
+                      .datepicker-dropdown.datepicker-orient-top:before {
+                        top: -7px; }
+
+                        .datepicker-dropdown.datepicker-orient-top:after {
+                          top: -6px; }
+
+                          .datepicker-dropdown.datepicker-orient-bottom:before {
+                            bottom: -7px;
+                            border-bottom: 0;
+                            border-top: 7px solid #999; }
+
+                            .datepicker-dropdown.datepicker-orient-bottom:after {
+                              bottom: -6px;
+                              border-bottom: 0;
+                              border-top: 6px solid #ffffff; }
+
+                              .datepicker > div {
+                                display: none; }
+
+                                .datepicker.days div.datepicker-days {
+                                  display: block; }
+
+                                  .datepicker.months div.datepicker-months {
+                                    display: block; }
+
+                                    .datepicker.years div.datepicker-years {
+                                      display: block; }
+
+                                      .datepicker table {
+                                        margin: 0;
+                                        -webkit-touch-callout: none;
+                                        -webkit-user-select: none;
+                                        -khtml-user-select: none;
+                                        -moz-user-select: none;
+                                        -ms-user-select: none;
+                                        user-select: none; }
+
+                                        .datepicker td, .datepicker th {
+                                          text-align: center;
+                                          width: 20px;
+                                          height: 20px;
+                                          -webkit-border-radius: 4px;
+                                          -moz-border-radius: 4px;
+                                          border-radius: 4px;
+                                          border: none; }
+
+                                          .table-striped .datepicker table tr td, .table-striped .datepicker table tr th {
+                                            background-color: transparent; }
+
+                                            .datepicker table tr td.day:hover, .datepicker table tr td.day.focused {
+                                              background: #eeeeee;
+                                              cursor: pointer; }
+
+                                              .datepicker table tr td.old, .datepicker table tr td.new {
+                                                color: #999999; }
+
+                                                .datepicker table tr td.disabled, .datepicker table tr td.disabled:hover {
+                                                  background: none;
+                                                  color: #999999;
+                                                  cursor: default; }
+
+                                                  .datepicker table tr td.today, .datepicker table tr td.today:hover,
+                                                  .datepicker table tr td.today.disabled,
+                                                  .datepicker table tr td.today.disabled:hover {
+                                                    background-color: #fde19a;
+                                                    background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
+                                                    background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
+                                                    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
+                                                    background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
+                                                    background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
+                                                    background-image: linear-gradient(top, #fdd49a, #fdf59a);
+                                                    background-repeat: repeat-x;
+                                                    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',
+                                                                                                        endColorstr='#fdf59a', GradientType=0);
+                                                    border-color: #fdf59a #fdf59a #fbed50;
+                                                    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+                                                    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+                                                    color: #000; }
+
+                                                    .datepicker table tr td.today:hover, .datepicker table tr td.today:hover:hover,
+                                                    .datepicker table tr td.today.disabled:hover,
+                                                    .datepicker table tr td.today.disabled:hover:hover,
+                                                    .datepicker table tr td.today:active, .datepicker table tr td.today:hover:active,
+                                                    .datepicker table tr td.today.disabled:active,
+                                                    .datepicker table tr td.today.disabled:hover:active,
+                                                    .datepicker table tr td.today.active, .datepicker table tr td.today:hover.active,
+                                                    .datepicker table tr td.today.disabled.active,
+                                                    .datepicker table tr td.today.disabled:hover.active,
+                                                    .datepicker table tr td.today.disabled,
+                                                    .datepicker table tr td.today:hover.disabled,
+                                                    .datepicker table tr td.today.disabled.disabled,
+                                                    .datepicker table tr td.today.disabled:hover.disabled,
+                                                    .datepicker table tr td.today[disabled],
+                                                    .datepicker table tr td.today:hover[disabled],
+                                                    .datepicker table tr td.today.disabled[disabled],
+                                                    .datepicker table tr td.today.disabled:hover[disabled] {
+                                                      background-color: #fdf59a; }
+
+                                                      .datepicker table tr td.today:active, .datepicker table tr td.today:hover:active,
+                                                      .datepicker table tr td.today.disabled:active,
+                                                      .datepicker table tr td.today.disabled:hover:active,
+                                                      .datepicker table tr td.today.active, .datepicker table tr td.today:hover.active,
+                                                      .datepicker table tr td.today.disabled.active,
+                                                      .datepicker table tr td.today.disabled:hover.active {
+                                                        background-color: #fbf069 \9; }
+
+                                                        .datepicker table tr td.today:hover:hover {
+                                                          color: #000; }
+
+                                                          .datepicker table tr td.today.active:hover {
+                                                            color: #fff; }
+
+                                                            .datepicker table tr td.range, .datepicker table tr td.range:hover,
+                                                            .datepicker table tr td.range.disabled,
+                                                            .datepicker table tr td.range.disabled:hover {
+                                                              background: #eeeeee;
+                                                              -webkit-border-radius: 0;
+                                                              -moz-border-radius: 0;
+                                                              border-radius: 0; }
+
+                                                              .datepicker table tr td.range.today, .datepicker table tr td.range.today:hover,
+                                                              .datepicker table tr td.range.today.disabled,
+                                                              .datepicker table tr td.range.today.disabled:hover {
+                                                                background-color: #f3d17a;
+                                                                background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);
+                                                                background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);
+                                                                background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
+                                                                background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);
+                                                                background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);
+                                                                background-image: linear-gradient(top, #f3c17a, #f3e97a);
+                                                                background-repeat: repeat-x;
+                                                                filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a',
+                                                                                                                                endColorstr='#f3e97a', GradientType=0);
+                                                                border-color: #f3e97a #f3e97a #edde34;
+                                                                border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+                                                                filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+                                                                -webkit-border-radius: 0;
+                                                                -moz-border-radius: 0;
+                                                                border-radius: 0; }
+
+                                                                .datepicker table tr td.range.today:hover,
+                                                                .datepicker table tr td.range.today:hover:hover,
+                                                                .datepicker table tr td.range.today.disabled:hover,
+                                                                .datepicker table tr td.range.today.disabled:hover:hover,
+                                                                .datepicker table tr td.range.today:active,
+                                                                .datepicker table tr td.range.today:hover:active,
+                                                                .datepicker table tr td.range.today.disabled:active,
+                                                                .datepicker table tr td.range.today.disabled:hover:active,
+                                                                .datepicker table tr td.range.today.active,
+                                                                .datepicker table tr td.range.today:hover.active,
+                                                                .datepicker table tr td.range.today.disabled.active,
+                                                                .datepicker table tr td.range.today.disabled:hover.active,
+                                                                .datepicker table tr td.range.today.disabled,
+                                                                .datepicker table tr td.range.today:hover.disabled,
+                                                                .datepicker table tr td.range.today.disabled.disabled,
+                                                                .datepicker table tr td.range.today.disabled:hover.disabled,
+                                                                .datepicker table tr td.range.today[disabled],
+                                                                .datepicker table tr td.range.today:hover[disabled],
+                                                                .datepicker table tr td.range.today.disabled[disabled],
+                                                                .datepicker table tr td.range.today.disabled:hover[disabled] {
+                                                                  background-color: #f3e97a; }
+
+                                                                  .datepicker table tr td.range.today:active,
+                                                                  .datepicker table tr td.range.today:hover:active,
+                                                                  .datepicker table tr td.range.today.disabled:active,
+                                                                  .datepicker table tr td.range.today.disabled:hover:active,
+                                                                  .datepicker table tr td.range.today.active,
+                                                                  .datepicker table tr td.range.today:hover.active,
+                                                                  .datepicker table tr td.range.today.disabled.active,
+                                                                  .datepicker table tr td.range.today.disabled:hover.active {
+                                                                    background-color: #efe24b \9; }
+
+                                                                    .datepicker table tr td.selected, .datepicker table tr td.selected:hover,
+                                                                    .datepicker table tr td.selected.disabled,
+                                                                    .datepicker table tr td.selected.disabled:hover {
+                                                                      background-color: #9e9e9e;
+                                                                      background-image: -moz-linear-gradient(top, #b3b3b3, #808080);
+                                                                      background-image: -ms-linear-gradient(top, #b3b3b3, #808080);
+                                                                      background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
+                                                                      background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);
+                                                                      background-image: -o-linear-gradient(top, #b3b3b3, #808080);
+                                                                      background-image: linear-gradient(top, #b3b3b3, #808080);
+                                                                      background-repeat: repeat-x;
+                                                                      filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3',
+                                                                                                                                            endColorstr='#808080', GradientType=0);
+                                                                      border-color: #808080 #808080 #595959;
+                                                                      border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+                                                                      filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+                                                                      color: #fff;
+                                                                      text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
+
+                                                                      .datepicker table tr td.selected:hover,
+                                                                      .datepicker table tr td.selected:hover:hover,
+                                                                      .datepicker table tr td.selected.disabled:hover,
+                                                                      .datepicker table tr td.selected.disabled:hover:hover,
+                                                                      .datepicker table tr td.selected:active,
+                                                                      .datepicker table tr td.selected:hover:active,
+                                                                      .datepicker table tr td.selected.disabled:active,
+                                                                      .datepicker table tr td.selected.disabled:hover:active,
+                                                                      .datepicker table tr td.selected.active,
+                                                                      .datepicker table tr td.selected:hover.active,
+                                                                      .datepicker table tr td.selected.disabled.active,
+                                                                      .datepicker table tr td.selected.disabled:hover.active,
+                                                                      .datepicker table tr td.selected.disabled,
+                                                                      .datepicker table tr td.selected:hover.disabled,
+                                                                      .datepicker table tr td.selected.disabled.disabled,
+                                                                      .datepicker table tr td.selected.disabled:hover.disabled,
+                                                                      .datepicker table tr td.selected[disabled],
+                                                                      .datepicker table tr td.selected:hover[disabled],
+                                                                      .datepicker table tr td.selected.disabled[disabled],
+                                                                      .datepicker table tr td.selected.disabled:hover[disabled] {
+                                                                        background-color: #808080; }
+
+                                                                        .datepicker table tr td.selected:active,
+                                                                        .datepicker table tr td.selected:hover:active,
+                                                                        .datepicker table tr td.selected.disabled:active,
+                                                                        .datepicker table tr td.selected.disabled:hover:active,
+                                                                        .datepicker table tr td.selected.active,
+                                                                        .datepicker table tr td.selected:hover.active,
+                                                                        .datepicker table tr td.selected.disabled.active,
+                                                                        .datepicker table tr td.selected.disabled:hover.active {
+                                                                          background-color: #666666 \9; }
+
+                                                                          .datepicker table tr td.active, .datepicker table tr td.active:hover,
+                                                                          .datepicker table tr td.active.disabled,
+                                                                          .datepicker table tr td.active.disabled:hover {
+                                                                            background-color: #006dcc;
+                                                                            background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+                                                                            background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+                                                                            background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+                                                                            background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+                                                                            background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+                                                                            background-image: linear-gradient(top, #0088cc, #0044cc);
+                                                                            background-repeat: repeat-x;
+                                                                            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',
+                                                                                                                                                        endColorstr='#0044cc', GradientType=0);
+                                                                            border-color: #0044cc #0044cc #002a80;
+                                                                            border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+                                                                            filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+                                                                            color: #fff;
+                                                                            text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
+
+                                                                            .datepicker table tr td.active:hover, .datepicker table tr td.active:hover:hover,
+                                                                            .datepicker table tr td.active.disabled:hover,
+                                                                            .datepicker table tr td.active.disabled:hover:hover,
+                                                                            .datepicker table tr td.active:active, .datepicker table tr td.active:hover:active,
+                                                                            .datepicker table tr td.active.disabled:active,
+                                                                            .datepicker table tr td.active.disabled:hover:active,
+                                                                            .datepicker table tr td.active.active, .datepicker table tr td.active:hover.active,
+                                                                            .datepicker table tr td.active.disabled.active,
+                                                                            .datepicker table tr td.active.disabled:hover.active,
+                                                                            .datepicker table tr td.active.disabled,
+                                                                            .datepicker table tr td.active:hover.disabled,
+                                                                            .datepicker table tr td.active.disabled.disabled,
+                                                                            .datepicker table tr td.active.disabled:hover.disabled,
+                                                                            .datepicker table tr td.active[disabled],
+                                                                            .datepicker table tr td.active:hover[disabled],
+                                                                            .datepicker table tr td.active.disabled[disabled],
+                                                                            .datepicker table tr td.active.disabled:hover[disabled] {
+                                                                              background-color: #0044cc; }
+
+                                                                              .datepicker table tr td.active:active, .datepicker table tr td.active:hover:active,
+                                                                              .datepicker table tr td.active.disabled:active,
+                                                                              .datepicker table tr td.active.disabled:hover:active,
+                                                                              .datepicker table tr td.active.active, .datepicker table tr td.active:hover.active,
+                                                                              .datepicker table tr td.active.disabled.active,
+                                                                              .datepicker table tr td.active.disabled:hover.active {
+                                                                                background-color: #003399 \9; }
+
+                                                                                .datepicker table tr td span {
+                                                                                  display: block;
+                                                                                  width: 23%;
+                                                                                  height: 54px;
+                                                                                  line-height: 54px;
+                                                                                  float: left;
+                                                                                  margin: 1%;
+                                                                                  cursor: pointer;
+                                                                                  -webkit-border-radius: 4px;
+                                                                                  -moz-border-radius: 4px;
+                                                                                  border-radius: 4px; }
+
+                                                                                  .datepicker table tr td span:hover {
+                                                                                    background: #eeeeee; }
+
+                                                                                    .datepicker table tr td span.disabled, .datepicker table tr td span.disabled:hover {
+                                                                                      background: none;
+                                                                                      color: #999999;
+                                                                                      cursor: default; }
+
+                                                                                      .datepicker table tr td span.active, .datepicker table tr td span.active:hover,
+                                                                                      .datepicker table tr td span.active.disabled,
+                                                                                      .datepicker table tr td span.active.disabled:hover {
+                                                                                        background-color: #006dcc;
+                                                                                        background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+                                                                                        background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+                                                                                        background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+                                                                                        background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+                                                                                        background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+                                                                                        background-image: linear-gradient(top, #0088cc, #0044cc);
+                                                                                        background-repeat: repeat-x;
+                                                                                        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',
+                                                                                                                                                                                endColorstr='#0044cc', GradientType=0);
+                                                                                        border-color: #0044cc #0044cc #002a80;
+                                                                                        border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+                                                                                        filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+                                                                                        color: #fff;
+                                                                                        text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
+
+                                                                                        .datepicker table tr td span.active:hover,
+                                                                                        .datepicker table tr td span.active:hover:hover,
+                                                                                        .datepicker table tr td span.active.disabled:hover,
+                                                                                        .datepicker table tr td span.active.disabled:hover:hover,
+                                                                                        .datepicker table tr td span.active:active,
+                                                                                        .datepicker table tr td span.active:hover:active,
+                                                                                        .datepicker table tr td span.active.disabled:active,
+                                                                                        .datepicker table tr td span.active.disabled:hover:active,
+                                                                                        .datepicker table tr td span.active.active,
+                                                                                        .datepicker table tr td span.active:hover.active,
+                                                                                        .datepicker table tr td span.active.disabled.active,
+                                                                                        .datepicker table tr td span.active.disabled:hover.active,
+                                                                                        .datepicker table tr td span.active.disabled,
+                                                                                        .datepicker table tr td span.active:hover.disabled,
+                                                                                        .datepicker table tr td span.active.disabled.disabled,
+                                                                                        .datepicker table tr td span.active.disabled:hover.disabled,
+                                                                                        .datepicker table tr td span.active[disabled],
+                                                                                        .datepicker table tr td span.active:hover[disabled],
+                                                                                        .datepicker table tr td span.active.disabled[disabled],
+                                                                                        .datepicker table tr td span.active.disabled:hover[disabled] {
+                                                                                          background-color: #0044cc; }
+
+                                                                                          .datepicker table tr td span.active:active,
+                                                                                          .datepicker table tr td span.active:hover:active,
+                                                                                          .datepicker table tr td span.active.disabled:active,
+                                                                                          .datepicker table tr td span.active.disabled:hover:active,
+                                                                                          .datepicker table tr td span.active.active,
+                                                                                          .datepicker table tr td span.active:hover.active,
+                                                                                          .datepicker table tr td span.active.disabled.active,
+                                                                                          .datepicker table tr td span.active.disabled:hover.active {
+                                                                                            background-color: #003399 \9; }
+
+                                                                                            .datepicker table tr td span.old, .datepicker table tr td span.new {
+                                                                                              color: #999999; }
+
+                                                                                              .datepicker th.datepicker-switch {
+                                                                                                width: 145px; }
+
+                                                                                                .datepicker thead tr:first-child th, .datepicker tfoot tr th {
+                                                                                                  cursor: pointer; }
+
+                                                                                                  .datepicker thead tr:first-child th:hover, .datepicker tfoot tr th:hover {
+                                                                                                    background: #eeeeee; }
+
+                                                                                                    .datepicker .cw {
+                                                                                                      font-size: 10px;
+                                                                                                      width: 12px;
+                                                                                                      padding: 0 2px 0 5px;
+                                                                                                      vertical-align: middle; }
+
+                                                                                                      .datepicker thead tr:first-child th.cw {
+                                                                                                        cursor: default;
+                                                                                                        background-color: transparent; }
+
+                                                                                                        .input-append.date .add-on i, .input-prepend.date .add-on i {
+                                                                                                          cursor: pointer;
+                                                                                                          width: 16px;
+                                                                                                          height: 16px; }
+
+                                                                                                          .input-daterange input {
+                                                                                                            text-align: center; }
+
+                                                                                                            .input-daterange input:first-child {
+                                                                                                              -webkit-border-radius: 3px 0 0 3px;
+                                                                                                              -moz-border-radius: 3px 0 0 3px;
+                                                                                                              border-radius: 3px 0 0 3px; }
+
+                                                                                                              .input-daterange input:last-child {
+                                                                                                                -webkit-border-radius: 0 3px 3px 0;
+                                                                                                                -moz-border-radius: 0 3px 3px 0;
+                                                                                                                border-radius: 0 3px 3px 0; }
+
+                                                                                                                .input-daterange .add-on {
+                                                                                                                  display: inline-block;
+                                                                                                                  width: auto;
+                                                                                                                  min-width: 16px;
+                                                                                                                  height: 20px;
+                                                                                                                  padding: 4px 5px;
+                                                                                                                  font-weight: normal;
+                                                                                                                  line-height: 20px;
+                                                                                                                  text-align: center;
+                                                                                                                  text-shadow: 0 1px 0 #ffffff;
+                                                                                                                  vertical-align: middle;
+                                                                                                                  background-color: #eeeeee;
+                                                                                                                  border: 1px solid #ccc;
+                                                                                                                  margin-left: -5px;
+                                                                                                                  margin-right: -5px; }
+
+                                                                                                                  .datepicker.dropdown-menu {
+                                                                                                                    position: absolute;
+                                                                                                                    top: 100%;
+                                                                                                                    left: 0;
+                                                                                                                    z-index: 1000;
+                                                                                                                    float: left;
+                                                                                                                    display: none;
+                                                                                                                    min-width: 160px;
+                                                                                                                    list-style: none;
+                                                                                                                    background-color: #ffffff;
+                                                                                                                    border: 1px solid #ccc;
+                                                                                                                    border: 1px solid rgba(0, 0, 0, 0.2);
+                                                                                                                    -webkit-border-radius: 5px;
+                                                                                                                    -moz-border-radius: 5px;
+                                                                                                                    border-radius: 5px;
+                                                                                                                    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+                                                                                                                    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+                                                                                                                    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+                                                                                                                    -webkit-background-clip: padding-box;
+                                                                                                                    -moz-background-clip: padding;
+                                                                                                                    background-clip: padding-box;
+                                                                                                                    *border-right-width: 2px;
+                                                                                                                    *border-bottom-width: 2px;
+                                                                                                                    color: #333333;
+                                                                                                                    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+                                                                                                                    font-size: 13px;
+                                                                                                                    line-height: 20px; }
+
+                                                                                                                    .datepicker.dropdown-menu th, .datepicker.datepicker-inline th,
+                                                                                                                    .datepicker.dropdown-menu td, .datepicker.datepicker-inline td {
+                                                                                                                      padding: 4px 5px; }
+.nav_accordion {
+	background-color: #ebeced;
+	color: #252525;
+	margin: 0px; 
+}
+.nav_accordion dt, .nav_accordion dd {
+	padding-left: 13px;
+	margin: 0px;
+	line-height: 39px;
+	width: 235px; 
+}
+.nav_accordion dt h4, .nav_accordion dd h4 {
+      border: 1px solid #c4ced8;
+      border-bottom: 0;
+      background-color: #ebeced;
+      background-repeat: no-repeat;
+      background-position: 96% center;
+      background-image: url('/static/dashboard/img/right_droparrow.png');
+      padding-left: 28px;
+      line-height: 39px;
+      width: 235px;
+      margin: 0px;
+      color: #252525;
+      text-rendering: optimizelegibility;
+      cursor: pointer; }
+.nav_accordion dt h4 div, .nav_accordion dd h4 div {
+	color: #6e6e6e;
+	font-size: 13px;      
+	display: block;
+	outline: none;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	max-width: 177px; }
+.nav_accordion dt h4.active, .nav_accordion dd h4.active {
+	border-bottom: 1px solid #c4ced8;
+	background: url('/static/dashboard/img/drop_arrow.png') no-repeat #ebeced; 
+	background-position: 96% center;
+}
+.nav_accordion dt a, .nav_accordion dd a {
+	color: #6e6e6e;
+	font-size: 16px;
+	margin: 0px;
+	padding: 0;
+	display: block;
+	font-weight: bold;
+	outline: none;
+	text-decoration: none; }
+.nav_accordion dt ul, .nav_accordion dd ul {
+	list-style: none outside none;
+	margin: 0px;
+	padding: 0px;
+	width: 235px; 
+}
+.nav_accordion dt ul li, .nav_accordion dd ul li {
+	vertical-align: middle;
+}
+nav_accordion dt:last-of-type ul li:last-of-type, 
+.nav_accordion dd:last-of-type ul li:last-of-type {
+	border-bottom: 1px solid #c4ced8;
+	border-top: 1px solid #c4ced8;
+}
+
+nav_accordion dt:last-of-type ul li:last-of-type a.active, 
+.nav_accordion dd:last-of-type ul li:last-of-type a.active {
+	border-top: none;
+}
+nav_accordion dt:last-of-type ul li:first-of-type a.active, 
+.nav_accordion dd:last-of-type ul li:first-of-type a.active {
+	border-bottom: none;
+}
+.nav_accordion dt li a, .nav_accordion dd li a {
+	height: 39px;
+	line-height: 39px;
+	vertical-align: middle;
+	padding-left: 44px;
+	display: block;
+	line-height: 18px;
+	font-weight: normal;
+	font-size: 13px; 
+	padding-top: 10px;
+	color: #145c9e;
+}
+.nav_accordion dt li a.active, .nav_accordion dd li a.active {
+	background: white;
+	border-top: 1px solid #c4ced8;
+	border-bottom: 1px solid #c4ced8;
+	padding-left: 44px;
+	width: 235px;
+	font-weight: 600;	
+}
+.nav_accordion dt li:first-child a.active, .nav_accordion dd li:first-child a.active {
+	border-top: none;
+}
+.nav_accordion dt li:last-child a.active, .nav_accordion dd li:last-child a.active {
+	border-bottom: none;
+}
+
+.nav_accordion dt li a:last-child, .nav_accordion dd li a:last-child {
+	/*margin-bottom: 8px; */
+}
+.nav_accordion dd {
+    padding: 0px;
+	font-size: 13px; 
+}
+.nav_accordion dt {
+	border-top: 1px solid #c4ced8;
+	border-right: 1px solid #c4ced8;
+	background: url('/static/dashboard/img/right_droparrow.png') no-repeat #ebeced;
+	background-position: 96% center;		
+	padding-left: 13px;
+	width: 235px;
+	cursor: pointer; 
+}
+
+.nav_accordion dt:last-of-type {
+	border-bottom: 1px solid #c4ced8;
+}
+.nav_accordion dt div {
+	color: #6e6e6e;
+	font-size: 13px;
+	padding: 0;
+	outline: none;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	max-width: 201px; }
+.nav_accordion dt.active {
+    background-image: url('/static/dashboard/img/drop_arrow.png'); }
+.nav_accordion dt:first-child {
+	border-top: 0; }
+.nav_accordion dt a {
+	text-decoration: none; }
+#browser_wrapper {
+  width: 100%;
+  min-width: 1360px;
+  background-color: #ffffff;
+  border: none;
+  border-radius: 4px; }
+#browser_wrapper .tfoot {
+    clear: both;
+    padding: 8px;
+    border-bottom: 1px solid #d5dfe6;
+    border-top: 1px solid #eeeeee;    
+    background-color: #f9f9f9;
+    font-size: 11px;
+    line-height: 14px; }
+#browser_wrapper .tfoot span {
+	display: inline-block; }
+#browser_wrapper .tfoot span.navigation_table_count {
+	width: 40%; }
+#browser_wrapper form, #browser_wrapper table {
+    margin-bottom: 0; }
+#browser_wrapper .navigation_wrapper, #browser_wrapper .content_wrapper {
+	position: relative;
+	float: left; }
+#browser_wrapper div.navigation_wrapper {
+	z-index: 10;
+	width: 40%; }
+#browser_wrapper div.navigation_wrapper div.table_wrapper,
+#browser_wrapper div.navigation_wrapper thead th.table_header {
+	border-right: 0 none;
+	border-top-right-radius: 0; }
+#browser_wrapper div.navigation_wrapper td:first-child {
+	border-left: 0 none; }
+#browser_wrapper div.navigation_wrapper td.breadcrumb_td {
+	padding-right: 0;
+	max-width: 200px; }
+#browser_wrapper div.navigation_wrapper tr.current_selected td {
+	background-color: #bfd4e5; }
+#browser_wrapper div.navigation_wrapper tfoot td {
+	border-right: 0 none;
+	border-bottom-right-radius: 0; }
+#browser_wrapper div.navigation_wrapper ul.breadcrumb {
+	padding-right: 0;
+	border-top-right-radius: 0;
+	border-bottom-right-radius: 0;
+	border-right: 0;
+	white-space: nowrap; }
+#browser_wrapper div.navigation_wrapper tbody td {
+	border: 1px solid #eeeeee;
+	background-color: #ffffff; }
+#browser_wrapper div.navigation_wrapper tbody td.anchor {
+	/*border-left: 1px solid #d5dfe6;*/
+	word-wrap: break-word;
+	white-space: normal;
+	max-width: 145px; }
+#browser_wrapper div.content_wrapper {
+    width: 60%; }
+#browser_wrapper div.content_wrapper div.table_wrapper,
+#browser_wrapper div.content_wrapper thead th.table_header {
+	border-left: 0 none;
+	border-top-left-radius: 0; }
+#browser_wrapper div.content_wrapper td {
+	border: 1px solid #eeeeee; 
+	border-left: none; }
+#browser_wrapper div.content_wrapper td:last-child {
+	border-right: 0 none; }
+#browser_wrapper div.content_wrapper td.breadcrumb_td {
+	padding-left: 0; }
+#browser_wrapper div.content_wrapper tfoot td {
+      border-left: 0 none;
+      border-bottom-left-radius: 0; }
+#browser_wrapper div.content_wrapper ul.breadcrumb {
+	padding-left: 0;
+	border-top-left-radius: 0;
+	border-bottom-left-radius: 0;
+	border-left: 0; }
+#browser_wrapper div.content_wrapper ul.breadcrumb li {
+          visibility: hidden; }
+#browser_wrapper table {
+    border-collapse: collapse; }
+#browser_wrapper table thead tr th {
+      border-bottom: 0;
+      background-color: #ffffff; }
+#browser_wrapper table tbody tr:last-child td {
+      border-bottom: 1px solid #dddddd;
+      border-radius: 0; }
+#browser_wrapper table tbody tr.empty td {
+        height: 28px;
+        padding: 10px; }
+#browser_wrapper table tbody td.actions_column {
+      position: static; }
+#browser_wrapper .breadcrumb {
+    padding: 6px;
+    margin: 0 0 1px; }
+.topbar .context-box .context-selection {
+  display: inline-block; 
+	position: relative;
+	top: 3px;
+}
+
+.topbar .context-box .context-selection .dropdown-toggle {
+    background: url('/static/dashboard/img/dropdown_ena.png') transparent no-repeat;
+    background-repeat: no-repeat;
+	background-position: right 6px top 7px;
+    font-size: 13px;
+    color: transparent; 
+	border: 1px solid #f5f5f5;
+	border-radius: 2px;	    
+}
+.topbar .context-box .context-selection .dropdown-toggle:hover,
+.topbar .context-box .open .dropdown-toggle {
+	background: url('/static/dashboard/img/dropdown_dwn.png') #0572ce no-repeat;
+	background-position: right 6px center;
+	border: 1px solid #0572ce;
+	border-radius: 2px;	  
+	color: #ffffff;	
+}
+
+.topbar .context-box .context-selection .dropdown-toggle .context-overview {
+	padding: 0px 1px 0px 0px;
+	text-transform: capitalize; 
+	color: #000000;
+}
+
+.topbar .context-box .open .dropdown-toggle .context-overview {
+	color: #ffffff;
+}
+
+.topbar .context-box .context-selection .dropdown-toggle:hover .context-overview {
+	color: #ffffff;
+}
+
+.topbar .context-box .context-selection .dropdown-menu {
+	padding: 0; 
+	border: 1px solid #c4ced7;
+}
+.topbar .context-box .context-selection .dropdown-header {
+	font-size: 13px;
+	color: #000000;
+	font-weight: 600; 
+}
+
+.topbar .context-box .context-selection .dropdown-header:hover {
+	background: #ffffff;
+}
+
+.topbar .context-box .context-selection .context-lists {
+	display: table;
+	padding: 0px;
+	width: 100%; 
+}
+.topbar .context-box .context-selection .footer {
+	width: 100%;
+	height: 30px;
+	line-height: 30px;
+	padding-left: 12px;
+	/*margin-top: 1em;
+	padding: 0.4em 1em;*/
+	background: #f9f9f9;
+	border-top: 1px solid #c4ced7;
+	/*text-align: right; */
+}
+.topbar .context-box .context-selection .disabled {
+	cursor: not-allowed;
+	color: #cccccc; }
+.topbar .context-box .context-selection a {
+	cursor: pointer;
+	text-decoration: none;
+	white-space: nowrap; }
+.topbar .context-box .context-selection em {
+	font-size: 17px;
+	font-weight: bold;
+	vertical-align: middle; }
+.topbar .context-box .context-selection ul {
+	display: table-cell;
+	padding-left: 0px; 
+}
+.topbar .context-box .context-selection ul li {
+	padding-left: 0;
+	font-size: 13px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	max-width: 160px; 
+	height: 30px;
+	line-height: 30px;
+	padding-left: 12px;
+}
+
+.topbar .context-box .context-selection ul li:hover {
+	background: #ebeced;
+}
+
+.topbar .context-box .context-selection ul li a {
+	background: transparent;
+	color: #333333;
+	border: none;
+	text-transform: capitalize;
+}
+
+.topbar .context-box .context-selection ul li .glyphicon-ok {
+	margin: 0px 8px 0px 0px;
+	line-height: 30px; 
+	float: left;
+	color: #333333;
+}
+.topbar .context-box .context-selection ul:not(:last-child) {
+    border-right: 1px solid #cccccc; }
+
+.rickshaw_graph .detail {
+    pointer-events: none;
+    position: absolute;
+    top: 0;
+    z-index: 2;
+    background: rgba(0, 0, 0, 0.1);
+    bottom: 0;
+    width: 1px;
+    transition: opacity 0.25s linear;
+    -moz-transition: opacity 0.25s linear;
+    -o-transition: opacity 0.25s linear;
+    -webkit-transition: opacity 0.25s linear;
+}
+.rickshaw_graph .detail.inactive {
+    opacity: 0;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+}
+.rickshaw_graph .detail .x_label {
+    font-family: Arial, sans-serif;
+    border-radius: 3px;
+    padding: 6px;
+    opacity: 0.5;
+    border: 1px solid #e0e0e0;
+    font-size: 12px;
+    position: absolute;
+    background: white;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item {
+    position: absolute;
+    z-index: 2;
+    border-radius: 3px;
+    padding: 0.25em;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0;
+    background: rgba(0, 0, 0, 0.4);
+    color: white;
+    border: 1px solid rgba(0, 0, 0, 0.4);
+    margin-left: 1em;
+    margin-top: -1em;
+    white-space: nowrap;
+}
+.rickshaw_graph .detail .item.active {
+    opacity: 1;
+    background: rgba(0, 0, 0, 0.8);
+}
+.rickshaw_graph .detail .item:before {
+    content: "\25c2";
+    position: absolute;
+    left: -0.5em;
+    color: rgba(0, 0, 0, 0.7);
+    width: 0;
+}
+.rickshaw_graph .detail .dot {
+    width: 4px;
+    height: 4px;
+    margin-left: -4px;
+    margin-top: -3px;
+    border-radius: 5px;
+    position: absolute;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+    background: white;
+    border-width: 2px;
+    border-style: solid;
+    display: none;
+    background-clip: padding-box;
+}
+.rickshaw_graph .detail .dot.active {
+    display: block;
+}
+/* graph */
+
+.rickshaw_graph {
+    position: relative;
+}
+.rickshaw_graph svg {
+    display: block;
+    overflow: hidden;
+}
+
+/* ticks */
+
+.rickshaw_graph .x_tick {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    width: 0px;
+    border-left: 1px dotted rgba(0, 0, 0, 0.2);
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick .title {
+    position: absolute;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    opacity: 0.5;
+    white-space: nowrap;
+    margin-left: 3px;
+    bottom: 1px;
+}
+
+/* annotations */
+
+.rickshaw_annotation_timeline {
+    height: 1px;
+    border-top: 1px solid #e0e0e0;
+    margin-top: 10px;
+    position: relative;
+}
+.rickshaw_annotation_timeline .annotation {
+    position: absolute;
+    height: 6px;
+    width: 6px;
+    margin-left: -2px;
+    top: -3px;
+    border-radius: 5px;
+    background-color: rgba(0, 0, 0, 0.25);
+}
+.rickshaw_graph .annotation_line {
+    position: absolute;
+    top: 0;
+    bottom: -6px;
+    width: 0px;
+    border-left: 2px solid rgba(0, 0, 0, 0.3);
+    display: none;
+}
+.rickshaw_graph .annotation_line.active {
+    display: block;
+}
+
+.rickshaw_graph .annotation_range {
+        background: rgba(0, 0, 0, 0.1);
+        display: none;
+        position: absolute;
+        top: 0;
+        bottom: -6px;
+}
+.rickshaw_graph .annotation_range.active {
+        display: block;
+}
+.rickshaw_graph .annotation_range.active.offscreen {
+        display: none;
+}
+
+.rickshaw_annotation_timeline .annotation .content {
+    background: white;
+    color: black;
+    opacity: 0.9;
+    padding: 5px 5px;
+    box-shadow: 0 0 2px rgba(0, 0, 0, 0.8);
+    border-radius: 3px;
+    position: relative;
+    z-index: 20;
+    font-size: 12px;
+    padding: 6px 8px 8px;
+    top: 18px;
+    left: -11px;
+    width: 160px;
+    display: none;
+    cursor: pointer;
+}
+.rickshaw_annotation_timeline .annotation .content:before {
+    content: "\25b2";
+    position: absolute;
+    top: -11px;
+    color: white;
+    text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8);
+}
+.rickshaw_annotation_timeline .annotation.active,
+.rickshaw_annotation_timeline .annotation:hover {
+    background-color: rgba(0, 0, 0, 0.8);
+    cursor: none;
+}
+.rickshaw_annotation_timeline .annotation .content:hover {
+    z-index: 50;
+}
+.rickshaw_annotation_timeline .annotation.active .content {
+    display: block;
+}
+.rickshaw_annotation_timeline .annotation:hover .content {
+    display: block;
+    z-index: 50;
+}
+.rickshaw_graph .y_axis,
+.rickshaw_graph  .x_axis_d3 {
+    fill: none;
+}
+.rickshaw_graph .y_ticks .tick,
+.rickshaw_graph .x_ticks_d3 .tick {
+    stroke: rgba(0, 0, 0, 0.16);
+    stroke-width: 2px;
+    shape-rendering: crisp-edges;
+    pointer-events: none;
+}
+.rickshaw_graph .y_grid .tick,
+.rickshaw_graph .x_grid_d3 .tick {
+    z-index: -1;
+    stroke: rgba(0, 0, 0, 0.20);
+    stroke-width: 1px;
+    stroke-dasharray: 1 1;
+}
+.rickshaw_graph .y_grid path,
+.rickshaw_graph .x_grid_d3 path  {
+    fill: none;
+    stroke: none;
+}
+.rickshaw_graph .y_ticks path,
+.rickshaw_graph .x_ticks_d3 path {
+    fill: none;
+    stroke: #808080;
+}
+.rickshaw_graph .y_ticks text,
+.rickshaw_graph .x_ticks_d3 text {
+    opacity: 0.5;
+    font-size: 12px;
+    pointer-events: none;
+}
+.rickshaw_graph .x_tick.glow .title,
+.rickshaw_graph .y_ticks.glow text {
+    fill: black;
+    color: black;
+    text-shadow:
+        -1px 1px 0 rgba(255, 255, 255, 0.1),
+        1px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 1px 0 rgba(255, 255, 255, 0.1),
+        0px 1px 0 rgba(255, 255, 255, 0.1),
+        0px -1px 0 rgba(255, 255, 255, 0.1),
+        1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px 0px 0 rgba(255, 255, 255, 0.1),
+        -1px -1px 0 rgba(255, 255, 255, 0.1);
+}
+.rickshaw_graph .x_tick.inverse .title,
+.rickshaw_graph .y_ticks.inverse text {
+    fill: white;
+    color: white;
+    text-shadow:
+        -1px 1px 0 rgba(0, 0, 0, 0.8),
+        1px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 1px 0 rgba(0, 0, 0, 0.8),
+        0px 1px 0 rgba(0, 0, 0, 0.8),
+        0px -1px 0 rgba(0, 0, 0, 0.8),
+        1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px 0px 0 rgba(0, 0, 0, 0.8),
+        -1px -1px 0 rgba(0, 0, 0, 0.8);
+}
+.rickshaw_legend {
+    font-family: Arial;
+    font-size: 12px;
+    color: white;
+    background: #404040;
+    display: inline-block;
+    padding: 12px 5px;
+    border-radius: 2px;
+    position: relative;
+}
+.rickshaw_legend:hover {
+    z-index: 10;
+}
+.rickshaw_legend .swatch {
+    width: 10px;
+    height: 10px;
+    border: 1px solid rgba(0, 0, 0, 0.2);
+}
+.rickshaw_legend .line {
+    clear: both;
+    line-height: 140%;
+    padding-right: 15px;
+}
+.rickshaw_legend .line .swatch {
+    display: inline-block;
+    margin-right: 3px;
+    border-radius: 2px;
+}
+.rickshaw_legend .label {
+    margin: 0;
+    white-space: nowrap;
+    display: inline;
+    font-size: inherit;
+    background-color: transparent;
+    color: inherit;
+    font-weight: normal;
+    line-height: normal;
+    padding: 0px;
+    text-shadow: none;
+}
+.rickshaw_legend .action:hover {
+    opacity: 0.6;
+}
+.rickshaw_legend .action {
+    margin-right: 0.2em;
+    font-size: 10px;
+    opacity: 0.2;
+    cursor: pointer;
+    font-size: 14px;
+}
+.rickshaw_legend .line.disabled {
+    opacity: 0.4;
+}
+.rickshaw_legend ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    margin: 2px;
+    cursor: pointer;
+}
+.rickshaw_legend li {
+    padding: 0 0 0 2px;
+    min-width: 80px;
+    white-space: nowrap;
+}
+.rickshaw_legend li:hover {
+    background: rgba(255, 255, 255, 0.08);
+    border-radius: 3px;
+}
+.rickshaw_legend li:active {
+    background: rgba(255, 255, 255, 0.2);
+    border-radius: 3px;
+}
+
+.datepicker {
+  padding: 4px;
+  border-radius: 4px;
+  direction: ltr;
+}
+
+.datepicker input {
+	background: #ffffff !important;
+}
+
+.datepicker-inline {
+  width: 220px;
+}
+.datepicker.datepicker-rtl {
+  direction: rtl;
+}
+.datepicker.datepicker-rtl table tr td span {
+  float: right;
+}
+.datepicker-dropdown {
+  top: 0;
+  left: 0;
+}
+.datepicker-dropdown:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #ccc;
+  border-top: 0;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  position: absolute;
+}
+.datepicker-dropdown:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #fff;
+  border-top: 0;
+  position: absolute;
+}
+.datepicker-dropdown.datepicker-orient-left:before {
+  left: 6px;
+}
+.datepicker-dropdown.datepicker-orient-left:after {
+  left: 7px;
+}
+.datepicker-dropdown.datepicker-orient-right:before {
+  right: 6px;
+}
+.datepicker-dropdown.datepicker-orient-right:after {
+  right: 7px;
+}
+.datepicker-dropdown.datepicker-orient-top:before {
+  top: -7px;
+}
+.datepicker-dropdown.datepicker-orient-top:after {
+  top: -6px;
+}
+.datepicker-dropdown.datepicker-orient-bottom:before {
+  bottom: -7px;
+  border-bottom: 0;
+  border-top: 7px solid #999;
+}
+.datepicker-dropdown.datepicker-orient-bottom:after {
+  bottom: -6px;
+  border-bottom: 0;
+  border-top: 6px solid #fff;
+}
+.datepicker > div {
+  display: none;
+}
+.datepicker.days div.datepicker-days {
+  display: block;
+}
+.datepicker.months div.datepicker-months {
+  display: block;
+}
+.datepicker.years div.datepicker-years {
+  display: block;
+}
+.datepicker table {
+  margin: 0;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.datepicker table tr td,
+.datepicker table tr th {
+  text-align: center;
+  width: 30px;
+  height: 30px;
+  border-radius: 4px;
+  border: none;
+}
+.table-striped .datepicker table tr td,
+.table-striped .datepicker table tr th {
+  background-color: transparent;
+}
+.datepicker table tr td.day:hover,
+.datepicker table tr td.day.focused {
+  background: #eeeeee;
+  cursor: pointer;
+}
+.datepicker table tr td.old,
+.datepicker table tr td.new {
+  color: #999999;
+}
+.datepicker table tr td.disabled,
+.datepicker table tr td.disabled:hover {
+  background: none;
+  color: #999999;
+  cursor: default;
+}
+.datepicker table tr td.today,
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today.disabled:hover {
+  color: #000000;
+  background-color: #ffdb99;
+  border-color: #ffb733;
+}
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today:hover:hover,
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today.disabled:hover:hover,
+.datepicker table tr td.today:focus,
+.datepicker table tr td.today:hover:focus,
+.datepicker table tr td.today.disabled:focus,
+.datepicker table tr td.today.disabled:hover:focus,
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.today,
+.open .dropdown-toggle.datepicker table tr td.today:hover,
+.open .dropdown-toggle.datepicker table tr td.today.disabled,
+.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
+  color: #000000;
+  background-color: #ffcd70;
+  border-color: #f59e00;
+}
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.today,
+.open .dropdown-toggle.datepicker table tr td.today:hover,
+.open .dropdown-toggle.datepicker table tr td.today.disabled,
+.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
+  background-image: none;
+}
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today:hover.disabled,
+.datepicker table tr td.today.disabled.disabled,
+.datepicker table tr td.today.disabled:hover.disabled,
+.datepicker table tr td.today[disabled],
+.datepicker table tr td.today:hover[disabled],
+.datepicker table tr td.today.disabled[disabled],
+.datepicker table tr td.today.disabled:hover[disabled],
+fieldset[disabled] .datepicker table tr td.today,
+fieldset[disabled] .datepicker table tr td.today:hover,
+fieldset[disabled] .datepicker table tr td.today.disabled,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today:hover.disabled:hover,
+.datepicker table tr td.today.disabled.disabled:hover,
+.datepicker table tr td.today.disabled:hover.disabled:hover,
+.datepicker table tr td.today[disabled]:hover,
+.datepicker table tr td.today:hover[disabled]:hover,
+.datepicker table tr td.today.disabled[disabled]:hover,
+.datepicker table tr td.today.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.today:hover,
+fieldset[disabled] .datepicker table tr td.today:hover:hover,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
+.datepicker table tr td.today.disabled:focus,
+.datepicker table tr td.today:hover.disabled:focus,
+.datepicker table tr td.today.disabled.disabled:focus,
+.datepicker table tr td.today.disabled:hover.disabled:focus,
+.datepicker table tr td.today[disabled]:focus,
+.datepicker table tr td.today:hover[disabled]:focus,
+.datepicker table tr td.today.disabled[disabled]:focus,
+.datepicker table tr td.today.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.today:focus,
+fieldset[disabled] .datepicker table tr td.today:hover:focus,
+fieldset[disabled] .datepicker table tr td.today.disabled:focus,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today:hover.disabled:active,
+.datepicker table tr td.today.disabled.disabled:active,
+.datepicker table tr td.today.disabled:hover.disabled:active,
+.datepicker table tr td.today[disabled]:active,
+.datepicker table tr td.today:hover[disabled]:active,
+.datepicker table tr td.today.disabled[disabled]:active,
+.datepicker table tr td.today.disabled:hover[disabled]:active,
+fieldset[disabled] .datepicker table tr td.today:active,
+fieldset[disabled] .datepicker table tr td.today:hover:active,
+fieldset[disabled] .datepicker table tr td.today.disabled:active,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today:hover.disabled.active,
+.datepicker table tr td.today.disabled.disabled.active,
+.datepicker table tr td.today.disabled:hover.disabled.active,
+.datepicker table tr td.today[disabled].active,
+.datepicker table tr td.today:hover[disabled].active,
+.datepicker table tr td.today.disabled[disabled].active,
+.datepicker table tr td.today.disabled:hover[disabled].active,
+fieldset[disabled] .datepicker table tr td.today.active,
+fieldset[disabled] .datepicker table tr td.today:hover.active,
+fieldset[disabled] .datepicker table tr td.today.disabled.active,
+fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
+  background-color: #ffffff;
+  border-color: #ffb733;
+}
+.datepicker table tr td.today:hover:hover {
+  color: #000;
+}
+.datepicker table tr td.today.active:hover {
+  color: #fff;
+}
+.datepicker table tr td.range,
+.datepicker table tr td.range:hover,
+.datepicker table tr td.range.disabled,
+.datepicker table tr td.range.disabled:hover {
+  background: #eeeeee;
+  border-radius: 0;
+}
+.datepicker table tr td.range.today,
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today.disabled:hover {
+  color: #000000;
+  background-color: #f7ca77;
+  border-color: #f1a417;
+  border-radius: 0;
+}
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today:hover:hover,
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover:hover,
+.datepicker table tr td.range.today:focus,
+.datepicker table tr td.range.today:hover:focus,
+.datepicker table tr td.range.today.disabled:focus,
+.datepicker table tr td.range.today.disabled:hover:focus,
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.range.today,
+.open .dropdown-toggle.datepicker table tr td.range.today:hover,
+.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
+.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
+  color: #000000;
+  background-color: #f4bb51;
+  border-color: #bf800c;
+}
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.range.today,
+.open .dropdown-toggle.datepicker table tr td.range.today:hover,
+.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
+.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
+  background-image: none;
+}
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today:hover.disabled,
+.datepicker table tr td.range.today.disabled.disabled,
+.datepicker table tr td.range.today.disabled:hover.disabled,
+.datepicker table tr td.range.today[disabled],
+.datepicker table tr td.range.today:hover[disabled],
+.datepicker table tr td.range.today.disabled[disabled],
+.datepicker table tr td.range.today.disabled:hover[disabled],
+fieldset[disabled] .datepicker table tr td.range.today,
+fieldset[disabled] .datepicker table tr td.range.today:hover,
+fieldset[disabled] .datepicker table tr td.range.today.disabled,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today:hover.disabled:hover,
+.datepicker table tr td.range.today.disabled.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover.disabled:hover,
+.datepicker table tr td.range.today[disabled]:hover,
+.datepicker table tr td.range.today:hover[disabled]:hover,
+.datepicker table tr td.range.today.disabled[disabled]:hover,
+.datepicker table tr td.range.today.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.range.today:hover,
+fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
+.datepicker table tr td.range.today.disabled:focus,
+.datepicker table tr td.range.today:hover.disabled:focus,
+.datepicker table tr td.range.today.disabled.disabled:focus,
+.datepicker table tr td.range.today.disabled:hover.disabled:focus,
+.datepicker table tr td.range.today[disabled]:focus,
+.datepicker table tr td.range.today:hover[disabled]:focus,
+.datepicker table tr td.range.today.disabled[disabled]:focus,
+.datepicker table tr td.range.today.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.range.today:focus,
+fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today:hover.disabled:active,
+.datepicker table tr td.range.today.disabled.disabled:active,
+.datepicker table tr td.range.today.disabled:hover.disabled:active,
+.datepicker table tr td.range.today[disabled]:active,
+.datepicker table tr td.range.today:hover[disabled]:active,
+.datepicker table tr td.range.today.disabled[disabled]:active,
+.datepicker table tr td.range.today.disabled:hover[disabled]:active,
+fieldset[disabled] .datepicker table tr td.range.today:active,
+fieldset[disabled] .datepicker table tr td.range.today:hover:active,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today:hover.disabled.active,
+.datepicker table tr td.range.today.disabled.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.disabled.active,
+.datepicker table tr td.range.today[disabled].active,
+.datepicker table tr td.range.today:hover[disabled].active,
+.datepicker table tr td.range.today.disabled[disabled].active,
+.datepicker table tr td.range.today.disabled:hover[disabled].active,
+fieldset[disabled] .datepicker table tr td.range.today.active,
+fieldset[disabled] .datepicker table tr td.range.today:hover.active,
+fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
+fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
+  background-color: #f7ca77;
+  border-color: #f1a417;
+}
+.datepicker table tr td.selected,
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected.disabled:hover {
+  color: #ffffff;
+  background-color: #999999;
+  border-color: #555555;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected:hover:hover,
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.disabled:hover:hover,
+.datepicker table tr td.selected:focus,
+.datepicker table tr td.selected:hover:focus,
+.datepicker table tr td.selected.disabled:focus,
+.datepicker table tr td.selected.disabled:hover:focus,
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.selected,
+.open .dropdown-toggle.datepicker table tr td.selected:hover,
+.open .dropdown-toggle.datepicker table tr td.selected.disabled,
+.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
+  color: #ffffff;
+  background-color: #858585;
+  border-color: #373737;
+}
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.selected,
+.open .dropdown-toggle.datepicker table tr td.selected:hover,
+.open .dropdown-toggle.datepicker table tr td.selected.disabled,
+.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
+  background-image: none;
+}
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected:hover.disabled,
+.datepicker table tr td.selected.disabled.disabled,
+.datepicker table tr td.selected.disabled:hover.disabled,
+.datepicker table tr td.selected[disabled],
+.datepicker table tr td.selected:hover[disabled],
+.datepicker table tr td.selected.disabled[disabled],
+.datepicker table tr td.selected.disabled:hover[disabled],
+fieldset[disabled] .datepicker table tr td.selected,
+fieldset[disabled] .datepicker table tr td.selected:hover,
+fieldset[disabled] .datepicker table tr td.selected.disabled,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected:hover.disabled:hover,
+.datepicker table tr td.selected.disabled.disabled:hover,
+.datepicker table tr td.selected.disabled:hover.disabled:hover,
+.datepicker table tr td.selected[disabled]:hover,
+.datepicker table tr td.selected:hover[disabled]:hover,
+.datepicker table tr td.selected.disabled[disabled]:hover,
+.datepicker table tr td.selected.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.selected:hover,
+fieldset[disabled] .datepicker table tr td.selected:hover:hover,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
+.datepicker table tr td.selected.disabled:focus,
+.datepicker table tr td.selected:hover.disabled:focus,
+.datepicker table tr td.selected.disabled.disabled:focus,
+.datepicker table tr td.selected.disabled:hover.disabled:focus,
+.datepicker table tr td.selected[disabled]:focus,
+.datepicker table tr td.selected:hover[disabled]:focus,
+.datepicker table tr td.selected.disabled[disabled]:focus,
+.datepicker table tr td.selected.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.selected:focus,
+fieldset[disabled] .datepicker table tr td.selected:hover:focus,
+fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected:hover.disabled:active,
+.datepicker table tr td.selected.disabled.disabled:active,
+.datepicker table tr td.selected.disabled:hover.disabled:active,
+.datepicker table tr td.selected[disabled]:active,
+.datepicker table tr td.selected:hover[disabled]:active,
+.datepicker table tr td.selected.disabled[disabled]:active,
+.datepicker table tr td.selected.disabled:hover[disabled]:active,
+fieldset[disabled] .datepicker table tr td.selected:active,
+fieldset[disabled] .datepicker table tr td.selected:hover:active,
+fieldset[disabled] .datepicker table tr td.selected.disabled:active,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected:hover.disabled.active,
+.datepicker table tr td.selected.disabled.disabled.active,
+.datepicker table tr td.selected.disabled:hover.disabled.active,
+.datepicker table tr td.selected[disabled].active,
+.datepicker table tr td.selected:hover[disabled].active,
+.datepicker table tr td.selected.disabled[disabled].active,
+.datepicker table tr td.selected.disabled:hover[disabled].active,
+fieldset[disabled] .datepicker table tr td.selected.active,
+fieldset[disabled] .datepicker table tr td.selected:hover.active,
+fieldset[disabled] .datepicker table tr td.selected.disabled.active,
+fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
+  background-color: #999999;
+  border-color: #555555;
+}
+.datepicker table tr td.active,
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active.disabled:hover {
+  color: #ffffff;
+  background-color: #428bca;
+  border-color: #357ebd;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active:hover:hover,
+.datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active.disabled:hover:hover,
+.datepicker table tr td.active:focus,
+.datepicker table tr td.active:hover:focus,
+.datepicker table tr td.active.disabled:focus,
+.datepicker table tr td.active.disabled:hover:focus,
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.active,
+.open .dropdown-toggle.datepicker table tr td.active:hover,
+.open .dropdown-toggle.datepicker table tr td.active.disabled,
+.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
+  color: #ffffff;
+  background-color: #3276b1;
+  border-color: #285e8e;
+}
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td.active,
+.open .dropdown-toggle.datepicker table tr td.active:hover,
+.open .dropdown-toggle.datepicker table tr td.active.disabled,
+.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
+  background-image: none;
+}
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active:hover.disabled,
+.datepicker table tr td.active.disabled.disabled,
+.datepicker table tr td.active.disabled:hover.disabled,
+.datepicker table tr td.active[disabled],
+.datepicker table tr td.active:hover[disabled],
+.datepicker table tr td.active.disabled[disabled],
+.datepicker table tr td.active.disabled:hover[disabled],
+fieldset[disabled] .datepicker table tr td.active,
+fieldset[disabled] .datepicker table tr td.active:hover,
+fieldset[disabled] .datepicker table tr td.active.disabled,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active:hover.disabled:hover,
+.datepicker table tr td.active.disabled.disabled:hover,
+.datepicker table tr td.active.disabled:hover.disabled:hover,
+.datepicker table tr td.active[disabled]:hover,
+.datepicker table tr td.active:hover[disabled]:hover,
+.datepicker table tr td.active.disabled[disabled]:hover,
+.datepicker table tr td.active.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td.active:hover,
+fieldset[disabled] .datepicker table tr td.active:hover:hover,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
+.datepicker table tr td.active.disabled:focus,
+.datepicker table tr td.active:hover.disabled:focus,
+.datepicker table tr td.active.disabled.disabled:focus,
+.datepicker table tr td.active.disabled:hover.disabled:focus,
+.datepicker table tr td.active[disabled]:focus,
+.datepicker table tr td.active:hover[disabled]:focus,
+.datepicker table tr td.active.disabled[disabled]:focus,
+.datepicker table tr td.active.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td.active:focus,
+fieldset[disabled] .datepicker table tr td.active:hover:focus,
+fieldset[disabled] .datepicker table tr td.active.disabled:focus,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active:hover.disabled:active,
+.datepicker table tr td.active.disabled.disabled:active,
+.datepicker table tr td.active.disabled:hover.disabled:active,
+.datepicker table tr td.active[disabled]:active,
+.datepicker table tr td.active:hover[disabled]:active,
+.datepicker table tr td.active.disabled[disabled]:active,
+.datepicker table tr td.active.disabled:hover[disabled]:active,
+fieldset[disabled] .datepicker table tr td.active:active,
+fieldset[disabled] .datepicker table tr td.active:hover:active,
+fieldset[disabled] .datepicker table tr td.active.disabled:active,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active:hover.disabled.active,
+.datepicker table tr td.active.disabled.disabled.active,
+.datepicker table tr td.active.disabled:hover.disabled.active,
+.datepicker table tr td.active[disabled].active,
+.datepicker table tr td.active:hover[disabled].active,
+.datepicker table tr td.active.disabled[disabled].active,
+.datepicker table tr td.active.disabled:hover[disabled].active,
+fieldset[disabled] .datepicker table tr td.active.active,
+fieldset[disabled] .datepicker table tr td.active:hover.active,
+fieldset[disabled] .datepicker table tr td.active.disabled.active,
+fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.datepicker table tr td span {
+  display: block;
+  width: 23%;
+  height: 54px;
+  line-height: 54px;
+  float: left;
+  margin: 1%;
+  cursor: pointer;
+  border-radius: 4px;
+}
+.datepicker table tr td span:hover {
+  background: #eeeeee;
+}
+.datepicker table tr td span.disabled,
+.datepicker table tr td span.disabled:hover {
+  background: none;
+  color: #999999;
+  cursor: default;
+}
+.datepicker table tr td span.active,
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active.disabled:hover {
+  color: #ffffff;
+  background-color: #428bca;
+  border-color: #357ebd;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active:focus,
+.datepicker table tr td span.active:hover:focus,
+.datepicker table tr td span.active.disabled:focus,
+.datepicker table tr td span.active.disabled:hover:focus,
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td span.active,
+.open .dropdown-toggle.datepicker table tr td span.active:hover,
+.open .dropdown-toggle.datepicker table tr td span.active.disabled,
+.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
+  color: #ffffff;
+  background-color: #3276b1;
+  border-color: #285e8e;
+}
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active,
+.open .dropdown-toggle.datepicker table tr td span.active,
+.open .dropdown-toggle.datepicker table tr td span.active:hover,
+.open .dropdown-toggle.datepicker table tr td span.active.disabled,
+.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
+  background-image: none;
+}
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active:hover.disabled,
+.datepicker table tr td span.active.disabled.disabled,
+.datepicker table tr td span.active.disabled:hover.disabled,
+.datepicker table tr td span.active[disabled],
+.datepicker table tr td span.active:hover[disabled],
+.datepicker table tr td span.active.disabled[disabled],
+.datepicker table tr td span.active.disabled:hover[disabled],
+fieldset[disabled] .datepicker table tr td span.active,
+fieldset[disabled] .datepicker table tr td span.active:hover,
+fieldset[disabled] .datepicker table tr td span.active.disabled,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active:hover.disabled:hover,
+.datepicker table tr td span.active.disabled.disabled:hover,
+.datepicker table tr td span.active.disabled:hover.disabled:hover,
+.datepicker table tr td span.active[disabled]:hover,
+.datepicker table tr td span.active:hover[disabled]:hover,
+.datepicker table tr td span.active.disabled[disabled]:hover,
+.datepicker table tr td span.active.disabled:hover[disabled]:hover,
+fieldset[disabled] .datepicker table tr td span.active:hover,
+fieldset[disabled] .datepicker table tr td span.active:hover:hover,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active.disabled:focus,
+.datepicker table tr td span.active:hover.disabled:focus,
+.datepicker table tr td span.active.disabled.disabled:focus,
+.datepicker table tr td span.active.disabled:hover.disabled:focus,
+.datepicker table tr td span.active[disabled]:focus,
+.datepicker table tr td span.active:hover[disabled]:focus,
+.datepicker table tr td span.active.disabled[disabled]:focus,
+.datepicker table tr td span.active.disabled:hover[disabled]:focus,
+fieldset[disabled] .datepicker table tr td span.active:focus,
+fieldset[disabled] .datepicker table tr td span.active:hover:focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active:hover.disabled:active,
+.datepicker table tr td span.active.disabled.disabled:active,
+.datepicker table tr td span.active.disabled:hover.disabled:active,
+.datepicker table tr td span.active[disabled]:active,
+.datepicker table tr td span.active:hover[disabled]:active,
+.datepicker table tr td span.active.disabled[disabled]:active,
+.datepicker table tr td span.active.disabled:hover[disabled]:active,
+fieldset[disabled] .datepicker table tr td span.active:active,
+fieldset[disabled] .datepicker table tr td span.active:hover:active,
+fieldset[disabled] .datepicker table tr td span.active.disabled:active,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active:hover.disabled.active,
+.datepicker table tr td span.active.disabled.disabled.active,
+.datepicker table tr td span.active.disabled:hover.disabled.active,
+.datepicker table tr td span.active[disabled].active,
+.datepicker table tr td span.active:hover[disabled].active,
+.datepicker table tr td span.active.disabled[disabled].active,
+.datepicker table tr td span.active.disabled:hover[disabled].active,
+fieldset[disabled] .datepicker table tr td span.active.active,
+fieldset[disabled] .datepicker table tr td span.active:hover.active,
+fieldset[disabled] .datepicker table tr td span.active.disabled.active,
+fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.datepicker table tr td span.old,
+.datepicker table tr td span.new {
+  color: #999999;
+}
+.datepicker th.datepicker-switch {
+  width: 145px;
+}
+.datepicker thead tr:first-child th,
+.datepicker tfoot tr th {
+  cursor: pointer;
+}
+.datepicker thead tr:first-child th:hover,
+.datepicker tfoot tr th:hover {
+  background: #eeeeee;
+}
+.datepicker .cw {
+  font-size: 10px;
+  width: 12px;
+  padding: 0 2px 0 5px;
+  vertical-align: middle;
+}
+.datepicker thead tr:first-child th.cw {
+  cursor: default;
+  background-color: transparent;
+}
+.input-group.date .input-group-addon i {
+  cursor: pointer;
+  width: 16px;
+  height: 16px;
+}
+.input-daterange input {
+  text-align: center;
+}
+.input-daterange input:first-child {
+  border-radius: 3px 0 0 3px;
+}
+.input-daterange input:last-child {
+  border-radius: 0 3px 3px 0;
+}
+.input-daterange .input-group-addon {
+  width: auto;
+  min-width: 16px;
+  padding: 4px 5px;
+  font-weight: normal;
+  line-height: 1.51429;
+  text-align: center;
+  text-shadow: 0 1px 0 #fff;
+  vertical-align: middle;
+  background-color: #eeeeee;
+  border: solid #cccccc;
+  border-width: 1px 0;
+  margin-left: -5px;
+  margin-right: -5px;
+}
+.datepicker.dropdown-menu {
   position: absolute;
   top: 100%;
   left: 0;
   z-index: 1000;
   float: left;
   display: none;
-  min-width: 145px;
-  _width: 145px;
-  padding: 4px 0;
-  margin: 0;
+  min-width: 160px;
   list-style: none;
   background-color: #ffffff;
-  border-color: #C3CED7;
-  /*border-color: rgba(0, 0, 0, 0.2);*/
-  border-style: solid;
-  border-width: 1px;
-  /*-webkit-border-radius: 0 0 5px 5px;
-  -moz-border-radius: 0 0 5px 5px;
-  border-radius: 0 0 5px 5px;*/
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 5px;
   -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
   -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
   box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
@@ -1715,4529 +9164,1701 @@
   background-clip: padding-box;
   *border-right-width: 2px;
   *border-bottom-width: 2px;
-}
-.dropdown-menu.bottom-up {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 2px;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 5px 1px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-  *width: 100%;
-  *margin: -5px 0 5px;
-}
-.dropdown-menu a {
-  display: block;
-  padding: 3px 15px;
-  clear: both;
-  font-weight: normal;
-  line-height: 18px;
-  color: #555555;
-  white-space: nowrap;
-}
-.dropdown-menu li > a:hover,
-.dropdown-menu .active > a,
-.dropdown-menu .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #0088cc;
-}
-.dropdown.open {
-  *z-index: 1000;
-}
-.dropdown.open .dropdown-toggle,
-.dropdown.open .dropdown-toggle:hover  {
-  color: #ffffff;
-  background: #ccc;
-  background: rgba(0, 0, 0, 0.3);
-}
-.dropdown.open .dropdown-menu {
-  display: block;
-}
-.typeahead {
-  margin-top: 2px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #eee;
-  border: 1px solid rgba(0, 0, 0, 0.05);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-.fade {
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -ms-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-  opacity: 0;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -ms-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
-  position: relative;
-  overflow: hidden;
-  height: 0;
-}
-.collapse.in {
-  height: auto;
-}
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 18px;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-.close:hover {
-  color: #000000;
-  text-decoration: none;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-  cursor: pointer;
-}
-.btn {
-  display: inline-block;
-  padding: 7px 10px 5px 10px;
-  margin-bottom: 0;
-  font-size: 12px !important;
-  line-height: 18px;
-  color: #000000;
-  /*text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  vertical-align: middle;
-  background-color: #f5f5f5;*/
-  background: -moz-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -ms-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f3f4), to(#e3e8ea));
-  background: -webkit-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -o-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: linear-gradient(top, #f1f3f4, #e3e8ea);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  /*border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);*/
-  border: 1px solid #C3CED7;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  /*-webkit-box-shadow: inset 0 1px 1px rgba(251, 252, 252, 1), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(251, 252, 252, 1), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(251, 252, 252, 1), 0 1px 2px rgba(0, 0, 0, 0.05);*/
-  cursor: pointer;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  /**margin-left: .3em;*/
-}
-.btn:hover,
-.btn:active,
-.btn.active {
-  background: -moz-linear-gradient(top, #F8F9FA, #F1F4F5);
-  background: -ms-linear-gradient(top, #F8F9FA, #F1F4F5);
-  background: -webkit-gradient(linear, 0 0, 0 100%, from(#F8F9FA), to(#F1F4F5));
-  background: -webkit-linear-gradient(top, #F8F9FA, #F1F4F5);
-  background: -o-linear-gradient(top, #F8F9FA, #F1F4F5);
-  background: linear-gradient(top, #F8F9FA, #F1F4F5);  
-  text-decoration: none;
-}
-
-.btn.disabled,
-.btn[disabled] {
-  background: #F4F6F7;
-  color: #999999;
-  border: 1px solid #DFE6EB;
-}
-
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
-}
-.btn:first-child {
-  *margin-left: 0;
-}
-.btn:hover {
-  color: #000000;
-  text-decoration: none;
-  background: -moz-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -ms-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -webkit-gradient(linear, 0 0, 0 100%, from(#f8f9fa), to(#f1f4f5));
-  background: -webkit-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -o-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: linear-gradient(top, #f8f9fa, #f1f4f5);  
-  /*background-color: #e6e6e6;
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -ms-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;*/
-}
-.btn:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn.active,
-.btn:active {
-  background-image: none;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  background-color: #e6e6e6;
-  background-color: #d9d9d9 \9;
-  outline: 0;
-}
-.btn.disabled,
-.btn[disabled] {
-  cursor: default;
-  background-image: none;
-  background-color: #e6e6e6;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-.btn-large {
-  padding: 9px 14px;
-  font-size: 15px;
-  line-height: normal;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.btn-large [class^="icon-"] {
-  margin-top: 1px;
-}
-.btn-small {
-  padding: 5px 9px;
-  font-size: 11px;
-  line-height: 16px;
-}
-.btn-small [class^="icon-"] {
-  margin-top: -1px;
-}
-.btn-mini {
-  padding: 2px 6px;
-  font-size: 11px;
-  line-height: 14px;
-}
-.btn-primary,
-.btn-primary:hover,
-.btn-warning,
-.btn-warning:hover,
-.btn-danger,
-.btn-danger:hover,
-.btn-success,
-.btn-success:hover,
-.btn-info,
-.btn-info:hover,
-.btn-inverse,
-.btn-inverse:hover {
-  /*text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);*/
-  color: #fff;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-dark.active {
-  color: #fff;
-  background-color: #c44012;
-
-}
-li.active .btn-primary,
-.btn-primary {
-    color: #ffffff;
-    border: 1px solid #0074CD;
-    background: #0074CD;
-    font-weight: bold;
-    /*background-image: linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -o-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -moz-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -webkit-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    background-image: -ms-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(221,74,20) 100%);
-    -webkit-box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.2);
-    box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.2);*/
-}
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  border: 1px solid #0160C1;
-  background: #0160C1;
-}
-/*.btn-primary.active {
-  background-color: #c44012 \9;
-}*/
-$.btn-primary:active,
-.btn-primary:active {
-    background-color: #DD4814;
-    background-image: linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -o-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -moz-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -webkit-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    background-image: -ms-linear-gradient(bottom, rgb(199,66,18) 0%, rgb(236,94,43) 100%);
-    text-decoration: none;
-}
-
-.btn-warning {
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -ms-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(top, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
-  border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
-  background-color: #f89406;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #c67605 \9;
-}
-.btn-danger {
-  background: #0074CD;
-  /*font-weight: bold;*/
-  border: 1px solid #0074CD;
-  color: #FFFFFF
-}
-
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled], 
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover {
-  background-color: #dde7ee;
-  color: #8193a1;
-  font-weight: bold;
-  font-size: 12px !important;
-  border: 1px solid #cedae2;
-}
-
-.btn-danger:hover,
-.btn-danger:active {
-	background: #0160c1;
-	border: 1px solid #0160c1;
-	color: #FFFFFF;
-}
-
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #942a25 \9;
-}
-.btn-success {
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -ms-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(top, #62c462, #51a351);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
-  border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
-  background-color: #51a351;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #408140 \9;
-}
-.btn-info {
-  background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(top, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
-  border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
-  background-color: #2f96b4;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #24748c \9;
-}
-.btn-inverse {
-  background-color: #393939;
-  background-image: -moz-linear-gradient(top, #454545, #262626);
-  background-image: -ms-linear-gradient(top, #454545, #262626);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626));
-  background-image: -webkit-linear-gradient(top, #454545, #262626);
-  background-image: -o-linear-gradient(top, #454545, #262626);
-  background-image: linear-gradient(top, #454545, #262626);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0);
-  border-color: #262626 #262626 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-inverse:hover,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
-  background-color: #262626;
-}
-.btn-inverse:active,
-.btn-inverse.active {
-  background-color: #0c0c0c \9;
-}
-
-.btn-search {
-	margin-left: 0px !important;
-}
-
-button.btn,
-input[type="submit"].btn {
-  *padding-top: 2px;
-  *padding-bottom: 2px;
-}
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button.btn.large,
-input[type="submit"].btn.large {
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-button.btn.small,
-input[type="submit"].btn.small {
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-}
-.btn-group {
-  position: relative;
-  *zoom: 1;
-  margin: 0px;
-}
-.topologyNavi .btn-group {
-	margin-left: 5px;
-	margin-top: 5px;
-	float: left;
-}
-.btn-group:before,
-.btn-group:after {
-  display: table;
-  content: "";
-}
-.btn-group:after {
-  clear: both;
-}
-.btn-group:first-child {
-  *margin-left: 0;
-}
-.btn-group + .btn-group {
-  /*margin-left: 5px;*/
-}
-.btn-toolbar {
-  margin-top: 9px;
-  margin-bottom: 9px;
-}
-.btn-toolbar .btn-group {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-}
-.btn-group .btn {
-  position: relative;
-  float: left;
-  margin-left: -1px;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.btn-group .btn:first-child {
-  margin-left: 0;
-  -webkit-border-top-left-radius: 3px;
-  -moz-border-radius-topleft: 3px;
-  border-top-left-radius: 3px;
-  -webkit-border-bottom-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  border-bottom-left-radius: 3px;
-}
-.btn-group .btn:last-child,
-.btn-group .dropdown-toggle {
-  -webkit-border-top-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  border-top-right-radius: 3px;
-  -webkit-border-bottom-right-radius: 3px;
-  -moz-border-radius-bottomright: 3px;
-  border-bottom-right-radius: 3px;
-}
-.btn-group .btn.large:first-child {
-  margin-left: 0;
-  /*-webkit-border-top-left-radius: 6px;
-  -moz-border-radius-topleft: 6px;
-  border-top-left-radius: 6px;
-  -webkit-border-bottom-left-radius: 6px;
-  -moz-border-radius-bottomleft: 6px;
-  border-bottom-left-radius: 6px;*/
-}
-.btn-group .btn.large:last-child,
-.btn-group .large.dropdown-toggle {
-  /*-webkit-border-top-right-radius: 6px;
-  -moz-border-radius-topright: 6px;
-  border-top-right-radius: 6px;
-  -webkit-border-bottom-right-radius: 6px;
-  -moz-border-radius-bottomright: 6px;
-  border-bottom-right-radius: 6px;*/
-}
-.btn-group .btn:hover,
-.btn-group .btn:focus,
-.btn-group .btn:active,
-.btn-group .btn.active {
-  z-index: 2;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-  *padding-top: 5px;
-  *padding-bottom: 5px;
-}
-.btn-group.open {
-  *z-index: 1000;
-}
-.btn-group.open .dropdown-menu {
-  display: block;
-  margin-top: 1px;
-  /*-webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;*/
-}
-.btn-group.open .dropdown-toggle {
-  background-image: none;
-  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.btn .caret {
-  margin-top: 7px;
-  margin-left: 0;
-}
-.btn:hover .caret,
-.open.btn-group .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.btn-primary .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
-  border-top-color: #ffffff;
-  opacity: 0.75;
-  filter: alpha(opacity=75);
-}
-.btn-small .caret {
-  margin-top: 4px;
-}
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: 18px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  background-color: #fcf8e3;
-  border: 1px solid #fbeed5;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.alert,
-.alert-heading {
-  color: #c09853;
-}
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: 18px;
-}
-.alert-success {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.alert-success,
-.alert-success .alert-heading {
-  color: #468847;
-}
-.alert-danger,
-.alert-error {
-  background-color: #f2dede;
-  border-color: #eed3d7;
-}
-.alert-danger,
-.alert-error,
-.alert-danger .alert-heading,
-.alert-error .alert-heading {
-  color: #b94a48;
-}
-.alert-info {
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.alert-info,
-.alert-info .alert-heading {
-  color: #3a87ad;
-}
-.alert-block {
-  padding-top: 14px;
-  padding-bottom: 14px;
-}
-.alert-block > p,
-.alert-block > ul {
-  margin-bottom: 0;
-}
-.alert-block p + p {
-  margin-top: 5px;
-}
-.nav {
-  margin-left: 0;
-  margin-bottom: 18px;
-  list-style: none;
-}
-.nav > li > a {
-  display: block;
-}
-.nav > li > a:hover {
-  text-decoration: none;
-  background-color: #ebeced;
-}
-.nav .nav-header {
-  display: block;
-  padding: 3px 15px;
-  font-size: 11px;
-  font-weight: bold;
-  line-height: 18px;
-  color: #999999;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  text-transform: uppercase;
-}
-.nav li + .nav-header {
-  margin-top: 9px;
-}
-.nav-list {
-  padding-left: 14px;
-  padding-right: 14px;
-  margin-bottom: 0;
-}
-.nav-list > li > a,
-.nav-list .nav-header {
-  margin-left: -15px;
-  margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-.nav-list > li > a {
-  padding: 3px 15px;
-}
-.nav-list .active > a,
-.nav-list .active > a:hover {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-  background-color: #0088cc;
-}
-.nav-list [class^="icon-"] {
-  margin-right: 2px;
-}
-.nav-tabs,
-.nav-pills {
-  *zoom: 1;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
-  display: table;
-  content: "";
-}
-.nav-tabs:after,
-.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 {
-  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;
-
-}
-.nav-tabs > li > a {
-  border: 1px solid #c4ced8;
-  border-top: none;
-  border-right: none;
-  width: 113px;
-}
-.nav-tabs > li > a:hover {
-}
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover {
-  border: 1px solid #ddd;
-  border-top: none;
-  cursor: default;
-}
-ul.nav-pills li.active {
-	float: right;
-}
-.nav-pills > li > a {
-  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 {
-  color: #ffffff;
-  background-color: #0074CD;
-  height: 14px;
-  width: 8px;  
-}
-.nav-pills .active > a:hover {
-  background-color: #0160C1;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li > a {
-  margin-right: 0;
-}
-.nav-tabs.nav-stacked {
-  border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.nav-tabs.nav-stacked > li:first-child > a {
-  -webkit-border-radius: 4px 4px 0 0;
-  -moz-border-radius: 4px 4px 0 0;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs.nav-stacked > li:last-child > a {
-  -webkit-border-radius: 0 0 4px 4px;
-  -moz-border-radius: 0 0 4px 4px;
-  border-radius: 0 0 4px 4px;
-}
-.nav-tabs.nav-stacked > li > a:hover {
-  border-color: #ddd;
-  z-index: 2;
-}
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px;
-}
-.nav-tabs .dropdown-menu,
-.nav-pills .dropdown-menu {
-  margin-top: 1px;
-  border-width: 1px;
-}
-.nav-pills .dropdown-menu {
-  -webkit-border-radius: 0px;
-  -moz-border-radius: 0px;
-  border-radius: 0px;
-}
-.nav-tabs .dropdown-toggle .caret,
-.nav-pills .dropdown-toggle .caret {
-  /*border-top-color: #000000;*/
-  border-top: 4px solid #005580;
-  oppacity: 0.3;
-  margin-top: 6px;
-}
-.nav-tabs .dropdown-toggle:hover .caret,
-.nav-pills .dropdown-toggle:hover .caret {
-  border-top-color: #005580;
-}
-.nav-tabs .active .dropdown-toggle .caret,
-.nav-pills .active .dropdown-toggle .caret {
-  border-top: 4px solid #005580;
-}
-.nav > .dropdown.active > a:hover {
-  color: #005580;
-  cursor: pointer;
-}
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > .open.active > a:hover {
-  color: #ffffff;
-  background-color: #999999;
-  border-color: #999999;
-}
-.nav .open .caret,
-.nav .open.active .caret,
-.nav .open a:hover .caret {
-  border-top-color: #ffffff;
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.tabs-stacked .open > a:hover {
-  border-color: #999999;
-}
-.tabbable {
-  *zoom: 1;
-}
-.tabbable:before,
-.tabbable:after {
-  display: table;
-  content: "";
-}
-.tabbable:after {
-  clear: both;
-}
-.tab-content {
-  overflow: hidden;
-}
-.tabs-below .nav-tabs,
-.tabs-right .nav-tabs,
-.tabs-left .nav-tabs {
-  border-bottom: 0;
-}
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
-  display: none;
-}
-.tab-content > .active,
-.pill-content > .active {
-  display: block;
-}
-.tabs-below .nav-tabs {
-  border-top: 1px solid #ddd;
-}
-.tabs-below .nav-tabs > li {
-  margin-top: -1px;
-  margin-bottom: 0;
-}
-.tabs-below .nav-tabs > li > a {
-  -webkit-border-radius: 0 0 4px 4px;
-  -moz-border-radius: 0 0 4px 4px;
-  border-radius: 0 0 4px 4px;
-}
-.tabs-below .nav-tabs > li > a:hover {
-  border-bottom-color: transparent;
-  border-top-color: #ddd;
-}
-.tabs-below .nav-tabs .active > a,
-.tabs-below .nav-tabs .active > a:hover {
-  border-color: transparent #ddd #ddd #ddd;
-}
-.tabs-left .nav-tabs > li,
-.tabs-right .nav-tabs > li {
-  float: none;
-}
-.tabs-left .nav-tabs > li > a,
-.tabs-right .nav-tabs > li > a {
-  min-width: 74px;
-  margin-right: 0;
-  margin-bottom: 3px;
-}
-.tabs-left .nav-tabs {
-  float: left;
-  margin-right: 19px;
-  border-right: 1px solid #ddd;
-}
-.tabs-left .nav-tabs > li > a {
-  margin-right: -1px;
-  -webkit-border-radius: 4px 0 0 4px;
-  -moz-border-radius: 4px 0 0 4px;
-  border-radius: 4px 0 0 4px;
-}
-.tabs-left .nav-tabs > li > a:hover {
-  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-.tabs-left .nav-tabs .active > a,
-.tabs-left .nav-tabs .active > a:hover {
-  border-color: #ddd transparent #ddd #ddd;
-  *border-right-color: #ffffff;
-}
-.tabs-right .nav-tabs {
-  float: right;
-  margin-left: 19px;
-  border-left: 1px solid #ddd;
-}
-.tabs-right .nav-tabs > li > a {
-  margin-left: -1px;
-  -webkit-border-radius: 0 4px 4px 0;
-  -moz-border-radius: 0 4px 4px 0;
-  border-radius: 0 4px 4px 0;
-}
-.tabs-right .nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-.tabs-right .nav-tabs .active > a,
-.tabs-right .nav-tabs .active > a:hover {
-  border-color: #ddd #ddd #ddd transparent;
-  *border-left-color: #ffffff;
-}
-.navbar {
-  overflow: visible;
-  margin-bottom: 18px;
-}
-.navbar-inner {
-  padding-left: 20px;
-  padding-right: 20px;
-  background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-.btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-left: 5px;
-  margin-right: 5px;
-  background-color: #2c2c2c;
-  background-image: -moz-linear-gradient(top, #333333, #222222);
-  background-image: -ms-linear-gradient(top, #333333, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
-  background-image: -webkit-linear-gradient(top, #333333, #222222);
-  background-image: -o-linear-gradient(top, #333333, #222222);
-  background-image: linear-gradient(top, #333333, #222222);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-  border-color: #222222 #222222 #000000;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-.btn-navbar:hover,
-.btn-navbar:active,
-.btn-navbar.active,
-.btn-navbar.disabled,
-.btn-navbar[disabled] {
-  background-color: #222222;
-}
-.btn-navbar:active,
-.btn-navbar.active {
-  background-color: #080808 \9;
-}
-.btn-navbar .icon-bar {
-  display: block;
-  width: 18px;
-  height: 2px;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 1px;
-  -moz-border-radius: 1px;
-  border-radius: 1px;
-  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-.btn-navbar .icon-bar + .icon-bar {
-  margin-top: 3px;
-}
-.nav-collapse.collapse {
-  height: auto;
-}
-.navbar .brand:hover {
-  text-decoration: none;
-}
-.navbar .brand {
-  float: left;
-  display: block;
-  padding: 8px 20px 12px;
-  margin-left: -20px;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 1;
-  color: #ffffff;
-}
-.navbar .navbar-text {
-  margin-bottom: 0;
-  line-height: 40px;
-  color: #999999;
-}
-.navbar .navbar-text a:hover {
-  color: #ffffff;
-  background-color: transparent;
-}
-.navbar .btn,
-.navbar .btn-group {
-  margin-top: 5px;
-}
-.navbar .btn-group .btn {
-  margin-top: 0;
-}
-.navbar-form {
-  margin-bottom: 0;
-  *zoom: 1;
-}
-.navbar-form:before,
-.navbar-form:after {
-  display: table;
-  content: "";
-}
-.navbar-form:after {
-  clear: both;
-}
-.navbar-form input,
-.navbar-form select {
-  display: inline-block;
-  margin-top: 5px;
-  margin-bottom: 0;
-}
-.navbar-form .radio,
-.navbar-form .checkbox {
-  margin-top: 5px;
-}
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
-  margin-top: 3px;
-}
-.navbar-form .input-append,
-.navbar-form .input-prepend {
-  margin-top: 6px;
-  white-space: nowrap;
-}
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
-  margin-top: 0;
-}
-.navbar-search {
-  position: relative;
-  float: left;
-  margin-top: 6px;
-  margin-bottom: 0;
-}
-.navbar-search .search-query {
-  padding: 4px 9px;
+  color: #333333;
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
   font-size: 13px;
-  font-weight: normal;
-  line-height: 1;
-  color: #ffffff;
-  color: rgba(255, 255, 255, 0.75);
-  background: #666;
-  background: rgba(255, 255, 255, 0.3);
-  border: 1px solid #111;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
-  -webkit-transition: none;
-  -moz-transition: none;
-  -ms-transition: none;
-  -o-transition: none;
-  transition: none;
-}
-.navbar-search .search-query :-moz-placeholder {
-  color: #eeeeee;
-}
-.navbar-search .search-query ::-webkit-input-placeholder {
-  color: #eeeeee;
-}
-.navbar-search .search-query:hover {
-  color: #ffffff;
-  background-color: #999999;
-  background-color: rgba(255, 255, 255, 0.5);
-}
-.navbar-search .search-query:focus,
-.navbar-search .search-query.focused {
-  padding: 5px 10px;
-  color: #333333;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #ffffff;
-  border: 0;
-  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-  outline: 0;
-}
-.navbar-fixed-top {
-  position: fixed;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-.navbar-fixed-top .navbar-inner {
-  padding-left: 0;
-  padding-right: 0;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.navbar .nav {
+  line-height: 1.5;
+}
+.datepicker.dropdown-menu th,
+.datepicker.datepicker-inline th,
+.datepicker.dropdown-menu td,
+.datepicker.datepicker-inline td {
+  padding: 0px 5px;
+}
+
+.chart {
+  height: inherit;
+  width: inherit;
+  min-height: inherit;
+  min-width: inherit; }
+  .chart .tooltip_detail {
+    position: absolute;
+    z-index: 2;
+    border-radius: 3px;
+    padding: 0.25em;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    color: white;
+    border: 1px solid rgba(0, 0, 0, 0.4);
+    margin-left: 1em;
+    margin-top: -1em;
+    white-space: nowrap;
+    background: rgba(0, 0, 0, 0.8); }
+    .chart .tooltip_detail:before {
+      content: "\25c2";
+      position: absolute;
+      left: -0.5em;
+      color: rgba(0, 0, 0, 0.7);
+      width: 0;
+      top: 12px; }
+
+.overview_chart {
+  width: 214px;
+  height: 81px; }
+  .overview_chart .chart_container {
+    width: 140px;
+    min-width: 140px; }
+    .overview_chart .chart_container .chart svg {
+      padding-right: 4px !important; }
+      .overview_chart .chart_container .chart .detail .dot.active {
+        box-sizing: content-box; }
+  .overview_chart .bar_chart_container {
+    position: relative;
+    width: 74px;
+    min-width: 74px; }
+    .overview_chart .bar_chart_container, .overview_chart .chart_container {
+      float: left;
+      min-height: 81px;
+      height: 81px; }
+      .overview_chart .bar_chart_container .chart,
+      .overview_chart .chart_container .chart {
+        height: inherit;
+        width: inherit;
+        min-height: inherit;
+        min-width: inherit; }
+        .overview_chart .bar_chart_container .chart .modal-backdrop,
+        .overview_chart .chart_container .chart .modal-backdrop {
+          min-height: inherit;
+          min-width: inherit; }
+  .overview_chart .tooltip_detail {
+    position: absolute;
+    z-index: 2;
+    border-radius: 3px;
+    padding: 0.25em;
+    font-size: 12px;
+    font-family: Arial, sans-serif;
+    color: white;
+    border: 1px solid rgba(0, 0, 0, 0.4);
+    margin-left: 1em;
+    margin-top: -1em;
+    white-space: nowrap;
+    background: rgba(0, 0, 0, 0.8); }
+    .overview_chart .tooltip_detail:before {
+      content: "\25c2";
+      position: absolute;
+      left: -0.5em;
+      color: rgba(0, 0, 0, 0.7);
+      width: 0;
+      top: 12px; }
+
+.chart_container {
   position: relative;
-  left: 0;
-  display: block;
-  float: left;
-  margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
-  float: right;
-}
-.navbar .nav > li {
-  display: block;
-  float: left;
-}
-.navbar .nav > li > a {
-  float: none;
-  padding: 10px 10px 11px;
-  line-height: 19px;
-  color: #999999;
-  text-decoration: none;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.navbar .nav > li > a:hover {
-  background-color: transparent;
-  color: #ffffff;
-  text-decoration: none;
-}
-.navbar .nav .active > a,
-.navbar .nav .active > a:hover {
-  color: #ffffff;
-  text-decoration: none;
-  background-color: #222222;
-}
-.navbar .divider-vertical {
-  height: 40px;
-  width: 1px;
-  margin: 0 9px;
-  overflow: hidden;
-  background-color: #222222;
-  border-right: 1px solid #333333;
-}
-.navbar .nav.pull-right {
-  margin-left: 10px;
-  margin-right: 0;
-}
-.navbar .dropdown-menu {
-  margin-top: 1px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.navbar .dropdown-menu:before {
-  content: '';
-  display: inline-block;
-  border-left: 7px solid transparent;
-  border-right: 7px solid transparent;
-  border-bottom: 7px solid #ccc;
-  border-bottom-color: rgba(0, 0, 0, 0.2);
-  position: absolute;
-  top: -7px;
-  left: 9px;
-}
-.navbar .dropdown-menu:after {
-  content: '';
-  display: inline-block;
-  border-left: 6px solid transparent;
-  border-right: 6px solid transparent;
-  border-bottom: 6px solid #ffffff;
-  position: absolute;
-  top: -6px;
-  left: 10px;
-}
-.navbar .nav .dropdown-toggle .caret,
-.navbar .nav .open.dropdown .caret {
-  border-top-color: #ffffff;
-}
-.navbar .nav .active .caret {
-  opacity: 1;
-  filter: alpha(opacity=100);
-}
-.navbar .nav .open > .dropdown-toggle,
-.navbar .nav .active > .dropdown-toggle,
-.navbar .nav .open.active > .dropdown-toggle {
-  background-color: transparent;
-}
-.navbar .nav .active > .dropdown-toggle:hover {
-  color: #ffffff;
-}
-.navbar .nav.pull-right .dropdown-menu {
-  left: auto;
-  right: 0;
-}
-.navbar .nav.pull-right .dropdown-menu:before {
-  left: auto;
-  right: 12px;
-}
-.navbar .nav.pull-right .dropdown-menu:after {
-  left: auto;
-  right: 13px;
-}
-.breadcrumb {
-  padding: 7px 14px;
-  margin: 0 0 18px;
-  background-color: #fbfbfb;
-  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
-  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
-  background-image: linear-gradient(top, #ffffff, #f5f5f5);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
-  border: 1px solid #ddd;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-}
-.breadcrumb li {
-  display: inline-block;
-  text-shadow: 0 1px 0 #ffffff;
-}
-.breadcrumb .divider {
-  padding: 0 5px;
-  color: #999999;
-}
-.breadcrumb .active a {
-  color: #333333;
-}
-.pagination {
-  height: 36px;
-  margin: 18px 0;
-}
-.pagination ul {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-
-  *zoom: 1;
-  margin-left: 0;
-  margin-bottom: 0;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.pagination li {
-  display: inline;
-}
-.pagination a {
-  float: left;
-  padding: 0 14px;
-  line-height: 34px;
-  text-decoration: none;
-  border: 1px solid #ddd;
-  border-left-width: 0;
-}
-.pagination a:hover,
-.pagination .active a {
-  background-color: #f5f5f5;
-}
-.pagination .active a {
-  color: #999999;
-  cursor: default;
-}
-.pagination .disabled a,
-.pagination .disabled a:hover {
-  color: #999999;
-  background-color: transparent;
-  cursor: default;
-}
-.pagination li:first-child a {
-  border-left-width: 1px;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.pagination li:last-child a {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-.pager {
-  margin-left: 0;
-  margin-bottom: 18px;
-  list-style: none;
-  text-align: center;
-  *zoom: 1;
-}
-.pager:before,
-.pager:after {
-  display: table;
-  content: "";
-}
-.pager:after {
-  clear: both;
-}
-.pager li {
-  display: inline;
-}
-.pager a {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 15px;
-  -moz-border-radius: 15px;
-  border-radius: 15px;
-}
-.pager a:hover {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.pager .next a {
-  float: right;
-}
-.pager .previous a {
-  float: left;
-}
-.modal-open .dropdown-menu {
-  z-index: 2050;
-}
-.modal-open .dropdown.open {
-  *z-index: 2050;
-}
-.modal-open .popover {
-  z-index: 2060;
-}
-.modal-open .tooltip {
-  z-index: 2070;
-}
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000000;
-}
-.modal-backdrop.fade {
-  opacity: 0;
-}
-.modal-backdrop,
-.modal-backdrop.fade.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-.modal {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  z-index: 1050;
-  max-height: 500px;
-  overflow: auto;
-  width: 560px;
-  margin: -250px 0 0 -280px;
-  background-color: #ffffff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.3);
-  *border: 1px solid #999;
-  /* IE6-7 */
-
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-.modal.fade {
-  -webkit-transition: opacity .3s linear, top .3s ease-out;
-  -moz-transition: opacity .3s linear, top .3s ease-out;
-  -ms-transition: opacity .3s linear, top .3s ease-out;
-  -o-transition: opacity .3s linear, top .3s ease-out;
-  transition: opacity .3s linear, top .3s ease-out;
-  top: -25%;
-}
-.modal.fade.in {
-  top: 50%;
-}
-.modal-header {
-  padding: 9px 15px 9px 15px;
-}
-.modal-header .close {
-  margin-top: 2px;
-}
-
-.modal-body {
-  padding: 15px 20px 30px 20px;
-}
-.modal-body .modal-form {
-  margin-bottom: 0;
-}
-.modal-footer {
-  padding: 14px 20px 15px;
-  margin-bottom: 0;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  -webkit-border-radius: 0 0 6px 6px;
-  -moz-border-radius: 0 0 6px 6px;
-  border-radius: 0 0 6px 6px;
-  -webkit-box-shadow: inset 0 1px 0 #ffffff;
-  -moz-box-shadow: inset 0 1px 0 #ffffff;
-  box-shadow: inset 0 1px 0 #ffffff;
-  *zoom: 1;
-}
-.modal-footer:before,
-.modal-footer:after {
-  display: table;
-  content: "";
-}
-.modal-footer:after {
-  clear: both;
-}
-.modal-footer .btn {
-  float: right;
-  margin-left: 5px;
-  margin-bottom: 0;
-}
-.tooltip {
-  position: absolute;
-  z-index: 1020;
-  display: block;
-  visibility: visible;
-  padding: 5px;
-  font-size: 11px;
-  opacity: 0;
-  filter: alpha(opacity=0);
-}
-.tooltip.in {
-  opacity: 0.8;
-  filter: alpha(opacity=80);
-}
-.tooltip.top {
-  margin-top: -2px;
-}
-.tooltip.right {
-  margin-left: 2px;
-}
-.tooltip.bottom {
-  margin-top: 2px;
-}
-.tooltip.left {
-  margin-left: -2px;
-}
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 5px solid #000000;
-}
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-left: 5px solid #000000;
-}
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-}
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-right: 5px solid #000000;
-}
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #ffffff;
-  text-align: center;
-  text-decoration: none;
-  background-color: #000000;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-}
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1010;
-  display: none;
-  padding: 5px;
-}
-.popover.top {
-  margin-top: -5px;
-}
-.popover.right {
-  margin-left: 5px;
-}
-.popover.bottom {
-  margin-top: 5px;
-}
-.popover.left {
-  margin-left: -5px;
-}
-.popover.top .arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-top: 5px solid #000000;
-}
-.popover.right .arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-right: 5px solid #000000;
-}
-.popover.bottom .arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-left: 5px solid transparent;
-  border-right: 5px solid transparent;
-  border-bottom: 5px solid #000000;
-}
-.popover.left .arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-top: 5px solid transparent;
-  border-bottom: 5px solid transparent;
-  border-left: 5px solid #000000;
-}
-.popover .arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-}
-.popover-inner {
-  padding: 3px;
-  width: 280px;
-  overflow: hidden;
-  background: #000000;
-  background: rgba(0, 0, 0, 0.8);
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-}
-.popover-title {
-  padding: 9px 15px;
-  line-height: 1;
-  background-color: #f5f5f5;
-  border-bottom: 1px solid #eee;
-  -webkit-border-radius: 3px 3px 0 0;
-  -moz-border-radius: 3px 3px 0 0;
-  border-radius: 3px 3px 0 0;
-}
-.popover-content {
-  padding: 14px;
-  background-color: #ffffff;
-  -webkit-border-radius: 0 0 3px 3px;
-  -moz-border-radius: 0 0 3px 3px;
-  border-radius: 0 0 3px 3px;
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-.popover-content p,
-.popover-content ul,
-.popover-content ol {
-  margin-bottom: 0;
-}
-.thumbnails {
-  margin-left: -20px;
-  list-style: none;
-  *zoom: 1;
-}
-.thumbnails:before,
-.thumbnails:after {
-  display: table;
-  content: "";
-}
-.thumbnails:after {
-  clear: both;
-}
-.thumbnails > li {
-  float: left;
-  margin: 0 0 18px 20px;
-}
-.thumbnail {
-  display: block;
-  padding: 4px;
-  line-height: 1;
-  border: 1px solid #ddd;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-a.thumbnail:hover {
-  border-color: #0088cc;
-  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-.thumbnail > img {
-  display: block;
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-}
-.thumbnail .caption {
-  padding: 9px;
-}
-.label {
-  padding: 2px 4px 3px;
-  font-size: 11.049999999999999px;
-  font-weight: bold;
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #999999;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.label:hover {
-  color: #ffffff;
-  text-decoration: none;
-}
-.label-important {
-  background-color: #b94a48;
-}
-.label-important:hover {
-  background-color: #953b39;
-}
-.label-warning {
-  background-color: #f89406;
-}
-.label-warning:hover {
-  background-color: #c67605;
-}
-.label-success {
-  background-color: #468847;
-}
-.label-success:hover {
-  background-color: #356635;
-}
-.label-info {
-  background-color: #3a87ad;
-}
-.label-info:hover {
-  background-color: #2d6987;
-}
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 40px 0;
-  }
-}
-.progress {
-  overflow: hidden;
-  height: 18px;
-  margin-bottom: 18px;
-  background-color: #f7f7f7;
-  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.progress .bar {
-  width: 0%;
-  height: 18px;
-  color: #ffffff;
-  font-size: 12px;
-  text-align: center;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #0e90d2;
-  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-  background-image: -o-linear-gradient(top, #149bdf, #0480be);
-  background-image: linear-gradient(top, #149bdf, #0480be);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  -webkit-transition: width 0.6s ease;
-  -moz-transition: width 0.6s ease;
-  -ms-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease;
-}
-.progress-striped .bar {
-  background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  -webkit-background-size: 40px 40px;
-  -moz-background-size: 40px 40px;
-  -o-background-size: 40px 40px;
-  background-size: 40px 40px;
-}
-.progress.active .bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-  -moz-animation: progress-bar-stripes 2s linear infinite;
-  animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-danger .bar {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-}
-.progress-danger.progress-striped .bar {
-  background-color: #ee5f5b;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-success .bar {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-}
-.progress-success.progress-striped .bar {
-  background-color: #62c462;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-info .bar {
-  background-color: #4bb1cf;
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(top, #5bc0de, #339bb9);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
-}
-.progress-info.progress-striped .bar {
-  background-color: #5bc0de;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.accordion {
-  margin-bottom: 18px;
-}
-.accordion-group {
-  margin-bottom: 2px;
-  border: 1px solid #e5e5e5;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.accordion-heading {
-  border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
-  display: block;
-  padding: 8px 15px;
-}
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
-.carousel {
-  position: relative;
-  margin-bottom: 18px;
-  line-height: 1;
-}
-.carousel-inner {
-  overflow: hidden;
-  width: 100%;
-  position: relative;
-}
-.carousel .item {
-  display: none;
-  position: relative;
-  -webkit-transition: 0.6s ease-in-out left;
-  -moz-transition: 0.6s ease-in-out left;
-  -ms-transition: 0.6s ease-in-out left;
-  -o-transition: 0.6s ease-in-out left;
-  transition: 0.6s ease-in-out left;
-}
-.carousel .item > img {
-  display: block;
-  line-height: 1;
-}
-.carousel .active,
-.carousel .next,
-.carousel .prev {
-  display: block;
-}
-.carousel .active {
-  left: 0;
-}
-.carousel .next,
-.carousel .prev {
-  position: absolute;
-  top: 0;
-  width: 100%;
-}
-.carousel .next {
-  left: 100%;
-}
-.carousel .prev {
-  left: -100%;
-}
-.carousel .next.left,
-.carousel .prev.right {
-  left: 0;
-}
-.carousel .active.left {
-  left: -100%;
-}
-.carousel .active.right {
-  left: 100%;
-}
-.carousel-control {
+  min-height: 300px;
+  min-width: 400px; }
+  .chart_container .chart {
+    position: relative;
+    min-height: 300px;
+    min-width: 400px; }
+    .chart_container .chart .detail .x_label {
+      display: none; }
+      .chart_container .chart .detail .item {
+        line-height: 1.4;
+        padding: 0.5em; }
+        .chart_container .chart .detail .date {
+          color: #a0a0a0; }
+    .chart_container .chart .modal-backdrop {
+      position: absolute;
+      opacity: 0.5;
+      top: 0;
+      left: 0;
+      min-height: 300px;
+      min-width: 400px; }
+      .chart_container .chart svg {
+        padding: 0 0 5px 0; }
+  .chart_container .detail_swatch {
+    float: right;
+    display: inline-block;
+    width: 10px;
+    height: 10px;
+    margin: 0 4px 0 0; }
+
+.legend_container {
+  min-width: 90px;
+  margin-left: 20px; }
+  .legend_container .swatch {
+    float: right;
+    display: inline-block;
+    width: 10px;
+    height: 10px;
+    margin: 0 4px 0 0; }
+    .legend_container .modal-backdrop {
+      position: absolute;
+      opacity: 0.5;
+      top: 0;
+      left: 0;
+      min-width: 90px; }
+      .legend_container .rickshaw_legend.disabled {
+        padding: 0; }
+
+.spinner_wrapper {
   position: absolute;
   top: 40%;
-  left: 15px;
-  width: 40px;
-  height: 40px;
-  margin-top: -20px;
-  font-size: 60px;
-  font-weight: 100;
-  line-height: 30px;
-  color: #ffffff;
-  text-align: center;
-  background: #222222;
-  border: 3px solid #ffffff;
-  -webkit-border-radius: 23px;
-  -moz-border-radius: 23px;
-  border-radius: 23px;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-.carousel-control.right {
-  left: auto;
-  right: 15px;
-}
-.carousel-control:hover {
-  color: #ffffff;
-  text-decoration: none;
-  opacity: 0.9;
-  filter: alpha(opacity=90);
-}
-.carousel-caption {
-  position: absolute;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  padding: 10px 15px 5px;
-  background: #333333;
-  background: rgba(0, 0, 0, 0.75);
-}
-.carousel-caption h4,
-.carousel-caption p {
-  color: #ffffff;
-}
-.hero-unit {
-  padding: 60px;
-  margin-bottom: 30px;
-  background-color: #f5f5f5;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.hero-unit h1 {
-  margin-bottom: 0;
-  font-size: 60px;
-  line-height: 1;
-  letter-spacing: -1px;
-}
-.hero-unit p {
-  font-size: 18px;
-  font-weight: 200;
-  line-height: 27px;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.hide {
-  display: none;
-}
-.show {
-  display: block;
-}
-.invisible {
-  visibility: hidden;
-}
-/* new clearfix */
-.clearfix:after {
-  visibility: hidden;
-  display: block;
-  font-size: 0;
-  content: " ";
-  clear: both;
-  height: 0;
-}
-* html .clearfix {
-  zoom: 1;
-}
-/* IE6 */
-*:first-child + html .clearfix {
-  zoom: 1;
-}
-/* IE7 */
-@font-face {
-  font-family: 'anivers';
-  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?5f61443eb372');
-  src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix') format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff?2c3db88030ec') format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf?6a7822aa21cf') format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-a {
-  color: #005D9D;
-}
-ul {
-  list-style: none;
-  margin: 0;
-}
-dt {
-  font-weight: bold;
-}
-#main_content {
-  padding-left: 247px;   
-  padding-right: 20px;
-  min-width: 840px;
-}
-.topbar {
-  background: #f2f2f2;
-  border-bottom: 1px solid #e5e5e5;
-  padding: 10px 25px;
-  margin-top: 0;
-  margin-left: -25px;
-  margin-bottom: 66px;
-  margin-right: -25px;
-  min-width: 700px;
-}
-
-.topbar .switcher_bar {
-  display: inline-block;
-  height: auto;
-  width: 160px;
-  background-position: 140px center;
-  margin-bottom: 0;
-  font-size: 11px;
-  margin-left: 20px;
-  padding: 0;
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
-  border: 1px solid #c0d9e4;
-  background-color: #e9f5fa;
-  background-repeat: no-repeat;
-}
-.topbar .switcher_bar a {
-  padding: 2px 10px 1px;
-  margin-left: 0;
-  display: block;
-}
-.topbar .switcher_bar ul {
-  width: 130px;
-}
-
-#user_info > span {
-	margin-right: 12px;
-}
-#user_info > a {
-  border: 1px solid #d9dfe3;
-  background: #fafafa;
-  padding: 12px 12px 8px 12px;
-  margin-left: -6px;
-}
-
-#user_info > a:hover {
-  border: 1px solid #c3ced7;
-  background: #f7f8f9;
-  color: 	#0074cd;
-}
-
-.page-header {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  font-family: anivers;
-}
-h2 {
-  color: #6a6a6a;
-  font-size: 30px;
-  font-weight: normal;
-}
-body {
-  background-color: #fff;
-  min-width: 890px;
-}
-
-
-/* Login Splash Page */
-#splash .login {
-  background: url(../img/OracleSolaris_login_banner.png) no-repeat;
-  position: absolute;
-  top: 80px;
-  left: 50%;
-  margin: 0 0 0 -195px;
-  padding-top: 79px;
-  width: 390px;
-  border: 1px solid #e1e1e1;
-  max-height: none;
-  /*-webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;*/
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding-box;
-  background-clip: padding-box;
-}
-/*
-#splash .login:before {
-	content: url(../img/OpenStack_Dashboard_txt.png);
-	position: relative;
-	top: -28px;
-	left: 148px;
-	font-size: 15px;
-	color: #454545;
-	background: #F5F5F5;
-}*/
-
-#splash .login .modal-header {
-	height: 10px;
-	padding-top: 0px;
-	padding-bottom: 15px;
-}
-
-/*#splash .login .modal-header:before {
-	content: "Sign In";
-	position: relative;
-	top: 24px;
-	width: 150px;
-	background: #FFFFFF;
-	font-size: 18px;
-	color: #FFFFFF;
-	font-weight: bold;
-}*/
-
-#splash .login .modal-header h3 {
-	color: #FFFFFF;
-}
-
-#splash .login form,
-#splash .login .modal-header {
-    background-color: #fff;
-}
-
-#splash .login input {
-  width: 340px;
-}
-#splash .login select {
-  width: 360px;
-}
-#splash .help-block {
-  display: none;
-}
-#create_container_form .modal-footer {
-  margin-top: 190px;
-}
-.nav li a {
-  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;
-}
-.sidebar {
-  float: left;
-}
-.sidebar h4 {
-  margin-left: 14px;
-  color: #999;
-}
-.sidebar .nav-tabs {
-  margin-top: -34px;
-}
-.sidebar .nav-tabs li.active a {
-  background-color: #edf9ff;
-}
-h1.brand {
-  width: 100%;
-  margin: 0;
-  background-color: #f5f5f5;
-  padding-bottom: 40px;
-}
-h1.brand a {
-  display: block;
-  float: left;
-}
-/* Tenant Dropdown */
-a.current_item {
-  width: 163px;
-  float: left;
-}
-a.current_item:hover {
-  text-decoration: none;
-}
-a.current_item:hover h3,
-a.current_item:hover h4 {
-  color: #39738c;
-}
-.sidebar .switcher_bar {
-  margin-left: 36px;
-  margin-bottom: 24px;
-}
-.sidebar .switcher_bar a.dropdown-toggle {
-  display: block;
-  padding: 5px 0;
-  background-image: url('../../dashboard/img/drop_arrow.png');
-  border: 1px solid #c0d9e4;
-  background-color: #e9f5fa;
-  background-repeat: no-repeat;
-  background-position: 167px 23px;
-}
-.sidebar .switcher_bar a.dropdown-toggle:hover {
-  text-decoration: none;
-  background-color: #cde8f4;
-}
-.sidebar .switcher_bar:focus {
-  outline: none;
-}
-.sidebar .switcher_bar h3 {
-  color: #454545;
-    line-height: 16px;
-  font-size: 16px;
-  margin: 0;
-  padding: 0;
-}
-.sidebar .switcher_bar h4 {
-  color: #454545;
-  font-size: 9px;
-  text-transform: uppercase;
-  font-weight: normal;
-  padding: 0;
-}
-.sidebar .switcher_bar ul {
-  border: 1px solid #c0d9e4;
-  margin-left: -1px;
-  width: 190px;
-}
-.sidebar .switcher_bar li a:hover {
-  background: #92d6f1;
-}
-#usage {
-  margin-bottom: 25px;
-  height: 125px;
-}
-.usage_block {
-  background: #e8f8ff;
-  color: #84b6c5;
-  border: 1px solid #afe3fb;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  float: left;
-  width: 29%;
-  margin-right: 5%;
-  min-height: 125px;
-}
-.usage_block.last {
-  margin-right: 0;
-}
-.usage_block h3 {
-  background: #cef0ff;
-  color: #4fa5bf;
-  font-weight: normal;
-  padding: 0 0 0 10px;
-  border-bottom: 1px solid #c6e7f5;
-  -webkit-border-top-left-radius: 5px;
-  -webkit-border-top-right-radius: 5px;
-  -moz-border-radius-topleft: 5px;
-  -moz-border-radius-topright: 5px;
-  border-top-left-radius: 5px;
-  border-top-right-radius: 5px;
-}
-.usage_block ul {
-  margin: 10px;
-}
-.usage_block .quantity {
-  font-size: 25px;
-}
-.usage_block li {
-  font-size: 11px;
-  margin: 0 0 15px 0;
-}
-.usage_block .unit {
-  font-size: 11px;
-  text-transform: uppercase;
-  padding: 0 0 0 1px;
-}
-.table-bordered {
-  border: none;
-}
-.table_header {
-  min-height: 35px;
-  padding: 5px 0;
-}
-.table_caption th {
-  background-color: transparent;
-  border: none;
-}
-.table-bordered tr.table_caption + tr th {
-  /*border-top: 1px solid #D5DFE6;
-  border-bottom: 1px solid #D5DFE6;*/
-  border: 1px solid #D5DFE6;
-  border-right: 1px solid transparent;
-}
-.table-bordered tr.table_caption + tr th:first-child,
-.table-bordered tr.table_caption + tr th.hide + th {
-  /*-moz-border-radius-topleft: 4px;
-  -webkit-border-top-left-radius: 4px;
-  border-top-left-radius: 4px;*/
-  border-left: 1px solid #D5DFE6;
-}
-.table-bordered tr.table_caption + tr th:last-child {
-  /*-moz-border-radius-topright: 4px;
-  -webkit-border-top-right-radius: 4px;
-  border-top-right-radius: 4px;*/
-  border-right: 1px solid #D5DFE6;
-}
-.table-bordered tbody tr td:first-child,
-.table-bordered tfoot tr td:first-child {
-  border-left: 1px solid #D5DFE6;
-}
-.table-bordered tbody tr td:last-child,
-.table-bordered tfoot tr td:last-child {
-  border-right: 1px solid #D5DFE6;
-}
-.table-bordered tfoot tr td:first-child {
-  border-bottom: 1px solid #D5DFE6;
-  /*-moz-border-radius-bottomleft: 4px;
-  -webkit-border-bottom-left-radius: 4px;
-  border-bottom-left-radius: 4px;*/
-}
-.table-bordered tfoot tr td:last-child {
-  border-bottom: 1px solid #D5DFE6;
-  /*-moz-border-radius-bottomright: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-  border-bottom-right-radius: 4px;*/
-}
-.table_title h3,
-.table_header h3 {
-  font-family: anivers;
-  font-weight: normal;
-  font-size: 24px;
-  margin-bottom: 5px;
-  float: left;
-}
-.table th.header {
-  cursor: pointer;
-}
-.table th.header:hover {
-  background-color: #e8e8e8;
-}
-.table tbody td.anchor a {
-  display: block;
-  padding: 8px;
-}
-.table tr.table_caption th.header:hover {
-  background-color: transparent;
-  cursor: default;
-}
-.table th.headerSortUp:hover,
-.table th.headerSortDown:hover {
-  background-color: #DAE9F5;
-}
-.table th.headerSortUp,
-.table th.headerSortDown {
-  background-color: #DAE9F5;
-  background-repeat: no-repeat;
-  background-position: 98% center;
-}
-.table th.headerSortDown {
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
-}
-.table th.headerSortUp {
-  background-image: url('../../dashboard/img/up_arrow.png?4293b62aa222');
-}
-.table tr.summation td:first-child,
-.table tr.summation td:last-child {
-  border-radius: 0;
-  border-bottom: 0 none;
-}
-th {
-  background: #F1F3F4;
-}
-td.anchor {
-  padding: 0;
-}
-small {
-  font-size: 11px;
-}
-.main_nav {
-  list-style: none;
-  width: 227px;
-  float: left;
-  margin: 10px 0 20px 0;
-}
-.main_nav a {
-  color: #999;
-  width: 185px;
-  padding: 10px;
-  display: block;
-  margin-left: 20px;
-}
-.main_nav a.active {
-  background: #fff;
-  border: 2px solid #d8d8d8;
-  border-right: 0;
-  border-bottom-color: #ccc;
-}
-table form {
-  margin-bottom: 0;
-  width: 1px;
-}
-.messages {
-  position: fixed;
-  z-index: 9999;
-  top: 20px;
-  right: 20px;
-  width: 300px;
-}
-.messages .alert-block {
-  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-}
-.messages .alert-block.alert-error {
-  border: 1px solid #9d261d;
-}
-.messages .alert-block.alert-success {
-  border: 1px solid #46a546;
-}
-.alert-block .alert-actions {
-  margin-top: -23px;
-  margin-right: -23px;
-}
-.modal > form,
-.login > form,
-.alert-actions > form {
-  margin-bottom: 0;
-}
-.alert-block p {
-  overflow: hidden;
-  word-wrap: break-word;
-}
-.alert-block p:last-child {
-  margin-bottom: 0;
-}
-#actions.single {
-  width: 90px;
-}
-.table-striped tr td {
-  transition: background 0.2s;
-  -webkit-transition: background 0.2s;
-  -moz-transition: background 0.2s;
-  -o-transition: background 0.2s;
-}
-.inspect {
-  float: left;
-  display: block;
-  margin-top: 5px;
-  margin-right: 25px;
-}
-.table {
-  margin-bottom: 25px;
-}
-.table tr td {
-  vertical-align: middle;
-}
-.table tr.empty td {
-  text-align: center;
-  font-size: 12px;
-}
-.table tfoot tr td {
-  border-top: 1px solid transparent;
-  background-color: #F1F1F1;
-  font-size: 11px;
-  color: #000000;
-  line-height: 14px;
-  font-weight: bold; 
-}
-.table_actions {
-  float: right;
-  min-width: 400px;
-}
-.table_actions .table_search {
-  /*display: inline-block;*/
-  padding-bottom: 8px;
-  margin-left: 142px; 
-  width: 267px;
-}
-
-.table_actions .btn-group {
-	padding-bottom: 8px;
-}
-
-.table_search input {
-  background: url('../../dashboard/img/search.png?781fb162b111') no-repeat 195px 5px;
-  display: inline-block;
-  margin-bottom: 0;
-}
-.table_actions a,
-.table_actions button {
-  float: right;
-  margin-left: 5px;
-}
-.table_actions button.filter {
-  margin-left: 0;
-}
-.table_header .table_actions {
-  min-width: 0px;
-}
-.table_header .table_actions a,
-.table_header .table_actions button {
-  display: inline-block;
-  /*float: right;*/
-}
-.table_actions form {
-  float: right;
-  margin-left: 10px;
-}
-.hidden {
-  display: none;
-}
-.table-striped tbody tr.status_unknown:nth-child(odd) td {
-  background-color: #ffffb5;
-}
-.table-striped tbody tr.status_unknown:nth-child(even) td {
-  background-color: #ffffc6;
-}
-.nowrap-col {
-  white-space: nowrap;
-}
-.overview {
-  font-size: 24px;
-}
-#monitoring {
-  background: #f8f8f8;
-  font-size: 14px;
-  height: 20px;
-  margin: -18px 0 25px;
-  padding: 10px;
-  border: 1px solid #e1e1e1;
-  font-family: "anivers";
-}
-#monitoring h3 {
-  font-size: 14px;
-  font-weight: normal;
-  float: left;
-  line-height: 18px;
-}
-#external_links,
-#external_links li {
-  float: left;
-}
-#external_links li {
-  margin: 0 0 0 15px;
-}
-/* Forms */
-form label {
-  text-align: left;
-  color: #555;
-  font-weight: bold;
-}
-.modal {
-  width: 700px;
-  max-height: none;
-  /* Prevents large modals from scrolling unnecessarily */
-
-  top: 80px;
-  margin-top: 0;
-  position: absolute;
-}
-.modal.loading {
-  width: 150px;
-  height: 150px;
-  margin: 0 auto;
-  overflow: hidden;
-}
-.modal.loading p {
-  text-align: center;
-  position: absolute;
-  bottom: 0;
-  width: 150px;
-}
-form.horizontal .form-field {
-  float: left;
-}
-form.horizontal.split_half .form-field {
-  width: 334px;
-  /* Fits 2 fields to a row */
-
-}
-form.horizontal.split_quarter .form-field {
-  width: 167px;
-  /* Fits 4 fields to a row */
-
-}
-form.horizontal.split_five .form-field {
-  width: 133px;
-  /* Fits 5 fields to a row */
-
-}
-form.horizontal fieldset {
-  width: 100%;
-}
-.modal-body {
-  overflow-y: visible;
-  max-height: none;
-}
-.modal-body table {
-  margin-bottom: 30px;
-}
-.modal-body ~ hr {
-  margin-bottom: 0;
-}
-
-.modal-body .nav-tabs > li > a {
-	font-size: 14px;
-	width: auto;
-	padding-left: 12px;
-	padding-right: 12px;
-}
-
-.static_page {
-  float: left;
-  width: 700px;
-  background-color: #FFF;
-  border: 1px solid #DDD;
-}
-.static_page > form {
-  margin-bottom: 0;
-}
-.left {
-  float: left;
-  width: 315px;
-  margin-right: 15px;
-}
-.left form {
-  margin: 0;
-}
-.right {
-  float: left;
-  width: 330px;
-}
+  left: 40%; }
+
+  .rickshaw_legend {
+    background: white;
+    color: #404040; }
+    .rickshaw_legend .action {
+      text-decoration: none;
+      color: black; }
 
 .workflow ul.nav-tabs {
-  padding: 0 1px;
-  border-bottom: 1px solid #C4CED8;
-}
-
-.workflow ul.nav-tabs > li > a {
-	color: #005D9D;
-	border: 1px solid transparent;
-	margin-right: 1px;
-}
-
-.workflow ul.nav-tabs > li > a:hover {
-	background: #FFFFFF;
-	border-bottom: 1px solid #C4CED8;
-
-}
-
-.workflow ul.nav-tabs > li.active > a, 
-.workflow ul.nav-tabs > li.active > a:hover
-{
-	background: url(../img/content_tab_bkgd_selected.png) repeat-x;
-	font-weight: bold;
-	border: 1px solid #C4CED8;
-	border-top: 1px solid #1274D1;
-	border-bottom: 1px solid #FFFFFF;
-}
-
-.workflow td.actions {
-  vertical-align: top;
-  width: 308px;
-  padding-right: 10px;
-}
-.workflow td.help_text {
-  vertical-align: top;
-  width: 340px;
-  padding-left: 10px;
-  border-left: 1px solid #DDD;
-}
+  padding: 0 13px; }
+  .workflow td.actions {
+    vertical-align: top;
+    width: 308px;
+    padding-right: 10px; }
+    .workflow td.help_text {
+      vertical-align: top;
+      width: 340px;
+      padding-left: 10px;
+      border-left: 1px solid #dddddd; }
 .workflow fieldset > table {
-  margin-bottom: 0;
-}
-.clear {
-  clear: both;
-  width: 0;
-  height: 0;
-  padding: 0;
-  margin: 0;
-}
-.modal-body fieldset {
-  margin: 0;
-  padding: 0;
-}
-.modal-body fieldset ul {
-  width: 90%;
-}
-.modal-body fieldset .form-field input,
-.modal-body fieldset .form-field textarea {
-  width: 298px;
-}
-.modal-body fieldset .form-field select {
-  width: 308px;
-}
-.modal-body fieldset .form-field textarea {
-  height: 36px;
-}
-.modal-footer input {
-  width: auto;
-}
-.modal-body .modal-footer {
-  width: 670px;
-  margin-left: -25px;
-  margin-right: -15px;
-}
-.modal-footer a.close {
-  margin-top: 0;
-  margin-right: 5px;
-  font-size: 12px;
-  color: #000000;
-  font-weight: bold;
-  filter: alpha(opacity=100);
-  -khtml-opacity: 1;
-  -moz-opacity: 1;
-  opacity: 1;
-  background: -moz-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -ms-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -webkit-gradient(linear, 0 0, 0 100%, from(#f1f3f4), to(#e3e8ea));
-  background: -webkit-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: -o-linear-gradient(top, #f1f3f4, #e3e8ea);
-  background: linear-gradient(top, #f1f3f4, #e3e8ea);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
-  /*border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);*/
-  border: 1px solid #C3CED7;  
-}
-.modal-footer a.close:hover {
-  text-decoration: none;
-  background: -moz-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -ms-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -webkit-gradient(linear, 0 0, 0 100%, from(#f8f9fa), to(#f1f4f5));
-  background: -webkit-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: -o-linear-gradient(top, #f8f9fa, #f1f4f5);
-  background: linear-gradient(top, #f8f9fa, #f1f4f5);  
-}
-.modal-body .help-block {
-  text-align: left;
-  float: left;
-  width: 100%;
-  margin-bottom: 10px;
-}
-#create_keypair_modal .clearfix {
-  margin-bottom: 115px;
-}
-#actions {
-  width: 90px;
-}
-#actions .btn {
-  margin-bottom: 5px;
-}
-#actions a.btn {
-  width: 70px;
-}
-#actions input.btn {
-  text-align: left;
-}
-#images #actions {
-  width: 100px;
-}
-/*New List Patches*/
-.details-modal .modal-body {
-  padding-bottom: 20px;
-}
-.form-inline {
-  display: inline;
-}
-.form-inline input,
-.form-inline button,
-.form-inline a.btn {
-  margin-left: 5px;
-}
-td.select {
-  width: 10px;
-}
-/* Actions dropdown */
-th.actions_column {
-  width: 150px;	
-}
-td.actions_column {
-  width: 150px;
-  padding: 10px;
-  position: relative;
-  min-width: 140px;
-  min-height: 20px;
-}
-td.actions_column .row_actions a,
-td.actions_column .row_actions input,
-td.actions_column .row_actions button {
-  background: none;
-  float: none;
-  display: block;
-  padding: 5px 10px;
-  color: black;
-  text-align: left;
-  border-radius: 0;
-  border: 0 none;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-td.actions_column .row_actions .hide {
-  display: none;
-}
-/* Makes size consistent across browsers when mixing "btn-group" and "small" */
-.btn.hide,
-.btn-group .hide {
-  display: none;
-}
-.btn-group .dropdown-toggle:focus {
-  outline: none;
-}
-.dropdown-menu button {
-  line-height: 18px;
-  /* Matches rule for ".dropdown-menu a" in bootstrap */
-
-  width: 100%;
-}
-.btn-group .dropdown-menu .btn {
-  border-radius: 0;
-}
-.dropdown-menu .btn.btn-danger,
-.dropdown-menu .btn.btn-danger:hover,
-.dropdown-menu .btn.btn-success,
-.dropdown-menu .btn.btn-success:hover,
-.dropdown-menu .btn.btn-info,
-.dropdown-menu .btn.btn-info:hover {
-  text-shadow: none;
-  /* remove default bootstrap shadowing from button text. */
-
-}
-.dropdown-menu li:hover {
-  background: none;
-}
-.dropdown-menu li.divider:hover {
-  background-color: #E5E5E5;
-}
-td.actions_column .dropdown-menu a:hover,
-td.actions_column .dropdown-menu button:hover {
-  background-color: #EBECED;
-}
-.dropdown-menu .btn.btn-danger {
-  /*color: #C43C35;*/
- font-weight: 400;
-}
-.dropdown-menu .btn.btn-danger:hover {
-  /*background-color: #f6e0df;*/
-  background-color: #EBECED;
-}
-/* Overrides for single-action rows (no dropdown) */
-tr td.actions_column ul.row_actions.single,
-tr:hover td.actions_column ul.row_actions.single,
-td.actions_column ul.row_actions.single,
-td.actions_column ul.row_actions.single:hover {
-  border: none;
-}
-td.actions_column ul.row_actions.single li.action {
-  display: block;
-}
-td.actions_column ul.row_actions.single li.action:hover {
-  background-color: transparent;
-}
-td.actions_column ul.row_actions.single a,
-td.actions_column ul.row_actions.single input,
-td.actions_column ul.row_actions.single button {
-  color: #43a1d6;
-}
-td.actions_column ul.row_actions.single a:hover,
-td.actions_column ul.row_actions.single input:hover,
-td.actions_column ul.row_actions.single button:hover {
-  color: black;
-}
-th.multi_select_column,
-td.multi_select_column {
-  width: 25px;
-}
-th.multi_select_column,
-td.multi_select_column {
-  text-align: center;
-}
-.table-fixed {
-  table-layout: fixed;
-}
-.table input[type="checkbox"] {
-  display: inline;
-}
-div.input input[type="checkbox"] {
-  float: left;
-  width: 25px;
-}
-.table_title a {
-  font-size: 11px;
-  float: right;
-  margin-left: 10px;
-  margin-top: 10px;
-}
-tr.terminated {
-  color: #999999;
-}
-#instance_tabs {
-  float: left;
-  width: 100%;
-  border-bottom: 1px solid #e1e1e1;
-}
-#instance_tabs li a {
-  background: #f2f2f2;
-  display: block;
-  font-size: 14px;
-  float: left;
-  padding: 5px 10px;
-  margin-right: 10px;
-  border: 1px solid #e1e1e1;
-  border-bottom: none;
-}
-#instance_tabs li.active a {
-  background: #fff;
-  padding-bottom: 8px;
-  margin-bottom: -5px;
-}
-
-#main_content .nav-tabs {
-  margin: 0px 0px 0px 1px;
-  padding: 0px;
-
-}
-
-#main_content .nav-tabs li a {
-  width: 130px;
-  font-size: 13px;
-  color: #005D9D;
-  border: 1px solid transparent;
-  margin-right: 1px;
-}
-
-#main_content .nav-tabs li.active a {
-  width: 130px;
-  font-size: 13px;
-  color: #005D9D;
-  border: 1px solid #C4CED8;
-  border-bottom: 1px solid #FFFFFF;	
-  border-top: 1px solid #FFFFFF;
-  font-weight: bold;
-  background:  url(../img/content_tab_bkgd_selected.png) repeat-x;
-}
-
-#main_content .tab-content {
-  border: 1px solid #D5DFE6;
-  padding: 0px 10px 10px 10px;
-  margin: 0px;
-}
-
-#main_content .workflow .modal-body {
-  padding-left: 0;
-  padding-right: 0;
-}
-#main_content .workflow .modal-body .tab-content {
-  border-left: 0 none;
-  border-right: 0 none;
-  border-bottom: 0 none;
-}
-.tab_wrapper {
-  padding-top: 50px;
-}
-/* Fix tooltip z-index to show above modals. Bootstrap bug 582*/
-.tooltip {
-  z-index: 12000;
-}
-.volume_boot_disclosure {
-  font-weight: bold;
-  color: #555;
-  cursor: pointer;
-  background-image: url('../../dashboard/img/right_droparrow.png?b14134630332');
-  background-repeat: no-repeat;
-  background-position: 130px center;
-}
-.volume_boot_disclosure.on {
-  width: 334px;
-  margin-bottom: 10px;
-  border-bottom: solid 1px #E1E1E1;
-  background-image: url('../../dashboard/img/drop_arrow.png?2ec1100baed3');
-}
-form div.clearfix.error {
-  width: 308px;
-}
-.nav-tabs a {
-  cursor: pointer;
-}
-.nav-tabs li.error a {
-  color: #B94A48;
-}
-.nav-tabs li.error a:after {
-  content: "*";
-}
-/* Region selector in header */
-#region_selector {
-  position: absolute;
-  z-index: 9999;
-  right: 0;
-  top: 24px;
-}
-#region_selector a {
-  margin-left: 0;
-}
-#region_selector ul {
-  float: left;
-  margin-left: 5px;
-  padding-right: 21px;
-  width: 125px;
-}
-#region_selector ul:hover a {
-  display: block;
-}
-#region_selector li a {
-  padding: 3px 3px 3px 5px;
-  display: none;
-  background: #E1E1E1;
-  margin-top: -10px;
-}
-#region_selector li:first-child p {
-  background: #ededed url('../../dashboard/img/drop_arrow.png?2ec1100baed3') no-repeat 106px 9px !important;
-  display: block;
-  border: 1px solid #e1e1e1;
-  padding: 5px;
-}
-iframe {
-  border: none;
-}
-.item_detail ul li label {
-  color: #000;
-  font-weight: bold;
-  display: block;
-  margin-top: 5px;
-}
-.progress_bar {
-  height: 100%;
-  width: 100%;
-  border: 1px solid #CCC;
-  background-color: #CCC;
-}
-.progress_bar_fill,
-.progress_bar_selected {
-  height: 100%;
-  float: left;
-}
-.progress_bar_fill {
-  background-color: #666;
-}
-.progress_bar_selected {
-  background-color: #4790AE;
-  width: 0;
-}
-.progress_bar_over {
-  background-color: red;
-}
-.quota_title {
-  color: #999;
-  padding-bottom: 0;
-  margin-bottom: 8px;
-}
-.quota_title strong {
-  color: #000;
-}
-.quota_title strong span {
+  margin-bottom: 0; }
+  .workflow.wizard .row .btn {
+    float: none;
+    margin: 0; }
+    .workflow.wizard .row .next {
+      text-align: right; }
+  .workflow.wizard .nav-tabs.wizard-tabs {
+    border-bottom: 0;
+    background: #efefef;
+    padding: 0; }
+    .workflow.wizard .nav-tabs.wizard-tabs li {
+      margin-bottom: 0;
+      position: relative; }
+      .workflow.wizard .nav-tabs.wizard-tabs li:before {
+        position: absolute;
+        top: 0;
+        right: -20px;
+        z-index: 2;
+        display: block;
+        border: 20px solid transparent;
+        border-right: 0;
+        border-left: 20px solid #dddddd;
+        content: ''; }
+        .workflow.wizard .nav-tabs.wizard-tabs li:after {
+          position: absolute;
+          top: -2px;
+          right: -22px;
+          z-index: 1;
+          display: block;
+          border: 22px solid transparent;
+          border-right: 0;
+          border-left: 22px solid #ffffff;
+          content: ''; }
+          .workflow.wizard .nav-tabs.wizard-tabs li.active:before,
+          .workflow.wizard .nav-tabs.wizard-tabs li.done:before {
+            border-left: 20px solid #007acc; }
+            .workflow.wizard .nav-tabs.wizard-tabs li a {
+              border: 0;
+              border-radius: 0;
+              background: #dddddd;
+              color: #43a4d7;
+              padding: 0 15px;
+              padding-left: 35px;
+              line-height: 40px;
+              position: relative;
+              margin: 0; }
+              .workflow.wizard .nav-tabs.wizard-tabs li:first-child a {
+                padding-left: 15px; }
+                .workflow.wizard .nav-tabs.wizard-tabs li.active a {
+                  background: #007acc;
+                  color: #ffffff; }
+                  .workflow.wizard .nav-tabs.wizard-tabs li.done a {
+                    background: #007acc; }
+  .workflow.wizard label.error {
+    color: #d9534f; }
+
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.eot?v=4.1.0&90186830c9c5');
+  src: url('/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.eot?&90186830c9c5#iefix&v=4.1.0') format('embedded-opentype'),
+    url('/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0&fdf491ce5ff5') format('woff'),
+    url('/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.ttf?v=4.1.0&4f0022f25672') format('truetype'),
+    url('/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.svg?v=4.1.0&776d58f453c8#fontawesomeregular') format('svg');
   font-weight: normal;
-}
-.quota_title p {
-  float: right;
-  margin-bottom: 0;
-}
-.quota_bar {
-  height: 15px;
-  margin: -8px 0 8px;
-}
-div .flavor_table {
-  border: 1px solid #AAA;
-  width: 100%;
-  margin-bottom: 14px;
-}
-.flavor_table .flavor_name {
-  white-space: nowrap;
-  font-weight: bold;
-  text-align: left;
-  padding: 7px 12px 7px 7px;
-  width: 160px;
-}
-#main_content .row-fluid {
-  margin: 10px 0 20px;
-}
-#main_content .row-fluid:last-child {
-  margin-bottom: 0;
-}
-.header_rule {
-  margin: 0 0 10px;
-}
-.item_detail .detail_section {
-  margin-bottom: 25px;
-  float: left;
-  margin-right: 50px;
-}
-.error .help-inline {
-  background: #efdfdf;
-  border: 1px solid #ead5d8;
-  padding: 10px;
-  display: block;
-}
-label.log-length {
-  line-height: 28px;
-  margin-right: 10px;
-}
-.progress-success.bar {
-  background-color: #5eb95e;
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-}
-.progress_bar_fill.progress-warning.bar {
-  background-color: #898989;
-  background-image: -moz-linear-gradient(top, #999999, #333333);
-  background-image: -ms-linear-gradient(top, #999999, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#999999), to(#333333));
-  background-image: -webkit-linear-gradient(top, #999999, #333333);
-  background-image: -o-linear-gradient(top, #999999, #333333);
-  background-image: linear-gradient(top, #999999, #333333);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0);
-}
-.progress_bar_over.bar {
-  background-color: #dd514c;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-}
-.split_five div.control-group input[type="text"],
-.split_five div.control-group select {
-  width: 120px;
-}
-.warning {
-  background-color: #f2dede;
-  border-bottom: 1px solid #9d261d;
-  padding: 5px 10px;
-}
-.warning .warning-text {
-  text-align: center;
-}
-.warning .warning-text h3,
-.warning .warning-text a {
+  font-style: normal; 
+}
+  
+.fa {
   display: inline-block;
-}
-.warning .warning-text h3 {
-  vertical-align: bottom;
-}
-#admin_warning_detail ul {
-  list-style: circle;
-  padding-left: 20px;
-  margin-bottom: 10px;
-}
-.no_split {
-  margin-top: -60px;
-}
-/* Project Membership UI */
-.project_membership {
-  min-height: 200px;
-  /* Buttons */
-
-  /* Header */
-
-  /* 'Fake table' body */
-
-  /* User lists */
-
-  /* List filtering */
-
-  /* Role dropdown menus */
-
-}
-.project_membership .btn-group {
-  margin-left: 0px;
-  padding: 2px 10px 0 0;
-  margin-bottom: 0px;
-  border: 1px solid #DDD;
-  border-bottom: none;
-}
-.project_membership .btn-group .active {
-  float: right;
-}
-.project_membership a.btn-primary:hover {
-  background-color: #04C;
-}
-.project_membership .help_text {
-  margin-left: 15px;
-  margin-bottom: 15px;
-}
-.project_membership .users_title {
-  color: #555;
-  font-weight: bold;
-  padding-left: 10px;
-  float: left;
-}
-.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: #F2F4F7;
-  width: 306px;
-  height: 38px;
-  padding-top: 10px;
-  border: 1px solid #D5DFE6;
-  border-bottom: none;
-}
-.membership .fake_table,
-.project_membership .fake_table {
-  width: 315px;
-}
-.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: 313px;
-}
-.membership .right .fake_table_header,
-.project_membership .right .fake_table_header {
-  width: 328px;
-}
-.membership .right .fake_table ul.no_results,
-.project_membership .right .fake_table ul.no_results {
-  /*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;
-  text-align: left;
-}
-.project_membership .project_members {
-  margin-left: -20px;
-}
-.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 #d5dfe6;
-}
-.project_membership .filter {
-  width: 120px;
-  margin: -5px 13px 15px 0px;
-  float: right;
-}
-.project_membership .no_results {
-  border: 1px solid #DDD;
-  padding: 10px;
-  color: #08C;
-}
-.membership .role_dropdown li, 
-.project_membership .role_dropdown li {
-  cursor: pointer;
-  background: none;
-  float: none;
-  display: block;
-  padding: 5px 10px;
-  color: black;
-  text-align: left;
-  border-radius: 0;
-  border: 0 none;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  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;
-}
-#add_user {
-  clear: both;
-}
-.add_user {
-  float: right;
-  margin-top: 10px;
-  margin-right: 15px;
-}
-/* Fixes overflow on dropdowns in modal */
-.dropdown_fix {
-  overflow: visible;
-}
-/* Replaces CPU hungry spin.js with animated gif */
-.loading_gif {
-  width: 35px;
-  height: 13px;
-  padding-top: 2px;
-  padding-right: 5px;
-  float: left;
-}
-/* ResourceBrowser style */
-#browser_wrapper {
-  width: 100%;
-  min-width: 1000px;
-  background-color: #eeeeee;
-  border: 1px solid #dddddd;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-#browser_wrapper .tfoot {
-  clear: both;
-  padding: 8px;
-  border-top: 1px solid #dddddd;
-  background-color: #F1F1F1;
-  font-size: 11px;
-  line-height: 14px;
-}
-#browser_wrapper .tfoot span {
-  display: inline-block;
-}
-#browser_wrapper .tfoot span.navigation_table_count {
-  width: 30%;
-}
-#browser_wrapper form,
-#browser_wrapper table {
-  margin-bottom: 0;
-}
-#browser_wrapper .navigation_wrapper,
-#browser_wrapper .content_wrapper {
-  position: relative;
-  float: left;
-}
-#browser_wrapper div.navigation_wrapper {
-  z-index: 10;
-  width: 30%;
-}
-#browser_wrapper div.navigation_wrapper div.table_wrapper,
-#browser_wrapper div.navigation_wrapper thead th.table_header {
-  border-right: 0 none;
-  border-top-right-radius: 0;
-}
-#browser_wrapper div.navigation_wrapper td:first-child {
-  border-left: 0 none;
-}
-#browser_wrapper div.navigation_wrapper td.breadcrumb_td {
-  padding-right: 0px;
-  max-width: 200px;
-}
-#browser_wrapper div.navigation_wrapper tr.current_selected td {
-  background-color: #E9F5FA;
-}
-#browser_wrapper div.navigation_wrapper tfoot td {
-  border-right: 0 none;
-  border-bottom-right-radius: 0;
-}
-#browser_wrapper div.navigation_wrapper ul.breadcrumb {
-  padding-right: 0px;
-  border-top-right-radius: 0px;
-  border-bottom-right-radius: 0px;
-  border-right: none;
-  white-space: nowrap;
-}
-#browser_wrapper div.navigation_wrapper tbody td {
-  border-right: 1px solid #dddddd;
-  background-color: #ffffff;
-}
-#browser_wrapper div.content_wrapper {
-  width: 70%;
-  /* FIXME(Ke Wu): for now there are two breadcrumb tr in both table
-    * and this one in the content table is hidden. This hack is made to
-    * fix the alignment of two table, needs a better solution in the
-    * future.
-    */
-
-}
-#browser_wrapper div.content_wrapper div.table_wrapper,
-#browser_wrapper div.content_wrapper thead th.table_header {
-  border-left: 0 none;
-  border-top-left-radius: 0;
-}
-#browser_wrapper div.content_wrapper td {
-  border-bottom: 1px solid #dddddd;
-}
-#browser_wrapper div.content_wrapper td:last-child {
-  border-right: 0 none;
-}
-#browser_wrapper div.content_wrapper td.breadcrumb_td {
-  padding-left: 0px;
-}
-#browser_wrapper div.content_wrapper tfoot td {
-  border-left: 0 none;
-  border-bottom-left-radius: 0;
-}
-#browser_wrapper div.content_wrapper ul.breadcrumb {
-  padding-left: 0px;
-  border-top-left-radius: 0px;
-  border-bottom-left-radius: 0px;
-  border-left: none;
-}
-#browser_wrapper div.content_wrapper ul.breadcrumb li {
-  visibility: hidden;
-}
-#browser_wrapper table {
-  border-collapse: collapse;
-}
-#browser_wrapper table thead tr th {
-  border-bottom: none;
-  background-color: #eeeeee;
-}
-#browser_wrapper table tbody tr:last-child td {
-  border-bottom: 1px solid #ddd;
-  border-radius: 0;
-}
-#browser_wrapper table tbody tr.empty td {
-  height: 28px;
-  padding: 10px;
-}
-#browser_wrapper table tbody td.actions_column {
-  position: static;
-}
-#browser_wrapper .breadcrumb {
-  padding: 6px;
-  margin: 0 0 1px 0;
-}
-/* Styling for inline object creation buttons */
-.btn-inline {
-  margin-bottom: 9px;
-}
-.modal-body fieldset .form-field select[data-add-item-url] {
-  width: 275px;
-  margin-right: 2px;
-}
-
-/* Styling for draged network object */
-#networkListSortContainer {
-  display: none;
-}
-.networklist {
-  padding: 6px;
-  background: #eee;
-  border: 1px solid #ccc;
-  min-height: 2em;
-  width: auto !important;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.networklist li {
-  width: 226px;
-  list-style-type: none;
-  margin: 6px auto;
-  padding: 3px;
-  background: #fff;
-  border: 1px solid #aaa;
-  line-height: 18px;
-  border-radius: 3px;
-  cursor: move;
-  padding-left: 23px;
-  background: #ffffff url(/static/dashboard/img/drag.png) no-repeat 11px 50%;
-}
-.networklist li em {
-  font-size: 0.5em;
-  line-height: 1em;
-  color: #999;
+  font-family: FontAwesome;
   font-style: normal;
-  margin-left: 0.8em;
-}
-.networklist li i {
-  margin-right: 5px;
-  vertical-align: middle;
-}
-.networklist li a.btn {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 11px;
-  line-height: 12px;
-  padding: 2px 5px 3px;
-  margin-right: 1px;
-  width: 18px;
-  text-align: center;
-  right: 5px;
-  vertical-align: middle;
-  float: right;
-}
-.networklist li a.btn:before {
-  content: "+";
-}
-.networklist li.ui-sortable-helper {
-  background-color: #def;
-}
-.networklist li.ui-state-highlight {
-  border: 1px dotted #ccc;
-  background: #efefef;
-  height: 0.5em;
-}
-.networklist li:after {
-  visibility: hidden;
-  display: block;
-  font-size: 0;
-  content: " ";
-  clear: both;
-  height: 0;
-}
-#selected_network {
-  margin-bottom: 1.5em;
-  counter-reset: v1 0;
-  background: #edf9ff;
-  border: 1px solid #c0d9e4;
-}
-#selected_network li {
-  position: relative;
-}
-#selected_network li a.btn:before {
-  content: "-";
-}
-#selected_network li:before {
-  content: "nic:" counter(v1);
-  counter-increment: v1;
-  display: inline-block;
-  margin-right: 5px;
-  background: #666;
-  color: #fff;
-  font-size: 90%;
-  padding: 0px 4px;
-  vertical-align: middle;
-  border-radius: 2px;
-  position: absolute;
-  left: -2em;
-}
-#selected_network.dragging li:before {
-  content: "nic:";
-  background-color: rgba(102, 102, 102, 0.5);
-  padding-right: 10px;
-}
-#selected_network.dragging li.ui-state-highlight:before {
-  content: "";
-  background: transparent;
-}
-/* Styling for network topology */
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-moz-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-ms-keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@-o-keyframes progress-bar-stripes {
-  from {
-    background-position: 0 0;
-  }
-  to {
-    background-position: 20px 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 20px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-#topologyCanvas {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  width: 100%;
-  height: 500px;
-  padding: 25px;
-  padding-left: 50px;
-  background: #efefef;
-}
-#topologyCanvas div.nodata {
-  font-size: 150%;
-  font-weight: bold;
-  text-align: center;
-  padding-top: 200px;
-  display: none;
-}
-div.networks {
-  height: 100%;
-}
-div.network {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  float: left;
-  width: 270px;
-  height: 100%;
-  position: relative;
-}
-div.network .nicname {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  height: 100%;
-  width: 17px;
-  border-radius: 17px;
-  z-index: 200;
-  color: #fff;
-  position: absolute;
-  left: -8px;
-  top: 0px;
-  cursor: pointer;
-}
-div.network .nicname:hover {
-  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -ms-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-image: linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15));
-  background-size: 10px 10px;
-}
-div.network .nicname.nourl {
-  cursor: auto;
-}
-div.network .nicname.nourl:hover {
-  background-image: none;
-}
-div.network .nicname h3 {
-  font-size: 12px;
+  font-weight: normal;
   line-height: 1;
-  position: relative;
-  font-weight: normal;
-  top: 55%;
-  color: #fff;
-  left: -1px;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  white-space: nowrap;
-  text-shadow: 0px 0px 5px #000;
-}
-div.network .nicname span.ip {
-  position: absolute;
-  bottom: -10px;
-  left: 20px;
-  color: #000;
-  display: block;
-  font-weight: normal;
-  font-size: 90%;
-  letter-spacing: 0.2em;
-  -webkit-transform: rotate(-90deg);
-  -moz-transform: rotate(-90deg);
-  -ms-transform: rotate(-90deg);
-  -o-transform: rotate(-90deg);
-  transform: rotate(-90deg);
-  -webkit-transform-origin: 0% 0%;
-  -moz-transform-origin: 0% 0%;
-  -ms-transform-origin: 0% 0%;
-  -o-transform-origin: 0% 0%;
-  transform-origin: 0% 0%;
-  white-space: nowrap;
-  text-shadow: 0px 0px 2px #fff,0px 0px 2px #fff;
-}
-div.network .router,
-div.network .server,
-div.network .device {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  cursor: pointer;
-  width: 90px;
-  border: 3px solid #444;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale; }
+.fa-lg {
+  font-size: 1.33333em;
+  line-height: 0.75em;
+  vertical-align: -15%; }
+
+  .fa-2x {
+    font-size: 2em; }
+
+    .fa-3x {
+      font-size: 3em; }
+
+      .fa-4x {
+        font-size: 4em; }
+
+        .fa-5x {
+          font-size: 5em; }
+.fa-fw {
+  width: 1.28571em;
+  text-align: center; }
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14286em;
+  list-style-type: none; }
+  .fa-ul > li {
+    position: relative; }
+
+.fa-li {
   position: absolute;
-  top: 30px;
-  left: 90px;
-  color: #fff;
-  padding: 0 3px;
-  background: #666;
-  margin-bottom: 20px;
-  border-radius: 8px;
-}
-div.network .router:before,
-div.network .server:before,
-div.network .device:before {
-  content: "";
-  width: 20px;
-  height: 20px;
-  border: 2px solid #444;
-  line-height: 1.2;
-  position: absolute;
-  border-radius: 20px;
-  top: -10px;
-  left: -10px;
-  background: #ffffff url(/static/dashboard/img/router.png) no-repeat center center;
-  background-size: 16px 16px;
-}
-div.network .router:after,
-div.network .server:after,
-div.network .device:after {
-  content: "";
-  width: 100%;
-  line-height: 1.2;
-  position: absolute;
-  text-align: center;
-  border-radius: 0;
-  background: #444;
-  color: #fff;
-  font-size: 11px;
-  height: 1.5em;
-  bottom: 0px;
-  left: 0px;
-}
-div.network .router span.devicename,
-div.network .server span.devicename,
-div.network .device span.devicename {
-  position: absolute;
-  color: #fff;
-  bottom: 0px;
-  font-size: 12px;
-  line-height: 14px;
-  width: 100%;
-  text-align: center;
-  z-index: 300;
-  left: -2px;
-}
-div.network .router span.name,
-div.network .server span.name,
-div.network .device span.name {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  display: block;
-  font-size: 12px;
-  position: relative;
-  z-index: 10;
-  text-align: center;
-  top: 4px;
-  padding: 0 3px;
-}
-div.network .router div.port,
-div.network .server div.port,
-div.network .device div.port {
-  text-align: right;
-  min-width: 90px;
-  height: 10px;
-  font: 0px/0px sans-serif;
-  position: absolute;
-  left: -91px;
-  top: 8px;
-  background-color: #37a9e3;
-  background-image: none;
-  -webkit-background-size: 20px 20px;
-  -moz-background-size: 20px 20px;
-  -o-background-size: 20px 20px;
-  background-size: 20px 20px;
-  z-index: 100;
-}
-div.network .router div.port span.ip,
-div.network .server div.port span.ip,
-div.network .device div.port span.ip {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  -o-box-sizing: border-box;
-  box-sizing: border-box;
-  color: #333;
-  font-size: 9px;
-  line-height: 1;
-  text-shadow: 0px -1px #ffffff;
-  position: relative;
-  top: -1em;
-  width: 90px;
-  display: inline-block;
-  padding-right: 8px;
-  padding-left: 8px;
-  word-wrap: break-word;
-  word-break: break-all;
-}
-div.network .router div.port.right,
-div.network .server div.port.right,
-div.network .device div.port.right {
-  left: auto;
-  right: -92px;
-  width: 92px;
-  text-align: left;
-}
-div.network .router:hover,
-div.network .server:hover,
-div.network .device:hover {
-  border-color: #222;
-}
-div.network .router:hover div.port,
-div.network .server:hover div.port,
-div.network .device:hover div.port {
-  cursor: pointer;
-  background-color: #2688c0;
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  -moz-animation: progress-bar-stripes 1s linear infinite;
-  -ms-animation: progress-bar-stripes 1s linear infinite;
-  -o-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
-}
-div.network .router:hover div.port:hover,
-div.network .server:hover div.port:hover,
-div.network .device:hover div.port:hover {
-  -webkit-animation: progress-bar-stripes 0.3s linear infinite;
-  -moz-animation: progress-bar-stripes 0.3s linear infinite;
-  -ms-animation: progress-bar-stripes 0.3s linear infinite;
-  -o-animation: progress-bar-stripes 0.3s linear infinite;
-  animation: progress-bar-stripes 0.3s linear infinite;
-}
-div.network .router:hover div.port.nourl,
-div.network .server:hover div.port.nourl,
-div.network .device:hover div.port.nourl {
-  cursor: auto;
-  background-image: none;
-}
-div.network .router:hover div.port.nourl:hover,
-div.network .server:hover div.port.nourl:hover,
-div.network .device:hover div.port.nourl:hover {
-  background-image: none;
-}
-div.network .router:hover:after,
-div.network .server:hover:after,
-div.network .device:hover:after {
-  background-color: #222;
-  border-color: #222;
-}
-div.network .device {
-  border: none;
-  background: transparent;
-}
-div.network .server {
-  background: #fff;
-  color: #333;
-}
-div.network .server:before {
-  background: #ffffff url(/static/dashboard/img/server.png) no-repeat center center;
-  background-size: 14px 14px;
-}
-.launchButtons {
-  float: right;
-  text-align: right;
-  margin: 10px 0px 15px 10px;
-  clear: right;	
-}
-.launchButtons a.btn {
-  margin-left: 10px;
-}
-
-html { height: 100%; }
-
-body { 
-  background: #fff;
-  color: #333;
-  font-family: Arial, Helvetica, sans-serif
-  font-size: 16px;
-  height: 100%;
-}
-
-.warning {
-  background-color: #eca918;
-  border-bottom: 1px solid #8d6817;
-  -moz-box-shadow: 0 5px 10px 1px #000;
-  -webkit-box-shadow: 0 5px 10px 1px #000;
-  box-shadow: 0 5px 10px 1px #d12a03;
-  display: block;
-  z-index: 999;
-  position: relative;
-}
-
-.warning h3 {
-  background-color: #eca918;
-  color: #624a16;
-}
-
-#container { 
-  height: 100%; 
-  overflow-x: hidden;
-}
-
-/* topbar */
-.topbar {
-  background: url('../img/Openstack_banner.png') repeat-x;
-  background-position: bottom;
-  border-bottom: 0;
-  color: #fff;
-  padding: 0 20px 0 245px;
-  position: relative;
-  left: -221px;
-  width: 100%;  
-  height: 79px;
-}
-
-.page-header { 
-  font-family: Arial, Helvetica, sans-serif;  }
-
-.page-header h2 {
-  color: #333;
-  font-size: 18px;
-  line-height: 14px;
-  font-weight: bold;
-  margin-left: 0px;
-  margin-right: -30px;
-  margin: 0px -30px 0px 0px;
-  padding: 0px;
+  left: -2.14286em;
+  width: 2.14286em;
+  top: 0.14286em;
+  text-align: center; }
+  .fa-li.fa-lg {
+    left: -1.85714em; }
+.fa-border {
+  padding: 0.2em 0.25em 0.15em;
+  border: solid 0.08em #eee;
+  border-radius: 0.1em; }
+
+  .pull-right {
+    float: right; }
+
+    .pull-left {
+      float: left; }
+
+      .fa.pull-left {
+        margin-right: 0.3em; }
+        .fa.pull-right {
+          margin-left: 0.3em; }
+.fa-spin {
+  -webkit-animation: spin 2s infinite linear;
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear; }
+
+  @-moz-keyframes spin {
+    0% {
+      -moz-transform: rotate(0deg);   }
+      100% {
+        -moz-transform: rotate(359deg);   }
+}
+
+@-webkit-keyframes spin {
+  0% {
+    -webkit-transform: rotate(0deg);   }
+    100% {
+      -webkit-transform: rotate(359deg);   }
+}
+
+@-o-keyframes spin {
+  0% {
+    -o-transform: rotate(0deg);   }
+    100% {
+      -o-transform: rotate(359deg);   }
+}
+
+@keyframes spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);   }
+    100% {
+      -webkit-transform: rotate(359deg);
+      transform: rotate(359deg);   }
+}
+.fa-rotate-90 {
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg); }
+
+  .fa-rotate-180 {
+    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+    -webkit-transform: rotate(180deg);
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -o-transform: rotate(180deg);
+    transform: rotate(180deg); }
+
+    .fa-rotate-270 {
+      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+      -webkit-transform: rotate(270deg);
+      -moz-transform: rotate(270deg);
+      -ms-transform: rotate(270deg);
+      -o-transform: rotate(270deg);
+      transform: rotate(270deg); }
+
+      .fa-flip-horizontal {
+        filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);
+        -webkit-transform: scale(-1, 1);
+        -moz-transform: scale(-1, 1);
+        -ms-transform: scale(-1, 1);
+        -o-transform: scale(-1, 1);
+        transform: scale(-1, 1); }
+
+        .fa-flip-vertical {
+          filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+          -webkit-transform: scale(1, -1);
+          -moz-transform: scale(1, -1);
+          -ms-transform: scale(1, -1);
+          -o-transform: scale(1, -1);
+          transform: scale(1, -1); }
+.fa-stack {
   position: relative;
-  top: 100px;
-}
-
-#user_info, #user_info a {
-  color: #000000;
-}
-
-/* logo */
-h1.brand {
-  background: none;
-  color: #fff;
-  position: absolute;
-  z-index: 999;
-  padding: 0;
-}
-
-h1.brand a {
-  background: url('../img/OracleSolaris_Logo.png') top left no-repeat;
-  color: #F5F5F5;
-  margin-bottom: 0;
-  margin-left: 20px;
-  margin-top: 18px;
-  padding-left: 115px;
-  width: 480px;
-  font-family: Arial, Helvetica, sans-serif;
-  font-size: 19px;
-  line-height: 35px;
-  font-weight: 400;
-}
-
-h1.brand a:before {
-	content: url('../img/OpenStack_Dashboard_txt.png');
-	position: relative;
-	top: 3px;
-}
-
-/*
-h1.brand a:before {
-	content: "OpenStack";
-	font-weight: bold;
-	font-size: 19px;
-	color: #454545;
-	position: relative;
-	left: 0px;
-	top: 0px;
-	background: #F5F5F5;
-}
-
-h1.brand a:after {
-	content: "Dashboard";
-	font-weight: regular;
-	font-size: 19px;
-	color: #454545;
-	position: relative;
-	left: -190px;
-	top: 0px;
-	background: #F5F5F5;
-}*/
-
-h1.brand a:hover, #user_info a:hover {
-	text-decoration: none;
-}
-
-/* user info */
-#user_info {
-  padding: 0px;
-  margin-top: 18px;
-  margin-right: 0px;
-  padding: 9px 0px;
-}
-
-#user_info, #user_info a { 
-	font-size: 12px;
-	font-weight: bold;
-	font-family: Arial, Helvetica, sans-serif;
-}
-
-
-/* main nav (in sidebar) */
-.main_nav li {
-	position: relative;	
-}
-
-.main_nav a {
-  border-left: 0;
-  border-right: 0;
-  color: #005D9D;
-  margin-left: 0;
-  padding: 0 0 0 37px;
-  width: 189px;
-  float: left;
-  position: relative;
-  line-height: 36px;
-  border: 1px solid #EBECED;
-  border-width: 1px 0;
-}
-
-.main_nav a:hover {
-  background: #fbfbfb;
-  color: #005D9D;
-  border: 1px solid #fbfbfb;
-  border-width: 1px 0;
-  text-decoration: none;
-}
-
-.main_nav li a.active {
-  border-color: #C4CED8;
-  font-weight: bold;
-  border-width: 1px 0 1px 0;
-  color: #005D9D;
-  width: 190px;
-  z-index: 3;
-}
-
-.main_nav a.active:hover {
-  background: #FFFFFF;
-  color: #005D9D;
-  text-decoration: none;
-}
-
-#main_content .nav-tabs li a:hover {
-  background: #FFFFFF;
-  border-bottom: 1px solid #D5DFE6;
-  border-top: 1px solid #FFFFFF;
-}
-
-#main_content .nav-tabs li.active a:hover {
-  background: #FFFFFF;
-  border: 1px solid #C4CED8;
-  border-bottom: 1px solid #FFFFFF;
-  border-top: 1px solid #FFFFFF;
-  background:  url(../img/content_tab_bkgd_selected.png) repeat-x;
-}
-
-/* sidebar */
-.sidebar {
-  background: #ebeced;
-  border: 1px solid #C4CED8;
-  border-width: 0 1px 0 0;
-  min-height: 100%;
-  width: 226px;
-  position: relative;
-}
-
-.sidebar h4 {
-  margin-left: 23px;
-  color: #000000;
-  vertical-align: top;
-  font-weight: 500;  
-}
-
-.sidebar a { font-size: 14px; }
-
-.sidebar .nav-tabs {
-  background: #f7f7f7;
-  padding-top: 70px;
-  margin-top: 0;
-  margin-bottom: 27px;
-}
-
-.sidebar .nav-tabs li a { 
-	color: #005d9d; 
-	border-bottom-color: #c4ced8;
-	background: url(../img/tab_bkgd_deselected.png) repeat-x;
-	font-size: 13px;
-	font-family: Arial, Helvetica, sans-serif;
-}
-
-.sidebar .nav-tabs li a:hover {
-	background: url(../img/tab_bkgd_deselected.png) repeat-x;
-	border-bottom-color: #c4ced8;
-	color: #333;
-}
-
-.sidebar .nav-tabs li.active a {
-  background: #ebeced url(../img/tab_bkgd_selected.png) repeat-x;
-  border: 1px solid #C4CED8;
-  border-color: #c4ced8; 
-  border-bottom: 1px solid #ebeced;
-  border-top: 0px solid #ebeced;
-  border-right: 0px solid #ebeced;
-  color: #555555;
-  font-size: 13px;
-  font-family: Arial, Helvetica, sans-serif;
-  font-weight: bold;
-  width: 113px;
-}
-
-.sidebar .nav-tabs li.active a:hover { 
-  border-color: #c4ced8; 
-  border-bottom-color: #ebeced;
-}
-
-.sidebar .switcher_bar h4 { 
-	margin: 0px; 
-}
-
-/* main content */
-
-/* tables */
-.table tbody tr td,
-.table tbody tr th {
-  -moz-transition-duration: .5s;
-  -webkit-transition-duration: .5s;
-  transition-duration: .5s;
-}
-
-.table_header h3 {
-  font-family: Arial, Helvetica, sans-serif;
-  margin-left: -10px;
-}
-
-h3.table_title {
-  position: absolute;
-  left: -999em;
-}
-
-table th {
-  font-size: 14px;
-  font-weight: 500;
-  color: #444;
-}
-
-.table_actions { margin-right: -7px; }
-
-.table tfoot tr td { 
-	background-color: #F9F9F9; 
-}
-
-/* static pages */
-.static_page, .quota-dynamic { margin-top: 80px; }
-
-.static_page, .quota-dynamic h3 { 
-  margin-bottom: 20px;
-}
-
-.static_page, .quota-dynamic .progress_bar {
-  max-width: 50%;
-  margin-top: 10px;
-}
-
-.static_page, .quota-dynamic, .table_wrapper, .usage_info_wrapper, .tab-content {
-  background: #fff;
-  background: rgba(255, 255, 255, 0.70);
-  margin: 30px 0px 0px 0px
-}
-
-#volumes, #volume-types {
-  position: relative;
-  top: -8px;
-}
-
-td.normal_column, td.actions_column {
-	font-size: 12px;
-	color:#000000;
-	border-left: 1px solid #EEEEEE;
-}
-.topologyNavi {
-  height: 80px;
-}
-
-.topologyBalloon {
-  display: none;
-  background: #ffffff;
-  position: absolute;
-  left: 100px;
-  top: 20px;
-  z-index: 600;
-  border-radius: 5px;
-  color: #333333;
-  min-width: 200px;
-  line-height: 1.2;
-  font-size: 11px;
-  -webkit-box-shadow: 0px 1px 6px #777777;
-  -moz-box-shadow: 0px 1px 6px #777777;
-  box-shadow: 0px 1px 6px #777777;
-}
-.topologyBalloon.on {
-  display: block;
-}
-.topologyBalloon .vnc_window {
-  margin-left: 10px;
-}
-.topologyBalloon .closeTopologyBalloon {
-  font-size: 16px;
-  line-height: 1;
-  display: block;
-  position: absolute;
-  font-weight: bold;
-  right: 6px;
-  top: 0px;
-  cursor: pointer;
-  padding: 3px;
-  color: #aaaaaa;
-}
-.topologyBalloon .closeTopologyBalloon:hover {
-  color: #777777;
-  text-decoration: none;
-}
-.topologyBalloon .contentBody {
-  padding: 8px 8px 0;
-}
-.topologyBalloon span.active:before, .topologyBalloon span.down:before {
-  content: "";
-  width: 9px;
-  height: 9px;
   display: inline-block;
-  background: #0d925b;
-  margin-right: 3px;
-  border-radius: 10px;
-  vertical-align: middle;
-}
-.topologyBalloon span.down:before {
-  background: #e64b41;
-}
-.topologyBalloon .footer {
-  background: #efefef;
-  border-top: 1px solid #d9d9d9;
-  padding: 8px;
-  border-radius: 0px 0px 7px 7px;
-}
-.topologyBalloon .footer .footerInner {
-  display: table;
-  width: 100%;
-}
-.topologyBalloon .footer .cell {
-  display: table-cell;
-  padding-right: 10px;
-}
-.topologyBalloon .footer .link {
-  font-size: 12px;
-}
-.topologyBalloon .footer .delete {
-  padding-right: 0;
-  text-align: right;
-}
-.topologyBalloon .footer .delete .btn:before {
-  content: "Delete ";
-}
-.topologyBalloon .footer .delete .btn.deleting:before {
-  content: "Deleting ";
-}
-.topologyBalloon .footer .delete .btn.instance:before {
-  content: "Terminate ";
-}
-.topologyBalloon .footer .delete .btn.instance.deleting:before {
-  content: "Terminating ";
-}
-.topologyBalloon table.detaiInfoTable {
-  margin: 0px 0px 8px 0px;
-
-}
-.topologyBalloon table.detaiInfoTable caption {
-  text-align: left;
-  font-size: 16px;
-  font-weight: bold;
-  margin-bottom: 3px;
-}
-.topologyBalloon table.detaiInfoTable th, .topologyBalloon table.detaiInfoTable td {
-  text-align: left;
-  vertical-align: middle;
-  padding-bottom: 3px;
-  background: transparent;
-}
-.topologyBalloon table.detaiInfoTable th {
-  color: #999999;
-  padding-right: 8px;
-  width: 80px;
-}
-.topologyBalloon table.detaiInfoTable th span {
-  vertical-align: middle;
-  width: 80px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  display: inline-block;
-}
-.topologyBalloon table.detaiInfoTable th.device {
-  text-align: right;
-  font-size: 12px;
-  color: #333333;  
-  padding-left: 12px;
-}
-.topologyBalloon table.detaiInfoTable td {
-  padding-right: 5px;
-  white-space: nowrap;
-}
-.topologyBalloon table.detaiInfoTable td.delete {
-  padding-right: 0;
-  text-align: right;
-}
-.topologyBalloon table.detaiInfoTable .btn {
-  line-height: 1.4;
-}
-.topologyBalloon table.detaiInfoTable .btn:before {
-  content: "Delete ";
-}
-.topologyBalloon table.detaiInfoTable .btn.deleting:before {
-  content: "Deleting ";
-}
-.topologyBalloon:before {
-  border-top: 7px solid transparent;
-  border-bottom: 7px solid transparent;
-  border-right: 9px solid #bbbbbb;
-  display: block;
-  position: absolute;
-  top: 30px;
-  left: -9px;
-  width: 0;
-  height: 0;
-  content: "";
-}
-.topologyBalloon:after {
-  border-top: 6px solid transparent;
-  border-bottom: 6px solid transparent;
-  border-right: 8px solid #ffffff;
-  display: block;
-  position: absolute;
-  top: 31px;
-  left: -8px;
-  width: 0;
-  height: 0;
-  content: "";
-}
-.topologyBalloon.leftPosition:before {
-  border-right: none;
-  border-left: 9px solid #bbbbbb;
-  right: -9px;
-  top: 30px;
-  left: auto;
-}
-.topologyBalloon.leftPosition:after {
-  border-right: none;
-  border-left: 8px solid #ffffff;
-  right: -8px;
-  top: 31px;
-  left: auto;
-}
-
-.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
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle; }
+
+  .fa-stack-1x, .fa-stack-2x {
+    position: absolute;
+    left: 0;
+    width: 100%;
+    text-align: center; }
+
+    .fa-stack-1x {
+      line-height: inherit; }
+
+      .fa-stack-2x {
+        font-size: 2em; }
+
+        .fa-inverse {
+          color: #fff; }
+
+.fa-glass:before {
+  content: "\f000"; }
+
+  .fa-music:before {
+    content: "\f001"; }
+
+    .fa-search:before {
+      content: "\f002"; }
+
+      .fa-envelope-o:before {
+        content: "\f003"; }
+
+        .fa-heart:before {
+          content: "\f004"; }
+
+          .fa-star:before {
+            content: "\f005"; }
+
+            .fa-star-o:before {
+              content: "\f006"; }
+
+              .fa-user:before {
+                content: "\f007"; }
+
+                .fa-film:before {
+                  content: "\f008"; }
+
+                  .fa-th-large:before {
+                    content: "\f009"; }
+
+                    .fa-th:before {
+                      content: "\f00a"; }
+
+                      .fa-th-list:before {
+                        content: "\f00b"; }
+
+                        .fa-check:before {
+                          content: "\f00c"; }
+
+                          .fa-times:before {
+                            content: "\f00d"; }
+
+                            .fa-search-plus:before {
+                              content: "\f00e"; }
+
+                              .fa-search-minus:before {
+                                content: "\f010"; }
+
+                                .fa-power-off:before {
+                                  content: "\f011"; }
+
+                                  .fa-signal:before {
+                                    content: "\f012"; }
+
+                                    .fa-gear:before, .fa-cog:before {
+                                      content: "\f013"; }
+
+                                      .fa-trash-o:before {
+                                        content: "\f014"; }
+
+                                        .fa-home:before {
+                                          content: "\f015"; }
+
+                                          .fa-file-o:before {
+                                            content: "\f016"; }
+
+                                            .fa-clock-o:before {
+                                              content: "\f017"; }
+
+                                              .fa-road:before {
+                                                content: "\f018"; }
+
+                                                .fa-download:before {
+                                                  content: "\f019"; }
+
+                                                  .fa-arrow-circle-o-down:before {
+                                                    content: "\f01a"; }
+
+                                                    .fa-arrow-circle-o-up:before {
+                                                      content: "\f01b"; }
+
+                                                      .fa-inbox:before {
+                                                        content: "\f01c"; }
+
+                                                        .fa-play-circle-o:before {
+                                                          content: "\f01d"; }
+
+                                                          .fa-rotate-right:before, .fa-repeat:before {
+                                                            content: "\f01e"; }
+
+                                                            .fa-refresh:before {
+                                                              content: "\f021"; }
+
+                                                              .fa-list-alt:before {
+                                                                content: "\f022"; }
+
+                                                                .fa-lock:before {
+                                                                  content: "\f023"; }
+
+                                                                  .fa-flag:before {
+                                                                    content: "\f024"; }
+
+                                                                    .fa-headphones:before {
+                                                                      content: "\f025"; }
+
+                                                                      .fa-volume-off:before {
+                                                                        content: "\f026"; }
+
+                                                                        .fa-volume-down:before {
+                                                                          content: "\f027"; }
+
+                                                                          .fa-volume-up:before {
+                                                                            content: "\f028"; }
+
+                                                                            .fa-qrcode:before {
+                                                                              content: "\f029"; }
+
+                                                                              .fa-barcode:before {
+                                                                                content: "\f02a"; }
+
+                                                                                .fa-tag:before {
+                                                                                  content: "\f02b"; }
+
+                                                                                  .fa-tags:before {
+                                                                                    content: "\f02c"; }
+
+                                                                                    .fa-book:before {
+                                                                                      content: "\f02d"; }
+
+                                                                                      .fa-bookmark:before {
+                                                                                        content: "\f02e"; }
+
+                                                                                        .fa-print:before {
+                                                                                          content: "\f02f"; }
+
+                                                                                          .fa-camera:before {
+                                                                                            content: "\f030"; }
+
+                                                                                            .fa-font:before {
+                                                                                              content: "\f031"; }
+
+                                                                                              .fa-bold:before {
+                                                                                                content: "\f032"; }
+
+                                                                                                .fa-italic:before {
+                                                                                                  content: "\f033"; }
+
+                                                                                                  .fa-text-height:before {
+                                                                                                    content: "\f034"; }
+
+                                                                                                    .fa-text-width:before {
+                                                                                                      content: "\f035"; }
+
+                                                                                                      .fa-align-left:before {
+                                                                                                        content: "\f036"; }
+
+                                                                                                        .fa-align-center:before {
+                                                                                                          content: "\f037"; }
+
+                                                                                                          .fa-align-right:before {
+                                                                                                            content: "\f038"; }
+
+                                                                                                            .fa-align-justify:before {
+                                                                                                              content: "\f039"; }
+
+                                                                                                              .fa-list:before {
+                                                                                                                content: "\f03a"; }
+
+                                                                                                                .fa-dedent:before, .fa-outdent:before {
+                                                                                                                  content: "\f03b"; }
+
+                                                                                                                  .fa-indent:before {
+                                                                                                                    content: "\f03c"; }
+
+                                                                                                                    .fa-video-camera:before {
+                                                                                                                      content: "\f03d"; }
+
+                                                                                                                      .fa-photo:before, .fa-image:before, .fa-picture-o:before {
+                                                                                                                        content: "\f03e"; }
+
+                                                                                                                        .fa-pencil:before {
+                                                                                                                          content: "\f040"; }
+
+                                                                                                                          .fa-map-marker:before {
+                                                                                                                            content: "\f041"; }
+
+                                                                                                                            .fa-adjust:before {
+                                                                                                                              content: "\f042"; }
+
+                                                                                                                              .fa-tint:before {
+                                                                                                                                content: "\f043"; }
+
+                                                                                                                                .fa-edit:before, .fa-pencil-square-o:before {
+                                                                                                                                  content: "\f044"; }
+
+                                                                                                                                  .fa-share-square-o:before {
+                                                                                                                                    content: "\f045"; }
+
+                                                                                                                                    .fa-check-square-o:before {
+                                                                                                                                      content: "\f046"; }
+
+                                                                                                                                      .fa-arrows:before {
+                                                                                                                                        content: "\f047"; }
+
+                                                                                                                                        .fa-step-backward:before {
+                                                                                                                                          content: "\f048"; }
+
+                                                                                                                                          .fa-fast-backward:before {
+                                                                                                                                            content: "\f049"; }
+
+                                                                                                                                            .fa-backward:before {
+                                                                                                                                              content: "\f04a"; }
+
+                                                                                                                                              .fa-play:before {
+                                                                                                                                                content: "\f04b"; }
+
+                                                                                                                                                .fa-pause:before {
+                                                                                                                                                  content: "\f04c"; }
+
+                                                                                                                                                  .fa-stop:before {
+                                                                                                                                                    content: "\f04d"; }
+
+                                                                                                                                                    .fa-forward:before {
+                                                                                                                                                      content: "\f04e"; }
+
+                                                                                                                                                      .fa-fast-forward:before {
+                                                                                                                                                        content: "\f050"; }
+
+                                                                                                                                                        .fa-step-forward:before {
+                                                                                                                                                          content: "\f051"; }
+
+                                                                                                                                                          .fa-eject:before {
+                                                                                                                                                            content: "\f052"; }
+
+                                                                                                                                                            .fa-chevron-left:before {
+                                                                                                                                                              content: "\f053"; }
+
+                                                                                                                                                              .fa-chevron-right:before {
+                                                                                                                                                                content: "\f054"; }
+
+                                                                                                                                                                .fa-plus-circle:before {
+                                                                                                                                                                  content: "\f055"; }
+
+                                                                                                                                                                  .fa-minus-circle:before {
+                                                                                                                                                                    content: "\f056"; }
+
+                                                                                                                                                                    .fa-times-circle:before {
+                                                                                                                                                                      content: "\f057"; }
+
+                                                                                                                                                                      .fa-check-circle:before {
+                                                                                                                                                                        content: "\f058"; }
+
+                                                                                                                                                                        .fa-question-circle:before {
+                                                                                                                                                                          content: "\f059"; }
+
+                                                                                                                                                                          .fa-info-circle:before {
+                                                                                                                                                                            content: "\f05a"; }
+
+                                                                                                                                                                            .fa-crosshairs:before {
+                                                                                                                                                                              content: "\f05b"; }
+
+                                                                                                                                                                              .fa-times-circle-o:before {
+                                                                                                                                                                                content: "\f05c"; }
+
+                                                                                                                                                                                .fa-check-circle-o:before {
+                                                                                                                                                                                  content: "\f05d"; }
+
+                                                                                                                                                                                  .fa-ban:before {
+                                                                                                                                                                                    content: "\f05e"; }
+
+                                                                                                                                                                                    .fa-arrow-left:before {
+                                                                                                                                                                                      content: "\f060"; }
+
+                                                                                                                                                                                      .fa-arrow-right:before {
+                                                                                                                                                                                        content: "\f061"; }
+
+                                                                                                                                                                                        .fa-arrow-up:before {
+                                                                                                                                                                                          content: "\f062"; }
+
+                                                                                                                                                                                          .fa-arrow-down:before {
+                                                                                                                                                                                            content: "\f063"; }
+
+                                                                                                                                                                                            .fa-mail-forward:before, .fa-share:before {
+                                                                                                                                                                                              content: "\f064"; }
+
+                                                                                                                                                                                              .fa-expand:before {
+                                                                                                                                                                                                content: "\f065"; }
+
+                                                                                                                                                                                                .fa-compress:before {
+                                                                                                                                                                                                  content: "\f066"; }
+
+                                                                                                                                                                                                  .fa-plus:before {
+                                                                                                                                                                                                    content: "\f067"; }
+
+                                                                                                                                                                                                    .fa-minus:before {
+                                                                                                                                                                                                      content: "\f068"; }
+
+                                                                                                                                                                                                      .fa-asterisk:before {
+                                                                                                                                                                                                        content: "\f069"; }
+
+                                                                                                                                                                                                        .fa-exclamation-circle:before {
+                                                                                                                                                                                                          content: "\f06a"; }
+
+                                                                                                                                                                                                          .fa-gift:before {
+                                                                                                                                                                                                            content: "\f06b"; }
+
+                                                                                                                                                                                                            .fa-leaf:before {
+                                                                                                                                                                                                              content: "\f06c"; }
+
+                                                                                                                                                                                                              .fa-fire:before {
+                                                                                                                                                                                                                content: "\f06d"; }
+
+                                                                                                                                                                                                                .fa-eye:before {
+                                                                                                                                                                                                                  content: "\f06e"; }
+
+                                                                                                                                                                                                                  .fa-eye-slash:before {
+                                                                                                                                                                                                                    content: "\f070"; }
+
+                                                                                                                                                                                                                    .fa-warning:before, .fa-exclamation-triangle:before {
+                                                                                                                                                                                                                      content: "\f071"; }
+
+                                                                                                                                                                                                                      .fa-plane:before {
+                                                                                                                                                                                                                        content: "\f072"; }
+
+                                                                                                                                                                                                                        .fa-calendar:before {
+                                                                                                                                                                                                                          content: "\f073"; }
+
+                                                                                                                                                                                                                          .fa-random:before {
+                                                                                                                                                                                                                            content: "\f074"; }
+
+                                                                                                                                                                                                                            .fa-comment:before {
+                                                                                                                                                                                                                              content: "\f075"; }
+
+                                                                                                                                                                                                                              .fa-magnet:before {
+                                                                                                                                                                                                                                content: "\f076"; }
+
+                                                                                                                                                                                                                                .fa-chevron-up:before {
+                                                                                                                                                                                                                                  content: "\f077"; }
+
+                                                                                                                                                                                                                                  .fa-chevron-down:before {
+                                                                                                                                                                                                                                    content: "\f078"; }
+
+                                                                                                                                                                                                                                    .fa-retweet:before {
+                                                                                                                                                                                                                                      content: "\f079"; }
+
+                                                                                                                                                                                                                                      .fa-shopping-cart:before {
+                                                                                                                                                                                                                                        content: "\f07a"; }
+
+                                                                                                                                                                                                                                        .fa-folder:before {
+                                                                                                                                                                                                                                          content: "\f07b"; }
+
+                                                                                                                                                                                                                                          .fa-folder-open:before {
+                                                                                                                                                                                                                                            content: "\f07c"; }
+
+                                                                                                                                                                                                                                            .fa-arrows-v:before {
+                                                                                                                                                                                                                                              content: "\f07d"; }
+
+                                                                                                                                                                                                                                              .fa-arrows-h:before {
+                                                                                                                                                                                                                                                content: "\f07e"; }
+
+                                                                                                                                                                                                                                                .fa-bar-chart-o:before {
+                                                                                                                                                                                                                                                  content: "\f080"; }
+
+                                                                                                                                                                                                                                                  .fa-twitter-square:before {
+                                                                                                                                                                                                                                                    content: "\f081"; }
+
+                                                                                                                                                                                                                                                    .fa-facebook-square:before {
+                                                                                                                                                                                                                                                      content: "\f082"; }
+
+                                                                                                                                                                                                                                                      .fa-camera-retro:before {
+                                                                                                                                                                                                                                                        content: "\f083"; }
+
+                                                                                                                                                                                                                                                        .fa-key:before {
+                                                                                                                                                                                                                                                          content: "\f084"; }
+
+                                                                                                                                                                                                                                                          .fa-gears:before, .fa-cogs:before {
+                                                                                                                                                                                                                                                            content: "\f085"; }
+
+                                                                                                                                                                                                                                                            .fa-comments:before {
+                                                                                                                                                                                                                                                              content: "\f086"; }
+
+                                                                                                                                                                                                                                                              .fa-thumbs-o-up:before {
+                                                                                                                                                                                                                                                                content: "\f087"; }
+
+                                                                                                                                                                                                                                                                .fa-thumbs-o-down:before {
+                                                                                                                                                                                                                                                                  content: "\f088"; }
+
+                                                                                                                                                                                                                                                                  .fa-star-half:before {
+                                                                                                                                                                                                                                                                    content: "\f089"; }
+
+                                                                                                                                                                                                                                                                    .fa-heart-o:before {
+                                                                                                                                                                                                                                                                      content: "\f08a"; }
+
+                                                                                                                                                                                                                                                                      .fa-sign-out:before {
+                                                                                                                                                                                                                                                                        content: "\f08b"; }
+
+                                                                                                                                                                                                                                                                        .fa-linkedin-square:before {
+                                                                                                                                                                                                                                                                          content: "\f08c"; }
+
+                                                                                                                                                                                                                                                                          .fa-thumb-tack:before {
+                                                                                                                                                                                                                                                                            content: "\f08d"; }
+
+                                                                                                                                                                                                                                                                            .fa-external-link:before {
+                                                                                                                                                                                                                                                                              content: "\f08e"; }
+
+                                                                                                                                                                                                                                                                              .fa-sign-in:before {
+                                                                                                                                                                                                                                                                                content: "\f090"; }
+
+                                                                                                                                                                                                                                                                                .fa-trophy:before {
+                                                                                                                                                                                                                                                                                  content: "\f091"; }
+
+                                                                                                                                                                                                                                                                                  .fa-github-square:before {
+                                                                                                                                                                                                                                                                                    content: "\f092"; }
+
+                                                                                                                                                                                                                                                                                    .fa-upload:before {
+                                                                                                                                                                                                                                                                                      content: "\f093"; }
+
+                                                                                                                                                                                                                                                                                      .fa-lemon-o:before {
+                                                                                                                                                                                                                                                                                        content: "\f094"; }
+
+                                                                                                                                                                                                                                                                                        .fa-phone:before {
+                                                                                                                                                                                                                                                                                          content: "\f095"; }
+
+                                                                                                                                                                                                                                                                                          .fa-square-o:before {
+                                                                                                                                                                                                                                                                                            content: "\f096"; }
+
+                                                                                                                                                                                                                                                                                            .fa-bookmark-o:before {
+                                                                                                                                                                                                                                                                                              content: "\f097"; }
+
+                                                                                                                                                                                                                                                                                              .fa-phone-square:before {
+                                                                                                                                                                                                                                                                                                content: "\f098"; }
+
+                                                                                                                                                                                                                                                                                                .fa-twitter:before {
+                                                                                                                                                                                                                                                                                                  content: "\f099"; }
+
+                                                                                                                                                                                                                                                                                                  .fa-facebook:before {
+                                                                                                                                                                                                                                                                                                    content: "\f09a"; }
+
+                                                                                                                                                                                                                                                                                                    .fa-github:before {
+                                                                                                                                                                                                                                                                                                      content: "\f09b"; }
+
+                                                                                                                                                                                                                                                                                                      .fa-unlock:before {
+                                                                                                                                                                                                                                                                                                        content: "\f09c"; }
+
+                                                                                                                                                                                                                                                                                                        .fa-credit-card:before {
+                                                                                                                                                                                                                                                                                                          content: "\f09d"; }
+
+                                                                                                                                                                                                                                                                                                          .fa-rss:before {
+                                                                                                                                                                                                                                                                                                            content: "\f09e"; }
+
+                                                                                                                                                                                                                                                                                                            .fa-hdd-o:before {
+                                                                                                                                                                                                                                                                                                              content: "\f0a0"; }
+
+                                                                                                                                                                                                                                                                                                              .fa-bullhorn:before {
+                                                                                                                                                                                                                                                                                                                content: "\f0a1"; }
+
+                                                                                                                                                                                                                                                                                                                .fa-bell:before {
+                                                                                                                                                                                                                                                                                                                  content: "\f0f3"; }
+
+                                                                                                                                                                                                                                                                                                                  .fa-certificate:before {
+                                                                                                                                                                                                                                                                                                                    content: "\f0a3"; }
+
+                                                                                                                                                                                                                                                                                                                    .fa-hand-o-right:before {
+                                                                                                                                                                                                                                                                                                                      content: "\f0a4"; }
+
+                                                                                                                                                                                                                                                                                                                      .fa-hand-o-left:before {
+                                                                                                                                                                                                                                                                                                                        content: "\f0a5"; }
+
+                                                                                                                                                                                                                                                                                                                        .fa-hand-o-up:before {
+                                                                                                                                                                                                                                                                                                                          content: "\f0a6"; }
+
+                                                                                                                                                                                                                                                                                                                          .fa-hand-o-down:before {
+                                                                                                                                                                                                                                                                                                                            content: "\f0a7"; }
+
+                                                                                                                                                                                                                                                                                                                            .fa-arrow-circle-left:before {
+                                                                                                                                                                                                                                                                                                                              content: "\f0a8"; }
+
+                                                                                                                                                                                                                                                                                                                              .fa-arrow-circle-right:before {
+                                                                                                                                                                                                                                                                                                                                content: "\f0a9"; }
+
+                                                                                                                                                                                                                                                                                                                                .fa-arrow-circle-up:before {
+                                                                                                                                                                                                                                                                                                                                  content: "\f0aa"; }
+
+                                                                                                                                                                                                                                                                                                                                  .fa-arrow-circle-down:before {
+                                                                                                                                                                                                                                                                                                                                    content: "\f0ab"; }
+
+                                                                                                                                                                                                                                                                                                                                    .fa-globe:before {
+                                                                                                                                                                                                                                                                                                                                      content: "\f0ac"; }
+
+                                                                                                                                                                                                                                                                                                                                      .fa-wrench:before {
+                                                                                                                                                                                                                                                                                                                                        content: "\f0ad"; }
+
+                                                                                                                                                                                                                                                                                                                                        .fa-tasks:before {
+                                                                                                                                                                                                                                                                                                                                          content: "\f0ae"; }
+
+                                                                                                                                                                                                                                                                                                                                          .fa-filter:before {
+                                                                                                                                                                                                                                                                                                                                            content: "\f0b0"; }
+
+                                                                                                                                                                                                                                                                                                                                            .fa-briefcase:before {
+                                                                                                                                                                                                                                                                                                                                              content: "\f0b1"; }
+
+                                                                                                                                                                                                                                                                                                                                              .fa-arrows-alt:before {
+                                                                                                                                                                                                                                                                                                                                                content: "\f0b2"; }
+
+                                                                                                                                                                                                                                                                                                                                                .fa-group:before, .fa-users:before {
+                                                                                                                                                                                                                                                                                                                                                  content: "\f0c0"; }
+
+                                                                                                                                                                                                                                                                                                                                                  .fa-chain:before, .fa-link:before {
+                                                                                                                                                                                                                                                                                                                                                    content: "\f0c1"; }
+
+                                                                                                                                                                                                                                                                                                                                                    .fa-cloud:before {
+                                                                                                                                                                                                                                                                                                                                                      content: "\f0c2"; }
+
+                                                                                                                                                                                                                                                                                                                                                      .fa-flask:before {
+                                                                                                                                                                                                                                                                                                                                                        content: "\f0c3"; }
+
+                                                                                                                                                                                                                                                                                                                                                        .fa-cut:before, .fa-scissors:before {
+                                                                                                                                                                                                                                                                                                                                                          content: "\f0c4"; }
+
+                                                                                                                                                                                                                                                                                                                                                          .fa-copy:before, .fa-files-o:before {
+                                                                                                                                                                                                                                                                                                                                                            content: "\f0c5"; }
+
+                                                                                                                                                                                                                                                                                                                                                            .fa-paperclip:before {
+                                                                                                                                                                                                                                                                                                                                                              content: "\f0c6"; }
+
+                                                                                                                                                                                                                                                                                                                                                              .fa-save:before, .fa-floppy-o:before {
+                                                                                                                                                                                                                                                                                                                                                                content: "\f0c7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                .fa-square:before {
+                                                                                                                                                                                                                                                                                                                                                                  content: "\f0c8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                  .fa-navicon:before, .fa-reorder:before, .fa-bars:before {
+                                                                                                                                                                                                                                                                                                                                                                    content: "\f0c9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                    .fa-list-ul:before {
+                                                                                                                                                                                                                                                                                                                                                                      content: "\f0ca"; }
+
+                                                                                                                                                                                                                                                                                                                                                                      .fa-list-ol:before {
+                                                                                                                                                                                                                                                                                                                                                                        content: "\f0cb"; }
+
+                                                                                                                                                                                                                                                                                                                                                                        .fa-strikethrough:before {
+                                                                                                                                                                                                                                                                                                                                                                          content: "\f0cc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                          .fa-underline:before {
+                                                                                                                                                                                                                                                                                                                                                                            content: "\f0cd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                            .fa-table:before {
+                                                                                                                                                                                                                                                                                                                                                                              content: "\f0ce"; }
+
+                                                                                                                                                                                                                                                                                                                                                                              .fa-magic:before {
+                                                                                                                                                                                                                                                                                                                                                                                content: "\f0d0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                .fa-truck:before {
+                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0d1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                  .fa-pinterest:before {
+                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0d2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                    .fa-pinterest-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0d3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                      .fa-google-plus-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0d4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                        .fa-google-plus:before {
+                                                                                                                                                                                                                                                                                                                                                                                          content: "\f0d5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                          .fa-money:before {
+                                                                                                                                                                                                                                                                                                                                                                                            content: "\f0d6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                            .fa-caret-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                              content: "\f0d7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                              .fa-caret-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                content: "\f0d8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                .fa-caret-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0d9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                  .fa-caret-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0da"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                    .fa-columns:before {
+                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0db"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                      .fa-unsorted:before, .fa-sort:before {
+                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0dc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                        .fa-sort-down:before, .fa-sort-desc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f0dd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                          .fa-sort-up:before, .fa-sort-asc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f0de"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                            .fa-envelope:before {
+                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f0e0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                              .fa-linkedin:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f0e1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                .fa-rotate-left:before, .fa-undo:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0e2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-legal:before, .fa-gavel:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0e3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-dashboard:before, .fa-tachometer:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0e4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-comment-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0e5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-comments-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f0e6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-flash:before, .fa-bolt:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f0e7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-sitemap:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f0e8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-umbrella:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f0e9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-paste:before, .fa-clipboard:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0ea"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-lightbulb-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0eb"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-exchange:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0ec"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-cloud-download:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0ed"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-cloud-upload:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f0ee"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-user-md:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f0f0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-stethoscope:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f0f1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-suitcase:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f0f2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-bell-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0a2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-coffee:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0f4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-cutlery:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0f5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-file-text-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0f6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-building-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f0f7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-hospital-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f0f8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-ambulance:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f0f9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-medkit:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f0fa"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-fighter-jet:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f0fb"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-beer:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f0fc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-h-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f0fd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-plus-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f0fe"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-angle-double-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f100"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-angle-double-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f101"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-angle-double-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f102"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-angle-double-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f103"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-angle-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f104"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-angle-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f105"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-angle-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f106"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-angle-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f107"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-desktop:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f108"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-laptop:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f109"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-tablet:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f10a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-mobile-phone:before, .fa-mobile:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f10b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-circle-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f10c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-quote-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f10d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-quote-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f10e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-spinner:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f110"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-circle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f111"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-mail-reply:before, .fa-reply:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f112"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-github-alt:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f113"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-folder-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f114"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-folder-open-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f115"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-smile-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f118"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-frown-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f119"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-meh-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f11a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-gamepad:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f11b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-keyboard-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f11c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-flag-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f11d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-flag-checkered:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f11e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-terminal:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f120"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-code:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f121"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-mail-reply-all:before, .fa-reply-all:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f122"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f123"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-location-arrow:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f124"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-crop:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f125"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-code-fork:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f126"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-unlink:before, .fa-chain-broken:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f127"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-question:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f128"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-info:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f129"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-exclamation:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f12a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-superscript:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f12b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-subscript:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f12c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-eraser:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f12d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-puzzle-piece:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f12e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-microphone:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f130"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-microphone-slash:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f131"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-shield:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f132"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-calendar-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f133"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-fire-extinguisher:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f134"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-rocket:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f135"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-maxcdn:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f136"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-chevron-circle-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f137"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-chevron-circle-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f138"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-chevron-circle-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f139"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-chevron-circle-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f13a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-html5:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f13b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-css3:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f13c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-anchor:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f13d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-unlock-alt:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f13e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-bullseye:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f140"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-ellipsis-h:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f141"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-ellipsis-v:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f142"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-rss-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f143"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-play-circle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f144"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-ticket:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f145"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-minus-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f146"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-minus-square-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f147"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-level-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f148"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-level-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f149"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-check-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f14a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-pencil-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f14b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-external-link-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f14c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-share-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f14d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-compass:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f14e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-toggle-down:before, .fa-caret-square-o-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f150"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-toggle-up:before, .fa-caret-square-o-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f151"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-toggle-right:before, .fa-caret-square-o-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f152"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-euro:before, .fa-eur:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f153"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-gbp:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f154"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-dollar:before, .fa-usd:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f155"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-rupee:before, .fa-inr:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f156"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f157"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-ruble:before, .fa-rouble:before, .fa-rub:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f158"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-won:before, .fa-krw:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f159"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-bitcoin:before, .fa-btc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f15a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-file:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f15b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-file-text:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f15c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-sort-alpha-asc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f15d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-sort-alpha-desc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f15e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-sort-amount-asc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f160"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-sort-amount-desc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f161"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-sort-numeric-asc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f162"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-sort-numeric-desc:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f163"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-thumbs-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f164"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-thumbs-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f165"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-youtube-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f166"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-youtube:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f167"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-xing:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f168"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-xing-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f169"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-youtube-play:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f16a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-dropbox:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f16b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-stack-overflow:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f16c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-instagram:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f16d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-flickr:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f16e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-adn:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f170"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-bitbucket:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f171"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-bitbucket-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f172"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-tumblr:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f173"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-tumblr-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f174"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-long-arrow-down:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f175"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-long-arrow-up:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f176"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-long-arrow-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f177"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-long-arrow-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f178"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-apple:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f179"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-windows:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f17a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-android:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f17b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-linux:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f17c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-dribbble:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f17d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-skype:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f17e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-foursquare:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f180"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-trello:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f181"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-female:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f182"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-male:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f183"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-gittip:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f184"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-sun-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f185"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-moon-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f186"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-archive:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f187"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-bug:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f188"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-vk:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f189"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-weibo:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f18a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-renren:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f18b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-pagelines:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f18c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-stack-exchange:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f18d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-arrow-circle-o-right:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f18e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-arrow-circle-o-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f190"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-toggle-left:before, .fa-caret-square-o-left:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f191"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-dot-circle-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f192"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-wheelchair:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f193"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-vimeo-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f194"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-turkish-lira:before, .fa-try:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f195"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-plus-square-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f196"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-space-shuttle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f197"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-slack:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f198"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-envelope-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f199"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-wordpress:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f19a"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-openid:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f19b"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-institution:before, .fa-bank:before, .fa-university:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f19c"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-mortar-board:before, .fa-graduation-cap:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f19d"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-yahoo:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f19e"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-google:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1a0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-reddit:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1a1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-reddit-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1a2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-stumbleupon-circle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1a3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-stumbleupon:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1a4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-delicious:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1a5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-digg:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1a6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-pied-piper-square:before, .fa-pied-piper:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1a7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-pied-piper-alt:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1a8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-drupal:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1a9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-joomla:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1aa"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-language:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1ab"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-fax:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1ac"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-building:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1ad"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-child:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1ae"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-paw:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1b0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-spoon:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1b1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-cube:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1b2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-cubes:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1b3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-behance:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1b4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-behance-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1b5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-steam:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1b6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-steam-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1b7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-recycle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1b8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-automobile:before, .fa-car:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1b9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-cab:before, .fa-taxi:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1ba"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-tree:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1bb"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-spotify:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1bc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-deviantart:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1bd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-soundcloud:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1be"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-database:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1c0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-file-pdf-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1c1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-file-word-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1c2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-file-excel-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1c3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-file-powerpoint-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1c4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1c5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-file-zip-o:before, .fa-file-archive-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1c6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-file-sound-o:before, .fa-file-audio-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1c7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-file-movie-o:before, .fa-file-video-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1c8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-file-code-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1c9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-vine:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1ca"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-codepen:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1cb"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-jsfiddle:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1cc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-life-bouy:before, .fa-life-saver:before, .fa-support:before,
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-life-ring:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1cd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-circle-o-notch:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1ce"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-ra:before, .fa-rebel:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1d0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-ge:before, .fa-empire:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1d1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-git-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1d2"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-git:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1d3"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-hacker-news:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1d4"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-tencent-weibo:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1d5"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-qq:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1d6"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-wechat:before, .fa-weixin:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1d7"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-send:before, .fa-paper-plane:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1d8"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-send-o:before, .fa-paper-plane-o:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1d9"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              .fa-history:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                content: "\f1da"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .fa-circle-thin:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  content: "\f1db"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  .fa-header:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    content: "\f1dc"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    .fa-paragraph:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      content: "\f1dd"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .fa-sliders:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        content: "\f1de"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .fa-share-alt:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          content: "\f1e0"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .fa-share-alt-square:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            content: "\f1e1"; }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            .fa-bomb:before {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              content: "\f1e2"; }
Binary file components/openstack/horizon/files/branding/img/OpenStack_banner.png has changed
Binary file components/openstack/horizon/files/branding/img/Openstack_banner.png has changed
Binary file components/openstack/horizon/files/branding/img/dropdown_dwn.png has changed
Binary file components/openstack/horizon/files/branding/img/dropdown_ena.png has changed
Binary file components/openstack/horizon/files/branding/img/favicon-solaris.ico has changed
Binary file components/openstack/horizon/files/branding/img/favicon.ico has changed
--- a/components/openstack/horizon/files/branding/theme/_stylesheets.html	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/branding/theme/_stylesheets.html	Mon Apr 20 12:35:51 2015 -0700
@@ -1,2 +1,2 @@
-<link href='{{ STATIC_URL }}solaris/css/solaris.css' type='text/css' media='screen' rel='stylesheet' />
-<link rel="shortcut icon" href="{{ STATIC_URL }}solaris/img/favicon-solaris.ico"/>
+<link href='{{ STATIC_URL }}dashboard/css/solaris.css' type='text/css' media='screen' rel='stylesheet' />
+<link rel="shortcut icon" href="{{ STATIC_URL }}dashboard/img/favicon.ico"/>
--- a/components/openstack/horizon/files/local_settings.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/local_settings.py	Mon Apr 20 12:35:51 2015 -0700
@@ -32,18 +32,25 @@
 LOGOUT_URL = '/horizon/auth/logout/'
 LOGIN_REDIRECT_URL = '/horizon'
 
-STATIC_ROOT = '/var/lib/openstack_dashboard/static'
+STATIC_ROOT = '/usr/lib/python2.6/vendor-packages/openstack_dashboard/static'
 
 # Enable Solaris theme
-TEMPLATE_DIRS = ('/var/lib/openstack_dashboard/static/solaris/theme', )
+TEMPLATE_DIRS = (
+    '/usr/lib/python2.6/vendor-packages/openstack_dashboard/templates/solaris',
+)
+
+# Application files are compressed during packaging
+COMPRESS_OFFLINE = True
 
 # Overrides for OpenStack API versions. Use this setting to force the
-# OpenStack dashboard to use a specfic API version for a given service API.
+# OpenStack dashboard to use a specific 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
+#     "data_processing": 1.1,
+#     "identity": 3,
+#     "volume": 2
 # }
 
 # Set this to True if running on multi-domain model. When this is enabled, it
@@ -55,7 +62,8 @@
 # OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
 
 # Set Console type:
-# valid options would be "AUTO", "VNC" or "SPICE"
+# valid options would be "AUTO"(default), "VNC", "SPICE", "RDP" or None
+# Set to None explicitly if you want to deactivate the console.
 # CONSOLE_TYPE = "AUTO"
 
 # Default OpenStack Dashboard configuration.
@@ -73,6 +81,8 @@
     'exceptions': {'recoverable': exceptions.RECOVERABLE,
                    'not_found': exceptions.NOT_FOUND,
                    'unauthorized': exceptions.UNAUTHORIZED},
+    'angular_modules': [],
+    'js_files': [],
     'customization_module': 'openstack_dashboard.overrides',
 }
 
@@ -86,13 +96,14 @@
 # multiple floating IP pools or complex network requirements.
 # HORIZON_CONFIG["simple_ip_management"] = False
 
-# Turn off browser autocompletion for the login form if so desired.
+# Turn off browser autocompletion for forms including the login form and
+# the database creation workflow if so desired.
 # HORIZON_CONFIG["password_autocomplete"] = "off"
 
 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
+# You can either set it to a specific value or you can let horizon generate a
 # default secret key that is unique on this machine, e.i. regardless of the
 # amount of Python WSGI workers (if used behind Apache+mod_wsgi): However, there
 # may be situations where you would want to set this explicitly, e.g. when
@@ -101,21 +112,22 @@
 # 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_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))
+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
 # memcached set CACHES to something like
 # CACHES = {
 #    'default': {
-#        'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
-#        'LOCATION' : '127.0.0.1:11211',
+#        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
+#        'LOCATION': '127.0.0.1:11211',
 #    }
 #}
 
 CACHES = {
     'default': {
-        'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
     }
 }
 
@@ -161,27 +173,46 @@
     'can_edit_role': True
 }
 
+#Setting this to True, will add a new "Retrieve Password" action on instance,
+#allowing Admin session password retrieval/decryption.
+#OPENSTACK_ENABLE_PASSWORD_RETRIEVE = False
+
 # The Xen Hypervisor has the ability to set the mount point for volumes
 # attached to instances (other Hypervisors currently do not). Setting
 # can_set_mount_point to True will add the option to set the mount point
 # from the UI.
 OPENSTACK_HYPERVISOR_FEATURES = {
     'can_set_mount_point': False,
+    'can_set_password': False,
+}
+
+# The OPENSTACK_CINDER_FEATURES settings can be used to enable optional
+# services provided by cinder that is not exposed by its extension API.
+OPENSTACK_CINDER_FEATURES = {
+    'enable_backup': False,
 }
 
 # The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional
-# services provided by neutron. Options currenly available are load
+# services provided by neutron. Options currently available are load
 # balancer service, security groups, quotas, VPN service.
 OPENSTACK_NEUTRON_NETWORK = {
+    'enable_router': True,
+    'enable_quotas': True,
+    'enable_ipv6': True,
+    'enable_distributed_router': False,
+    'enable_ha_router': False,
     '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',
+    # Set which provider network types are supported. Only the network types
+    # in this list will be available to choose from when creating a network.
+    # Network types include local, flat, vlan, gre, and vxlan.
+    'supported_provider_types': ['*'],
 }
 
 # The OPENSTACK_IMAGE_BACKEND settings can be used to customize features
@@ -189,7 +220,7 @@
 # of supported image formats.
 # OPENSTACK_IMAGE_BACKEND = {
 #     'image_formats': [
-#         ('', ''),
+#         ('', _('Select format')),
 #         ('aki', _('AKI - Amazon Kernel Image')),
 #         ('ami', _('AMI - Amazon Machine Image')),
 #         ('ari', _('ARI - Amazon Ramdisk Image')),
@@ -202,6 +233,22 @@
 #     ]
 # }
 
+# The IMAGE_CUSTOM_PROPERTY_TITLES settings is used to customize the titles for
+# image custom property attributes that appear on image detail pages.
+IMAGE_CUSTOM_PROPERTY_TITLES = {
+    "architecture": _("Architecture"),
+    "kernel_id": _("Kernel ID"),
+    "ramdisk_id": _("Ramdisk ID"),
+    "image_state": _("Euca2ools state"),
+    "project_id": _("Project ID"),
+    "image_type": _("Image Type")
+}
+
+# The IMAGE_RESERVED_CUSTOM_PROPERTIES setting is used to specify which image
+# custom properties should not be displayed in the Image Custom Properties
+# table.
+IMAGE_RESERVED_CUSTOM_PROPERTIES = []
+
 # 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 'publicURL'.
@@ -225,11 +272,14 @@
 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
+# sorted by RAM usage, ascending. If you would like a different sort order,
+# you can provide another flavor attribute as sorting key. Alternatively, you
+# can provide a custom callback method to use for sorting. You can also provide
+# a flag for reverse sort. For more info, see
 # http://docs.python.org/2/library/functions.html#sorted
 # CREATE_INSTANCE_FLAVOR_SORT = {
+#     'key': 'name',
+#      # or
 #     'key': my_awesome_callback_method,
 #     'reverse': False,
 # }
@@ -244,7 +294,11 @@
 # Map of local copy of service policy files
 #POLICY_FILES = {
 #    'identity': 'keystone_policy.json',
-#    'compute': 'nova_policy.json'
+#    'compute': 'nova_policy.json',
+#    'volume': 'cinder_policy.json',
+#    'image': 'glance_policy.json',
+#    'orchestration': 'heat_policy.json',
+#    'network': 'neutron_policy.json',
 #}
 
 # Trove user and database extension support. By default support for
@@ -357,24 +411,30 @@
             'handlers': ['null'],
             'propagate': False,
         },
+        'scss': {
+            'handlers': ['null'],
+            'propagate': False,
+        },
     }
 }
 
+# 'direction' should not be specified for all_tcp/udp/icmp.
+# It is specified in the form.
 SECURITY_GROUP_RULES = {
     'all_tcp': {
-        'name': 'ALL TCP',
+        'name': _('All TCP'),
         'ip_protocol': 'tcp',
         'from_port': '1',
         'to_port': '65535',
     },
     'all_udp': {
-        'name': 'ALL UDP',
+        'name': _('All UDP'),
         'ip_protocol': 'udp',
         'from_port': '1',
         'to_port': '65535',
     },
     'all_icmp': {
-        'name': 'ALL ICMP',
+        'name': _('All ICMP'),
         'ip_protocol': 'icmp',
         'from_port': '-1',
         'to_port': '-1',
@@ -464,3 +524,32 @@
         'to_port': '3389',
     },
 }
+
+# Deprecation Notice:
+#
+# The setting FLAVOR_EXTRA_KEYS has been deprecated.
+# Please load extra spec metadata into the Glance Metadata Definition Catalog.
+#
+# The sample quota definitions can be found in:
+# <glance_source>/etc/metadefs/compute-quota.json
+#
+# The metadata definition catalog supports CLI and API:
+#  $glance --os-image-api-version 2 help md-namespace-import
+#  $glance-manage db_load_metadefs <directory_with_definition_files>
+#
+# See Metadata Definitions on: http://docs.openstack.org/developer/glance/
+
+# Indicate to the Sahara data processing service whether or not
+# automatic floating IP allocation is in effect.  If it is not
+# in effect, the user will be prompted to choose a floating IP
+# pool for use in their cluster.  False by default.  You would want
+# to set this to True if you were running Nova Networking with
+# auto_assign_floating_ip = True.
+# SAHARA_AUTO_IP_ALLOCATION_ENABLED = False
+
+# The hash algorithm to use for authentication tokens. This must
+# match the hash algorithm that the identity server and the
+# auth_token middleware are using. Allowed values are the
+# algorithms supported by Python's hashlib library.
+# OPENSTACK_TOKEN_HASH_ALGORITHM = 'md5'
+
--- a/components/openstack/horizon/files/openstack-dashboard-http.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/openstack-dashboard-http.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,23 +1,35 @@
-<IfDefine 64bit>
-    LoadModule wsgi_module libexec/64/mod_wsgi-2.6.so
-</IfDefine>
-<IfDefine !64bit>
-    LoadModule wsgi_module libexec/mod_wsgi-2.6.so
-</IfDefine>
+LoadModule wsgi_module libexec/mod_wsgi-2.6.so
 
-WSGIScriptAlias /horizon \
-    /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi/django.wsgi
-WSGIDaemonProcess horizon user=webservd group=webservd processes=3 \
-    threads=10
+<VirtualHost *:80>
+    WSGIScriptAlias /horizon \
+        /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi/django.wsgi
+    WSGIDaemonProcess horizon user=webservd group=webservd processes=3 \
+        threads=10
+
+    Alias /static /usr/lib/python2.6/vendor-packages/openstack_dashboard/static/
+
+    <Directory />
+        Options FollowSymLinks
+        AllowOverride None
+    </Directory>
 
-Alias /static /var/lib/openstack_dashboard/static/
+    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/static>
+        Options Indexes FollowSymLinks MultiViews
+        AllowOverride None
+        Order allow,deny
+        Allow from all
+    </Directory>
 
-<Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi>
-    Order allow,deny
-    Allow from all
-</Directory>
+    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi>
+        Options Indexes FollowSymLinks MultiViews
+        AllowOverride None
+        Order allow,deny
+        Allow from all
+    </Directory>
 
-<Directory /var/lib/openstack_dashboard/static>
-    Order allow,deny
-    Allow from all
-</Directory>
+    ErrorLog "|/usr/bin/rotatelogs \
+        /var/lib/openstack_dashboard/horizon_error.log 50M"
+    LogLevel warn
+    CustomLog "|/usr/bin/rotatelogs \
+        /var/lib/openstack_dashboard/horizon_access.log 50M" combined
+</VirtualHost>
--- a/components/openstack/horizon/files/openstack-dashboard-tls.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/openstack-dashboard-tls.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,14 +1,11 @@
-<IfDefine 64bit>
-    LoadModule wsgi_module libexec/64/mod_wsgi-2.6.so
-</IfDefine>
-<IfDefine !64bit>
-    LoadModule wsgi_module libexec/mod_wsgi-2.6.so
-</IfDefine>
+LoadModule ssl_module	libexec/mod_ssl.so
+LoadModule wsgi_module	libexec/mod_wsgi-2.6.so
 
 #
 # Enable Solaris Cryptographic Framework
+# (recommended for SPARC T1/T2/T3 based systems only)
 #
-SSLCryptoDevice pkcs11
+#SSLCryptoDevice pkcs11
 
 <VirtualHost *:80>
     RedirectPermanent /horizon https://openstack.example.com/horizon
@@ -21,12 +18,12 @@
 
     SSLEngine On
 
-    # Disable the known insecure SSLv2 & SSLv3 protocols
-    SSLProtocol all -SSLv2 -SSLv3
+    # Disable the known insecure SSLv3 protocol
+    SSLProtocol all -SSLv3
 
     #
     # For an overview on SSL with Apache see:
-    #    http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html
+    #    http://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
     # For examples on how to configure certificates and keys see:
     #    http://www.akadia.com/services/ssh_test_certificate.html
     #
@@ -39,15 +36,30 @@
     WSGIDaemonProcess horizon user=webservd group=webservd processes=3 \
         threads=10
 
-    Alias /static /var/lib/openstack_dashboard/static/
+    Alias /static /usr/lib/python2.6/vendor-packages/openstack_dashboard/static/
 
-    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi>
+    <Directory />
+        Options FollowSymLinks
+        AllowOverride None
+    </Directory>
+
+    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/static>
+        Options Indexes FollowSymLinks MultiViews
+        AllowOverride None
         Order allow,deny
         Allow from all
     </Directory>
 
-    <Directory /var/lib/openstack_dashboard/static>
+    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi>
+        Options Indexes FollowSymLinks MultiViews
+        AllowOverride None
         Order allow,deny
         Allow from all
     </Directory>
+
+    ErrorLog "|/usr/bin/rotatelogs \
+        /var/lib/openstack_dashboard/horizon_error.log 50M"
+    LogLevel warn
+    CustomLog "|/usr/bin/rotatelogs \
+        /var/lib/openstack_dashboard/horizon_access.log 50M" combined
 </VirtualHost>
--- a/components/openstack/horizon/files/overrides.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/files/overrides.py	Mon Apr 20 12:35:51 2015 -0700
@@ -1,4 +1,4 @@
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -30,7 +30,7 @@
 from openstack_dashboard.dashboards.project.access_and_security.tabs import \
     AccessAndSecurityTabs, APIAccessTab, FloatingIPsTab, KeypairsTab
 from \
-    openstack_dashboard.dashboards.project.images_and_snapshots.images.tables \
+    openstack_dashboard.dashboards.project.images.images.tables \
     import EditImage, DeleteImage, ImagesTable, LaunchImage
 from openstack_dashboard.dashboards.project.instances import tables \
     as project_tables
@@ -74,13 +74,11 @@
 # Remove 'SecurityGroupsTab' tab from Project/Access & Security
 AccessAndSecurityTabs.tabs = (KeypairsTab, FloatingIPsTab, APIAccessTab)
 
-# Remove 'ConsoleTab' tab from Project/Instances/Instance Name
-InstanceDetailTabs.tabs = (OverviewTab, LogTab)
-
-# Remove 'ConfirmResize', 'RevertResize', 'ConsoleLink', 'TogglePause',
+# Remove 'ConfirmResize', 'RevertResize', 'TogglePause',
 # 'ToggleSuspend', 'MigrateInstance' actions from Admin/Instances/Actions
 admin_tables.AdminInstancesTable._meta.row_actions = (
     admin_tables.AdminEditInstance,
+    project_tables.ConsoleLink,
     project_tables.LogLink,
     project_tables.CreateSnapshot,
     project_tables.SoftRebootInstance,
@@ -89,8 +87,8 @@
 )
 
 # Remove 'ConfirmResize', 'RevertResize', 'EditInstanceSecurityGroups',
-# 'ConsoleLink', 'TogglePause', 'ToggleSuspend', 'ResizeLink',
-# 'RebuildInstance' actions from Project/Instances/Actions
+# 'TogglePause', 'ToggleSuspend', 'ResizeLink', 'RebuildInstance' actions
+# from Project/Instances/Actions
 project_tables.InstancesTable._meta.row_actions = (
     project_tables.StartInstance,
     project_tables.CreateSnapshot,
@@ -98,6 +96,7 @@
     project_tables.AssociateIP,
     project_tables.SimpleDisassociateIP,
     project_tables.EditInstance,
+    project_tables.ConsoleLink,
     project_tables.LogLink,
     project_tables.SoftRebootInstance,
     project_tables.RebootInstance,
@@ -105,14 +104,19 @@
     project_tables.TerminateInstance
 )
 
-# Disable 'admin_state' and 'shared' checkboxes in
-# Admin/Networks/Create Network
-CreateNetwork.base_fields['admin_state'].widget.attrs['disabled'] = True
+# Disable 'admin_state' in Admin/Networks/Create Network
+admin_state = CreateNetwork.base_fields['admin_state']
+admin_state.widget.attrs['disabled'] = True
+admin_state.widget.value_from_datadict = lambda *args: True
+
+# Disable 'shared' in Admin/Networks/Create Network. Note that this
+# is unchecked by default.
 CreateNetwork.base_fields['shared'].widget.attrs['disabled'] = True
 
-# Disable 'admin_state' checkbox in
-# Admin/Networks/Network Name/Create Port
-CreatePort.base_fields['admin_state'].widget.attrs['disabled'] = True
+# Disable 'admin_state' in Admin/Networks/Network Name/Create Port
+admin_state = CreatePort.base_fields['admin_state']
+admin_state.widget.attrs['disabled'] = True
+admin_state.widget.value_from_datadict = lambda *args: True
 
 # Remove 'UpdatePort' action from Admin/Networks/Network Name/Actions
 PortsTable._meta.row_actions = (DeletePort,)
@@ -134,11 +138,13 @@
 projectNetworksTable._meta.row_actions = (projectCreateSubnet,
                                           projectDeleteNetwork)
 
-# Disable 'admin_state' checkboxes in Project/Networks/Create Network/Network
-CreateNetworkInfoAction.base_fields['admin_state'].widget.attrs['disabled'] = \
-    True
+# Disable 'admin_state' in Project/Networks/Create Network/Network
+admin_state = CreateNetworkInfoAction.base_fields['admin_state']
+admin_state.widget.attrs['disabled'] = True
+admin_state.widget.value_from_datadict = lambda *args: True
 
-# Disable 'no_gateway' checkboxes in Project/Networks/Create Network/Subnet
+# Disable 'no_gateway' in Project/Networks/Create Network/Network. Note that
+# this is unchecked by default.
 CreateSubnetInfoAction.base_fields['no_gateway'].widget.attrs['disabled'] = \
     True
 
@@ -150,6 +156,3 @@
 # Project/Networks/Create Network/Subnet Detail
 base_fields = CreateSubnetDetailAction.base_fields
 base_fields['host_routes'].widget.attrs['readonly'] = 'readonly'
-
-# Remove 'StackTopologyTab' from Project/Stacks/StackDetailTabs
-StackDetailTabs.tabs = (StackOverviewTab, StackResourcesTab, StackEventsTab)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/font-awesome.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,136 @@
+The MIT License (MIT)
+
+Copyright (c) 
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+============================================================
+
+SIL OFL 1.1 
+
+Copyright (c) , (),
+with Reserved Font Name .
+Copyright (c) , (),
+with Reserved Font Name .
+Copyright (c) , ().
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+============================================================
+
+css/font-awesome.css
+scss/font-awesome.scss
+less/font-awesome.less
+
+/*!
+* Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
+* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+*/
+============================================================
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/hogan.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,212 @@
+The following applies to all products licensed under the Apache 2.0 License:
+
+You may not use the identified files except in compliance with the
+Apache License, Version 2.0 (the "License.")
+ 
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0.  A copy of the license is
+also reproduced below.
+
+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.
+
+		                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all
+other entities that control, are controlled by, or are under common
+control with that entity. For the purposes of this definition,
+"control" means (i) the power, direct or indirect, to cause the
+direction or management of such entity, whether by contract or
+otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or
+Object form, made available under the License, as indicated by a
+copyright notice that is included in or attached to the work
+(an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the purposes
+of this License, Derivative Works shall not include works that remain
+separable from, or merely link (or bind by name) to the interfaces of,
+the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including
+the original version of the Work and any modifications or additions
+to that Work or Derivative Works thereof, that is intentionally
+submitted to Licensor for inclusion in the Work by the copyright owner
+or by an individual or Legal Entity authorized to submit on behalf of
+the copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems,
+and issue tracking systems that are managed by, or on behalf of, the
+Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work,
+where such license applies only to those patent claims licensable
+by such Contributor that are necessarily infringed by their
+Contribution(s) alone or by combination of their Contribution(s)
+with the Work to which such Contribution(s) was submitted. If You
+institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work
+or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate
+as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+Work or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You
+meet the following conditions:
+
+(a) You must give any other recipients of the Work or
+Derivative Works a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works
+that You distribute, all copyright, patent, trademark, and
+attribution notices from the Source form of the Work,
+excluding those notices that do not pertain to any part of
+the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained
+within such NOTICE file, excluding those notices that do not
+pertain to any part of the Derivative Works, in at least one
+of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or,
+within a display generated by the Derivative Works, if and
+wherever such third-party notices normally appear. The contents
+of the NOTICE file are for informational purposes only and
+do not modify the License. You may add Your own attribution
+notices within Derivative Works that You distribute, alongside
+or as an addendum to the NOTICE text from the Work, provided
+that such additional attribution notices cannot be construed
+as modifying the License.
+
+You may add Your own copyright statement to Your modifications and
+may provide additional or different license terms and conditions
+for use, reproduction, or distribution of Your modifications, or
+for any such Derivative Works as a whole, provided Your use,
+reproduction, and distribution of the Work otherwise complies with
+the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+============================================================
+
+web/builds/2.0.0/template-2.0.0.js
+
+/*
+* Copyright 2011 Twitter, Inc.
+* 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.
+*/
--- a/components/openstack/horizon/horizon.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/horizon.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,32 +20,15 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# the static dashboard files need to be written by the webserver, so
-# change their ownership
-<transform dir file \
-    path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/.+ \
-    -> default owner webservd>
-<transform dir file \
-    path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/.+ \
-    -> default group webservd>
-
-# move the openstack_dashboard to var as portions of it need to be writeable
-<transform dir file -> edit path \
-    usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static \
-    var/lib/openstack_dashboard/static>
-<transform dir file path=var/lib/openstack_dashboard/static/(.+) \
-    -> set action.hash \
-    usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/%<1>>
-#
 set name=pkg.fmri \
     value=pkg:/cloud/openstack/horizon@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="OpenStack Horizon (Dashboard)"
 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="Havana $(COMPONENT_VERSION)"
+    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="Juno $(COMPONENT_VERSION)"
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -54,18 +37,22 @@
 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/058
+set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/058 \
+    value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file files/openstack-dashboard-http.conf \
     path=etc/apache2/2.2/samples-conf.d/openstack-dashboard-http.conf
 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=renamenew
+    mode=0644 overlay=allow pkg.tmp.autopyc=false preserve=renameold
 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
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/__init__.py
@@ -90,6 +77,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/context_processors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/contrib/bootstrap_datepicker.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/decorators.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/__init__.py
@@ -97,30 +86,6 @@
 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/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/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/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/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_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/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_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
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/management/commands/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/management/commands/startdash.py
@@ -129,17 +94,22 @@
 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/angular/controllers/dummy.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/angular/controllers/metadata-widget-controller.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/angular/directives/forms.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/angular/horizon.conf.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/angular/horizon.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/angular/services/horizon.utils.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.accordion_nav.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.d3barchart.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.formset_table.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.images.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
@@ -148,31 +118,15 @@
 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.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.tables_inline_edit.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
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery.min.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery.quicksearch.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery.table-sorter.js
-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
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/tests/messages.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/tests/modals.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/tests/tables.js
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/tests/templates.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/jquery/jquery.bootstrap.wizard.js
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tables/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tables/actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tables/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tables/formset.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tables/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tabs/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tabs/base.py
@@ -182,7 +136,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/auth/_login.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/auth/login.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/base.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_accordion_nav.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_conf.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_custom_head_js.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_custom_meta.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_messages.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_nav_list.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_scripts.html
@@ -197,17 +154,26 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/templates.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_breadcrumb.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table_cell.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table_row.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_data_table_row_action.html
 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_action.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_errors.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_form_field.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/_formset_table.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_formset_table_row.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_horizontal_field.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_horizontal_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/_modal_form_update_metadata.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/_region_selector.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_resource_browser.html
@@ -219,22 +185,26 @@
 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/jasmine/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/jasmine/jasmine.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/qunit.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/splash.html
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/branding.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templatetags/form_helpers.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
-file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/fields.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/csvbase.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/functions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/html.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/memoized.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/secret_key.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/urlresolvers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/utils/validators.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/horizon/views.py
@@ -255,14 +225,35 @@
 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/sahara.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/cinder_policy.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/conf/glance_policy.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/conf/heat_policy.json
 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/neutron_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/aggregates/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/_update_metadata.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/manage_hosts.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/templates/aggregates/update_metadata.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/aggregates/workflows.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
@@ -273,57 +264,34 @@
 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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/extras/tables.py
-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/constants.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/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_update_metadata.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/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
-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
 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/templates/flavors/update_metadata.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/compute/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/compute/views.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/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/templates/hypervisors/compute/_evacuate_host.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/templates/hypervisors/compute/evacuate_host.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/hypervisors/templates/hypervisors/detail.html
 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
@@ -334,37 +302,51 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/_update_metadata.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/templates/images/update_metadata.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/templates/info/_cell_status.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/templates/info/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/info/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/templates/instances/_live_migrate.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/templates/instances/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/instances/templates/instances/live_migrate.html
 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/tables.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/daily.html
 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/report.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/agents/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/agents/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/agents/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/agents/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/__init__.py
@@ -381,6 +363,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/_create.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/templates/networks/agents/_add.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/agents/add.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/_create.html
@@ -399,28 +383,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/tests.py
 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/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/index.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/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/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/extensions/routerrules/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/extensions/routerrules/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/forms.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
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/tables.py
@@ -430,34 +397,138 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/templates/routers/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/templates/routers/_update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/templates/routers/detail.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/templates/routers/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/templates/routers/update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/views.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/forms.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/panel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/templates/users/_create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/templates/users/_update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/templates/users/create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/templates/users/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/templates/users/update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/tests.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/urls.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/users/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/panel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/_create_volume_type.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/create_volume_type.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/snapshots/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/snapshots/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/snapshots/_update_status.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/snapshots/update_status.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/_associate_qos_spec.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/_create_qos_spec.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/_create_volume_type.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/_edit_qos_spec_consumer.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/associate_qos_spec.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/create_qos_spec.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/create_volume_type.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/edit_qos_spec_consumer.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/_edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/_index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/extras/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/_edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/_index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/qos_specs/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volume_types/volume_types_tables.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volumes/_update_status.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volumes/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volumes/update_status.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/templates/volumes/volumes/volumes_tables.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/tests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/extras/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/qos_specs/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volume_types/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volumes/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volumes/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volumes/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volumes/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/volumes/volumes/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/templates/domains/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/domains/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/_add_non_member.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/add_non_member.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/manage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/templates/groups/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/groups/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/templates/projects/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/templates/projects/usage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/projects/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/templates/roles/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/templates/roles/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/templates/roles/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/templates/roles/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/templates/roles/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/roles/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/templates/users/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/templates/users/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/templates/users/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/templates/users/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/templates/users/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/identity/users/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/api_access/__init__.py
@@ -512,20 +583,179 @@
 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/_container_metadata.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/_create_pseudo_folder.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/_update.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/create_pseudo_folder.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/update.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/data_processing/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/_configure_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/_create_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/_nodegroups_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/_upload_file.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/cluster_node_groups_template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/cluster_templates.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/configure.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/templates/data_processing.cluster_templates/upload_file.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/workflows/copy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/cluster_templates/workflows/create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_configure_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_create_cluster.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_create_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_instances_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/_nodegroups_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/clusters.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/configure.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/create_cluster.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/templates/data_processing.clusters/scale.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/workflows/create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/clusters/workflows/scale.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/_edit_tags.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/_list_tags.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/_register_image.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/_tag_form.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/edit_tags.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/image_registry.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/templates/data_processing.data_image_registry/register_image.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_image_registry/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/templates/data_processing.data_plugins/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/templates/data_processing.data_plugins/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/templates/data_processing.data_plugins/plugins.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_plugins/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/_create_data_source_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/data_sources.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/data_sources_form_script.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/templates/data_processing.data_sources/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/data_sources/workflows/create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/_create_job_binary_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/job_binaries.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/templates/data_processing.job_binaries/job_binaries_form_script.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_binaries/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/templates/data_processing.job_executions/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/templates/data_processing.job_executions/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/templates/data_processing.job_executions/job_executions.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/job_executions/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/_create_job_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/_create_job_libs_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/_launch_job_configure_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/_launch_job_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/config_template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/jobs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/launch.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/templates/data_processing.jobs/library_template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/workflows/create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/jobs/workflows/launch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/_configure_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/_create_general_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/_fields_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/_service_confs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/configure.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/templates/data_processing.nodegroup_templates/nodegroup_templates.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/workflows/copy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/nodegroup_templates/workflows/create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/utils/anti_affinity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/utils/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/utils/neutron_support.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/data_processing/utils/workflow_helpers.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
@@ -539,17 +769,26 @@
 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/forms.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/_detail_overview_cassandra.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview_couchbase.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview_mongodb.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview_mysql.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_detail_overview_redis.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_network_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/databases/templates/databases/_launch_networks.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/_resize_volume.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/resize_volume.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
@@ -584,60 +823,62 @@
 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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/tabs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/tests.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/urls.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/images/views.py
-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/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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/_create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/_detail_overview.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/_update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/detail.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/images/update.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/index.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/snapshots/_create.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/snapshots/_detail_overview.html
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/templates/images_and_snapshots/snapshots/create.html
-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/images/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/images/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/snapshots/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/snapshots/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/snapshots/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/snapshots/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/snapshots/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/images/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/snapshots/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/templates/images/snapshots/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images/views.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/audit_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/console.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/_decryptpassword.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_audit.html
 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_flavor.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_advanced_help.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/decryptpassword.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/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/utils.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
@@ -667,6 +908,7 @@
 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/utils.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
@@ -687,6 +929,7 @@
 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/tests.py
 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
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/__init__.py
@@ -702,6 +945,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/tables.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/workflows.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/tables.py
@@ -732,6 +976,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/rulemanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/extensions/routerrules/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/panel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/__init__.py
@@ -744,13 +995,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/tabs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/_update.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/extensions/routerrules/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/extensions/routerrules/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/extensions/routerrules/grid.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/index.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/ports/_create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/ports/_setgateway.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/ports/create.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/ports/setgateway.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/templates/routers/update.html
 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
@@ -762,6 +1018,7 @@
 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/_change_template.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_events.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html
@@ -771,42 +1028,93 @@
 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/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/stacks/templates/stacks/change_template.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/templates/stacks/update.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/backups/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/backups/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/panel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/snapshots/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/tabs.py
-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
-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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/_create_backup.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/_restore_backup.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/create_backup.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/backups/restore_backup.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/index.html
-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/templates/volumes/snapshots/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/snapshots/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/snapshots/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/snapshots/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_attach.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_create_snapshot.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_extend.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_extend_limits.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_limits.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_retype.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_snapshot_limits.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/_upload_to_image.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/attach.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/create_snapshot.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/extend.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/retype.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/templates/volumes/volumes/upload_to_image.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/test.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/volumes/volumes/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/volumes/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/volumes/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/volumes/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/volumes/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/volumes/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/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/forms.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/_update_ikepolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecpolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_update_ipsecsiteconnection.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/_update_vpnservice.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/templates/vpn/update_ikepolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecpolicy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/update_ipsecsiteconnection.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/vpn/templates/vpn/update_vpnservice.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
@@ -848,30 +1156,36 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/tests.py
 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/django_pyscss_fix/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_10_project.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_20_admin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_25_identity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_30_settings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_40_router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_50_admin_add_panel.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_60_admin_remove_panel.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_70_admin_default_panel.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_80_admin_add_panel_group.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/_90_admin_add_panel_to_group.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/enabled/__init__.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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/enabled/_40_router.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/enabled/__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/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/fr/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/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_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/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/local/local_settings.py.example
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/management/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/management/commands/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/management/commands/apache_vhost.conf.template
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/management/commands/horizon.wsgi.template \
+    pkg.depend.bypass-generate=.*
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/management/commands/make_web_conf.py
 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/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
@@ -879,90 +1193,129 @@
 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/strutils.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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/img/glyphicons-halflings-white.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/img/glyphicons-halflings.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/accordion.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/alerts.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/bootstrap.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/breadcrumbs.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/button-groups.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/buttons.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/carousel.less
-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
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/hero-unit.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/labels.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/layouts.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/mixins.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/modals.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/navbar.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/navs.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/pager.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/pagination.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/popovers.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/progress-bars.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/reset.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/responsive.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/scaffolding.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/sprites.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/tables.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/thumbnails.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/tooltip.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/type.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/utilities.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/variables.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/less/wells.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap-sprockets.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/affix.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/alert.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/button.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/carousel.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/collapse.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/dropdown.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/modal.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/popover.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/scrollspy.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/tab.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/tooltip.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/js/bootstrap/transition.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/_bootstrap-compass.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/_bootstrap-mincer.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/_bootstrap-sprockets.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_alerts.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_badges.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_breadcrumbs.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_button-groups.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_buttons.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_carousel.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_close.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_code.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_component-animations.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_dropdowns.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_forms.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_glyphicons.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_grid.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_input-groups.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_jumbotron.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_labels.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_list-group.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_media.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_mixins.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_modals.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_navbar.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_navs.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_normalize.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_pager.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_pagination.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_panels.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_popovers.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_print.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_progress-bars.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_responsive-embed.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_responsive-utilities.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_scaffolding.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_tables.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_theme.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_thumbnails.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_tooltip.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_type.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_utilities.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_variables.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/_wells.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/bootstrap.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_alerts.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_background-variant.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_border-radius.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_buttons.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_center-block.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_clearfix.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_forms.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_gradients.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_grid-framework.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_grid.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_hide-text.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_image.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_labels.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_list-group.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_nav-divider.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_nav-vertical-align.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_opacity.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_pagination.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_panels.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_progress-bar.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_reset-filter.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_resize.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_responsive-visibility.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_size.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_tab-focus.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_table-row.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_text-emphasis.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_text-overflow.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/bootstrap/scss/bootstrap/mixins/_vendor-prefixes.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/css/24c5e4c41a70.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/css/rickshaw.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/css/solaris.css
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.eot
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.svg
 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/OpenStack_Dashboard_txt.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/OpenStack_banner.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/OracleSolaris_Logo.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/OracleSolaris_login_banner.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/Oracle_Logo.png
 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/content_tab_bkgd_selected.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/dots.png
 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/dropdown_dwn.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/dropdown_ena.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/header_shadow.png
 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
@@ -970,6 +1323,7 @@
 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/profile_drop.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
@@ -978,36 +1332,648 @@
 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/spinner.gif
 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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/tab_bkgd_deselected.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/tab_bkgd_selected.png
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/unknown-gray.gif
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/unknown-gray.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/unknown-green.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/unknown-red.svg
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/up_arrow.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/less/horizon.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/less/horizon_charts.less
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/less/rickshaw.css
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/css/solaris.css
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/OpenStack_Dashboard_txt.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/Openstack_banner.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/OracleSolaris_Logo.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/OracleSolaris_login_banner.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/Oracle_Logo.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/content_tab_bkgd_selected.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/dots.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/favicon-solaris.ico
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/header_shadow.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/tab_bkgd_deselected.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/img/tab_bkgd_selected.png
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/solaris/theme/_stylesheets.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/js/a1c6730ae0fb.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/js/db5b3a23c36d.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/js/ff63d45232c5.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/manifest.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/_accordion_nav.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/_context_selection.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/_variables.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/components/resource_browser.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/horizon.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/horizon_charts.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/scss/horizon_workflow.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/controllers/dummy.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/controllers/metadata-widget-controller.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/directives/forms.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/horizon.conf.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/horizon.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/angular/services/horizon.utils.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.accordion_nav.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.communication.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.d3barchart.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.d3linechart.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.d3piechart.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.firewalls.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.forms.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.formset_table.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.heattop.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.images.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.instances.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.membership.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.messages.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.modals.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.networktopology.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.quota.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.tables.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.tables_inline_edit.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.tabs.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.templates.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/js/horizon.users.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-animate.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-aria.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-cookies.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-csp.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-loader.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-messages.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-mocks.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-resource.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-route.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-sanitize.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-scenario.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular-touch.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/angular.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/errors.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/version.json
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/angular/version.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/bootstrap-datepicker.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/datepicker.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/datepicker3.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ar.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.az.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.bg.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ca.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.cs.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.cy.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.da.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.de.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.el.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.es.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.et.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.fa.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.fi.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.fr.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.gl.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.he.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.hr.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.hu.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.id.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.is.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.it.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ja.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ka.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.kk.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.kr.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.lt.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.lv.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.mk.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ms.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.nb.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.nl-BE.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.nl.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.no.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.pl.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.pt-BR.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.pt.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ro.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.rs-latin.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.rs.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ru.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.sk.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.sl.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.sq.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.sv.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.sw.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.th.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.tr.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.ua.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.vi.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.zh-CN.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/bootstrap_datepicker/locales/bootstrap-datepicker.zh-TW.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/d3.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/css/font-awesome.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/css/font-awesome.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/fonts/FontAwesome.otf
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.eot
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.svg
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.ttf
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/fonts/fontawesome-webfont.woff
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/bordered-pulled.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/core.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/extras.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/fixed-width.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/font-awesome.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/icons.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/larger.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/list.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/mixins.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/path.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/rotated-flipped.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/spinning.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/stacked.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/less/variables.less
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_bordered-pulled.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_core.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_extras.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_fixed-width.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_icons.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_larger.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_list.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_mixins.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_path.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_rotated-flipped.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_spinning.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_stacked.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/_variables.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/font-awesome/scss/font-awesome.scss
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/hogan.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_flat_10_000000_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_glass_100_f6f6f6_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_glass_100_fdf5ce_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_glass_65_ffffff_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-icons_228ef1_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-icons_ef8c08_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-icons_ffd27a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.min.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.structure.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.structure.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/jquery-ui.theme.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_diagonals-thick_8_333333_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_flat_65_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_glass_40_111111_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_glass_55_1c1c1c_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_highlight-hard_40_aaaaaa_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_highlight-soft_50_aaaaaa_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_inset-hard_45_cd0a0a_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-bg_inset-hard_55_ffeb80_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_4ca300_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_bbbbbb_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_ededed_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_ffcf29_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/black-tie/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_flat_0_333333_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_flat_65_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_flat_75_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-icons_004276_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-icons_cc0000_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/blitzer/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-icons_2694e8_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-icons_2e83ff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-icons_3d80b3_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-icons_72a7cf_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/cupertino/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-bg_loop_25_000000_21x21.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-icons_4b8e0b_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-icons_a83300_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-icons_cccccc_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dark-hive/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_dots-small_20_333333_2x2.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_flat_40_292929_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-icons_00498f_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-icons_98d2fb_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-icons_9ccdfc_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/dot-luv/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_flat_55_994d53_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_flat_55_fafafa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_454545_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_734d99_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_8d78a5_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_a8a3ae_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_ebccce_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/eggplant/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-icons_0a82eb_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-icons_0b54d5_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-icons_5fa5e3_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-icons_fcdd4a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/excite-bike/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_flat_0_eeeeee_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_flat_55_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_flat_75_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_glass_65_ffffff_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-icons_0073ea_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-icons_454545_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-icons_666666_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-icons_ff0084_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/flick/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_diagonals-small_40_db4865_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_93c3cd_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_ff3853_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_diagonals-small_75_ccd232_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_dots-medium_80_ffff38_4x4.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_dots-small_35_35414f_2x2.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_flat_75_ba9217_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_flat_75_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-bg_white-lines_85_f7f7ba_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_454545_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_88a206_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_c02669_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_e1e463_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_ffeb33_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/hot-sneaks/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_glass_25_cb842e_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_glass_70_ede4d4_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_c47a23_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_cb672b_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_f08000_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_f35f07_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_ff7519_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/humanity/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_diagonals-thick_15_444444_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_diagonals-thick_95_ffdc2e_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_glass_55_fbf5d0_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_highlight-hard_30_285c00_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_highlight-soft_33_3a8104_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_highlight-soft_50_4eb305_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_highlight-soft_60_4ca20b_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-bg_inset-soft_10_285c00_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-icons_4eb305_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-icons_72b42d_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/le-frog/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_9bcc60_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_add978_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_e3ddc9_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_f1fd86_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/mint-choc/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_flat_0_eeeeee_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_flat_55_c0402a_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_flat_55_eeeeee_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_glass_100_f8f8f8_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_glass_35_dddddd_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_glass_60_eeeeee_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_inset-hard_75_999999_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-bg_inset-soft_50_c9c9c9_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-icons_3383bb_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-icons_454545_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-icons_70b2e1_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-icons_999999_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/images/ui-icons_fbc856_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/overcast/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_b83400_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/pepper-grinder/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_flat_55_fbec88_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_217bc0_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_2e83ff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_469bdd_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_6da8d5_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_d8e7f3_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/images/ui-icons_f9bd01_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/redmond/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-icons_454545_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-icons_888888_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/smoothness/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_glass_55_fcf0ba_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_gloss-wave_100_ece8da_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-hard_100_f5f3e5_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-hard_100_fafaf4_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-hard_15_459e00_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-hard_95_cccccc_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-soft_25_67b021_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_highlight-soft_95_ffedad_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-bg_inset-soft_15_2b2922_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_808080_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_847e71_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_8DC262_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_eeeeee_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/south-street/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_flat_55_999999_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_flat_75_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_glass_45_0078ae_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_glass_55_f8da4e_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_glass_75_79c9ec_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_0078ae_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_056b93_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_d8e7f3_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_e0fdff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_f5e175_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_f7a50d_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/images/ui-icons_fcd113_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/start/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_diagonals-medium_20_d34d17_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_flat_30_cccccc_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_flat_50_5c5c5c_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_gloss-wave_45_817865_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_gloss-wave_60_fece2f_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_gloss-wave_70_ffdd57_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_gloss-wave_90_fff9e5_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_highlight-soft_100_feeebd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-bg_inset-soft_30_ffffff_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_3d3d3d_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_bd7b00_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_d19405_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_eb990f_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_ed9f26_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_fadc7a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/images/ui-icons_ffe180_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/sunny/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_070603_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_e8e2b5_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_e9cd86_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_efec9f_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_f2ec64_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_f9f2bd_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/images/ui-icons_ff7519_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/swanky-purse/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_diagonals-small_50_262626_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_flat_0_303030_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_flat_0_4c4c4c_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_glass_40_0a0a0a_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_glass_55_f1fbe5_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_glass_60_000000_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_gloss-wave_55_000000_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_gloss-wave_85_9fda58_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-bg_gloss-wave_95_f6ecd5_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_000000_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_1f1f1f_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_9fda58_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_b8ec79_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/trontastic/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-icons_a83300_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-darkness/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-icons_222222_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/ui-lightness/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/animated-overlay.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_flat_0_aaaaaa_40x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_glass_95_fef1ec_1x400.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_gloss-wave_16_121212_500x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_highlight-hard_15_888888_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_highlight-hard_55_555555_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_highlight-soft_35_adadad_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_highlight-soft_60_dddddd_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-bg_inset-soft_15_121212_1x100.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_666666_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_aaaaaa_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_bbbbbb_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_c98000_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_cccccc_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_cd0a0a_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/images/ui-icons_f29a00_256x240.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/jquery-ui.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/jquery-ui.min.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery-ui/ui/themes/vader/theme.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery-migrate.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery-migrate.min.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery.bootstrap.wizard.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery.min.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery.quicksearch.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jquery/jquery.tablesorter.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/jsencrypt/jsencrypt.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/rickshaw.css
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/rickshaw.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/spin.jquery.js
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/horizon/lib/spin.js
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/403.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/404.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/500.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/_header.html
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/_stylesheets.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/context_selection/_domain_list.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/context_selection/_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/context_selection/_project_list.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/context_selection/_region_list.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templates/solaris/_stylesheets.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templatetags/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/templatetags/context_selection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/base.py
@@ -1016,99 +1982,178 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/utils/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/utils/filters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/utils/settings.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/wsgi/django.wsgi
 dir  path=var/lib/openstack_dashboard owner=webservd group=webservd
-link path=var/lib/openstack_dashboard/static/horizon \
-    target=../../../../../usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon
+#
 license horizon.license license="Apache v2.0" \
     com.oracle.info.description="Horizon, the OpenStack web based user interface service" \
-    com.oracle.info.name=$(COMPONENT_NAME) com.oracle.info.tpno=17862 \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_HORIZON) \
     com.oracle.info.version=$(IPS_COMPONENT_VERSION)
-license solaris.css.license license="Apache v2.0 (Solaris theme)" \
-    com.oracle.info.description="the Solaris theme for the OpenStack Dashboard" \
-    com.oracle.info.name=$(COMPONENT_NAME) com.oracle.info.tpno=16775 \
-    com.oracle.info.version=1.0
+license bootstrap-datepicker.license \
+    license="Apache v2.0 (bootstrap-datepicker)" \
+    com.oracle.info.description="Bootstrap Datepicker JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_BOOTSTRAP_DP) \
+    com.oracle.info.version=$(VERSION_BOOTSTRAP_DP)
+license hogan.license license="Apache v2.0 (hogan)" \
+    com.oracle.info.description="Hogan JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) com.oracle.info.tpno=$(TPNO_HOGAN) \
+    com.oracle.info.version=$(VERSION_HOGAN)
+license d3.license license="BSD, Apache v2.0 (d3)" \
+    com.oracle.info.description="D3 JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) com.oracle.info.tpno=$(TPNO_D3) \
+    com.oracle.info.version=$(VERSION_D3)
+license bootstrap-scss.license license="MIT (Bootstrap-SCSS)" \
+    com.oracle.info.description="Bootstrap SCSS JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_BOOTSTRAP_SCSS) \
+    com.oracle.info.version=$(VERSION_BOOTSTRAP_SCSS)
+license angular.license license="MIT (angularjs)" \
+    com.oracle.info.description="AngularJS JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_ANGULAR) \
+    com.oracle.info.version=$(VERSION_ANGULAR)
+license jquery.license license="MIT (jquery)" \
+    com.oracle.info.description="jQuery JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JQUERY) \
+    com.oracle.info.version=$(VERSION_JQUERY)
+license jquery-migrate.license license="MIT (jquery-migrate)" \
+    com.oracle.info.description="jQuery-Migrate JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JQUERY_MIGRATE) \
+    com.oracle.info.version=$(VERSION_JQUERY_MIGRATE)
+license jquery-quicksearch.license license="MIT (jquery-quicksearch)" \
+    com.oracle.info.description="jQuery-Quicksearch JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JQUERY_QUICKSEARCH) \
+    com.oracle.info.version=$(VERSION_JQUERY_QS)
+license jquery-tablesorter.license license="MIT (jquery-tablesorter)" \
+    com.oracle.info.description="jQuery-Tablesorter JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JQUERY_TABLESORTER) \
+    com.oracle.info.version=$(VERSION_JQUERY_TS)
+license jquery-ui.license license="MIT (jquery-ui)" \
+    com.oracle.info.description="jQuery-UI JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JQUERY_UI) \
+    com.oracle.info.version=$(VERSION_JQUERY_UI)
+license jsencrypt.license license="MIT (jsencrypt)" \
+    com.oracle.info.description="JSEncrypt JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_JSENCRYPT) \
+    com.oracle.info.version=$(VERSION_JSENCRYPT)
+license spin.license license="MIT (spin)" \
+    com.oracle.info.description="Spin JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) com.oracle.info.tpno=$(TPNO_SPIN) \
+    com.oracle.info.version=$(VERSION_SPIN)
+license rickshaw.license license="MIT, Apache v2.0 (rickshaw)" \
+    com.oracle.info.description="Rickshaw JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_RICKSHAW) \
+    com.oracle.info.version=$(VERSION_RICKSHAW)
+license font-awesome.license license="MIT, OFL (font-awesome)" \
+    com.oracle.info.description="Font-Awesome JavaScript Library" \
+    com.oracle.info.name=$(COMPONENT_NAME) \
+    com.oracle.info.tpno=$(TPNO_FONT_AWESOME) \
+    com.oracle.info.version=$(VERSION_FONT_AWESOME)
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
 
-# force a group dependency on the optional troveclient; pkgdepend work is needed
+# force a group dependency on the optional simplejson; pkgdepend work is needed
 # to flush this out.
-depend type=group fmri=library/python/troveclient-26
+depend type=group fmri=library/python-2/simplejson-$(PYV)
 
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
 
-# force a dependency on django_compressor; one of the applications defined in
-# settings.py
-depend type=require fmri=library/python-2/django_compressor-26
-
-# force a dependency on django_openstack_auth; pkgdepend work is needed to flush
-# this out
-depend type=require fmri=library/python-2/django_openstack_auth-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 kombu; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python-2/kombu-26
-
-# force a dependency on lesscpy; one of the filters defined in settings.py
-depend type=require fmri=library/python-2/lesscpy-26
-
-# force a dependency on lockfile; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python-2/lockfile-26
-
-# force a dependency on netaddr; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python-2/netaddr-26
-
-# force a dependency on pytz; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python-2/pytz-26
+# force a dependency on babel; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/babel-$(PYV)
 
 # force a dependency on ceilometerclient; pkgdepend work is needed to flush this
 # out
-depend type=require fmri=library/python/ceilometerclient-26
+depend type=require fmri=library/python/ceilometerclient-$(PYV)
 
 # force a dependency on cinderclient; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/cinderclient-26
+depend type=require fmri=library/python/cinderclient-$(PYV)
 
 # force a dependency on django; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/django-26
+depend type=require fmri=library/python/django-$(PYV)
+
+# force a dependency on django-pyscss; one of the applications defined in
+# settings.py
+depend type=require fmri=library/python/django-pyscss-$(PYV)
+
+# force a dependency on django_compressor; one of the applications defined in
+# settings.py
+depend type=require fmri=library/python-2/django_compressor-$(PYV)
+
+# force a dependency on django_openstack_auth; pkgdepend work is needed to flush
+# this out
+depend type=require fmri=library/python-2/django_openstack_auth-$(PYV)
 
 # force a dependency on glanceclient; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/glanceclient-26
+depend type=require fmri=library/python/glanceclient-$(PYV)
 
 # force a dependency on heatclient; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/heatclient-26
+depend type=require fmri=library/python/heatclient-$(PYV)
+
+# force a dependency on httplib2; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/httplib2-$(PYV)
 
 # force a dependency on iso8601; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/iso8601-26
+depend type=require fmri=library/python/iso8601-$(PYV)
 
 # force a dependency on keystoneclient; pkgdepend work is needed to flush this
 # out
-depend type=require fmri=library/python/keystoneclient-26
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on lockfile; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/lockfile-$(PYV)
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/netaddr-$(PYV)
 
 # force a dependency on neutronclient; pkgdepend work is needed to flush this
 # out
-depend type=require fmri=library/python/neutronclient-26
+depend type=require fmri=library/python/neutronclient-$(PYV)
 
 # force a dependency on novaclient; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/novaclient-26
+depend type=require fmri=library/python/novaclient-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/oslo.config-$(PYV)
 
 # force a dependency on pbr; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/pbr-26
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on pytz; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/pytz-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on saharaclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/saharaclient-$(PYV)
 
 # force a dependency on six; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/six-26
+depend type=require fmri=library/python/six-$(PYV)
 
 # force a dependency on swiftclient; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python/swiftclient-26
+depend type=require fmri=library/python/swiftclient-$(PYV)
+
+# force a dependency on troveclient; pkgdepend work is needed to flush this
+# out
+depend type=require fmri=library/python/troveclient-$(PYV)
 
 # force a dependency on the Apache web server
 depend type=require fmri=web/server/apache-22
 
-# force a dependency on the apache-wsgi module
-depend type=require fmri=web/server/apache-22/module/apache-wsgi-26
+# force a dependency on the mod_wsgi module
+depend type=require fmri=web/server/apache-22/module/apache-wsgi-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jquery-migrate.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,22 @@
+Copyright 2013 jQuery Foundation and other contributors
+http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jquery-quicksearch.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,31 @@
+Copyright 2013 Deux Huit Huit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+============================================================
+
+./src/jquery.quicksearch.js
+
+/*! jQuery-QuickSearch - v2.0.2 - 2013-11-15
+* Copyright (c) 2013 Deux Huit Huit (http://deuxhuithuit.com/);
+* Licensed MIT http://deuxhuithuit.mit-license.org */
+/**
+* Copyrights: Deux Huit Huit, Rik Lomas.
+* Licensed MIT: http://deuxhuithuit.mit-license.org
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jquery-tablesorter.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,717 @@
+The MIT License (MIT)
+
+Copyright (c) 
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+============================================================
+
+			GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+js/jquery.tablesorter.js
+
+/**!
+* TableSorter 2.14.5 - Client-side table sorting with ease!
+* @requires jQuery v1.2.6+
+*
+* Copyright (c) 2007 Christian Bach
+* Examples and docs at: http://tablesorter.com
+* Dual licensed under the MIT and GPL licenses:
+* http://www.opensource.org/licenses/mit-license.php
+* http://www.gnu.org/licenses/gpl.html
+*
+* @type jQuery
+* @name tablesorter
+* @cat Plugins/Tablesorter
+* @author Christian Bach/[email protected]
+* @contributor Rob Garrison/https://github.com/Mottie/tablesorter
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jquery-ui.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,25 @@
+Copyright (c) 2010 Paul Bakaus, http://jqueryui.com/
+ 
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+contribution history, see the revision history and logs, available at
+http://jquery-ui.googlecode.com/svn/.
+ 
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+ 
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jquery.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,21 @@
+Copyright (c) 2011 John Resig, http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaininga
+copy of this software and associated documentation files
+(the"Software"), to deal in the Software without restriction,
+includingwithout limitation the rights to use, copy, modify, merge,
+publish,distribute, sublicense, and/or sell copies of the Software,
+and topermit persons to whom the Software is furnished to do so,
+subject tothe following conditions:
+
+The above copyright notice and this permission notice shall beincluded
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ANDNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BELIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTIONOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTIONWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/jsencrypt.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,132 @@
+The MIT License (MIT)
+Copyright (c) 2013 AllPlayers.com
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+CONTAINS CODE FROM YUI LIBRARY SEE LICENSE @
+http://yuilibrary.com/license/
+
+The 'jsrsasign'(RSA-Sign JavaScript Library) License
+
+Copyright (c) 2010-2013 Kenji Urushima
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005  Tom Wu
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+  Tom Wu
+  [email protected]
+
+ASN.1 JavaScript decoder
+Copyright (c) 2008-2013 Lapo Luchini <[email protected]>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Copyright (c) 2013, Yahoo! Inc. All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the
+following conditions are met:
+
+Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+Neither the name of Yahoo! Inc. nor the names of YUI's contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission of Yahoo! Inc.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- a/components/openstack/horizon/patches/01-CVE-2014-0157.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-Upstream patch for CVE-2014-0157.  This issue is fixed in Icehouse
-2014.1 and Havana 2013.2.4.
-
-From 54ec015f720a4379e8ffc34345b3a7bf36b6f15b Mon Sep 17 00:00:00 2001
-From: CristianFiorentino <[email protected]>
-Date: Mon, 10 Mar 2014 17:36:31 -0300
-Subject: [PATCH] Introduces escaping in Horizon/Orchestration
-
-1) Escape help_text a second time to avoid bootstrap tooltip XSS issue
-
-The "Description" parameter in a Heat template is used to populate
-a help_text tooltip in the dynamically generated Heat form. Bootstrap
-inserts this tooltip into the DOM using .html() which undoes any
-escaping we do in Django (it should be using .text()).
-
-This was fixed by forcing the help_text content to be escaped a second
-time. The issue itself is mitigated in bootstrap.js release 2.0.3
-(ours is currently 2.0.1).
-
-2) Properly escape untrusted Heat template 'outputs'
-
-The 'outputs' parameter in a Heat template was included in a Django
-template with HTML autoescaping turned off. Malicious HTML content
-could be included in a Heat template and would be rendered by Horizon
-when details about a created stack were displayed.
-
-This was fixed by not disabling autoescaping and explicitly escaping
-untrusted values in any strings that are later marked "safe" to render
-without further escaping.
-
-Conflicts:
-	openstack_dashboard/dashboards/project/stacks/mappings.py
-
-Change-Id: Icd9f9d9ca77068b12227d77469773a325c840001
-Closes-Bug: #1289033
-Co-Authored-By: Kieran Spear <[email protected]>
----
- horizon/templates/horizon/common/_form_fields.html |    7 ++++++-
- .../dashboards/project/stacks/mappings.py          |   10 ++++++++--
- .../stacks/templates/stacks/_detail_overview.html  |    3 +--
- .../dashboards/project/stacks/tests.py             |   17 +++++++++++------
- 4 files changed, 26 insertions(+), 11 deletions(-)
-
-diff --git a/horizon/templates/horizon/common/_form_fields.html b/horizon/templates/horizon/common/_form_fields.html
-index 3567614..f6fb98f 100644
---- a/horizon/templates/horizon/common/_form_fields.html
-+++ b/horizon/templates/horizon/common/_form_fields.html
-@@ -14,7 +14,12 @@
-         <span class="help-inline">{{ error }}</span>
-       {% endfor %}
-     {% endif %}
--    <span class="help-block">{{ field.help_text }}</span>
-+    {% comment %}
-+    Escape help_text a second time here, to avoid an XSS issue in bootstrap.js.
-+    This can most likely be removed once we upgrade bootstrap.js past 2.0.2.
-+    Note: the spaces are necessary here.
-+    {% endcomment %}
-+    <span class="help-block">{% filter force_escape %} {{ field.help_text }} {% endfilter %} </span>
-     <div class="input">
-       {{ field }}
-     </div>
-diff --git a/openstack_dashboard/dashboards/project/stacks/mappings.py b/openstack_dashboard/dashboards/project/stacks/mappings.py
-index 0353291..f1389c5 100644
---- a/openstack_dashboard/dashboards/project/stacks/mappings.py
-+++ b/openstack_dashboard/dashboards/project/stacks/mappings.py
-@@ -19,6 +19,8 @@ import urlparse
- 
- from django.core.urlresolvers import reverse  # noqa
- from django.template.defaultfilters import register  # noqa
-+from django.utils import html
-+from django.utils import safestring
- 
- from openstack_dashboard.api import swift
- 
-@@ -76,11 +78,15 @@ def stack_output(output):
-     if not output:
-         return u''
-     if isinstance(output, dict) or isinstance(output, list):
--        return u'<pre>%s</pre>' % json.dumps(output, indent=2)
-+        json_string = json.dumps(output, indent=2)
-+        safe_output = u'<pre>%s</pre>' % html.escape(json_string)
-+        return safestring.mark_safe(safe_output)
-     if isinstance(output, basestring):
-         parts = urlparse.urlsplit(output)
-         if parts.netloc and parts.scheme in ('http', 'https'):
--            return u'<a href="%s" target="_blank">%s</a>' % (output, output)
-+            url = html.escape(output)
-+            safe_link = u'<a href="%s" target="_blank">%s</a>' % (url, url)
-+            return safestring.mark_safe(safe_link)
-     return unicode(output)
- 
- 
-diff --git a/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html b/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html
-index f4756e0..33fe783 100644
---- a/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html
-+++ b/openstack_dashboard/dashboards/project/stacks/templates/stacks/_detail_overview.html
-@@ -36,9 +36,8 @@
-     <dt>{{ output.output_key }}</dt>
-     <dd>{{ output.description }}</dd>
-     <dd>
--    {% autoescape off %}
-     {{ output.output_value|stack_output }}
--    {% endautoescape %}</dd>
-+    </dd>
-     {% endfor %}
-   </dl>
- </div>
-diff --git a/openstack_dashboard/dashboards/project/stacks/tests.py b/openstack_dashboard/dashboards/project/stacks/tests.py
-index 408d86f..986e3e0 100644
---- a/openstack_dashboard/dashboards/project/stacks/tests.py
-+++ b/openstack_dashboard/dashboards/project/stacks/tests.py
-@@ -16,6 +16,7 @@ import json
- 
- from django.core.urlresolvers import reverse  # noqa
- from django import http
-+from django.utils import html
- 
- from mox import IsA  # noqa
- 
-@@ -77,12 +78,16 @@ class MappingsTests(test.TestCase):
-         self.assertEqual(u'foo', mappings.stack_output('foo'))
-         self.assertEqual(u'', mappings.stack_output(None))
- 
--        self.assertEqual(
--            u'<pre>[\n  "one", \n  "two", \n  "three"\n]</pre>',
--            mappings.stack_output(['one', 'two', 'three']))
--        self.assertEqual(
--            u'<pre>{\n  "foo": "bar"\n}</pre>',
--            mappings.stack_output({'foo': 'bar'}))
-+        outputs = ['one', 'two', 'three']
-+        expected_text = """[\n  "one", \n  "two", \n  "three"\n]"""
-+
-+        self.assertEqual(u'<pre>%s</pre>' % html.escape(expected_text),
-+                         mappings.stack_output(outputs))
-+
-+        outputs = {'foo': 'bar'}
-+        expected_text = """{\n  "foo": "bar"\n}"""
-+        self.assertEqual(u'<pre>%s</pre>' % html.escape(expected_text),
-+                         mappings.stack_output(outputs))
- 
-         self.assertEqual(
-             u'<a href="http://www.example.com/foo" target="_blank">'
--- 
-1.7.9.5
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/01-osprofiler.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,19 @@
+In-house patch to address
+https://bugs.launchpad.net/osprofiler/+bug/1361235 in Horizon.
+
+--- horizon-2014.2.1/openstack_dashboard/wsgi/django.wsgi.orig	2014-11-13 15:02:19.599694847 -0700
++++ horizon-2014.2.1/openstack_dashboard/wsgi/django.wsgi	2014-11-13 15:03:31.633159017 -0700
+@@ -5,7 +5,12 @@ import django.core.handlers.wsgi
+ from django.conf import settings
+ 
+ # Add this file path to sys.path in order to import settings
+-sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..'))
++
++# XXX workaround until
++# https://bugs.launchpad.net/osprofiler/+bug/1361235 in osprofiler is
++# fixed
++# sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..'))
++sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), os.path.realpath('../..')))
+ os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings'
+ sys.stdout = sys.stderr
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/02-change-angular-imports.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,26 @@
+In-house patch to change how angularjs is imported.  In
+XStatic-Angular-1.3.7.0, angular_cookies and angular_mock were rolled
+into the angular pacakge.
+
+--- horizon-2014.2.1/openstack_dashboard/settings.py.orig	2015-01-15 19:27:56.738322606 -0700
++++ horizon-2014.2.1/openstack_dashboard/settings.py	2015-01-15 19:28:26.944716700 -0700
+@@ -24,8 +24,6 @@ import warnings
+ from django.utils.translation import ugettext_lazy as _
+ import xstatic.main
+ import xstatic.pkg.angular
+-import xstatic.pkg.angular_cookies
+-import xstatic.pkg.angular_mock
+ import xstatic.pkg.bootstrap_datepicker
+ import xstatic.pkg.bootstrap_scss
+ import xstatic.pkg.d3
+@@ -155,10 +153,6 @@ STATICFILES_FINDERS = (
+ STATICFILES_DIRS = [
+     ('horizon/lib/angular',
+         xstatic.main.XStatic(xstatic.pkg.angular).base_dir),
+-    ('horizon/lib/angular',
+-        xstatic.main.XStatic(xstatic.pkg.angular_cookies).base_dir),
+-    ('horizon/lib/angular',
+-        xstatic.main.XStatic(xstatic.pkg.angular_mock).base_dir),
+     ('horizon/lib/bootstrap_datepicker',
+         xstatic.main.XStatic(xstatic.pkg.bootstrap_datepicker).base_dir),
+     ('bootstrap',
--- a/components/openstack/horizon/patches/02-launchpad-1264228.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-This proposed upstream patch addresses
-
-	18562372 Failed to create a new project under Horizon
-
-and is tracked under Launchpad bug 1264228. Although it's been
-addressed in Icehouse 2014.1, the patch below is still not yet released
-for Havana.  It has been modified to apply cleanly into our current
-Havana implementation
-
-From e02eaab30996af7e8770cd651bd8aa7d504358a8 Mon Sep 17 00:00:00 2001
-From: JiaHao Li <[email protected]>
-Date: Thu, 26 Dec 2013 15:37:14 +0800
-Subject: [PATCH] Sync OPENSTACK_KEYSTONE_DEFAULT_ROLE with keystone
-
-For now, keystone default role is _member_, while horizon set
-OPENSTACK_KEYSTONE_DEFAULT_ROLE to Member. It will really be user
-friendly to modify horizon default value to _member_ to sync with
-keystone's default setting.
-
-Conflicts:
-
-    doc/source/topics/settings.rst
-
-Change-Id: I55d15e6cfb74e52e933c5a44efd6c27930415738
-Closes-Bug: #1264228
-(cherry picked from commit 0aacc44f324c3db049f912da1f84d93c1142cb37)
----
- doc/source/topics/settings.rst                     |    2 +-
- .../local/local_settings.py.example                |    2 +-
- openstack_dashboard/test/settings.py               |    2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/doc/source/topics/settings.rst b/doc/source/topics/settings.rst
-index 1f5eeea..2b2eabd 100644
---- a/doc/source/topics/settings.rst
-+++ b/doc/source/topics/settings.rst
-@@ -176,7 +176,7 @@ If you do not have multiple regions you should use the ``OPENSTACK_HOST`` and
- ``OPENSTACK_KEYSTONE_DEFAULT_ROLE``
- -----------------------------------
- 
--Default: "Member"
-+Default: "_member_"
- 
- The name of the role which will be assigned to a user when added to a project.
- This name must correspond to a role name in Keystone.
-diff --git a/openstack_dashboard/local/local_settings.py.example b/openstack_dashboard/local/local_settings.py.example
-index a1a8474..92fcc16 100644
---- a/openstack_dashboard/local/local_settings.py.example
-+++ b/openstack_dashboard/local/local_settings.py.example
-@@ -126,7 +126,7 @@ EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
- 
- 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
-diff --git a/openstack_dashboard/test/settings.py b/openstack_dashboard/test/settings.py
-index 85f470d..08086a2 100644
---- horizon-2013.2.3/openstack_dashboard/test/settings.py.~1~	2014-04-03 11:45:53.000000000 -0700
-+++ horizon-2013.2.3/openstack_dashboard/test/settings.py	2014-05-19 11:50:14.914650963 -0700
-@@ -85,7 +85,7 @@
- }
- 
- OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v2.0"
--OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
-+OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_"
- 
- OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
- OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'test_domain'
--- a/components/openstack/horizon/patches/03-launchpad-1254694.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-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 05ba5f81c390efbb6e5eb98db62f8f2599389ddb
-Author: Matt Fischer <[email protected]>
-Date:   Thu Jan 9 15:35:38 2014 -0700
-
-    Don't reset LOCAL_PATH if it's already set
-    
-    If LOCAL_PATH is set in local_settings, then settings should
-    not override it, even if SECRET_KEY is unset.
-    
-    Change-Id: I6aca03f65afddffb6cdd00e4084a8ab9b2255ef1
-    Closes-Bug: #1254694
-
-diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py
---- horizon-2013.2.3/openstack_dashboard/settings.py.~1~	2014-04-03 11:45:53.000000000 -0700
-+++ horizon-2013.2.3/openstack_dashboard/settings.py	2014-05-25 13:48:46.166574128 -0700
-@@ -206,6 +206,7 @@
- }
- 
- SECRET_KEY = None
-+LOCAL_PATH = None
- 
- try:
-     from local.local_settings import *  # noqa
-@@ -216,9 +217,11 @@
- # file is present. See local_settings.py.example for full documentation on the
- # horizon.utils.secret_key module and its use.
- if not SECRET_KEY:
-+    if not LOCAL_PATH:
-+        LOCAL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
-+                                  'local')
-+
-     from horizon.utils import secret_key
--    LOCAL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)),
--                              'local')
-     SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH,
-                                                        '.secret_key_store'))
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/03-remove-qunit.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,34 @@
+In-house patch to remove qunit from Horizon.  This JavaScript library
+is only used for testing and not used by Horizon during normal
+operation.
+
+--- horizon-2014.2.1/horizon/site_urls.py.orig      2015-02-02 14:37:19.045936926 -0700
++++ horizon-2014.2.1/horizon/site_urls.py        2015-02-02 14:37:41.486751441 -0700
+@@ -41,7 +41,4 @@ urlpatterns += patterns('',
+
+ if settings.DEBUG:
+     urlpatterns += patterns('',
+-        url(r'^qunit/$',
+-            TemplateView.as_view(template_name="horizon/qunit.html"),
+-            name='qunit_tests'),
+         url(r'^jasmine/(.*?)$', jasmine.dispatcher))
+
+--- horizon-2014.2.1/openstack_dashboard/settings.py.orig 2015-02-02 14:40:40.569743749 -0700
++++ horizon-2014.2.1/openstack_dashboard/settings.py 2015-02-02 14:40:49.741507297 -0700
+@@ -36,7 +36,6 @@ import xstatic.pkg.jquery_quicksearch
+ import xstatic.pkg.jquery_tablesorter
+ import xstatic.pkg.jquery_ui
+ import xstatic.pkg.jsencrypt
+-import xstatic.pkg.qunit
+ import xstatic.pkg.rickshaw
+ import xstatic.pkg.spin
+
+@@ -175,8 +174,6 @@ STATICFILES_DIRS = [
+         xstatic.main.XStatic(xstatic.pkg.jquery_tablesorter).base_dir),
+     ('horizon/lib/jsencrypt',
+         xstatic.main.XStatic(xstatic.pkg.jsencrypt).base_dir),
+-    ('horizon/lib/qunit',
+-        xstatic.main.XStatic(xstatic.pkg.qunit).base_dir),
+     ('horizon/lib',
+         xstatic.main.XStatic(xstatic.pkg.rickshaw).base_dir),
+     ('horizon/lib',
--- a/components/openstack/horizon/patches/04-blue-piechart.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-Internal only patch to change the color of pie charts drawn by
-Horizon to blue.  This patch is a recommendation from the UX design
-team and will not be committed upsteam.
-
---- horizon-2013.2.3/horizon/static/horizon/js/horizon.d3piechart.js.orig  2014-06-11 13:19:35.874027396 -0600
-+++ horizon-2013.2.3/horizon/static/horizon/js/horizon.d3piechart.js       2014-06-11 13:19:42.692287410 -0600
-@@ -17,9 +17,13 @@
-   r: 45,
-   bkgrnd: "#F2F2F2",
-   frgrnd: "#006CCF",
--  full: "#D0342B",
--  nearlyfull: "orange",
--
-+  full: "#006CCF",
-+  nearlyfull: "006CCF",
-+  
-+  // frgrnd: "#006CCF",
-+  // full: "#D0342B",
-+  // nearlyfull: "orange",
-+  
-   init: function() {
-     var self = this;
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/04-remove-jasmine.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,43 @@
+In-house patch to remove jasmine.js from Horizon.  This JavaScript
+library is only used for testing and not used by Horizon during normal
+operation.
+
+--- horizon-2014.2.1/horizon/site_urls.py.orig    2015-02-02 15:31:57.209242227 -0700
++++ horizon-2014.2.1/horizon/site_urls.py        2015-02-02 15:32:11.276168850 -0700
+@@ -22,8 +22,6 @@ from django.conf.urls import patterns
+ from django.conf.urls import url
+ from django.views.generic import TemplateView  # noqa
+
+-from horizon.test.jasmine import jasmine
+-
+ urlpatterns = patterns('horizon.views',
+     url(r'^home/$', 'user_home', name='user_home')
+ )
+@@ -38,7 +36,3 @@ urlpatterns += patterns('',
+         name="set_language"),
+     url(r'^i18n/', include('django.conf.urls.i18n'))
+ )
+-
+-if settings.DEBUG:
+-    urlpatterns += patterns('',
+-        url(r'^jasmine/(.*?)$', jasmine.dispatcher))
+
+--- horizon-2014.2.1/openstack_dashboard/settings.py.orig 2015-02-02 15:33:37.928460972 -0700
++++ horizon-2014.2.1/openstack_dashboard/settings.py 2015-02-02 15:33:58.344285143 -0700
+@@ -29,7 +29,6 @@ import xstatic.pkg.bootstrap_scss
+ import xstatic.pkg.d3
+ import xstatic.pkg.font_awesome
+ import xstatic.pkg.hogan
+-import xstatic.pkg.jasmine
+ import xstatic.pkg.jquery
+ import xstatic.pkg.jquery_migrate
+ import xstatic.pkg.jquery_quicksearch
+@@ -162,8 +161,6 @@ STATICFILES_DIRS = [
+         xstatic.main.XStatic(xstatic.pkg.hogan).base_dir),
+     ('horizon/lib/font-awesome',
+         xstatic.main.XStatic(xstatic.pkg.font_awesome).base_dir),
+-    ('horizon/lib/jasmine-1.3.1',
+-        xstatic.main.XStatic(xstatic.pkg.jasmine).base_dir),
+     ('horizon/lib/jquery',
+         xstatic.main.XStatic(xstatic.pkg.jquery).base_dir),
+     ('horizon/lib/jquery',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/05-disable-unsupported-bootsource.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,28 @@
+Internal patch to only enable the current supported boot source (Boot
+from Image).  This patch will not be committed upstream.
+
+--- horizon-2014.2.2/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py.~1~	2014-10-16 06:20:50.000000000 -0700
++++ horizon-2014.2.2/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py	2014-10-24 11:58:37.591052103 -0700
+@@ -141,22 +141,7 @@ class SetInstanceDetailsAction(workflows
+         source_type_choices = [
+             ('', _("Select source")),
+             ("image_id", _("Boot from image")),
+-            ("instance_snapshot_id", _("Boot from snapshot")),
+         ]
+-        if base.is_service_enabled(request, 'volume'):
+-            source_type_choices.append(("volume_id", _("Boot from volume")))
+-
+-            try:
+-                if api.nova.extension_supported("BlockDeviceMappingV2Boot",
+-                                                request):
+-                    source_type_choices.append(("volume_image_id",
+-                            _("Boot from image (creates a new volume)")))
+-            except Exception:
+-                exceptions.handle(request, _('Unable to retrieve extensions '
+-                                            'information.'))
+-
+-            source_type_choices.append(("volume_snapshot_id",
+-                    _("Boot from volume snapshot (creates a new volume)")))
+         self.fields['source_type'].choices = source_type_choices
+ 
+     def clean(self):
--- a/components/openstack/horizon/patches/05-launchpad-1260439.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-This proposed upstream patch addresses
-
-	18720708 Error: Unable to add userto primary project when adding user
-		 via Horizon
-
-and is tracked under Launchpad bug 1260439. Although it's been
-addressed in the Juno trunk, the patch below is still not yet released
-for Havana.  It has been modified to apply cleanly into our current
-Havana implementation
-
-commit f5ded29d9a73db4c225cbfb664e7d85e5aa0996b
-Author: Matthias Runge <[email protected]>
-Date:   Fri May 23 11:36:54 2014 +0200
-
-    Prevent error message when creating a user
-    
-    keystone changed behaviour and didn't add the user
-    to the specified role. Now it does; this patch
-    prevents an exception popping up without breaking
-    with previous versions.
-    
-    Change-Id: I115a5126b70ae3c7733aa065bf55104f88cc42e5
-    Closes-Bug: #1260439
-
---- horizon-2013.2.3/openstack_dashboard/dashboards/admin/users/forms.py.~1~	2014-04-03 11:45:53.000000000 -0700
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/admin/users/forms.py	2014-06-11 12:54:51.517905246 -0700
-@@ -122,15 +122,21 @@
-                              _('User "%s" was successfully created.')
-                              % data['name'])
-             if data['role_id']:
--                try:
--                    api.keystone.add_tenant_user_role(request,
--                                                      data['project'],
--                                                      new_user.id,
--                                                      data['role_id'])
--                except Exception:
--                    exceptions.handle(request,
--                                      _('Unable to add user '
--                                        'to primary project.'))
-+                roles = api.keystone.roles_for_user(request,
-+                                        new_user.id,
-+                                        data['project']) or []
-+                assigned = [role for role in roles if role.id == str(
-+                    data['role_id'])]
-+                if not assigned:
-+                    try:
-+                        api.keystone.add_tenant_user_role(request,
-+                                                        data['project'],
-+                                                        new_user.id,
-+                                                        data['role_id'])
-+                    except Exception:
-+                        exceptions.handle(request,
-+                                        _('Unable to add user '
-+                                            'to primary project.'))
-             return new_user
-         except Exception:
-             exceptions.handle(request, _('Unable to create user.'))
---- horizon-2013.2.3/openstack_dashboard/dashboards/admin/users/tests.py.~1~	2014-04-03 11:45:53.000000000 -0700
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/admin/users/tests.py	2014-06-11 13:44:29.437187509 -0700
-@@ -81,6 +81,7 @@
-                                        'tenant_list',
-                                        'add_tenant_user_role',
-                                        'get_default_role',
-+                                       'roles_for_user',
-                                        'role_list')})
-     def test_create(self):
-         user = self.users.get(id="1")
-@@ -102,6 +103,7 @@
-                                  domain=domain_id).AndReturn(user)
-         api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
-         api.keystone.get_default_role(IgnoreArg()).AndReturn(role)
-+        api.keystone.roles_for_user(IgnoreArg(), user.id, self.tenant.id)
-         api.keystone.add_tenant_user_role(IgnoreArg(), self.tenant.id,
-                                           user.id, role.id)
- 
--- a/components/openstack/horizon/patches/06-launchpad-1255136.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-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
-
-From 1b13a42b9edbd34e8bb4339a962cd2c30bda7d81 Mon Sep 17 00:00:00 2001
-From: Zhenguo Niu <[email protected]>
-Date: Wed, 4 Dec 2013 09:45:56 +0800
-Subject: [PATCH] Set can_set_mount_point default to False
-
-Patch https://review.openstack.org/#/c/59229/ only changed the default
-value in the local_settings.py example file. If the setting isn't defined,
-it still defaults to True
-Change-Id: Ia3525786e5eb9ec83b8057c1cb6158ab153adc59
-Closes-Bug: #1255136
-
---- horizon-2013.2.3/doc/source/topics/settings.rst.orig	2014-06-20 05:00:21.858630069 -0700
-+++ horizon-2013.2.3/doc/source/topics/settings.rst	2014-06-20 06:27:39.151996410 -0700
-@@ -204,14 +204,15 @@
- ``OPENSTACK_HYPERVISOR_FEATURES``
- ---------------------------------
- 
--Default: ``{'can_set_mount_point': True, 'can_encrypt_volumes': False}``
-+Default: ``{'can_set_mount_point': False, 'can_encrypt_volumes': False}``
- 
- A dictionary containing settings which can be used to identify the
- capabilities of the hypervisor for Nova.
- 
--Some hypervisors have the ability to set the mount point for volumes attached
--to instances (KVM does not). Setting ``can_set_mount_point`` to ``False`` will
--remove the option to set the mount point from the UI.
-+The Xen Hypervisor has the ability to set the mount point for volumes attached
-+to instances (other Hypervisors currently do not). Setting
-+``can_set_mount_point`` to ``True`` will add the option to set the mount point
-+from the UI.
- 
- In the Havana release, there will be a feature for encrypted volumes
- which will be controlled by the ``can_encrypt_volumes``. Setting it to ``True``
---- horizon-2013.2.3/openstack_dashboard/dashboards/project/volumes/tests.py.orig	2014-06-20 04:56:16.805828523 -0700
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/project/volumes/tests.py	2014-06-20 06:32:26.947240676 -0700
-@@ -555,6 +555,8 @@
- 
-     @test.create_stubs({cinder: ('volume_get',), api.nova: ('server_list',)})
-     def test_edit_attachments(self):
-+        PREV = settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point']
-+        settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point'] = True
-         volume = self.volumes.first()
-         servers = [s for s in self.servers.list()
-                    if s.tenant_id == self.request.user.tenant_id]
-@@ -573,11 +575,10 @@
-         self.assertEqual(res.status_code, 200)
-         self.assertTrue(isinstance(form.fields['device'].widget,
-                                    widgets.TextInput))
-+        settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point'] = PREV
- 
-     @test.create_stubs({cinder: ('volume_get',), api.nova: ('server_list',)})
-     def test_edit_attachments_cannot_set_mount_point(self):
--        PREV = settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point']
--        settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point'] = False
- 
-         volume = self.volumes.first()
-         servers = [s for s in self.servers.list()
-@@ -593,7 +594,6 @@
-         form = res.context['form']
-         self.assertTrue(isinstance(form.fields['device'].widget,
-                                    widgets.HiddenInput))
--        settings.OPENSTACK_HYPERVISOR_FEATURES['can_set_mount_point'] = PREV
- 
-     @test.create_stubs({cinder: ('volume_get',),
-                         api.nova: ('server_get', 'server_list',),
---- horizon-2013.2.3/openstack_dashboard/dashboards/project/volumes/forms.py.orig	2014-06-20 04:54:21.534957784 -0700
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/project/volumes/forms.py	2014-06-20 06:33:14.199293693 -0700
-@@ -230,7 +230,7 @@
-                                       "OPENSTACK_HYPERVISOR_FEATURES",
-                                       {})
-         can_set_mount_point = hypervisor_features.get("can_set_mount_point",
--                                                      True)
-+                                                      False)
-         if not can_set_mount_point:
-             self.fields['device'].widget = forms.widgets.HiddenInput()
-             self.fields['device'].required = False
---- horizon-2013.2.3/openstack_dashboard/local/local_settings.py.example.orig	2014-06-20 06:49:38.061148762 -0700
-+++ horizon-2013.2.3/openstack_dashboard/local/local_settings.py.example	2014-06-20 03:03:06.949623969 -0700
-@@ -149,8 +149,12 @@
-     'can_edit_role': True
- }
- 
-+# The Xen Hypervisor has the ability to set the mount point for volumes
-+# attached to instances (other Hypervisors currently do not). Setting
-+# can_set_mount_point to True will add the option to set the mount point
-+# from the UI.
- OPENSTACK_HYPERVISOR_FEATURES = {
--    'can_set_mount_point': True,
-+    'can_set_mount_point': False,
- }
- 
- # The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional
---- horizon-2013.2.3/openstack_dashboard/test/settings.py.orig	2014-06-20 04:59:02.205734858 -0700
-+++ horizon-2013.2.3/openstack_dashboard/test/settings.py	2014-06-20 06:28:57.101070812 -0700
-@@ -107,7 +107,7 @@
- }
- 
- OPENSTACK_HYPERVISOR_FEATURES = {
--    'can_set_mount_point': True,
-+    'can_set_mount_point': False,
- }
- 
- OPENSTACK_IMAGE_BACKEND = {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/06-remove-security-groups.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,39 @@
+Solaris/EVS do not yet support security_groups so disable all
+security_group quotas and remove the pie chart from the summary page.
+This patch is not suitable for upstream contribution.
+
+--- horizon-2014.2.2/horizon/templates/horizon/common/_limit_summary.html.orig 2015-03-04 08:18:40.918393776 -0700
++++ horizon-2014.2.2/horizon/templates/horizon/common/_limit_summary.html 2015-03-04 08:18:50.752267276 -0700
+@@ -30,12 +30,6 @@
+       </strong>
+     </div>
+
+-    <div class="d3_quota_bar">
+-      <div class="d3_pie_chart_usage" data-used="{% widthratio usage.limits.totalSecurityGroupsUsed usage.limits.maxSecurityGroups 100 %}"></div>
+-      <strong>{% trans "Security Groups" %} <br />
+-        {% blocktrans with used=usage.limits.totalSecurityGroupsUsed|intcomma available=usage.limits.maxSecurityGroups|quotainf|intcomma%}Used <span> {{ used }} </span> of <span> {{ available  }} </span>{% endblocktrans %}
+-      </strong>
+-    </div>
+   {% if usage.limits.totalVolumesUsed >= 0 %}
+     <div class="d3_quota_bar">
+       <div class="d3_pie_chart_usage" data-used="{% widthratio usage.limits.totalVolumesUsed usage.limits.maxTotalVolumes 100 %}"></div>
+
+--- horizon-2014.2.2/openstack_dashboard/usage/quotas.py.orig       2015-03-04 13:53:40.924434219 -0700
++++ horizon-2014.2.2/openstack_dashboard/usage/quotas.py   2015-03-04 13:54:19.737460759 -0700
+@@ -197,12 +197,10 @@ def get_disabled_quotas(request):
+         # Remove the nova network quotas
+         disabled_quotas.extend(['floating_ips', 'fixed_ips'])
+
+-        if neutron.is_extension_supported(request, 'security-group'):
+-            # If Neutron security group is supported, disable Nova quotas
+-            disabled_quotas.extend(['security_groups', 'security_group_rules'])
+-        else:
+-            # If Nova security group is used, disable Neutron quotas
+-            disabled_quotas.extend(['security_group', 'security_group_rule'])
++        # Solaris/EVS do not yet support security_groups, so disable all
++        # security_group quotas
++        disabled_quotas.extend(['security_groups', 'security_group_rules'])
++        disabled_quotas.extend(['security_group', 'security_group_rule'])
+
+         try:
+             if not neutron.is_quotas_extension_supported(request):
--- a/components/openstack/horizon/patches/07-remove-console.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-In-house patch to remove the ">> open console" link from instance
-elements in the Network Topology screen.  This patch is
-Solaris-specific and not suitable for upstream contribution.
-
---- horizon-2013.2.3/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html.orig    2014-06-20 08:04:57.394535111 -0600
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/client_side/_balloon_container.html     2014-06-20 08:05:47.621066190 -0600
-@@ -16,7 +16,6 @@
-       <div class="cell link">
-         <a href="[[url]]">» view [[type]] details</a>
-         [[#console_id]]
--        <a href="[[url]][[console]]" class="vnc_window">» open console</a>
-         [[/console_id]]
-       </div>
-       <div class="cell delete">
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/07-remove-image-source.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,16 @@
+Internal patch to disable the image_source (Create Volume -> Volume Source -> image)
+because copy_volume_from_image is not supported yet.
+This patch will not be committed upstream.
+
+--- horizon-2014.2.2/openstack_dashboard/dashboards/project/volumes/volumes/forms.py.orig	2015-03-06 00:02:20.754192323 -0800
++++ horizon-2014.2.2/openstack_dashboard/dashboards/project/volumes/volumes/forms.py	2015-03-06 00:04:15.272654086 -0800
+@@ -203,6 +203,9 @@
+ 
+             images = utils.get_available_images(request,
+                                           request.user.tenant_id)
++            # Disable the image_source on Solaris
++            images = False
++
+             if images:
+                 source_type_choices.append(("image_source", _("Image")))
+                 choices = [('', _("Choose an image"))]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/08-_get_reachable_subnets.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,17 @@
+This internal patch addresses an apparent Juno regression related to
+Launchpad bug 1252403.  It's not suitable for the upstream but a bug
+report will be filed to cover the regression and eventually this patch
+should be replaced with something official.
+
+--- horizon-2014.2.2/openstack_dashboard/api/neutron.py.orig	2015-02-05 09:06:50.000000000 -0800
++++ horizon-2014.2.2/openstack_dashboard/api/neutron.py	2015-03-22 21:56:14.619688527 -0700
+@@ -411,8 +411,7 @@ class FloatingIpManager(network_base.Flo
+                           in ext_net_ids)]
+         reachable_subnets = set([p.fixed_ips[0]['subnet_id'] for p in ports
+                                  if ((p.device_owner ==
+-                                      'network:router_interface')
+-                                     and (p.device_id in gw_routers))])
++                                      'network:router_interface'))])
+         return reachable_subnets
+ 
+     def list_targets(self):
--- a/components/openstack/horizon/patches/08-flavor-names.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-In-house patch to increate the maximum length of Flavor names, Flavor
-keys, and Flavor values.  This patch has not yet been submitted
-upstream.
-
---- horizon-2013.2.3/openstack_dashboard/dashboards/admin/flavors/workflows.py.orig       2014-06-27 09:55:09.196764242 -0600
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/admin/flavors/workflows.py        2014-06-27 09:55:12.447224496 -0600
-@@ -35,7 +35,7 @@
-                              "Leave this field blank or use 'auto' to set "
-                              "a random UUID4.")
-     name = forms.RegexField(label=_("Name"),
--                            max_length=25,
-+                            max_length=255,
-                             regex=r'^[\w\.\- ]+$',
-                             error_messages={'invalid': _('Name may only '
-                                 'contain letters, numbers, underscores, '
-
---- horizon-2013.2.3/openstack_dashboard/dashboards/admin/flavors/extras/forms.py.orig   2014-06-27 09:57:05.195849313 -0600
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/admin/flavors/extras/forms.py    2014-06-27 09:57:19.351010746 -0600
-@@ -28,8 +28,8 @@
- 
- 
- class CreateExtraSpec(forms.SelfHandlingForm):
--    key = forms.CharField(max_length="25", label=_("Key"))
--    value = forms.CharField(max_length="25", label=_("Value"))
-+    key = forms.CharField(max_length="255", label=_("Key"))
-+    value = forms.CharField(max_length="255", label=_("Value"))
-     flavor_id = forms.CharField(widget=forms.widgets.HiddenInput)
- 
-     def handle(self, request, data):
-@@ -46,8 +46,8 @@
- 
- 
- class EditExtraSpec(forms.SelfHandlingForm):
--    key = forms.CharField(max_length="25", label=_("Key"))
--    value = forms.CharField(max_length="25", label=_("Value"))
-+    key = forms.CharField(max_length="255", label=_("Key"))
-+    value = forms.CharField(max_length="255", label=_("Value"))
-     flavor_id = forms.CharField(widget=forms.widgets.HiddenInput)
- 
-     def handle(self, request, data):
-
--- a/components/openstack/horizon/patches/09-disable-unsupported-bootsource.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-Internal patch to only enable the current supported boot source (Boot from Image).
-This patch will not be committed upsteam.
-
---- horizon-2013.2.3/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py.orig	2014-04-03 11:45:53.000000000 -0700
-+++ horizon-2013.2.3/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py	2014-07-07 14:53:44.291365109 -0700
-@@ -137,22 +137,7 @@
-         source_type_choices = [
-             ('', _("--- Select source ---")),
-             ("image_id", _("Boot from image")),
--            ("instance_snapshot_id", _("Boot from snapshot")),
-         ]
--        if base.is_service_enabled(request, 'volume'):
--            source_type_choices.append(("volume_id", _("Boot from volume")))
--
--            try:
--                if api.nova.extension_supported("BlockDeviceMappingV2Boot",
--                                                request):
--                    source_type_choices.append(("volume_image_id",
--                            _("Boot from image (creates a new volume).")))
--            except Exception:
--                exceptions.handle(request, _('Unable to retrieve extensions '
--                                            'information.'))
--
--            source_type_choices.append(("volume_snapshot_id",
--                    _("Boot from volume snapshot (creates a new volume).")))
-         self.fields['source_type'].choices = source_type_choices
- 
-     def clean(self):
--- a/components/openstack/horizon/patches/10-network-agents.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-In-house patch to handle Resource Not Found exception while trying
-to display the Network Agents panel. This is needed as our Neutron
-doesn't support Agents extension.
-
---- horizon-2013.2.3/openstack_dashboard/api/neutron.py	2014-04-03 11:45:53.000000000 -0700
-+++ NEW/openstack_dashboard/api/neutron.py	2014-07-08 09:35:42.219185826 -0700
-@@ -33,6 +33,7 @@
- from openstack_dashboard.api import network_base
- from openstack_dashboard.api import nova
- 
-+from neutronclient.common.exceptions import NeutronClientException
- from neutronclient.v2_0 import client as neutron_client
- 
- LOG = logging.getLogger(__name__)
-@@ -718,7 +719,11 @@
- 
- 
- def agent_list(request):
--    agents = neutronclient(request).list_agents()
-+    try:
-+        agents = neutronclient(request).list_agents()
-+    except NeutronClientException as nce:
-+        if nce.status_code == 404:
-+            return []
-     return [Agent(a) for a in agents['agents']]
- 
- 
--- a/components/openstack/horizon/patches/11-CVE-2014-3473-3474-3475.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-Upstream patch fixed in Havana 2013.2.4 and Icehouse 2014.1.2
-
-From c844bd692894353c60b320005b804970605e910f Mon Sep 17 00:00:00 2001
-From: Julie Pichon <[email protected]>
-Date: Thu, 22 May 2014 16:45:03 +0100
-Subject: [PATCH] Fix multiple Cross-Site Scripting (XSS) vulnerabilities
-
- * Ensure user emails are properly escaped
-
-User emails in the Users and Groups panel are being passed through the
-urlize filter to transform them into clickable links. However, urlize
-expects input to be already escaped and safe. We should make sure to
-escape the strings first as email addresses are not validated and can
-contain any type of string.
-
-Closes-Bug: #1320235
-
- * Ensure network names are properly escaped in the Launch Instance menu
-
-Closes-Bug: #1322197
-
- * Escape the URLs generated for the Horizon tables
-
-When generating the Horizon tables, there was an assumption that only
-the anchor text needed to be escaped. However some URLs are generated
-based on user-provided data and should be escaped as well. Also escape
-the link attributes for good measure.
-
- * Use 'reverse' to generate the Resource URLs in the stacks tables
-
-Closes-Bug: #1308727
-
-Conflicts:
-	horizon/tables/base.py
-	openstack_dashboard/dashboards/admin/users/tables.py
-
-Change-Id: Ic8a92e69f66c2d265a802f350e30f091181aa42e
----
- horizon/static/horizon/js/horizon.instances.js     |    9 ++++++++-
- horizon/tables/base.py                             |    4 +++-
- .../dashboards/admin/groups/tables.py              |    3 ++-
- .../dashboards/admin/users/tables.py               |    3 ++-
- .../dashboards/project/stacks/tables.py            |   10 ++++++++--
- .../dashboards/project/stacks/tabs.py              |    6 ++++++
- 6 files changed, 29 insertions(+), 6 deletions(-)
-
-diff --git a/horizon/static/horizon/js/horizon.instances.js b/horizon/static/horizon/js/horizon.instances.js
-index c901180..c6ff323 100644
---- a/horizon/static/horizon/js/horizon.instances.js
-+++ b/horizon/static/horizon/js/horizon.instances.js
-@@ -51,8 +51,15 @@ horizon.instances = {
-     $(this.get_network_element("")).each(function(){
-       var $this = $(this);
-       var $input = $this.children("input");
-+      var name = $this.text().replace(/^\s+/,"")
-+                             .replace(/&/g, '&amp;')
-+                             .replace(/</g, '&lt;')
-+                             .replace(/>/g, '&gt;')
-+                             .replace(/"/g, '&quot;')
-+                             .replace(/'/g, '&#x27;')
-+                             .replace(/\//g, '&#x2F;');
-       var network_property = {
--        name:$this.text().replace(/^\s+/,""),
-+        name:name,
-         id:$input.attr("id"),
-         value:$input.attr("value")
-       };
-diff --git a/horizon/tables/base.py b/horizon/tables/base.py
-index adc284c..9011b77 100644
---- a/horizon/tables/base.py
-+++ b/horizon/tables/base.py
-@@ -585,7 +585,9 @@ class Cell(html.HTMLElement):
-             link_classes = ' '.join(self.column.link_classes)
-             # Escape the data inside while allowing our HTML to render
-             data = mark_safe('<a href="%s" class="%s">%s</a>' %
--                             (self.url, link_classes, escape(data)))
-+                             (escape(self.url),
-+                              escape(link_classes),
-+                              escape(data)))
-         return data
- 
-     @property
-diff --git a/openstack_dashboard/dashboards/admin/groups/tables.py b/openstack_dashboard/dashboards/admin/groups/tables.py
-index bce8f50..ff8103b 100644
---- a/openstack_dashboard/dashboards/admin/groups/tables.py
-+++ b/openstack_dashboard/dashboards/admin/groups/tables.py
-@@ -161,7 +161,8 @@ class AddMembersLink(tables.LinkAction):
- class UsersTable(tables.DataTable):
-     name = tables.Column('name', verbose_name=_('User Name'))
-     email = tables.Column('email', verbose_name=_('Email'),
--                          filters=[defaultfilters.urlize])
-+                          filters=[defaultfilters.escape,
-+                                   defaultfilters.urlize])
-     id = tables.Column('id', verbose_name=_('User ID'))
-     enabled = tables.Column('enabled', verbose_name=_('Enabled'),
-                             status=True,
-diff --git a/openstack_dashboard/dashboards/admin/users/tables.py b/openstack_dashboard/dashboards/admin/users/tables.py
-index d47d68d..c0b0ea5 100644
---- a/openstack_dashboard/dashboards/admin/users/tables.py
-+++ b/openstack_dashboard/dashboards/admin/users/tables.py
-@@ -117,7 +117,8 @@ class UsersTable(tables.DataTable):
-     )
-     name = tables.Column('name', verbose_name=_('User Name'))
-     email = tables.Column('email', verbose_name=_('Email'),
--                          filters=[defaultfilters.urlize])
-+                          filters=[defaultfilters.escape,
-+                                   defaultfilters.urlize])
-     # Default tenant is not returned from Keystone currently.
-     #default_tenant = tables.Column('default_tenant',
-     #                               verbose_name=_('Default Project'))
-diff --git a/openstack_dashboard/dashboards/project/stacks/tables.py b/openstack_dashboard/dashboards/project/stacks/tables.py
-index f0bc731..822726b 100644
---- a/openstack_dashboard/dashboards/project/stacks/tables.py
-+++ b/openstack_dashboard/dashboards/project/stacks/tables.py
-@@ -12,6 +12,7 @@
- # License for the specific language governing permissions and limitations
- # under the License.
- 
-+from django.core import urlresolvers
- from django.http import Http404  # noqa
- from django.template.defaultfilters import timesince  # noqa
- from django.template.defaultfilters import title  # noqa
-@@ -94,11 +95,16 @@ class StacksTable(tables.DataTable):
-         row_actions = (DeleteStack, )
- 
- 
-+def get_resource_url(obj):
-+    return urlresolvers.reverse('horizon:project:stacks:resource',
-+                                args=(obj.stack_id, obj.resource_name))
-+
-+
- class EventsTable(tables.DataTable):
- 
-     logical_resource = tables.Column('resource_name',
-                                      verbose_name=_("Stack Resource"),
--                                     link=lambda d: d.resource_name,)
-+                                     link=get_resource_url)
-     physical_resource = tables.Column('physical_resource_id',
-                                       verbose_name=_("Resource"),
-                                       link=mappings.resource_to_url)
-@@ -142,7 +148,7 @@ class ResourcesTable(tables.DataTable):
- 
-     logical_resource = tables.Column('resource_name',
-                                      verbose_name=_("Stack Resource"),
--                                     link=lambda d: d.resource_name)
-+                                     link=get_resource_url)
-     physical_resource = tables.Column('physical_resource_id',
-                                      verbose_name=_("Resource"),
-                                      link=mappings.resource_to_url)
-diff --git a/openstack_dashboard/dashboards/project/stacks/tabs.py b/openstack_dashboard/dashboards/project/stacks/tabs.py
-index 15ef833..b5886f3 100644
---- a/openstack_dashboard/dashboards/project/stacks/tabs.py
-+++ b/openstack_dashboard/dashboards/project/stacks/tabs.py
-@@ -75,6 +75,9 @@ class StackEventsTab(tabs.Tab):
-             stack_identifier = '%s/%s' % (stack.stack_name, stack.id)
-             events = api.heat.events_list(self.request, stack_identifier)
-             LOG.debug('got events %s' % events)
-+            # The stack id is needed to generate the resource URL.
-+            for event in events:
-+                event.stack_id = stack.id
-         except Exception:
-             events = []
-             messages.error(request, _(
-@@ -95,6 +98,9 @@ class StackResourcesTab(tabs.Tab):
-             stack_identifier = '%s/%s' % (stack.stack_name, stack.id)
-             resources = api.heat.resources_list(self.request, stack_identifier)
-             LOG.debug('got resources %s' % resources)
-+            # The stack id is needed to generate the resource URL.
-+            for r in resources:
-+                r.stack_id = stack.id
-         except Exception:
-             resources = []
-             messages.error(request, _(
--- 
-1.7.9.5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/11-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,50 @@
+In-house patch to remove unnecessary dependencies from Horizon's
+requirements files. The specific reasons are as follows:
+
+eventlet	Not applicable
+
+kombu		Not applicable
+
+pyscss		Not applicable
+
+--- horizon-2014.2.2/horizon.egg-info/requires.txt.~1~	2015-02-05 09:08:25.000000000 -0800
++++ horizon-2014.2.2/horizon.egg-info/requires.txt	2015-02-25 00:24:13.790331173 -0800
+@@ -3,13 +3,10 @@ Django>=1.4.2,<1.7
+ django_compressor>=1.4
+ django_openstack_auth>=1.1.7,!=1.1.8
+ django-pyscss>=1.0.3  # BSD License2 clause
+-eventlet>=0.15.1,<0.16.0
+ httplib2>=0.7.5
+ iso8601>=0.1.9
+-kombu>=2.5.0
+ lockfile>=0.8
+ netaddr>=0.7.12
+-pyScss>=1.2.1,<1.3  # MIT License
+ python-ceilometerclient>=1.0.6
+ python-cinderclient>=1.1.0
+ python-glanceclient>=0.14.0
+@@ -40,4 +37,4 @@ xstatic-jquery-ui>=1.10.1  # MIT License
+ xstatic-jsencrypt>=2.0.0.2  # MIT License
+ xstatic-qunit>=1.14.0.2  # MIT License
+ xstatic-rickshaw>=1.5.0  # BSD Licenseprior
+-xstatic-spin>=1.2.5.2  # MIT License
++xstatic-spin>=1.2.5.2  # MIT License
+\ No newline at end of file
+--- horizon-2014.2.2/requirements.txt.~1~	2015-02-05 09:06:50.000000000 -0800
++++ horizon-2014.2.2/requirements.txt	2015-02-25 00:24:12.542805712 -0800
+@@ -13,15 +13,12 @@ Django>=1.4.2,<1.7
+ django_compressor>=1.4
+ django_openstack_auth>=1.1.7,!=1.1.8
+ django-pyscss>=1.0.3  # BSD License (2 clause)
+-eventlet>=0.15.1,<0.16.0
+ httplib2>=0.7.5
+ iso8601>=0.1.9
+-kombu>=2.5.0
+ # Horizon Utility Requirements
+ # for SECURE_KEY generation
+ lockfile>=0.8
+ netaddr>=0.7.12
+-pyScss>=1.2.1,<1.3  # MIT License
+ python-ceilometerclient>=1.0.6
+ python-cinderclient>=1.1.0
+ python-glanceclient>=0.14.0
--- a/components/openstack/horizon/patches/12-launchpad-1265032.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,868 +0,0 @@
-Upstream patch to fix launchpad bug 1265032.  This fix is available in
-Icehouse 2014.1 but not yet available in Havana.
-
-From f3557786e2a9f026a16d2fd3b8fa9243bc4c70a9 Mon Sep 17 00:00:00 2001
-From: Assaf Muller <[email protected]>
-Date: Sun, 29 Dec 2013 16:44:46 +0200
-Subject: Get instance networking information from Neutron
-
-project/instances, admin/instances and the instance details page
-all get networking information from Nova. However, with Neutron
-enabled, floating IP associations are done direcly with Neutron,
-meaning that Nova's DB will fall out of sync and thus the GUI
-won't reflect successful floating IP associations until Nova
-polls Neutron again and updates its DB. The polling can take
-up to several minutes to complete for consecutive floating IP
-operations.
-
-The solution is to update instances' networking information from
-Neutron immediately after the call to list Nova instances.
-
-Conflicts:
-	openstack_dashboard/dashboards/project/instances/tests.py
-	openstack_dashboard/dashboards/project/instances/views.py
-
-Closes-Bug: #1265032
-Change-Id: I0382fa9a4a9fff21e7b4d05cd3b76783f826735f
-(cherry picked from commit 715d6b822838009530b7792cd7749164ae3fc663)
-
-diff --git a/openstack_dashboard/api/network.py b/openstack_dashboard/api/network.py
-index 7ab233c..ea76d41 100644
---- a/openstack_dashboard/api/network.py
-+++ b/openstack_dashboard/api/network.py
-@@ -132,3 +132,15 @@ def server_update_security_groups(request, instance_id,
- 
- def security_group_backend(request):
-     return NetworkClient(request).secgroups.backend
-+
-+
-+def servers_update_addresses(request, servers):
-+    """Retrieve servers networking information from Neutron if enabled.
-+
-+       Should be used when up to date networking information is required,
-+       and Nova's networking info caching mechanism is not fast enough.
-+
-+    """
-+    neutron_enabled = base.is_service_enabled(request, 'network')
-+    if neutron_enabled:
-+        neutron.servers_update_addresses(request, servers)
-diff --git a/openstack_dashboard/api/neutron.py b/openstack_dashboard/api/neutron.py
-index 4443c9b..c09a674 100644
---- a/openstack_dashboard/api/neutron.py
-+++ b/openstack_dashboard/api/neutron.py
-@@ -21,12 +21,15 @@
- 
- from __future__ import absolute_import
- 
-+import collections
- import logging
-+import netaddr
- 
- from django.conf import settings  # noqa
- from django.utils.datastructures import SortedDict  # noqa
- from django.utils.translation import ugettext_lazy as _  # noqa
- 
-+from horizon import messages
- from horizon.utils.memoized import memoized  # noqa
- 
- from openstack_dashboard.api import base
-@@ -321,12 +324,12 @@ class FloatingIpManager(network_base.FloatingIpManager):
-         return [FloatingIpPool(pool) for pool
-                 in self.client.list_networks(**search_opts).get('networks')]
- 
--    def list(self):
-+    def list(self, **search_opts):
-         tenant_id = self.request.user.tenant_id
-         # In Neutron, list_floatingips returns Floating IPs from all tenants
-         # when the API is called with admin role, so we need to filter them
-         # with tenant_id.
--        fips = self.client.list_floatingips(tenant_id=tenant_id)
-+        fips = self.client.list_floatingips(tenant_id=tenant_id, **search_opts)
-         fips = fips.get('floatingips')
-         # Get port list to add instance_id to floating IP list
-         # instance_id is stored in device_id attribute
-@@ -727,6 +730,88 @@ def provider_list(request):
-     return providers['service_providers']
- 
- 
-+def servers_update_addresses(request, servers):
-+    """Retrieve servers networking information from Neutron if enabled.
-+
-+       Should be used when up to date networking information is required,
-+       and Nova's networking info caching mechanism is not fast enough.
-+    """
-+
-+    # Get all (filtered for relevant servers) information from Neutron
-+    try:
-+        ports = port_list(request,
-+                          device_id=[instance.id for instance in servers])
-+        floating_ips = FloatingIpManager(request).list(
-+            port_id=[port.id for port in ports])
-+        networks = network_list(request,
-+                                id=[port.network_id for port in ports])
-+    except Exception:
-+        error_message = _('Unable to connect to Neutron.')
-+        LOG.error(error_message)
-+        messages.error(request, error_message)
-+        return
-+
-+    # Map instance to its ports
-+    instances_ports = collections.defaultdict(list)
-+    for port in ports:
-+        instances_ports[port.device_id].append(port)
-+
-+    # Map port to its floating ips
-+    ports_floating_ips = collections.defaultdict(list)
-+    for fip in floating_ips:
-+        ports_floating_ips[fip.port_id].append(fip)
-+
-+    # Map network id to its name
-+    network_names = dict(((network.id, network.name) for network in networks))
-+
-+    for server in servers:
-+        try:
-+            addresses = _server_get_addresses(
-+                request,
-+                server,
-+                instances_ports,
-+                ports_floating_ips,
-+                network_names)
-+        except Exception as e:
-+            LOG.error(e)
-+        else:
-+            server.addresses = addresses
-+
-+
-+def _server_get_addresses(request, server, ports, floating_ips, network_names):
-+    def _format_address(mac, ip, type):
-+        try:
-+            version = netaddr.IPAddress(ip).version
-+        except Exception as e:
-+            error_message = _('Unable to parse IP address %s.') % ip
-+            LOG.error(error_message)
-+            messages.error(request, error_message)
-+            raise e
-+        return {u'OS-EXT-IPS-MAC:mac_addr': mac,
-+                u'version': version,
-+                u'addr': ip,
-+                u'OS-EXT-IPS:type': type}
-+
-+    addresses = collections.defaultdict(list)
-+    instance_ports = ports.get(server.id, [])
-+    for port in instance_ports:
-+        network_name = network_names.get(port.network_id)
-+        if network_name is not None:
-+            for fixed_ip in port.fixed_ips:
-+                addresses[network_name].append(
-+                    _format_address(port.mac_address,
-+                                    fixed_ip['ip_address'],
-+                                    u'fixed'))
-+            port_fips = floating_ips.get(port.id, [])
-+            for fip in port_fips:
-+                addresses[network_name].append(
-+                    _format_address(port.mac_address,
-+                                    fip.floating_ip_address,
-+                                    u'floating'))
-+
-+    return dict(addresses)
-+
-+
- @memoized
- def list_extensions(request):
-     extensions_list = neutronclient(request).list_extensions()
-diff --git a/openstack_dashboard/dashboards/admin/instances/tests.py b/openstack_dashboard/dashboards/admin/instances/tests.py
-index 6beb8fa..9236b4e 100644
---- a/openstack_dashboard/dashboards/admin/instances/tests.py
-+++ b/openstack_dashboard/dashboards/admin/instances/tests.py
-@@ -20,6 +20,7 @@ from django.core.urlresolvers import reverse  # noqa
- from django import http
- from django.utils.datastructures import SortedDict  # noqa
- 
-+from mox import IgnoreArg  # noqa
- from mox import IsA  # noqa
- 
- from openstack_dashboard import api
-@@ -29,7 +30,8 @@ from openstack_dashboard.test import helpers as test
- class InstanceViewTest(test.BaseAdminViewTests):
-     @test.create_stubs({api.nova: ('flavor_list', 'server_list',
-                                    'extension_supported',),
--                        api.keystone: ('tenant_list',)})
-+                        api.keystone: ('tenant_list',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_index(self):
-         servers = self.servers.list()
-         flavors = self.flavors.list()
-@@ -42,6 +44,7 @@ class InstanceViewTest(test.BaseAdminViewTests):
-         api.nova.server_list(IsA(http.HttpRequest),
-                              all_tenants=True, search_opts=search_opts) \
-                                 .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors)
-         self.mox.ReplayAll()
- 
-@@ -52,7 +55,8 @@ class InstanceViewTest(test.BaseAdminViewTests):
- 
-     @test.create_stubs({api.nova: ('flavor_list', 'flavor_get',
-                                     'server_list', 'extension_supported',),
--                        api.keystone: ('tenant_list',)})
-+                        api.keystone: ('tenant_list',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_index_flavor_list_exception(self):
-         servers = self.servers.list()
-         tenants = self.tenants.list()
-@@ -63,6 +67,7 @@ class InstanceViewTest(test.BaseAdminViewTests):
-         api.nova.server_list(IsA(http.HttpRequest),
-                              all_tenants=True, search_opts=search_opts) \
-                                 .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.extension_supported('AdminActions', IsA(http.HttpRequest)) \
-             .MultipleTimes().AndReturn(True)
-         api.nova.flavor_list(IsA(http.HttpRequest)). \
-@@ -82,7 +87,8 @@ class InstanceViewTest(test.BaseAdminViewTests):
- 
-     @test.create_stubs({api.nova: ('flavor_list', 'flavor_get',
-                                     'server_list', 'extension_supported', ),
--                        api.keystone: ('tenant_list',)})
-+                        api.keystone: ('tenant_list',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_index_flavor_get_exception(self):
-         servers = self.servers.list()
-         flavors = self.flavors.list()
-@@ -96,6 +102,7 @@ class InstanceViewTest(test.BaseAdminViewTests):
-         api.nova.server_list(IsA(http.HttpRequest),
-                              all_tenants=True, search_opts=search_opts) \
-                                 .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.extension_supported('AdminActions', IsA(http.HttpRequest)) \
-             .MultipleTimes().AndReturn(True)
-         api.nova.flavor_list(IsA(http.HttpRequest)). \
-@@ -162,14 +169,17 @@ class InstanceViewTest(test.BaseAdminViewTests):
- 
-     @test.create_stubs({api.nova: ('flavor_list', 'server_list',
-                                    'extension_supported', ),
--                        api.keystone: ('tenant_list',)})
-+                        api.keystone: ('tenant_list',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_index_options_before_migrate(self):
-+        servers = self.servers.list()
-         api.keystone.tenant_list(IsA(http.HttpRequest)).\
-             AndReturn([self.tenants.list(), False])
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest),
-                              all_tenants=True, search_opts=search_opts) \
--                                .AndReturn([self.servers.list(), False])
-+                                .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.extension_supported('AdminActions', IsA(http.HttpRequest)) \
-             .MultipleTimes().AndReturn(True)
-         api.nova.flavor_list(IsA(http.HttpRequest)).\
-@@ -183,7 +193,8 @@ class InstanceViewTest(test.BaseAdminViewTests):
- 
-     @test.create_stubs({api.nova: ('flavor_list', 'server_list',
-                                    'extension_supported', ),
--                        api.keystone: ('tenant_list',)})
-+                        api.keystone: ('tenant_list',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_index_options_after_migrate(self):
-         servers = self.servers.list()
-         server1 = servers[0]
-@@ -197,7 +208,8 @@ class InstanceViewTest(test.BaseAdminViewTests):
-             .MultipleTimes().AndReturn(True)
-         api.nova.server_list(IsA(http.HttpRequest),
-                              all_tenants=True, search_opts=search_opts) \
--                                .AndReturn([self.servers.list(), False])
-+                                .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IsA(http.HttpRequest)).\
-                              AndReturn(self.flavors.list())
-         self.mox.ReplayAll()
-diff --git a/openstack_dashboard/dashboards/admin/instances/views.py b/openstack_dashboard/dashboards/admin/instances/views.py
-index 3397f25..4bc6bee 100644
---- a/openstack_dashboard/dashboards/admin/instances/views.py
-+++ b/openstack_dashboard/dashboards/admin/instances/views.py
-@@ -74,6 +74,14 @@ class AdminIndexView(tables.DataTableView):
-             exceptions.handle(self.request,
-                               _('Unable to retrieve instance list.'))
-         if instances:
-+            try:
-+                api.network.servers_update_addresses(self.request, instances)
-+            except Exception:
-+                exceptions.handle(
-+                    self.request,
-+                    message=_('Unable to retrieve IP addresses from Neutron.'),
-+                    ignore=True)
-+
-             # Gather our flavors to correlate against IDs
-             try:
-                 flavors = api.nova.flavor_list(self.request)
-diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py
-index 8d56455..b2b066f 100644
---- a/openstack_dashboard/dashboards/project/instances/tests.py
-+++ b/openstack_dashboard/dashboards/project/instances/tests.py
-@@ -52,9 +52,11 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_index(self):
-+        servers = self.servers.list()
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-             .MultipleTimes().AndReturn(True)
-@@ -64,7 +66,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
-            .MultipleTimes().AndReturn(self.limits['absolute'])
-         api.network.floating_ip_simple_associate_supported(
-@@ -104,7 +107,8 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_index_flavor_list_exception(self):
-         servers = self.servers.list()
-@@ -116,6 +120,7 @@ class InstanceTests(test.TestCase):
-             .MultipleTimes().AndReturn(True)
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
-             .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IsA(http.HttpRequest)) \
-             .AndRaise(self.exceptions.nova)
-         api.glance.image_list_detailed(IgnoreArg()) \
-@@ -144,7 +149,8 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_index_flavor_get_exception(self):
-         servers = self.servers.list()
-@@ -160,6 +166,7 @@ class InstanceTests(test.TestCase):
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
-             .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors)
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-@@ -187,7 +194,8 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_index_with_instance_booted_from_volume(self):
-         volume_server = self.servers.first()
-@@ -206,6 +214,7 @@ class InstanceTests(test.TestCase):
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
-             .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
-            .MultipleTimes().AndReturn(self.limits['absolute'])
-         api.network.floating_ip_simple_associate_supported(
-@@ -223,18 +232,20 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ('server_list',
-                                    'flavor_list',
-                                    'server_delete',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_terminate_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-         api.nova.server_delete(IsA(http.HttpRequest), server.id)
--
-         self.mox.ReplayAll()
- 
-         formData = {'action': 'instances__terminate__%s' % server.id}
-@@ -245,13 +256,16 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ('server_list',
-                                    'flavor_list',
-                                    'server_delete',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_terminate_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-@@ -269,9 +283,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_pause_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-@@ -282,7 +298,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_pause(IsA(http.HttpRequest), server.id)
- 
-         self.mox.ReplayAll()
-@@ -296,9 +313,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_pause_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-@@ -309,7 +328,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_pause(IsA(http.HttpRequest), server.id) \
-                         .AndRaise(self.exceptions.nova)
- 
-@@ -324,9 +344,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_unpause_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         server.status = "PAUSED"
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-@@ -337,7 +359,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_unpause(IsA(http.HttpRequest), server.id)
- 
-         self.mox.ReplayAll()
-@@ -351,9 +374,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_unpause_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         server.status = "PAUSED"
- 
-         api.nova.extension_supported('AdminActions',
-@@ -365,7 +390,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_unpause(IsA(http.HttpRequest), server.id) \
-                           .AndRaise(self.exceptions.nova)
- 
-@@ -379,16 +405,19 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ('server_reboot',
-                                    'server_list',
-                                    'flavor_list',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_reboot_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         api.nova.flavor_list(IsA(http.HttpRequest)) \
-             .AndReturn(self.flavors.list())
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_reboot(IsA(http.HttpRequest), server.id,
-                                soft_reboot=False)
- 
-@@ -402,9 +431,11 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ('server_reboot',
-                                    'server_list',
-                                    'flavor_list',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_reboot_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.flavor_list(IsA(http.HttpRequest)) \
-             .AndReturn(self.flavors.list())
-@@ -412,7 +443,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_reboot(IsA(http.HttpRequest), server.id,
-                                soft_reboot=False) \
-             .AndRaise(self.exceptions.nova)
-@@ -427,9 +459,11 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ('server_reboot',
-                                    'server_list',
-                                    'flavor_list',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_soft_reboot_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.flavor_list(IsA(http.HttpRequest)) \
-             .AndReturn(self.flavors.list())
-@@ -437,7 +471,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_reboot(IsA(http.HttpRequest), server.id,
-                                soft_reboot=True)
- 
-@@ -452,9 +487,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_suspend_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-@@ -465,7 +502,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id))
- 
-         self.mox.ReplayAll()
-@@ -479,9 +517,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_suspend_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
- 
-         api.nova.extension_supported('AdminActions',
-                                      IsA(http.HttpRequest)) \
-@@ -492,7 +532,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id)) \
-             .AndRaise(self.exceptions.nova)
- 
-@@ -507,9 +548,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_resume_instance(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         server.status = "SUSPENDED"
- 
-         api.nova.extension_supported('AdminActions',
-@@ -521,7 +564,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_resume(IsA(http.HttpRequest), unicode(server.id))
- 
-         self.mox.ReplayAll()
-@@ -535,9 +579,11 @@ class InstanceTests(test.TestCase):
-                                    'server_list',
-                                    'flavor_list',
-                                    'extension_supported',),
--                        api.glance: ('image_list_detailed',)})
-+                        api.glance: ('image_list_detailed',),
-+                        api.network: ('servers_update_addresses',)})
-     def test_resume_instance_exception(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         server.status = "SUSPENDED"
- 
-         api.nova.extension_supported('AdminActions',
-@@ -549,7 +595,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.server_resume(IsA(http.HttpRequest),
-                                unicode(server.id)) \
-             .AndRaise(self.exceptions.nova)
-@@ -564,12 +611,15 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ("server_get",
-                                    "instance_volumes_list",
-                                    "flavor_get"),
--                        api.network: ("server_security_groups",)})
-+                        api.network: ("server_security_groups",
-+                                      "servers_update_addresses")})
-     def test_instance_details_volumes(self):
-         server = self.servers.first()
-         volumes = [self.volumes.list()[1]]
- 
-         api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
-+        api.network.servers_update_addresses(IsA(http.HttpRequest),
-+                                             IgnoreArg())
-         api.nova.instance_volumes_list(IsA(http.HttpRequest),
-                                        server.id).AndReturn(volumes)
-         api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
-@@ -588,12 +638,15 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ("server_get",
-                                    "instance_volumes_list",
-                                    "flavor_get"),
--                        api.network: ("server_security_groups",)})
-+                        api.network: ("server_security_groups",
-+                                      "servers_update_addresses")})
-     def test_instance_details_volume_sorting(self):
-         server = self.servers.first()
-         volumes = self.volumes.list()[1:3]
- 
-         api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
-+        api.network.servers_update_addresses(IsA(http.HttpRequest),
-+                                             IgnoreArg())
-         api.nova.instance_volumes_list(IsA(http.HttpRequest),
-                                        server.id).AndReturn(volumes)
-         api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
-@@ -616,11 +669,14 @@ class InstanceTests(test.TestCase):
-     @test.create_stubs({api.nova: ("server_get",
-                                    "instance_volumes_list",
-                                    "flavor_get"),
--                        api.network: ("server_security_groups",)})
-+                        api.network: ("server_security_groups",
-+                                      "servers_update_addresses")})
-     def test_instance_details_metadata(self):
-         server = self.servers.first()
- 
-         api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
-+        api.network.servers_update_addresses(IsA(http.HttpRequest),
-+                                             IgnoreArg())
-         api.nova.instance_volumes_list(IsA(http.HttpRequest),
-                                        server.id).AndReturn([])
-         api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
-@@ -1668,9 +1724,11 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_launch_button_disabled_when_quota_exceeded(self):
-+        servers = self.servers.list()
-         limits = self.limits['absolute']
-         limits['totalInstancesUsed'] = limits['maxTotalInstances']
- 
-@@ -1683,7 +1741,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
-             .MultipleTimes().AndReturn(limits)
-         api.network.floating_ip_simple_associate_supported(
-@@ -1709,9 +1768,11 @@ class InstanceTests(test.TestCase):
-                                    'extension_supported',),
-                         api.glance: ('image_list_detailed',),
-                         api.network:
--                            ('floating_ip_simple_associate_supported',),
-+                            ('floating_ip_simple_associate_supported',
-+                             'servers_update_addresses',),
-                         })
-     def test_index_options_after_migrate(self):
-+        servers = self.servers.list()
-         server = self.servers.first()
-         server.status = "VERIFY_RESIZE"
-         api.nova.extension_supported('AdminActions',
-@@ -1723,7 +1784,8 @@ class InstanceTests(test.TestCase):
-             .AndReturn((self.images.list(), False))
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
-            .MultipleTimes().AndReturn(self.limits['absolute'])
-         api.network.floating_ip_simple_associate_supported(
-@@ -1802,17 +1864,20 @@ class InstanceTests(test.TestCase):
- 
-     @test.create_stubs({api.network: ('floating_ip_target_get_by_instance',
-                                       'tenant_floating_ip_allocate',
--                                      'floating_ip_associate'),
-+                                      'floating_ip_associate',
-+                                      'servers_update_addresses',),
-                         api.glance: ('image_list_detailed',),
-                         api.nova: ('server_list',
-                                    'flavor_list')})
-     def test_associate_floating_ip(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         fip = self.q_floating_ips.first()
- 
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-@@ -1839,13 +1905,15 @@ class InstanceTests(test.TestCase):
- 
-                         api.nova: ('server_list',
-                                    'flavor_list')})
-     def test_disassociate_floating_ip(self):
--        server = self.servers.first()
-+        servers = self.servers.list()
-+        server = servers[0]
-         fip = self.q_floating_ips.first()
-         fip.port_id = server.id
- 
-         search_opts = {'marker': None, 'paginate': True}
-         api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \
--            .AndReturn([self.servers.list(), False])
-+            .AndReturn([servers, False])
-+        api.network.servers_update_addresses(IsA(http.HttpRequest), servers)
-         api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
-         api.glance.image_list_detailed(IgnoreArg()) \
-             .AndReturn((self.images.list(), False))
-diff --git a/openstack_dashboard/dashboards/project/instances/views.py b/openstack_dashboard/dashboards/project/instances/views.py
-index 4826d8a..cebc5c0 100644
---- a/openstack_dashboard/dashboards/project/instances/views.py
-+++ b/openstack_dashboard/dashboards/project/instances/views.py
-@@ -66,9 +66,18 @@ class IndexView(tables.DataTableView):
-             instances = []
-             exceptions.handle(self.request,
-                               _('Unable to retrieve instances.'))
--        # Gather our flavors and images and correlate our instances to them
-+
-         if instances:
-             try:
-+                api.network.servers_update_addresses(self.request, instances)
-+            except Exception:
-+                exceptions.handle(
-+                    self.request,
-+                    message=_('Unable to retrieve IP addresses from Neutron.'),
-+                    ignore=True)
-+
-+            # Gather our flavors and images and correlate our instances to them
-+            try:
-                 flavors = api.nova.flavor_list(self.request)
-             except Exception:
-                 flavors = []
-@@ -233,6 +242,15 @@ class DetailView(tabs.TabView):
-                                     'instance "%s".') % instance_id,
-                                     redirect=redirect)
-             self._instance = instance
-+
-+            try:
-+                api.network.servers_update_addresses(self.request, [instance])
-+            except Exception:
-+                exceptions.handle(
-+                    self.request,
-+                    _('Unable to retrieve IP addresses from Neutron for '
-+                      'instance "%s".') % instance_id, ignore=True)
-+
-         return self._instance
- 
-     def get_tabs(self, request, *args, **kwargs):
--- 
-cgit v0.10.1
-
--- a/components/openstack/horizon/patches/13-CVE-2014-3594.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-Upstream patch to fix CVE-2014-3594.  This will be fixed in future
-2013.2.4 and 2014.1.3 releases.
-
-From 96c6cdaa084857b82b9681378d5d3a6a4732015e Mon Sep 17 00:00:00 2001
-From: Julie Pichon <[email protected]>
-Date: Thu, 7 Aug 2014 12:01:56 +0100
-Subject: [PATCH] Fix XSS issue with the unordered_list filter
-
-When using the unordered_list filter in a Horizon table (as opposed to
-a template directly), autoescaping is not set by default and the input
-wasn't sanitised.
-
-Closes-Bug: #1349491
-Change-Id: Id82eefe48ccb17a158751ec65d24f3ac779380ec
----
- .../dashboards/admin/info/tables.py                |    8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/openstack_dashboard/dashboards/admin/info/tables.py b/openstack_dashboard/dashboards/admin/info/tables.py
-index d4f3fe7..a123fab 100644
---- a/openstack_dashboard/dashboards/admin/info/tables.py
-+++ b/openstack_dashboard/dashboards/admin/info/tables.py
-@@ -127,6 +127,10 @@ def get_metadata(aggregate):
-             in aggregate.metadata.iteritems()]
- 
- 
-+def safe_unordered_list(value):
-+    return filters.unordered_list(value, autoescape=True)
-+
-+
- class AggregatesTable(tables.DataTable):
-     name = tables.Column("name",
-                          verbose_name=_("Name"))
-@@ -135,11 +139,11 @@ class AggregatesTable(tables.DataTable):
-     hosts = tables.Column(get_hosts,
-                           verbose_name=_("Hosts"),
-                           wrap_list=True,
--                          filters=(filters.unordered_list,))
-+                          filters=(safe_unordered_list,))
-     metadata = tables.Column(get_metadata,
-                              verbose_name=_("Metadata"),
-                              wrap_list=True,
--                             filters=(filters.unordered_list,))
-+                             filters=(safe_unordered_list,))
- 
-     class Meta:
-         name = "aggregates"
--- 
-1.7.9.5
--- a/components/openstack/horizon/patches/14-CVE-2014-8124.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-Upstream patch to fix CVE-2014-8124.  This will be fixed in future
-2014.1.3 and 2014.2.1 releases.
-
-From 61d09f6f96a22cd6c0ade58f6486cdbd118c5e2a Mon Sep 17 00:00:00 2001
-From: lin-hua-cheng <[email protected]>
-Date: Mon, 1 Dec 2014 18:16:15 -0800
-Subject: [PATCH] Horizon login page contains DOS attack mechanism
-
-the horizon login page (really the middleware) accesses the session
-too early in the login process, which will create session records
-in the session backend.  This is especially problematic when non-cookie
-backends are used.
-
-Change-Id: I9d2c40403fb9b0cfb512f2ff45397cbe0b050c71
-Closes-Bug: 1394370
-
---- horizon-2013.2.3/horizon/middleware.py.orig	2014-12-10 12:59:24.714541383 -0700
-+++ horizon-2013.2.3/horizon/middleware.py	2014-12-10 13:00:30.362642269 -0700
-@@ -49,6 +49,17 @@ class HorizonMiddleware(object):
- 
-     def process_request(self, request):
-         """ Adds data necessary for Horizon to function to the request. """
-+
-+        request.horizon = {'dashboard': None,
-+                           'panel': None,
-+                           'async_messages': []}
-+        if not hasattr(request, "user") or not request.user.is_authenticated():
-+            # proceed no further if the current request is already known
-+            # not to be authenticated
-+            # it is CRITICAL to perform this check as early as possible
-+            # to avoid creating too many sessions
-+            return None
-+
-         # Activate timezone handling
-         tz = request.session.get('django_timezone')
-         if tz:
-@@ -62,9 +73,6 @@ class HorizonMiddleware(object):
- 
-         last_activity = request.session.get('last_activity', None)
-         timestamp = int(time.time())
--        request.horizon = {'dashboard': None,
--                           'panel': None,
--                           'async_messages': []}
-         if (isinstance(last_activity, int)
-                 and (timestamp - last_activity) > timeout):
-             request.session.pop('last_activity')
---- horizon-2013.2.3/openstack_dashboard/views.py.orig	2014-12-10 13:01:22.648498614 -0700
-+++ horizon-2013.2.3/openstack_dashboard/views.py	2014-12-10 13:01:29.987667852 -0700
-@@ -33,6 +33,4 @@ def splash(request):
-     if request.user.is_authenticated():
-         return shortcuts.redirect(get_user_home(request.user))
-     form = views.Login(request)
--    request.session.clear()
--    request.session.set_test_cookie()
-     return shortcuts.render(request, 'splash.html', {'form': form})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/99-remove.xstatic.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,78 @@
+In-house patch to remove the imports of xstatic packages.  These
+imports are no longer needed as the static assets are collected at
+package time and the xstatic modules are not being delivered.
+
+NOTE:  This patch is applied AFTER gmake install has completed rather
+than during gmake prep.  We need the xstatic functionality to collect
+all the JavaScript libraries before packaging.
+
+--- a/usr/lib/python2.6/vendor-packages/openstack_dashboard/settings.py	2015-01-13 10:40:30.930622964 -0700
++++ b/usr/lib/python2.6/vendor-packages/openstack_dashboard/settings.py	2015-01-13 10:40:57.470743881 -0700
+@@ -22,21 +22,6 @@ import sys
+ import warnings
+
+ from django.utils.translation import ugettext_lazy as _
+-import xstatic.main
+-import xstatic.pkg.angular
+-import xstatic.pkg.bootstrap_datepicker
+-import xstatic.pkg.bootstrap_scss
+-import xstatic.pkg.d3
+-import xstatic.pkg.font_awesome
+-import xstatic.pkg.hogan
+-import xstatic.pkg.jquery
+-import xstatic.pkg.jquery_migrate
+-import xstatic.pkg.jquery_quicksearch
+-import xstatic.pkg.jquery_tablesorter
+-import xstatic.pkg.jquery_ui
+-import xstatic.pkg.jsencrypt
+-import xstatic.pkg.rickshaw
+-import xstatic.pkg.spin
+
+ from openstack_dashboard import exceptions
+
+@@ -148,45 +133,6 @@ STATICFILES_FINDERS = (
+     'compressor.finders.CompressorFinder',
+ )
+
+-STATICFILES_DIRS = [
+-    ('horizon/lib/angular',
+-        xstatic.main.XStatic(xstatic.pkg.angular).base_dir),
+-    ('horizon/lib/bootstrap_datepicker',
+-        xstatic.main.XStatic(xstatic.pkg.bootstrap_datepicker).base_dir),
+-    ('bootstrap',
+-        xstatic.main.XStatic(xstatic.pkg.bootstrap_scss).base_dir),
+-    ('horizon/lib',
+-        xstatic.main.XStatic(xstatic.pkg.d3).base_dir),
+-    ('horizon/lib',
+-        xstatic.main.XStatic(xstatic.pkg.hogan).base_dir),
+-    ('horizon/lib/font-awesome',
+-        xstatic.main.XStatic(xstatic.pkg.font_awesome).base_dir),
+-    ('horizon/lib/jquery',
+-        xstatic.main.XStatic(xstatic.pkg.jquery).base_dir),
+-    ('horizon/lib/jquery',
+-        xstatic.main.XStatic(xstatic.pkg.jquery_migrate).base_dir),
+-    ('horizon/lib/jquery',
+-        xstatic.main.XStatic(xstatic.pkg.jquery_quicksearch).base_dir),
+-    ('horizon/lib/jquery',
+-        xstatic.main.XStatic(xstatic.pkg.jquery_tablesorter).base_dir),
+-    ('horizon/lib/jsencrypt',
+-        xstatic.main.XStatic(xstatic.pkg.jsencrypt).base_dir),
+-    ('horizon/lib',
+-        xstatic.main.XStatic(xstatic.pkg.rickshaw).base_dir),
+-    ('horizon/lib',
+-        xstatic.main.XStatic(xstatic.pkg.spin).base_dir),
+-]
+-
+-
+-if xstatic.main.XStatic(xstatic.pkg.jquery_ui).version.startswith('1.10.'):
+-    # The 1.10.x versions already contain the 'ui' directory.
+-    STATICFILES_DIRS.append(('horizon/lib/jquery-ui',
+-        xstatic.main.XStatic(xstatic.pkg.jquery_ui).base_dir))
+-else:
+-    # Newer versions dropped the directory, add it to keep the path the same.
+-    STATICFILES_DIRS.append(('horizon/lib/jquery-ui/ui',
+-        xstatic.main.XStatic(xstatic.pkg.jquery_ui).base_dir))
+-
+ COMPRESS_PRECOMPILERS = (
+     ('text/scss', 'django_pyscss.compressor.DjangoScssFilter'),
+ )
--- a/components/openstack/horizon/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/horizon/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,5 +1,21 @@
-library/python-2/eventlet-26
-library/python-2/oslo.config-26
-library/python/eventlet-26
+library/python-2/babel-26
+library/python-2/django_compressor-26
+library/python-2/django_openstack_auth-26
+library/python-2/lockfile-26
+library/python-2/requests-26
+library/python/ceilometerclient-26
+library/python/cinderclient-26
+library/python/django-26
+library/python/django-pyscss-26
+library/python/glanceclient-26
+library/python/heatclient-26
+library/python/iso8601-26
+library/python/keystoneclient-26
+library/python/neutronclient-26
+library/python/novaclient-26
 library/python/oslo.config-26
+library/python/saharaclient-26
+library/python/six-26
+library/python/swiftclient-26
+library/python/troveclient-26
 runtime/python-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/rickshaw.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,21 @@
+Copyright (C) 2011-2014 by Shutterstock Images, LLC
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/spin.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2011-2014 Felix Gnass [fgnass at neteye dot de]
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/xstatic.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) 2011-2014 Thomas Waldmann and other contributors, see
+AUTHORS.txt.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+“Software”), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- a/components/openstack/keystone/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,25 +20,29 @@
 #
 
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		keystone
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:0d27a32c6c211706f8b13aafe2fd51c7ddbea97897be90663fd8c2527ef56032
+    sha256:5674c1ae0aa7203cca0aba634e939bcfb7e1e0f60f62a6d6fceeb05efb84980e
 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/keystone
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+
+TPNO=			21823
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,7 +50,20 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
+
+#
+# keystone depends on keystone-upgrade so copy all of the service
+# manifests into the proto directory for pkgdepend(1) to find.
+#
+COMPONENT_POST_INSTALL_ACTION += \
+	($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+	 $(CP) \
+	     files/keystone.xml \
+	     files/keystone-upgrade.xml \
+	     $(PROTO_DIR)/lib/svc/manifest/application/openstack;)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone-paste.ini	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,121 @@
+# Keystone PasteDeploy configuration file.
+
+[filter:debug]
+paste.filter_factory = keystone.common.wsgi:Debug.factory
+
+[filter:build_auth_context]
+paste.filter_factory = keystone.middleware:AuthContextMiddleware.factory
+
+[filter:token_auth]
+paste.filter_factory = keystone.middleware:TokenAuthMiddleware.factory
+
+[filter:admin_token_auth]
+paste.filter_factory = keystone.middleware:AdminTokenAuthMiddleware.factory
+
+[filter:xml_body]
+paste.filter_factory = keystone.middleware:XmlBodyMiddleware.factory
+
+[filter:xml_body_v2]
+paste.filter_factory = keystone.middleware:XmlBodyMiddlewareV2.factory
+
+[filter:xml_body_v3]
+paste.filter_factory = keystone.middleware:XmlBodyMiddlewareV3.factory
+
+[filter:json_body]
+paste.filter_factory = keystone.middleware:JsonBodyMiddleware.factory
+
+[filter:user_crud_extension]
+paste.filter_factory = keystone.contrib.user_crud:CrudExtension.factory
+
+[filter:crud_extension]
+paste.filter_factory = keystone.contrib.admin_crud:CrudExtension.factory
+
+[filter:ec2_extension]
+paste.filter_factory = keystone.contrib.ec2:Ec2Extension.factory
+
+[filter:ec2_extension_v3]
+paste.filter_factory = keystone.contrib.ec2:Ec2ExtensionV3.factory
+
+[filter:federation_extension]
+paste.filter_factory = keystone.contrib.federation.routers:FederationExtension.factory
+
+[filter:oauth1_extension]
+paste.filter_factory = keystone.contrib.oauth1.routers:OAuth1Extension.factory
+
+[filter:s3_extension]
+paste.filter_factory = keystone.contrib.s3:S3Extension.factory
+
+[filter:endpoint_filter_extension]
+paste.filter_factory = keystone.contrib.endpoint_filter.routers:EndpointFilterExtension.factory
+
+[filter:endpoint_policy_extension]
+paste.filter_factory = keystone.contrib.endpoint_policy.routers:EndpointPolicyExtension.factory
+
+[filter:simple_cert_extension]
+paste.filter_factory = keystone.contrib.simple_cert:SimpleCertExtension.factory
+
+[filter:revoke_extension]
+paste.filter_factory = keystone.contrib.revoke.routers:RevokeExtension.factory
+
+[filter:url_normalize]
+paste.filter_factory = keystone.middleware:NormalizingFilter.factory
+
+[filter:sizelimit]
+paste.filter_factory = keystone.middleware:RequestBodySizeLimiter.factory
+
+[filter:stats_monitoring]
+paste.filter_factory = keystone.contrib.stats:StatsMiddleware.factory
+
+[filter:stats_reporting]
+paste.filter_factory = keystone.contrib.stats:StatsExtension.factory
+
+[filter:access_log]
+paste.filter_factory = keystone.contrib.access:AccessLogMiddleware.factory
+
+[app:public_service]
+paste.app_factory = keystone.service:public_app_factory
+
+[app:service_v3]
+paste.app_factory = keystone.service:v3_app_factory
+
+[app:admin_service]
+paste.app_factory = keystone.service:admin_app_factory
+
+[pipeline:public_api]
+# The last item in this pipeline must be public_service or an equivalent
+# application. It cannot be a filter.
+pipeline = sizelimit url_normalize build_auth_context token_auth admin_token_auth json_body ec2_extension user_crud_extension public_service
+
+[pipeline:admin_api]
+# The last item in this pipeline must be admin_service or an equivalent
+# application. It cannot be a filter.
+pipeline = sizelimit url_normalize build_auth_context token_auth admin_token_auth json_body ec2_extension s3_extension crud_extension admin_service
+
+[pipeline:api_v3]
+# The last item in this pipeline must be service_v3 or an equivalent
+# application. It cannot be a filter.
+pipeline = sizelimit url_normalize build_auth_context token_auth admin_token_auth json_body ec2_extension_v3 s3_extension simple_cert_extension revoke_extension service_v3
+
+[app:public_version_service]
+paste.app_factory = keystone.service:public_version_app_factory
+
+[app:admin_version_service]
+paste.app_factory = keystone.service:admin_version_app_factory
+
+[pipeline:public_version_api]
+pipeline = sizelimit url_normalize public_version_service
+
+[pipeline:admin_version_api]
+pipeline = sizelimit url_normalize admin_version_service
+
+[composite:main]
+use = egg:Paste#urlmap
+/v2.0 = public_api
+/v3 = api_v3
+/ = public_version_api
+
+[composite:admin]
+use = egg:Paste#urlmap
+/v2.0 = admin_api
+/v3 = api_v3
+/ = admin_version_api
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,273 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+KEYSTONE_CONF_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'rabbit_durable_queues'): ('DEFAULT', 'amqp_durable_queues'),
+    ('rpc_notifier2', 'topics'): ('DEFAULT', 'notification_topics'),
+    ('DEFAULT', 'log_config'): ('DEFAULT', 'log_config_append'),
+    ('DEFAULT', 'logfile'): ('DEFAULT', 'log_file'),
+    ('DEFAULT', 'logdir'): ('DEFAULT', 'log_dir'),
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DATABASE', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+    ('ldap', 'tenant_tree_dn'): ('ldap', 'project_tree_dn'),
+    ('ldap', 'tenant_filter'): ('ldap', 'project_filter'),
+    ('ldap', 'tenant_objectclass'): ('ldap', 'project_objectclass'),
+    ('ldap', 'tenant_id_attribute'): ('ldap', 'project_id_attribute'),
+    ('ldap', 'tenant_member_attribute'): ('ldap', 'project_member_attribute'),
+    ('ldap', 'tenant_name_attribute'): ('ldap', 'project_name_attribute'),
+    ('ldap', 'tenant_desc_attribute'): ('ldap', 'project_desc_attribute'),
+    ('ldap', 'tenant_enabled_attribute'):
+        ('ldap', 'project_enabled_attribute'),
+    ('ldap', 'tenant_domain_id_attribute'):
+        ('ldap', 'project_domain_id_attribute'),
+    ('ldap', 'tenant_attribute_ignore'): ('ldap', 'project_attribute_ignore'),
+    ('ldap', 'tenant_allow_create'): ('ldap', 'project_allow_create'),
+    ('ldap', 'tenant_allow_update'): ('ldap', 'project_allow_update'),
+    ('ldap', 'tenant_allow_delete'): ('ldap', 'project_allow_delete'),
+    ('ldap', 'tenant_enabled_emulation'):
+        ('ldap', 'project_enabled_emulation'),
+    ('ldap', 'tenant_enabled_emulation_dn'):
+        ('ldap', 'project_enabled_emulation_dn'),
+    ('ldap', 'tenant_additional_attribute_mapping'):
+        ('ldap', 'project_additional_attribute_mapping'),
+    ('DEFAULT', 'matchmaker_ringfile'): ('matchmaker_ring', 'ringfile'),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/keystone'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/keystone/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/keystone/keystone.conf', KEYSTONE_CONF_MAPPINGS)
+        modify_conf('/etc/keystone/keystone-paste.ini')
+        modify_conf('/etc/keystone/logging.conf')
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/keystone/keystone.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+
+        if db_connection.startswith('mysql'):
+            engine = sqlalchemy.create_engine(db_connection)
+            if engine.url.username != '%SERVICE_USER%':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in keystone tables"
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="keystone">
+
+  <service version="1" type="service"
+    name="application/openstack/keystone/keystone-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/keystone-upgrade %m">
+      <method_context>
+        <method_credential user='keystone' group='keystone' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.keystone' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.keystone' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.keystone' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Keystone Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          keystone-upgrade is a transient service to upgrade the Keystone
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/keystone/files/keystone.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/files/keystone.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,428 +1,1587 @@
 [DEFAULT]
-# A "shared secret" between keystone and other openstack services
-# admin_token = ADMIN
+
+#
+# Options defined in keystone
+#
+
+# A "shared secret" that can be used to bootstrap Keystone.
+# This "token" does not represent a user, and carries no
+# explicit authorization. To disable in production (highly
+# recommended), remove AdminTokenAuthMiddleware from your
+# paste application pipelines (for example, in keystone-
+# paste.ini). (string value)
+#admin_token=ADMIN
+
+# The IP address of the network interface for the public
+# service to listen on. (string value)
+# Deprecated group/name - [DEFAULT]/bind_host
+#public_bind_host=0.0.0.0
+
+# The IP address of the network interface for the admin
+# service to listen on. (string value)
+# Deprecated group/name - [DEFAULT]/bind_host
+#admin_bind_host=0.0.0.0
+
+# (Deprecated) The port which the OpenStack Compute service
+# listens on. This option was only used for string replacement
+# in the templated catalog backend. Templated catalogs should
+# replace the "$(compute_port)s" substitution with the static
+# port of the compute service. As of Juno, this option is
+# deprecated and will be removed in the L release. (integer
+# value)
+#compute_port=8774
+
+# The port number which the admin service listens on. (integer
+# value)
+#admin_port=35357
+
+# The port number which the public service listens on.
+# (integer value)
+#public_port=5000
 
-# The IP address of the network interface to listen on
-# bind_host = 0.0.0.0
+# The base public endpoint URL for Keystone that is advertised
+# to clients (NOTE: this does NOT affect how Keystone listens
+# for connections). Defaults to the base host URL of the
+# request. E.g. a request to http://server:5000/v2.0/users
+# will default to http://server:5000. You should only need to
+# set this value if the base URL contains a path (e.g.
+# /prefix/v2.0) or the endpoint should be found on a different
+# server. (string value)
+#public_endpoint=<None>
+
+# The base admin endpoint URL for Keystone that is advertised
+# to clients (NOTE: this does NOT affect how Keystone listens
+# for connections). Defaults to the base host URL of the
+# request. E.g. a request to http://server:35357/v2.0/users
+# will default to http://server:35357. You should only need to
+# set this value if the base URL contains a path (e.g.
+# /prefix/v2.0) or the endpoint should be found on a different
+# server. (string value)
+#admin_endpoint=<None>
 
-# The port number which the public service listens on
-# public_port = 5000
+# The number of worker processes to serve the public WSGI
+# application. Defaults to number of CPUs (minimum of 2).
+# (integer value)
+public_workers=2
+
+# The number of worker processes to serve the admin WSGI
+# application. Defaults to number of CPUs (minimum of 2).
+# (integer value)
+admin_workers=2
 
-# The port number which the public admin listens on
-# admin_port = 35357
+# Enforced by optional sizelimit middleware
+# (keystone.middleware:RequestBodySizeLimiter). (integer
+# value)
+#max_request_body_size=114688
+
+# Limit the sizes of user & project ID/names. (integer value)
+#max_param_size=64
+
+# Similar to max_param_size, but provides an exception for
+# token values. (integer value)
+#max_token_size=8192
+
+# During a SQL upgrade member_role_id will be used to create a
+# new role that will replace records in the assignment table
+# with explicit role grants. After migration, the
+# member_role_id will be used in the API add_user_to_project.
+# (string value)
+#member_role_id=9fe2ff9ee4384b1894a90878d3e92bab
 
-# The base endpoint URLs for keystone that are advertised to clients
-# (NOTE: this does NOT affect how keystone listens for connections)
-# public_endpoint = http://localhost:%(public_port)s/
-# admin_endpoint = http://localhost:%(admin_port)s/
+# During a SQL upgrade member_role_name will be used to create
+# a new role that will replace records in the assignment table
+# with explicit role grants. After migration, member_role_name
+# will be ignored. (string value)
+#member_role_name=_member_
+
+# The value passed as the keyword "rounds" to passlib's
+# encrypt method. (integer value)
+#crypt_strength=40000
+
+# Set this to true if you want to enable TCP_KEEPALIVE on
+# server sockets, i.e. sockets used by the Keystone wsgi
+# server for client connections. (boolean value)
+#tcp_keepalive=false
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server
+# socket. Only applies if tcp_keepalive is true. Not supported
+# on OS X. (integer value)
+#tcp_keepidle=600
+
+# The maximum number of entities that will be returned in a
+# collection, with no limit set by default. This global limit
+# may be then overridden for a specific driver, by specifying
+# a list_limit in the appropriate section (e.g. [assignment]).
+# (integer value)
+#list_limit=<None>
+
+# Set this to false if you want to enable the ability for
+# user, group and project entities to be moved between domains
+# by updating their domain_id. Allowing such movement is not
+# recommended if the scope of a domain admin is being
+# restricted by use of an appropriate policy file (see
+# policy.v3cloudsample as an example). (boolean value)
+#domain_id_immutable=true
+
+# If set to true, strict password length checking is performed
+# for password manipulation. If a password exceeds the maximum
+# length, the operation will fail with an HTTP 403 Forbidden
+# error. If set to false, passwords are automatically
+# truncated to the maximum length. (boolean value)
+#strict_password_check=false
+
+
+#
+# Options defined in oslo.messaging
+#
 
-# The port number which the OpenStack Compute service listens on
-# compute_port = 8774
+# Use durable queues in amqp. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
+#amqp_durable_queues=false
+
+# Auto-delete queues in amqp. (boolean value)
+#amqp_auto_delete=false
+
+# Size of RPC connection pool. (integer value)
+#rpc_conn_pool_size=30
+
+# Qpid broker hostname. (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port. (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs. (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for Qpid connection. (string value)
+#qpid_username=
+
+# Password for Qpid connection. (string value)
+#qpid_password=
 
-# Path to your policy definition containing identity actions
-# policy_file = policy.json
+# Space separated list of SASL mechanisms to use for auth.
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats. (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl'. (string value)
+#qpid_protocol=tcp
 
-# Rule to check if no matching policy definition is found
-# FIXME(dolph): This should really be defined as [policy] default_rule
-# policy_default_rule = admin_required
+# Whether to disable the Nagle algorithm. (boolean value)
+#qpid_tcp_nodelay=true
+
+# The number of prefetched messages held by receiver. (integer
+# value)
+#qpid_receiver_capacity=1
+
+# The qpid topology version to use.  Version 1 is what was
+# originally used by impl_qpid.  Version 2 includes some
+# backwards-incompatible changes that allow broker federation
+# to work.  Users should update to version 2 when they are
+# able to take everything down, as it requires a clean break.
+# (integer value)
+#qpid_topology_version=1
 
-# Role for migrating membership relationships
-# During a SQL upgrade, the following values will be used to create a new role
-# that will replace records in the user_tenant_membership table with explicit
-# role grants.  After migration, the member_role_id will be used in the API
-# add_user_to_project, and member_role_name will be ignored.
-# member_role_id = 9fe2ff9ee4384b1894a90878d3e92bab
-# member_role_name = _member_
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some
+# distributions. (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled). (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled). (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL
+# enabled). (string value)
+#kombu_ssl_ca_certs=
+
+# How long to wait before reconnecting in response to an AMQP
+# consumer cancel notification. (floating point value)
+#kombu_reconnect_delay=1.0
+
+# The RabbitMQ broker address where a single node is used.
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used.
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs. (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# Connect over SSL for RabbitMQ. (boolean value)
+#rabbit_use_ssl=false
+
+# The RabbitMQ userid. (string value)
+#rabbit_userid=guest
+
+# The RabbitMQ password. (string value)
+#rabbit_password=guest
+
+# the RabbitMQ login method (string value)
+#rabbit_login_method=AMQPLAIN
+
+# The RabbitMQ virtual host. (string value)
+#rabbit_virtual_host=/
 
-# enforced by optional sizelimit middleware (keystone.middleware:RequestBodySizeLimiter)
-# max_request_body_size = 114688
+# How frequently to retry connecting with RabbitMQ. (integer
+# value)
+#rabbit_retry_interval=1
+
+# How long to backoff for between retries when connecting to
+# RabbitMQ. (integer value)
+#rabbit_retry_backoff=2
+
+# Maximum number of RabbitMQ connection retries. Default is 0
+# (infinite retry count). (integer value)
+#rabbit_max_retries=0
+
+# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
+# this option, you must wipe the RabbitMQ database. (boolean
+# value)
+#rabbit_ha_queues=false
+
+# If passed, use a fake RabbitMQ provider. (boolean value)
+#fake_rabbit=false
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
 
-# limit the sizes of user & tenant ID/names
-# max_param_size = 64
+# MatchMaker driver. (string value)
+#rpc_zmq_matchmaker=oslo.messaging._drivers.matchmaker.MatchMakerLocalhost
+
+# ZeroMQ receiver listening port. (integer value)
+#rpc_zmq_port=9501
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
 
-# similar to max_param_size, but provides an exception for token values
-# max_token_size = 8192
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=keystone
+
+# Seconds to wait before a cast expires (TTL). Only supported
+# by impl_zmq. (integer value)
+#rpc_cast_timeout=30
 
-# === Logging Options ===
-# Print debugging output
-# (includes plaintext request logging, potentially including passwords)
-# debug = False
+# Heartbeat frequency. (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+# Size of RPC greenthread pool. (integer value)
+#rpc_thread_pool_size=64
+
+# Driver or drivers to handle sending notifications. (multi
+# valued)
+#notification_driver=
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+#notification_topics=notifications
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
 
-# Print more verbose output
-# verbose = False
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include qpid and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=keystone
 
-# Name of log file to output to. If not set, logging will go to stdout.
-# log_file = keystone.log
+
+#
+# Options defined in keystone.notifications
+#
+
+# Default publisher_id for outgoing notifications (string
+# value)
+#default_publisher_id=<None>
+
+
+#
+# Options defined in keystone.openstack.common.eventlet_backdoor
+#
 
-# The directory to keep log files in (will be prepended to --logfile)
-# log_dir = /var/log/keystone
+# Enable eventlet backdoor.  Acceptable values are 0, <port>,
+# and <start>:<end>, where 0 results in listening on a random
+# tcp port number; <port> results in listening on the
+# specified port number (and not enabling backdoor if that
+# port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range
+# of port numbers.  The chosen port is displayed in the
+# service's log file. (string value)
+#backdoor_port=<None>
+
 
-# Use syslog for logging.
-# use_syslog = False
+#
+# Options defined in keystone.openstack.common.log
+#
+
+# 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
 
-# syslog facility to receive log lines
-# syslog_log_facility = LOG_USER
+# Log output to standard error. (boolean value)
+#use_stderr=true
+
+# Format string to use for log messages with context. (string
+# value)
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages without context.
+# (string value)
+#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
 
-# 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.
-# log_config = logging.conf
+# Data to append to log format when level is DEBUG. (string
+# value)
+#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
+
+# Prefix each line of exception output with this format.
+# (string value)
+#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
+
+# List of logger=LEVEL pairs. (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
+
+# Enables or disables publication of error events. (boolean
+# value)
+#publish_errors=false
 
-# A logging.Formatter log message format string which may use any of the
-# available logging.LogRecord attributes.
-# log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s
+# Enables or disables fatal status of deprecations. (boolean
+# value)
+#fatal_deprecations=false
+
+# The format for an instance that is passed with the log
+# message. (string value)
+#instance_format="[instance: %(uuid)s] "
+
+# The format for an instance UUID that is passed with the log
+# message. (string value)
+#instance_uuid_format="[instance: %(uuid)s] "
+
+# The name of a logging configuration file. This file is
+# appended to any existing logging configuration files. For
+# details about logging configuration files, see the Python
+# logging module documentation. (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
 
-# Format string for %(asctime)s in log records.
-# log_date_format = %Y-%m-%d %H:%M:%S
+# DEPRECATED. A logging.Formatter log message format string
+# which may use any of the available logging.LogRecord
+# attributes. This option is deprecated.  Please use
+# logging_context_format_string and
+# logging_default_format_string instead. (string value)
+#log_format=<None>
+
+# Format string for %%(asctime)s in log records. Default:
+# %(default)s . (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to output to. If no default is
+# set, logging will go to stdout. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
+#log_file=<None>
+
+# (Optional) The base directory used for relative --log-file
+# paths. (string value)
+# Deprecated group/name - [DEFAULT]/logdir
+#log_dir=<None>
+
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# during I, and will change in J to honor RFC5424. (boolean
+# value)
+#use_syslog=false
 
-# onready allows you to send a notification when the process is ready to serve
-# For example, to have it notify using systemd, one could set shell command:
-# onready = systemd-notify --ready
-# or a module with notify() method:
-# onready = keystone.common.systemd
+# (Optional) Enables or disables syslog rfc5424 format for
+# logging. If enabled, prefixes the MSG part of the syslog
+# message with APP-NAME (RFC5424). The format without the APP-
+# NAME is deprecated in I, and will be removed in J. (boolean
+# value)
+#use_syslog_rfc_format=false
+
+# Syslog facility to receive log lines. (string value)
+#syslog_log_facility=LOG_USER
+
+
+#
+# Options defined in keystone.openstack.common.policy
+#
+
+# The JSON file that defines policies. (string value)
+#policy_file=policy.json
+
+# Default rule. Enforced when a requested rule is not found.
+# (string value)
+#policy_default_rule=default
+
+
+[assignment]
 
-# === Notification Options ===
+#
+# Options defined in keystone
+#
+
+# Assignment backend driver. (string value)
+#driver=<None>
+
+# Toggle for assignment caching. This has no effect unless
+# global caching is enabled. (boolean value)
+#caching=true
+
+# TTL (in seconds) to cache assignment data. This has no
+# effect unless global caching is enabled. (integer value)
+#cache_time=<None>
+
+# Maximum number of entities that will be returned in an
+# assignment collection. (integer value)
+#list_limit=<None>
+
+
+[auth]
+
+#
+# Options defined in keystone
+#
 
-# Notifications can be sent when users or projects are created, updated or
-# deleted. There are three methods of sending notifications: logging (via the
-# log_file directive), rpc (via a message queue) and no_op (no notifications
-# sent, the default)
+# Default auth methods. (list value)
+#methods=external,password,token
+
+# The password auth plugin module. (string value)
+#password=keystone.auth.plugins.password.Password
+
+# The token auth plugin module. (string value)
+#token=keystone.auth.plugins.token.Token
+
+# The external (REMOTE_USER) auth plugin module. (string
+# value)
+#external=keystone.auth.plugins.external.DefaultDomain
+
+
+[cache]
+
+#
+# Options defined in keystone
+#
+
+# Prefix for building the configuration dictionary for the
+# cache region. This should not need to be changed unless
+# there is another dogpile.cache region with the same
+# configuration name. (string value)
+#config_prefix=cache.keystone
+
+# Default TTL, in seconds, for any cached item in the
+# dogpile.cache region. This applies to any cached method that
+# doesn't have an explicit cache expiration time defined for
+# it. (integer value)
+#expiration_time=600
+
+# Dogpile.cache backend module. It is recommended that
+# Memcache with pooling (keystone.cache.memcache_pool) or
+# Redis (dogpile.cache.redis) be used in production
+# deployments.  Small workloads (single process) like devstack
+# can use the dogpile.cache.memory backend. (string value)
+#backend=keystone.common.cache.noop
+
+# Arguments supplied to the backend module. Specify this
+# option once per argument to be passed to the dogpile.cache
+# backend. Example format: "<argname>:<value>". (multi valued)
+#backend_argument=
 
-# notification_driver can be defined multiple times
-# Do nothing driver (the default)
-# notification_driver = keystone.openstack.common.notifier.no_op_notifier
-# Logging driver example (not enabled by default)
-# notification_driver = keystone.openstack.common.notifier.log_notifier
-# RPC driver example (not enabled by default)
-# notification_driver = keystone.openstack.common.notifier.rpc_notifier
+# Proxy classes to import that will affect the way the
+# dogpile.cache backend functions. See the dogpile.cache
+# documentation on changing-backend-behavior. (list value)
+#proxies=
+
+# Global toggle for all caching using the should_cache_fn
+# mechanism. (boolean value)
+#enabled=false
+
+# Extra debugging from the cache backend (cache keys,
+# get/set/delete/etc calls). This is only really useful if you
+# need to see the specific cache-backend get/set/delete calls
+# with the keys/values.  Typically this should be left set to
+# false. (boolean value)
+#debug_cache_backend=false
+
+# Memcache servers in the format of "host:port".
+# (dogpile.cache.memcache and keystone.cache.memcache_pool
+# backends only) (list value)
+#memcache_servers=localhost:11211
+
+# Number of seconds memcached server is considered dead before
+# it is tried again. (dogpile.cache.memcache and
+# keystone.cache.memcache_pool backends only) (integer value)
+#memcache_dead_retry=300
 
-# Default notification level for outgoing notifications
-# default_notification_level = INFO
+# Timeout in seconds for every call to a server.
+# (dogpile.cache.memcache and keystone.cache.memcache_pool
+# backends only) (integer value)
+#memcache_socket_timeout=3
+
+# Max total number of open connections to every memcached
+# server. (keystone.cache.memcache_pool backend only) (integer
+# value)
+#memcache_pool_maxsize=10
 
-# Default publisher_id for outgoing notifications; included in the payload.
-# default_publisher_id =
+# Number of seconds a connection to memcached is held unused
+# in the pool before it is closed.
+# (keystone.cache.memcache_pool backend only) (integer value)
+#memcache_pool_unused_timeout=60
+
+# Number of seconds that an operation will wait to get a
+# memcache client connection. (integer value)
+#memcache_pool_connection_get_timeout=10
+
+
+[catalog]
+
+#
+# Options defined in keystone
+#
 
-# AMQP topics to publish to when using the RPC notification driver.
-# Multiple values can be specified by separating with commas.
-# The actual topic names will be %s.%(default_notification_level)s
-# notification_topics = notifications
+# Catalog template file name for use with the template catalog
+# backend. (string value)
+#template_file=default_catalog.templates
+
+# Catalog backend driver. (string value)
+#driver=keystone.catalog.backends.sql.Catalog
+
+# Toggle for catalog caching. This has no effect unless global
+# caching is enabled. (boolean value)
+#caching=true
+
+# Time to cache catalog data (in seconds). This has no effect
+# unless global and catalog caching are enabled. (integer
+# value)
+#cache_time=<None>
+
+# Maximum number of entities that will be returned in a
+# catalog collection. (integer value)
+#list_limit=<None>
 
-# === RPC Options ===
+# (Deprecated) List of possible substitutions for use in
+# formatting endpoints. Use caution when modifying this list.
+# It will give users with permission to create endpoints the
+# ability to see those values in your configuration file. This
+# option will be removed in Juno. (list value)
+#endpoint_substitution_whitelist=tenant_id,user_id,public_bind_host,admin_bind_host,compute_host,compute_port,admin_port,public_port,public_endpoint,admin_endpoint
+
+
+[credential]
+
+#
+# Options defined in keystone
+#
+
+# Credential backend driver. (string value)
+#driver=keystone.credential.backends.sql.Credential
+
+
+[database]
+
+#
+# Options defined in oslo.db
+#
 
-# For Keystone, these options apply only when the RPC notification driver is
-# used.
+# The file name to use with SQLite. (string value)
+#sqlite_db=oslo.sqlite
+
+# If True, SQLite uses synchronous mode. (boolean value)
+#sqlite_synchronous=true
+
+# The back end to use for the database. (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend=sqlalchemy
 
-# The messaging module to use, defaults to kombu.
-# rpc_backend = keystone.openstack.common.rpc.impl_kombu
+# The SQLAlchemy connection string to use to connect to the
+# database. (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/keystone
+
+# The SQLAlchemy connection string to use to connect to the
+# slave database. (string value)
+#slave_connection=<None>
 
-# Size of RPC thread pool
-# rpc_thread_pool_size = 64
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode=TRADITIONAL
 
-# Size of RPC connection pool
-# rpc_conn_pool_size = 30
+# Timeout before idle SQL connections are reaped. (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size=<None>
 
-# Seconds to wait for a response from call or multicall
-# rpc_response_timeout = 60
+# Maximum db connection retries during startup. Set to -1 to
+# specify an infinite retry count. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries=10
+
+# Interval between retries of opening a SQL connection.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval=10
+
+# If set, use this value for max_overflow with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information: 0=None,
+# 100=Everything. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug=0
 
-# Seconds to wait before a cast expires (TTL). Only supported by impl_zmq.
-# rpc_cast_timeout = 30
+# Add Python stack traces to SQL as comment strings. (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace=false
+
+# If set, use this value for pool_timeout with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout=<None>
 
-# Modules of exceptions that are permitted to be recreated upon receiving
-# exception data from an rpc call.
-# allowed_rpc_exception_modules = keystone.openstack.common.exception,nova.exception,cinder.exception,exceptions
+# Enable the experimental use of database reconnect on
+# connection lost. (boolean value)
+#use_db_reconnect=false
+
+# Seconds between database connection retries. (integer value)
+#db_retry_interval=1
+
+# If True, increases the interval between database connection
+# retries up to db_max_retry_interval. (boolean value)
+#db_inc_retry_interval=true
+
+# If db_inc_retry_interval is set, the maximum seconds between
+# database connection retries. (integer value)
+#db_max_retry_interval=10
 
-# If True, use a fake RabbitMQ provider
-# fake_rabbit = False
+# Maximum database connection retries before error is raised.
+# Set to -1 to specify an infinite retry count. (integer
+# value)
+#db_max_retries=20
+
+
+[ec2]
+
+#
+# Options defined in keystone
+#
 
-# AMQP exchange to connect to if using RabbitMQ or Qpid
-# control_exchange = openstack
+# EC2Credential backend driver. (string value)
+#driver=keystone.contrib.ec2.backends.kvs.Ec2
+
+
+[endpoint_filter]
+
+#
+# Options defined in keystone
+#
+
+# Endpoint Filter backend driver (string value)
+#driver=keystone.contrib.endpoint_filter.backends.sql.EndpointFilter
 
-[sql]
-# The SQLAlchemy connection string used to connect to the database
-connection = sqlite:////var/lib/keystone/keystone.sqlite
+# Toggle to return all active endpoints if no filter exists.
+# (boolean value)
+#return_all_endpoints_if_no_filter=true
+
+
+[endpoint_policy]
+
+#
+# Options defined in keystone
+#
+
+# Endpoint policy backend driver (string value)
+#driver=keystone.contrib.endpoint_policy.backends.sql.EndpointPolicy
 
-# the timeout before idle sql connections are reaped
-# idle_timeout = 200
+
+[federation]
+
+#
+# Options defined in keystone
+#
+
+# Federation backend driver. (string value)
+#driver=keystone.contrib.federation.backends.sql.Federation
+
+# Value to be used when filtering assertion parameters from
+# the environment. (string value)
+#assertion_prefix=
+
 
 [identity]
-# driver = keystone.identity.backends.sql.Identity
+
+#
+# Options defined in keystone
+#
 
-# This references the domain to use for all Identity API v2 requests (which are
-# not aware of domains). A domain with this ID will be created for you by
-# keystone-manage db_sync in migration 008.  The domain referenced by this ID
-# cannot be deleted on the v3 API, to prevent accidentally breaking the v2 API.
-# There is nothing special about this domain, other than the fact that it must
-# exist to order to maintain support for your v2 clients.
-# default_domain_id = default
-#
-# A subset (or all) of domains can have their own identity driver, each with
-# their own partial configuration file in a domain configuration directory.
-# Only values specific to the domain need to be placed in the domain specific
+# This references the domain to use for all Identity API v2
+# requests (which are not aware of domains). A domain with
+# this ID will be created for you by keystone-manage db_sync
+# in migration 008. The domain referenced by this ID cannot be
+# deleted on the v3 API, to prevent accidentally breaking the
+# v2 API. There is nothing special about this domain, other
+# than the fact that it must exist to order to maintain
+# support for your v2 clients. (string value)
+#default_domain_id=default
+
+# A subset (or all) of domains can have their own identity
+# driver, each with their own partial configuration file in a
+# domain configuration directory. Only values specific to the
+# domain need to be placed in the domain specific
 # configuration file. This feature is disabled by default; set
-# domain_specific_drivers_enabled to True to enable.
-# domain_specific_drivers_enabled = False
-# domain_config_dir = /etc/keystone/domains
+# to true to enable. (boolean value)
+#domain_specific_drivers_enabled=false
+
+# Path for Keystone to locate the domain specific identity
+# configuration files if domain_specific_drivers_enabled is
+# set to true. (string value)
+#domain_config_dir=/etc/keystone/domains
+
+# Identity backend driver. (string value)
+#driver=keystone.identity.backends.sql.Identity
+
+# Maximum supported length for user passwords; decrease to
+# improve performance. (integer value)
+#max_password_length=4096
+
+# Maximum number of entities that will be returned in an
+# identity collection. (integer value)
+#list_limit=<None>
+
+
+[identity_mapping]
+
+#
+# Options defined in keystone
+#
+
+# Keystone Identity Mapping backend driver. (string value)
+#driver=keystone.identity.mapping_backends.sql.Mapping
+
+# Public ID generator for user and group entities. The
+# Keystone identity mapper only supports generators that
+# produce no more than 64 characters. (string value)
+#generator=keystone.identity.id_generators.sha256.Generator
+
+# The format of user and group IDs changed in Juno for
+# backends that do not generate UUIDs (e.g. LDAP), with
+# keystone providing a hash mapping to the underlying
+# attribute in LDAP. By default this mapping is disabled,
+# which ensures that existing IDs will not change. Even when
+# the mapping is enabled by using domain specific drivers, any
+# users and groups from the default domain being handled by
+# LDAP will still not be mapped to ensure their IDs remain
+# backward compatible. Setting this value to False will enable
+# the mapping for even the default LDAP driver. It is only
+# safe to do this if you do not already have assignments for
+# users and groups from the default LDAP domain, and it is
+# acceptable for Keystone to provide the different IDs to
+# clients than it did previously.  Typically this means that
+# the only time you can set this value to False is when
+# configuring a fresh installation. (boolean value)
+#backward_compatible_ids=true
+
+
+[kvs]
+
+#
+# Options defined in keystone
+#
+
+# Extra dogpile.cache backend modules to register with the
+# dogpile.cache library. (list value)
+#backends=
+
+# Prefix for building the configuration dictionary for the KVS
+# region. This should not need to be changed unless there is
+# another dogpile.cache region with the same configuration
+# name. (string value)
+#config_prefix=keystone.kvs
+
+# Toggle to disable using a key-mangling function to ensure
+# fixed length keys. This is toggle-able for debugging
+# purposes, it is highly recommended to always leave this set
+# to true. (boolean value)
+#enable_key_mangler=true
+
+# Default lock timeout for distributed locking. (integer
+# value)
+#default_lock_timeout=5
+
+
+[ldap]
+
+#
+# Options defined in keystone
+#
+
+# URL for connecting to the LDAP server. (string value)
+#url=ldap://localhost
+
+# User BindDN to query the LDAP server. (string value)
+#user=<None>
+
+# Password for the BindDN to query the LDAP server. (string
+# value)
+#password=<None>
+
+# LDAP server suffix (string value)
+#suffix=cn=example,cn=com
+
+# If true, will add a dummy member to groups. This is required
+# if the objectclass for groups requires the "member"
+# attribute. (boolean value)
+#use_dumb_member=false
+
+# DN of the "dummy member" to use when "use_dumb_member" is
+# enabled. (string value)
+#dumb_member=cn=dumb,dc=nonexistent
+
+# Delete subtrees using the subtree delete control. Only
+# enable this option if your LDAP server supports subtree
+# deletion. (boolean value)
+#allow_subtree_delete=false
+
+# The LDAP scope for queries, this can be either "one"
+# (onelevel/singleLevel) or "sub" (subtree/wholeSubtree).
+# (string value)
+#query_scope=one
+
+# Maximum results per page; a value of zero ("0") disables
+# paging. (integer value)
+#page_size=0
 
-# Maximum supported length for user passwords; decrease to improve performance.
-# max_password_length = 4096
+# The LDAP dereferencing option for queries. This can be
+# either "never", "searching", "always", "finding" or
+# "default". The "default" option falls back to using default
+# dereferencing configured by your ldap.conf. (string value)
+#alias_dereferencing=default
+
+# Sets the LDAP debugging level for LDAP calls. A value of 0
+# means that debugging is not enabled. This value is a
+# bitmask, consult your LDAP documentation for possible
+# values. (integer value)
+#debug_level=<None>
+
+# Override the system's default referral chasing behavior for
+# queries. (boolean value)
+#chase_referrals=<None>
+
+# Search base for users. (string value)
+#user_tree_dn=<None>
+
+# LDAP search filter for users. (string value)
+#user_filter=<None>
+
+# LDAP objectclass for users. (string value)
+#user_objectclass=inetOrgPerson
+
+# LDAP attribute mapped to user id. WARNING: must not be a
+# multivalued attribute. (string value)
+#user_id_attribute=cn
+
+# LDAP attribute mapped to user name. (string value)
+#user_name_attribute=sn
+
+# LDAP attribute mapped to user email. (string value)
+#user_mail_attribute=mail
+
+# LDAP attribute mapped to password. (string value)
+#user_pass_attribute=userPassword
+
+# LDAP attribute mapped to user enabled flag. (string value)
+#user_enabled_attribute=enabled
+
+# Invert the meaning of the boolean enabled values. Some LDAP
+# servers use a boolean lock attribute where "true" means an
+# account is disabled. Setting "user_enabled_invert = true"
+# will allow these lock attributes to be used. This setting
+# will have no effect if "user_enabled_mask" or
+# "user_enabled_emulation" settings are in use. (boolean
+# value)
+#user_enabled_invert=false
+
+# Bitmask integer to indicate the bit that the enabled value
+# is stored in if the LDAP server represents "enabled" as a
+# bit on an integer rather than a boolean. A value of "0"
+# indicates the mask is not used. If this is not set to "0"
+# the typical value is "2". This is typically used when
+# "user_enabled_attribute = userAccountControl". (integer
+# value)
+#user_enabled_mask=0
+
+# Default value to enable users. This should match an
+# appropriate int value if the LDAP server uses non-boolean
+# (bitmask) values to indicate if a user is enabled or
+# disabled. If this is not set to "True" the typical value is
+# "512". This is typically used when "user_enabled_attribute =
+# userAccountControl". (string value)
+#user_enabled_default=True
+
+# List of attributes stripped off the user on update. (list
+# value)
+#user_attribute_ignore=default_project_id,tenants
+
+# LDAP attribute mapped to default_project_id for users.
+# (string value)
+#user_default_project_id_attribute=<None>
+
+# Allow user creation in LDAP backend. (boolean value)
+#user_allow_create=true
+
+# Allow user updates in LDAP backend. (boolean value)
+#user_allow_update=true
+
+# Allow user deletion in LDAP backend. (boolean value)
+#user_allow_delete=true
+
+# If true, Keystone uses an alternative method to determine if
+# a user is enabled or not by checking if they are a member of
+# the "user_enabled_emulation_dn" group. (boolean value)
+#user_enabled_emulation=false
+
+# DN of the group entry to hold enabled users when using
+# enabled emulation. (string value)
+#user_enabled_emulation_dn=<None>
+
+# List of additional LDAP attributes used for mapping
+# additional attribute mappings for users. Attribute mapping
+# format is <ldap_attr>:<user_attr>, where ldap_attr is the
+# attribute in the LDAP entry and user_attr is the Identity
+# API attribute. (list value)
+#user_additional_attribute_mapping=
+
+# Search base for projects (string value)
+# Deprecated group/name - [ldap]/tenant_tree_dn
+#project_tree_dn=<None>
+
+# LDAP search filter for projects. (string value)
+# Deprecated group/name - [ldap]/tenant_filter
+#project_filter=<None>
+
+# LDAP objectclass for projects. (string value)
+# Deprecated group/name - [ldap]/tenant_objectclass
+#project_objectclass=groupOfNames
+
+# LDAP attribute mapped to project id. (string value)
+# Deprecated group/name - [ldap]/tenant_id_attribute
+#project_id_attribute=cn
+
+# LDAP attribute mapped to project membership for user.
+# (string value)
+# Deprecated group/name - [ldap]/tenant_member_attribute
+#project_member_attribute=member
+
+# LDAP attribute mapped to project name. (string value)
+# Deprecated group/name - [ldap]/tenant_name_attribute
+#project_name_attribute=ou
+
+# LDAP attribute mapped to project description. (string value)
+# Deprecated group/name - [ldap]/tenant_desc_attribute
+#project_desc_attribute=description
 
-[credential]
-# driver = keystone.credential.backends.sql.Credential
+# LDAP attribute mapped to project enabled. (string value)
+# Deprecated group/name - [ldap]/tenant_enabled_attribute
+#project_enabled_attribute=enabled
+
+# LDAP attribute mapped to project domain_id. (string value)
+# Deprecated group/name - [ldap]/tenant_domain_id_attribute
+#project_domain_id_attribute=businessCategory
+
+# List of attributes stripped off the project on update. (list
+# value)
+# Deprecated group/name - [ldap]/tenant_attribute_ignore
+#project_attribute_ignore=
+
+# Allow project creation in LDAP backend. (boolean value)
+# Deprecated group/name - [ldap]/tenant_allow_create
+#project_allow_create=true
+
+# Allow project update in LDAP backend. (boolean value)
+# Deprecated group/name - [ldap]/tenant_allow_update
+#project_allow_update=true
+
+# Allow project deletion in LDAP backend. (boolean value)
+# Deprecated group/name - [ldap]/tenant_allow_delete
+#project_allow_delete=true
+
+# If true, Keystone uses an alternative method to determine if
+# a project is enabled or not by checking if they are a member
+# of the "project_enabled_emulation_dn" group. (boolean value)
+# Deprecated group/name - [ldap]/tenant_enabled_emulation
+#project_enabled_emulation=false
+
+# DN of the group entry to hold enabled projects when using
+# enabled emulation. (string value)
+# Deprecated group/name - [ldap]/tenant_enabled_emulation_dn
+#project_enabled_emulation_dn=<None>
+
+# Additional attribute mappings for projects. Attribute
+# mapping format is <ldap_attr>:<user_attr>, where ldap_attr
+# is the attribute in the LDAP entry and user_attr is the
+# Identity API attribute. (list value)
+# Deprecated group/name - [ldap]/tenant_additional_attribute_mapping
+#project_additional_attribute_mapping=
+
+# Search base for roles. (string value)
+#role_tree_dn=<None>
+
+# LDAP search filter for roles. (string value)
+#role_filter=<None>
+
+# LDAP objectclass for roles. (string value)
+#role_objectclass=organizationalRole
+
+# LDAP attribute mapped to role id. (string value)
+#role_id_attribute=cn
+
+# LDAP attribute mapped to role name. (string value)
+#role_name_attribute=ou
+
+# LDAP attribute mapped to role membership. (string value)
+#role_member_attribute=roleOccupant
+
+# List of attributes stripped off the role on update. (list
+# value)
+#role_attribute_ignore=
+
+# Allow role creation in LDAP backend. (boolean value)
+#role_allow_create=true
+
+# Allow role update in LDAP backend. (boolean value)
+#role_allow_update=true
+
+# Allow role deletion in LDAP backend. (boolean value)
+#role_allow_delete=true
+
+# Additional attribute mappings for roles. Attribute mapping
+# format is <ldap_attr>:<user_attr>, where ldap_attr is the
+# attribute in the LDAP entry and user_attr is the Identity
+# API attribute. (list value)
+#role_additional_attribute_mapping=
+
+# Search base for groups. (string value)
+#group_tree_dn=<None>
+
+# LDAP search filter for groups. (string value)
+#group_filter=<None>
+
+# LDAP objectclass for groups. (string value)
+#group_objectclass=groupOfNames
+
+# LDAP attribute mapped to group id. (string value)
+#group_id_attribute=cn
+
+# LDAP attribute mapped to group name. (string value)
+#group_name_attribute=ou
+
+# LDAP attribute mapped to show group membership. (string
+# value)
+#group_member_attribute=member
+
+# LDAP attribute mapped to group description. (string value)
+#group_desc_attribute=description
+
+# List of attributes stripped off the group on update. (list
+# value)
+#group_attribute_ignore=
+
+# Allow group creation in LDAP backend. (boolean value)
+#group_allow_create=true
+
+# Allow group update in LDAP backend. (boolean value)
+#group_allow_update=true
+
+# Allow group deletion in LDAP backend. (boolean value)
+#group_allow_delete=true
+
+# Additional attribute mappings for groups. Attribute mapping
+# format is <ldap_attr>:<user_attr>, where ldap_attr is the
+# attribute in the LDAP entry and user_attr is the Identity
+# API attribute. (list value)
+#group_additional_attribute_mapping=
+
+# CA certificate file path for communicating with LDAP
+# servers. (string value)
+#tls_cacertfile=<None>
 
-[trust]
-# driver = keystone.trust.backends.sql.Trust
+# CA certificate directory path for communicating with LDAP
+# servers. (string value)
+#tls_cacertdir=<None>
+
+# Enable TLS for communicating with LDAP servers. (boolean
+# value)
+#use_tls=false
+
+# Valid options for tls_req_cert are demand, never, and allow.
+# (string value)
+#tls_req_cert=demand
+
+# Enable LDAP connection pooling. (boolean value)
+#use_pool=false
+
+# Connection pool size. (integer value)
+#pool_size=10
+
+# Maximum count of reconnect trials. (integer value)
+#pool_retry_max=3
+
+# Time span in seconds to wait between two reconnect trials.
+# (floating point value)
+#pool_retry_delay=0.1
+
+# Connector timeout in seconds. Value -1 indicates indefinite
+# wait for response. (integer value)
+#pool_connection_timeout=-1
+
+# Connection lifetime in seconds. (integer value)
+#pool_connection_lifetime=600
+
+# Enable LDAP connection pooling for end user authentication.
+# If use_pool is disabled, then this setting is meaningless
+# and is not used at all. (boolean value)
+#use_auth_pool=false
+
+# End user auth connection pool size. (integer value)
+#auth_pool_size=100
+
+# End user auth connection lifetime in seconds. (integer
+# value)
+#auth_pool_connection_lifetime=60
+
+
+[matchmaker_redis]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Host to locate redis. (string value)
+#host=127.0.0.1
+
+# Use this port to connect to redis host. (integer value)
+#port=6379
+
+# Password for Redis server (optional). (string value)
+#password=<None>
+
+
+[matchmaker_ring]
 
-# delegation and impersonation features can be optionally disabled
-# enabled = True
+#
+# Options defined in oslo.messaging
+#
+
+# Matchmaker ring file (JSON). (string value)
+# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
+#ringfile=/etc/oslo/matchmaker_ring.json
+
+
+[memcache]
+
+#
+# Options defined in keystone
+#
+
+# Memcache servers in the format of "host:port". (list value)
+#servers=localhost:11211
+
+# Number of seconds memcached server is considered dead before
+# it is tried again. This is used by the key value store
+# system (e.g. token pooled memcached persistence backend).
+# (integer value)
+#dead_retry=300
+
+# Timeout in seconds for every call to a server. This is used
+# by the key value store system (e.g. token pooled memcached
+# persistence backend). (integer value)
+#socket_timeout=3
+
+# Max total number of open connections to every memcached
+# server. This is used by the key value store system (e.g.
+# token pooled memcached persistence backend). (integer value)
+#pool_maxsize=10
+
+# Number of seconds a connection to memcached is held unused
+# in the pool before it is closed. This is used by the key
+# value store system (e.g. token pooled memcached persistence
+# backend). (integer value)
+#pool_unused_timeout=60
+
+# Number of seconds that an operation will wait to get a
+# memcache client connection. This is used by the key value
+# store system (e.g. token pooled memcached persistence
+# backend). (integer value)
+#pool_connection_get_timeout=10
+
+
+[oauth1]
+
+#
+# Options defined in keystone
+#
+
+# Credential backend driver. (string value)
+#driver=keystone.contrib.oauth1.backends.sql.OAuth1
+
+# Duration (in seconds) for the OAuth Request Token. (integer
+# value)
+#request_token_duration=28800
+
+# Duration (in seconds) for the OAuth Access Token. (integer
+# value)
+#access_token_duration=86400
+
 
 [os_inherit]
-# role-assignment inheritance to projects from owning domain can be
-# optionally enabled
-# enabled = False
+
+#
+# Options defined in keystone
+#
+
+# role-assignment inheritance to projects from owning domain
+# can be optionally enabled. (boolean value)
+#enabled=false
+
+
+[paste_deploy]
+
+#
+# Options defined in keystone
+#
+
+# Name of the paste configuration file that defines the
+# available pipelines. (string value)
+#config_file=keystone-paste.ini
+
+
+[policy]
+
+#
+# Options defined in keystone
+#
+
+# Policy backend driver. (string value)
+#driver=keystone.policy.backends.sql.Policy
+
+# Maximum number of entities that will be returned in a policy
+# collection. (integer value)
+#list_limit=<None>
+
+
+[revoke]
+
+#
+# Options defined in keystone
+#
+
+# An implementation of the backend for persisting revocation
+# events. (string value)
+#driver=keystone.contrib.revoke.backends.sql.Revoke
+
+# This value (calculated in seconds) is added to token
+# expiration before a revocation event may be removed from the
+# backend. (integer value)
+#expiration_buffer=1800
+
+# Toggle for revocation event caching. This has no effect
+# unless global caching is enabled. (boolean value)
+#caching=true
+
 
-[catalog]
-# dynamic, sql-based backend (supports API/CLI-based management commands)
-# driver = keystone.catalog.backends.sql.Catalog
+[saml]
+
+#
+# Options defined in keystone
+#
+
+# Default TTL, in seconds, for any generated SAML assertion
+# created by Keystone. (integer value)
+#assertion_expiration_time=3600
+
+# Binary to be called for XML signing. Install the appropriate
+# package, specify absolute path or adjust your PATH
+# environment variable if the binary cannot be found. (string
+# value)
+#xmlsec1_binary=xmlsec1
+
+# Path of the certfile for SAML signing. For non-production
+# environments, you may be interested in using `keystone-
+# manage pki_setup` to generate self-signed certificates.
+# Note, the path cannot contain a comma. (string value)
+#certfile=/etc/keystone/ssl/certs/signing_cert.pem
+
+# Path of the keyfile for SAML signing. Note, the path cannot
+# contain a comma. (string value)
+#keyfile=/etc/keystone/ssl/private/signing_key.pem
+
+# Entity ID value for unique Identity Provider identification.
+# Usually FQDN is set with a suffix. A value is required to
+# generate IDP Metadata. For example:
+# https://keystone.example.com/v3/OS-FEDERATION/saml2/idp
+# (string value)
+#idp_entity_id=<None>
+
+# Identity Provider Single-Sign-On service value, required in
+# the Identity Provider's metadata. A value is required to
+# generate IDP Metadata. For example:
+# https://keystone.example.com/v3/OS-FEDERATION/saml2/sso
+# (string value)
+#idp_sso_endpoint=<None>
+
+# Language used by the organization. (string value)
+#idp_lang=en
+
+# Organization name the installation belongs to. (string
+# value)
+#idp_organization_name=<None>
+
+# Organization name to be displayed. (string value)
+#idp_organization_display_name=<None>
+
+# URL of the organization. (string value)
+#idp_organization_url=<None>
+
+# Company of contact person. (string value)
+#idp_contact_company=<None>
 
-# static, file-based backend (does *NOT* support any management commands)
-# driver = keystone.catalog.backends.templated.TemplatedCatalog
+# Given name of contact person (string value)
+#idp_contact_name=<None>
+
+# Surname of contact person. (string value)
+#idp_contact_surname=<None>
+
+# Email address of contact person. (string value)
+#idp_contact_email=<None>
+
+# Telephone number of contact person. (string value)
+#idp_contact_telephone=<None>
+
+# Contact type. Allowed values are: technical, support,
+# administrative billing, and other (string value)
+#idp_contact_type=other
+
+# Path to the Identity Provider Metadata file. This file
+# should be generated with the keystone-manage
+# saml_idp_metadata command. (string value)
+#idp_metadata_path=/etc/keystone/saml2_idp_metadata.xml
+
+
+[signing]
 
-# template_file = default_catalog.templates
+#
+# Options defined in keystone
+#
+
+# Deprecated in favor of provider in the [token] section.
+# (string value)
+#token_format=<None>
+
+# Path of the certfile for token signing. For non-production
+# environments, you may be interested in using `keystone-
+# manage pki_setup` to generate self-signed certificates.
+# (string value)
+#certfile=/etc/keystone/ssl/certs/signing_cert.pem
+
+# Path of the keyfile for token signing. (string value)
+#keyfile=/etc/keystone/ssl/private/signing_key.pem
+
+# Path of the CA for token signing. (string value)
+#ca_certs=/etc/keystone/ssl/certs/ca.pem
+
+# Path of the CA key for token signing. (string value)
+#ca_key=/etc/keystone/ssl/private/cakey.pem
+
+# Key size (in bits) for token signing cert (auto generated
+# certificate). (integer value)
+#key_size=2048
+
+# Days the token signing cert is valid for (auto generated
+# certificate). (integer value)
+#valid_days=3650
 
-[endpoint_filter]
-# extension for creating associations between project and endpoints in order to
-# provide a tailored catalog for project-scoped token requests.
-# driver = keystone.contrib.endpoint_filter.backends.sql.EndpointFilter
-# return_all_endpoints_if_no_filter = True
+# Certificate subject (auto generated certificate) for token
+# signing. (string value)
+#cert_subject=/C=US/ST=Unset/L=Unset/O=Unset/CN=www.example.com
+
+
+[ssl]
+
+#
+# Options defined in keystone
+#
+
+# Toggle for SSL support on the Keystone eventlet servers.
+# (boolean value)
+#enable=false
+
+# Path of the certfile for SSL. For non-production
+# environments, you may be interested in using `keystone-
+# manage ssl_setup` to generate self-signed certificates.
+# (string value)
+#certfile=/etc/keystone/ssl/certs/keystone.pem
+
+# Path of the keyfile for SSL. (string value)
+#keyfile=/etc/keystone/ssl/private/keystonekey.pem
+
+# Path of the ca cert file for SSL. (string value)
+#ca_certs=/etc/keystone/ssl/certs/ca.pem
+
+# Path of the CA key file for SSL. (string value)
+#ca_key=/etc/keystone/ssl/private/cakey.pem
+
+# Require client certificate. (boolean value)
+#cert_required=false
+
+# SSL key length (in bits) (auto generated certificate).
+# (integer value)
+#key_size=1024
+
+# Days the certificate is valid for once signed (auto
+# generated certificate). (integer value)
+#valid_days=3650
+
+# SSL certificate subject (auto generated certificate).
+# (string value)
+#cert_subject=/C=US/ST=Unset/L=Unset/O=Unset/CN=localhost
+
+
+[stats]
+
+#
+# Options defined in keystone
+#
+
+# Stats backend driver. (string value)
+#driver=keystone.contrib.stats.backends.kvs.Stats
+
 
 [token]
-# Provides token persistence.
-# driver = keystone.token.backends.sql.Token
 
-# Controls the token construction, validation, and revocation operations.
-# Core providers are keystone.token.providers.[pki|uuid].Provider
-# provider =
-
-# Amount of time a token should remain valid (in seconds)
-# expiration = 86400
-
-# External auth mechanisms that should add bind information to token.
-# eg kerberos, x509
-# bind =
-
-# Enforcement policy on tokens presented to keystone with bind information.
-# One of disabled, permissive, strict, required or a specifically required bind
-# mode e.g. kerberos or x509 to require binding to that authentication.
-# enforce_token_bind = permissive
-
-# Token specific caching toggle. This has no effect unless the global caching
-# option is set to True
-# caching = True
-
-# Token specific cache time-to-live (TTL) in seconds.
-# cache_time =
+#
+# Options defined in keystone
+#
 
-# Revocation-List specific cache time-to-live (TTL) in seconds.
-# revocation_cache_time = 3600
-
-[cache]
-# Global cache functionality toggle.
-# enabled = False
-
-# Prefix for building the configuration dictionary for the cache region. This
-# should not need to be changed unless there is another dogpile.cache region
-# with the same configuration name
-# config_prefix = cache.keystone
+# External auth mechanisms that should add bind information to
+# token, e.g., kerberos,x509. (list value)
+#bind=
 
-# Default TTL, in seconds, for any cached item in the dogpile.cache region.
-# This applies to any cached method that doesn't have an explicit cache
-# expiration time defined for it.
-# expiration_time = 600
-
-# Dogpile.cache backend module. It is recommended that Memcache
-# (dogpile.cache.memcache) or Redis (dogpile.cache.redis) be used in production
-# deployments.  Small workloads (single process) like devstack can use the
-# dogpile.cache.memory backend.
-# backend = keystone.common.cache.noop
-
-# Arguments supplied to the backend module. Specify this option once per
-# argument to be passed to the dogpile.cache backend.
-# Example format: <argname>:<value>
-# backend_argument =
+# Enforcement policy on tokens presented to Keystone with bind
+# information. One of disabled, permissive, strict, required
+# or a specifically required bind mode, e.g., kerberos or x509
+# to require binding to that authentication. (string value)
+#enforce_token_bind=permissive
 
-# Proxy Classes to import that will affect the way the dogpile.cache backend
-# functions.  See the dogpile.cache documentation on changing-backend-behavior.
-# Comma delimited list e.g. my.dogpile.proxy.Class, my.dogpile.proxyClass2
-# proxies =
-
-# Use a key-mangling function (sha1) to ensure fixed length cache-keys. This
-# is toggle-able for debugging purposes, it is highly recommended to always
-# leave this set to True.
-# use_key_mangler = True
-
-# Extra debugging from the cache backend (cache keys, get/set/delete/etc calls)
-# This is only really useful if you need to see the specific cache-backend
-# get/set/delete calls with the keys/values.  Typically this should be left
-# set to False.
-# debug_cache_backend = False
-
-[policy]
-# driver = keystone.policy.backends.sql.Policy
-
-[ec2]
-# driver = keystone.contrib.ec2.backends.kvs.Ec2
-
-[assignment]
-# driver =
-
-# Assignment specific caching toggle. This has no effect unless the global
-# caching option is set to True
-# caching = True
+# Amount of time a token should remain valid (in seconds).
+# (integer value)
+#expiration=3600
 
-# Assignment specific cache time-to-live (TTL) in seconds.
-# cache_time =
-
-[oauth1]
-# driver = keystone.contrib.oauth1.backends.sql.OAuth1
-
-# The Identity service may include expire attributes.
-# If no such attribute is included, then the token lasts indefinitely.
-# Specify how quickly the request token will expire (in seconds)
-# request_token_duration = 28800
-# Specify how quickly the access token will expire (in seconds)
-# access_token_duration = 86400
+# Controls the token construction, validation, and revocation
+# operations. Core providers are
+# "keystone.token.providers.[pkiz|pki|uuid].Provider". The
+# default provider is uuid. (string value)
+#provider=<None>
 
-[ssl]
-#enable = True
-#certfile = /etc/keystone/pki/certs/ssl_cert.pem
-#keyfile = /etc/keystone/pki/private/ssl_key.pem
-#ca_certs = /etc/keystone/pki/certs/cacert.pem
-#ca_key = /etc/keystone/pki/private/cakey.pem
-#key_size = 1024
-#valid_days = 3650
-#cert_required = False
-#cert_subject = /C=US/ST=Unset/L=Unset/O=Unset/CN=localhost
+# Token persistence backend driver. (string value)
+#driver=keystone.token.persistence.backends.sql.Token
 
-[signing]
-# Deprecated in favor of provider in the [token] section
-# Allowed values are PKI or UUID
-#token_format =
+# Toggle for token system caching. This has no effect unless
+# global caching is enabled. (boolean value)
+#caching=true
 
-#certfile = /etc/keystone/pki/certs/signing_cert.pem
-#keyfile = /etc/keystone/pki/private/signing_key.pem
-#ca_certs = /etc/keystone/pki/certs/cacert.pem
-#ca_key = /etc/keystone/pki/private/cakey.pem
-#key_size = 2048
-#valid_days = 3650
-#cert_subject = /C=US/ST=Unset/L=Unset/O=Unset/CN=www.example.com
-
-[ldap]
-# url = ldap://localhost
-# user = dc=Manager,dc=example,dc=com
-# password = None
-# suffix = cn=example,cn=com
-# use_dumb_member = False
-# allow_subtree_delete = False
-# dumb_member = cn=dumb,dc=example,dc=com
-
-# Maximum results per page; a value of zero ('0') disables paging (default)
-# page_size = 0
+# Time to cache the revocation list and the revocation events
+# if revoke extension is enabled (in seconds). This has no
+# effect unless global and token caching are enabled. (integer
+# value)
+#revocation_cache_time=3600
 
-# The LDAP dereferencing option for queries. This can be either 'never',
-# 'searching', 'always', 'finding' or 'default'. The 'default' option falls
-# back to using default dereferencing configured by your ldap.conf.
-# alias_dereferencing = default
-
-# The LDAP scope for queries, this can be either 'one'
-# (onelevel/singleLevel) or 'sub' (subtree/wholeSubtree)
-# query_scope = one
+# Time to cache tokens (in seconds). This has no effect unless
+# global and token caching are enabled. (integer value)
+#cache_time=<None>
 
-# user_tree_dn = ou=Users,dc=example,dc=com
-# user_filter =
-# user_objectclass = inetOrgPerson
-# user_id_attribute = cn
-# user_name_attribute = sn
-# user_mail_attribute = email
-# user_pass_attribute = userPassword
-# user_enabled_attribute = enabled
-# user_enabled_mask = 0
-# user_enabled_default = True
-# user_attribute_ignore = default_project_id,tenants
-# user_default_project_id_attribute =
-# user_allow_create = True
-# user_allow_update = True
-# user_allow_delete = True
-# user_enabled_emulation = False
-# user_enabled_emulation_dn =
+# Revoke token by token identifier. Setting revoke_by_id to
+# true enables various forms of enumerating tokens, e.g. `list
+# tokens for user`. These enumerations are processed to
+# determine the list of tokens to revoke. Only disable if you
+# are switching to using the Revoke extension with a backend
+# other than KVS, which stores events in memory. (boolean
+# value)
+#revoke_by_id=true
 
-# tenant_tree_dn = ou=Projects,dc=example,dc=com
-# tenant_filter =
-# tenant_objectclass = groupOfNames
-# tenant_domain_id_attribute = businessCategory
-# tenant_id_attribute = cn
-# tenant_member_attribute = member
-# tenant_name_attribute = ou
-# tenant_desc_attribute = desc
-# tenant_enabled_attribute = enabled
-# tenant_attribute_ignore =
-# tenant_allow_create = True
-# tenant_allow_update = True
-# tenant_allow_delete = True
-# tenant_enabled_emulation = False
-# tenant_enabled_emulation_dn =
+# The hash algorithm to use for PKI tokens. This can be set to
+# any algorithm that hashlib supports. WARNING: Before
+# changing this value, the auth_token middleware must be
+# configured with the hash_algorithms, otherwise token
+# revocation will not be processed correctly. (string value)
+#hash_algorithm=md5
 
-# role_tree_dn = ou=Roles,dc=example,dc=com
-# role_filter =
-# role_objectclass = organizationalRole
-# role_id_attribute = cn
-# role_name_attribute = ou
-# role_member_attribute = roleOccupant
-# role_attribute_ignore =
-# role_allow_create = True
-# role_allow_update = True
-# role_allow_delete = True
+
+[trust]
 
-# group_tree_dn =
-# group_filter =
-# group_objectclass = groupOfNames
-# group_id_attribute = cn
-# group_name_attribute = ou
-# group_member_attribute = member
-# group_desc_attribute = desc
-# group_attribute_ignore =
-# group_allow_create = True
-# group_allow_update = True
-# group_allow_delete = True
-
-# ldap TLS options
-# if both tls_cacertfile and tls_cacertdir are set then
-# tls_cacertfile will be used and tls_cacertdir is ignored
-# valid options for tls_req_cert are demand, never, and allow
-# use_tls = False
-# tls_cacertfile =
-# tls_cacertdir =
-# tls_req_cert = demand
+#
+# Options defined in keystone
+#
 
-# Additional attribute mappings can be used to map ldap attributes to internal
-# keystone attributes. This allows keystone to fulfill ldap objectclass
-# requirements. An example to map the description and gecos attributes to a
-# user's name would be:
-# user_additional_attribute_mapping = description:name, gecos:name
-#
-# domain_additional_attribute_mapping =
-# group_additional_attribute_mapping =
-# role_additional_attribute_mapping =
-# project_additional_attribute_mapping =
-# user_additional_attribute_mapping =
+# Delegation and impersonation features can be optionally
+# disabled. (boolean value)
+#enabled=true
 
-[auth]
-methods = external,password,token,oauth1
-#external = keystone.auth.plugins.external.ExternalDefault
-password = keystone.auth.plugins.password.Password
-token = keystone.auth.plugins.token.Token
-oauth1 = keystone.auth.plugins.oauth1.OAuth
+# Trust backend driver. (string value)
+#driver=keystone.trust.backends.sql.Trust
 
-[paste_deploy]
-# Name of the paste configuration file that defines the available pipelines
-config_file = keystone-paste.ini
+
--- a/components/openstack/keystone/files/keystone.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/files/keystone.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,9 +1,9 @@
 OpenStack Identity Management:RO::\
 Manage OpenStack Keystone:\
-auths=solaris.admin.edit/etc/keystone/default_catalog.templates,\
-solaris.admin.edit/etc/keystone/keystone.conf,\
-solaris.admin.edit/etc/keystone/logging.conf,\
-solaris.admin.edit/etc/keystone/policy.json,\
+auths=solaris.admin.edit/etc/keystone/*.conf,\
+solaris.admin.edit/etc/keystone/*.ini,\
+solaris.admin.edit/etc/keystone/*.json,\
+solaris.admin.edit/etc/keystone/default_catalog.templates,\
 solaris.smf.manage.keystone,\
 solaris.smf.value.keystone;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,1 @@
+keystone::RO::profiles=OpenStack Identity Management
--- a/components/openstack/keystone/files/keystone.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/files/keystone.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -22,18 +22,35 @@
 -->
 <service_bundle type="manifest" name="keystone">
 
-  <service version="1" type="service" name="application/openstack/keystone">
+  <service version="1" type="service"
+    name="application/openstack/keystone">
 
     <dependency name='multiuser' grouping='require_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/keystone/keystone-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/keystone/keystone.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/keystone.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,10 +28,10 @@
 set name=pkg.summary value="OpenStack Keystone (Identity Service)"
 set name=pkg.description \
     value="OpenStack Keystone is a service that provides Identity, Token, Catalog, and Policy services for use specifically by projects in the OpenStack family."
-set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Keystone, the OpenStack identity service"
-set name=com.oracle.info.tpno value=17866
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -40,13 +40,15 @@
 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=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/048 \
-    value=PSARC/2014/209
+    value=PSARC/2014/209 value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 dir  path=etc/keystone owner=keystone group=keystone mode=0700
 file etc/default_catalog.templates path=etc/keystone/default_catalog.templates \
     owner=keystone group=keystone mode=0644 overlay=allow preserve=renamenew
-file etc/keystone-paste.ini path=etc/keystone/keystone-paste.ini \
+file files/keystone-paste.ini path=etc/keystone/keystone-paste.ini \
     owner=keystone group=keystone mode=0644 overlay=allow preserve=renamenew
 file files/keystone.conf path=etc/keystone/keystone.conf owner=keystone \
     group=keystone mode=0644 overlay=allow preserve=renamenew
@@ -62,17 +64,22 @@
     path=etc/security/exec_attr.d/cloud:openstack:keystone group=sys
 file files/keystone.prof_attr \
     path=etc/security/prof_attr.d/cloud:openstack:keystone group=sys
-file files/keystone.xml path=lib/svc/manifest/application/openstack/keystone.xml
+file files/keystone.user_attr path=etc/user_attr.d/cloud:openstack:keystone \
+    group=sys
+file path=lib/svc/manifest/application/openstack/keystone-upgrade.xml
+file path=lib/svc/manifest/application/openstack/keystone.xml
 file files/keystone path=lib/svc/method/keystone
+file files/keystone-upgrade path=lib/svc/method/keystone-upgrade
 file path=usr/bin/keystone-manage
 file tools/sample_data.sh path=usr/demo/openstack/keystone/sample_data.sh \
     mode=0555
-file usr/bin/keystone-all path=usr/lib/keystone/keystone-all mode=0555 \
-    pkg.depend.bypass-generate=.*/paste.*
+file usr/bin/keystone-all path=usr/lib/keystone/keystone-all mode=0555
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/__init__.py
@@ -81,16 +88,22 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/backends/kvs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/backends/ldap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/assignment/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/external.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/mapped.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/oauth1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/password.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/saml2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/plugins/token.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/auth/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/backends.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/backends/kvs.py
@@ -99,27 +112,39 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/clean.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/cli.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/authorization.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/base64utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/_memcache_pool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/backends/memcache_pool.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/backends/mongo.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/backends/noop.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cache/core.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/cms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/controller.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/dependency.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/driver_hints.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/environment/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/environment/eventlet_server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/extension.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/json_home.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/backends/inmemdb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/backends/memcached.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/kvs/legacy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/ldap/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/ldap/core.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/ldap/fakeldap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/openssl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/pemutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/router.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/serializer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/__init__.py
@@ -128,50 +153,34 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/migrate.cfg
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/001_add_initial_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/002_sqlite_downgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/002_sqlite_upgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/002_token_id_hash.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/003_sqlite_upgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/003_token_valid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/004_undo_token_id_hash.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/005_set_utf8_character_set.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/006_add_policy_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/007_add_domain_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/008_create_default_domain.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/009_normalize_identity.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/010_normalize_identity_migration.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/011_endpoints_v3.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/012_populate_endpoint_type.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/013_drop_legacy_endpoints.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/014_add_group_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/015_tenant_to_project.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/016_normalize_domain_ids.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/017_membership_role.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/018_add_trust_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/019_fixup_role.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/021_add_trust_to_token.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/022_move_legacy_endpoint_id.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/023_drop_credential_constraints.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/024_add_index_to_expires.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/025_add_index_to_valid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/026_drop_user_group_constraints.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/027_set_engine_mysql_innodb.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/028_fixup_group_metadata.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/029_update_assignment_metadata.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/030_drop_credential_constraint_sqlite.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/031_drop_credential_indexes.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/032_username_length.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/033_migrate_ec2credentials_table_credentials.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/034_add_default_project_id_column_to_user.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/034_havana.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/035_add_compound_revoked_token_index.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/036_token_drop_valid_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/037_add_region_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/038_add_assignment_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/039_grant_to_assignment.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/040_drop_grant_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/041_add_remaining_uses_count_to_trusts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/042_endpoint_enabled.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/043_fixup_region_description.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/044_service_enabled.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/045_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/046_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/047_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/048_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/049_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/050_fk_consistent_indexes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/051_add_id_mapping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/052_add_auth_url_to_region.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/053_endpoint_to_region_association.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/054_add_actor_id_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/055_add_indexes_to_token_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/versions/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migration_helpers.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/systemd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/validation/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/validation/parameter_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/validation/validators.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/__init__.py
@@ -187,19 +196,48 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/backends/catalog_sql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/backends/sql.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/configuration.rst
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/migrate_repo/migrate.cfg
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/migrate_repo/versions/001_add_endpoint_filtering_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/migrate_repo/versions/002_add_endpoint_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_filter/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/migrate_repo/versions/001_add_endpoint_policy_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/endpoint_policy/routers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/configuration.rst
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/migrate_repo/migrate.cfg
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/migrate_repo/versions/001_example_table.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/example/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/idp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/versions/001_add_identity_provider_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/versions/002_add_mapping_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/versions/003_mapping_id_nullable_false.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/schema.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/federation/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/backends/sql.py
@@ -211,10 +249,29 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/migrate_repo/versions/002_fix_oauth_tables_fk.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/migrate_repo/versions/003_consumer_description_nullalbe.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/migrate_repo/versions/004_request_token_roles_nullable.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/migrate_repo/versions/005_consumer_id_index.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/oauth1/validator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/backends/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/migrate_repo/versions/001_revoke_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/migrate_repo/versions/002_add_audit_id_and_chain_to_revoke_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/revoke/routers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/s3/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/s3/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/simple_cert/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/simple_cert/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/simple_cert/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/simple_cert/routers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/stats/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/stats/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/stats/backends/kvs.py
@@ -228,132 +285,53 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/credential/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/credential/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/credential/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/credential/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/hacking/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/hacking/checks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/kvs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/ldap.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/pam.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/sql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/generator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/id_generators/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/id_generators/sha256.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/mapping_backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/mapping_backends/mapping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/mapping_backends/sql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/routers.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ar/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/bg_BG/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/bs/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ca/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/cs/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/da/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/de/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/en_AU/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/en_GB/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/en_US/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/es/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/es_MX/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/fi_FI/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/fil/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/fr/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/hi/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/hr/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/hu/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/id/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/it/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/it_IT/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ja/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ka_GE/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/kn/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ko/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ko_KR/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ms/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/nb/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ne/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/nl_NL/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/pl_PL/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/pt/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/pt_BR/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ro/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ru/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/ru_RU/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/sk/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/sl_SI/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/sw_KE/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/tl/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/tl_PH/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/tr_TR/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/uk/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/vi_VN/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/zh_CN/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/zh_HK/LC_MESSAGES/keystone.po
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/locale/zh_TW/LC_MESSAGES/keystone.po
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/middleware/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/middleware/auth_token.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/middleware/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/middleware/ec2_token.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/middleware/s3_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/models/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/models/token_model.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/notifications.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/README
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/context.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/crypto/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/crypto/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/migration.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/session.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/test_migrations.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/db/sqlalchemy/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/config/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/eventlet_backdoor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/excutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fileutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fixture/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fixture/config.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fixture/lockutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fixture/mockpatch.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/fixture/moxstubout.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/jsonutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/local.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/log.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/log_handler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/loopingcall.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/network_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/log_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/rpc_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/rpc_notifier2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/notifier/test_notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/policy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/amqp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/dispatcher.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/impl_fake.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/impl_kombu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/impl_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/impl_zmq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/matchmaker.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/matchmaker_redis.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/matchmaker_ring.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/proxy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/securemessage.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/serializer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/rpc/zmq_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/processutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/sslutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/systemd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/threadgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/timeutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/versionutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/backends/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/backends/rules.py
@@ -361,6 +339,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/routers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/__init__.py
@@ -370,9 +349,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/backends/sql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/backends/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/backends/memcache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/backends/memcache_pool.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/persistence/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/provider.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/providers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/providers/common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/providers/pki.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/providers/pkiz.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/providers/uuid.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/routers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/__init__.py
@@ -382,58 +370,115 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/controllers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/core.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/schema.py
 dir  path=var/lib/keystone owner=keystone group=keystone mode=0700
 dir  path=var/log/keystone owner=keystone group=keystone mode=0700
+#
 group groupname=keystone gid=83
 user username=keystone ftpuser=false gcos-field="OpenStack Keystone" \
     group=keystone home-dir=/var/lib/keystone uid=83
+#
 license keystone.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional netaddr; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/netaddr-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on package delivering openssl(1OPENSSL)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/bin/openssl
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
 
 # force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-26
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on dogpile.cache; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/dogpile.cache-$(PYV)
+
+# force a dependency on dogpile.core; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/dogpile.core-$(PYV)
+
+# force a dependency on eventlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/eventlet-$(PYV)
 
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/greenlet-26
+depend type=require fmri=library/python-2/greenlet-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on jsonschema; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/jsonschema-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-26
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on keystonemiddleware; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
+
+# force a dependency on ldappool; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/ldappool-$(PYV)
 
 # force a dependency on lxml; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/lxml-26
+depend type=require fmri=library/python-2/lxml-$(PYV)
+
+# force a dependency on oauthlib; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oauthlib-$(PYV)
+
+# force a dependency on oslo.db; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.db-$(PYV)
 
-# force a dependency on netaddr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/netaddr-26
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
 
 # force a dependency on passlib; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/passlib-26
+depend type=require fmri=library/python-2/passlib-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on pycadf; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pycadf-$(PYV)
 
-# force a dependency on requests; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/requests-26
+# force a dependency on python-ldap; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/python-ldap-$(PYV)
+
+# force a dependency on python-memcached; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/python-memcached-$(PYV)
 
 # force a dependency on routes; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/routes-26
+depend type=require fmri=library/python-2/routes-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # 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 dogpile.cache; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/dogpile.cache-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; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/keystoneclient-26
-
-# force a dependency on six; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/six-26
+depend type=require fmri=library/python-2/webob-$(PYV)
--- a/components/openstack/keystone/patches/01-launchpad-1244304.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-This upstream patch addresses Launchpad bug 1244304. Although it's been
-addressed in Icehouse 2014.1, the patch below is still not yet released
-for Havana.
-
-commit 380894fa4a9329c963fad7dbd17fd9b94b1918a8
-Author: Kun Huang <[email protected]>
-Date:   Fri Oct 25 00:26:43 2013 +0800
-
-    remove 8888 port in sample_data.sh
-    
-    Swift now doesn't use 8888 port as any default service. And the origin
-    sample_data.sh always let new users to fail and modify swift bind port.
-    So switching 8888 port here to 8080 could generate sample data without
-    any change for building swift + keystone environment.
-    
-    Closes-Bug: #1244304
-    Change-Id: If58f9f025f57565733aa25efc2fdf06865781391
-
-diff --git a/keystone/tests/test_token_provider.py b/keystone/tests/test_token_provider.py
-index c93bd73..8b2c212 100644
---- a/keystone/tests/test_token_provider.py
-+++ b/keystone/tests/test_token_provider.py
-@@ -92,10 +92,10 @@ SAMPLE_V2_TOKEN = {
-             {
-                 "endpoints": [
-                     {
--                        "adminURL": "http://localhost:8888/v1",
-+                        "adminURL": "http://localhost:8080/v1",
-                         "id": "7bd0c643e05a4a2ab40902b2fa0dd4e6",
--                        "internalURL": "http://localhost:8888/v1/AUTH_01257",
--                        "publicURL": "http://localhost:8888/v1/AUTH_01257",
-+                        "internalURL": "http://localhost:8080/v1/AUTH_01257",
-+                        "publicURL": "http://localhost:8080/v1/AUTH_01257",
-                         "region": "RegionOne"
-                     }
-                 ],
-@@ -202,19 +202,19 @@ SAMPLE_V3_TOKEN = {
-                         "id": "7bd0c643e05a4a2ab40902b2fa0dd4e6",
-                         "interface": "admin",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1"
-+                        "url": "http://localhost:8080/v1"
-                     },
-                     {
-                         "id": "43bef154594d4ccb8e49014d20624e1d",
-                         "interface": "internal",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1/AUTH_01257"
-+                        "url": "http://localhost:8080/v1/AUTH_01257"
-                     },
-                     {
-                         "id": "e63b5f5d7aa3493690189d0ff843b9b3",
-                         "interface": "public",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1/AUTH_01257"
-+                        "url": "http://localhost:8080/v1/AUTH_01257"
-                     }
-                 ],
-                 "id": "a669e152f1104810a4b6701aade721bb",
-@@ -399,10 +399,10 @@ SAMPLE_V2_TOKEN_WITH_EMBEDED_VERSION = {
-             {
-                 "endpoints": [
-                     {
--                        "adminURL": "http://localhost:8888/v1",
-+                        "adminURL": "http://localhost:8080/v1",
-                         "id": "7bd0c643e05a4a2ab40902b2fa0dd4e6",
--                        "internalURL": "http://localhost:8888/v1/AUTH_01257",
--                        "publicURL": "http://localhost:8888/v1/AUTH_01257",
-+                        "internalURL": "http://localhost:8080/v1/AUTH_01257",
-+                        "publicURL": "http://localhost:8080/v1/AUTH_01257",
-                         "region": "RegionOne"
-                     }
-                 ],
-@@ -509,19 +509,19 @@ SAMPLE_V3_TOKEN_WITH_EMBEDED_VERSION = {
-                         "id": "7bd0c643e05a4a2ab40902b2fa0dd4e6",
-                         "interface": "admin",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1"
-+                        "url": "http://localhost:8080/v1"
-                     },
-                     {
-                         "id": "43bef154594d4ccb8e49014d20624e1d",
-                         "interface": "internal",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1/AUTH_01257"
-+                        "url": "http://localhost:8080/v1/AUTH_01257"
-                     },
-                     {
-                         "id": "e63b5f5d7aa3493690189d0ff843b9b3",
-                         "interface": "public",
-                         "region": "RegionOne",
--                        "url": "http://localhost:8888/v1/AUTH_01257"
-+                        "url": "http://localhost:8080/v1/AUTH_01257"
-                     }
-                 ],
-                 "id": "a669e152f1104810a4b6701aade721bb",
-diff --git a/tools/sample_data.sh b/tools/sample_data.sh
-index d09502d..65030b5 100755
---- a/tools/sample_data.sh
-+++ b/tools/sample_data.sh
-@@ -215,9 +215,9 @@ keystone service-create --name=swift \
-                         --description="Swift Service")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $SWIFT_SERVICE \
--        --publicurl   "http://$CONTROLLER_PUBLIC_ADDRESS:8888/v1/AUTH_\$(tenant_id)s" \
--        --adminurl    "http://$CONTROLLER_ADMIN_ADDRESS:8888/v1" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8888/v1/AUTH_\$(tenant_id)s"
-+        --publicurl   "http://$CONTROLLER_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
-+        --adminurl    "http://$CONTROLLER_ADMIN_ADDRESS:8080/v1" \
-+        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
- fi
- 
- # create ec2 creds and parse the secret and access key returned
--- a/components/openstack/keystone/patches/02-launchpad-1178740.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-This upstream patch addresses Launchpad bug 1178740. Although it's been
-addressed in Icehouse 2014.1, the patch below is still not yet released
-for Havana.
-
-commit 4f800bbe7f5ba07895a4cb32c14007e2f1818bd7
-Author: Lei Zhang <[email protected]>
-Date:   Tue Oct 8 17:40:37 2013 +0800
-
-    remove the nova dependency in the ec2_token middleware
-    
-    Change-Id: I34812522b55e38d3ea030638bbae75d65f507c90
-    Closes-Bug: #1178740
-
-diff --git a/keystone/middleware/ec2_token.py b/keystone/middleware/ec2_token.py
-index 0cd5841..4e58eac 100644
---- a/keystone/middleware/ec2_token.py
-+++ b/keystone/middleware/ec2_token.py
-@@ -25,18 +25,22 @@ Starting point for routing EC2 requests.
- import urlparse
- 
- from eventlet.green import httplib
-+from oslo.config import cfg
- import webob.dec
- import webob.exc
- 
--from nova import flags
--from nova import utils
--from nova import wsgi
-+from keystone.common import config
-+from keystone.common import wsgi
-+from keystone.openstack.common import jsonutils
- 
-+keystone_ec2_opts = [
-+    cfg.StrOpt('keystone_ec2_url',
-+               default='http://localhost:5000/v2.0/ec2tokens',
-+               help='URL to get token from ec2 request.'),
-+]
- 
--FLAGS = flags.FLAGS
--flags.DEFINE_string('keystone_ec2_url',
--                    'http://localhost:5000/v2.0/ec2tokens',
--                    'URL to get token from ec2 request.')
-+CONF = config.CONF
-+CONF.register_opts(keystone_ec2_opts)
- 
- 
- class EC2Token(wsgi.Middleware):
-@@ -67,13 +71,13 @@ class EC2Token(wsgi.Middleware):
-                 'params': auth_params,
-             }
-         }
--        creds_json = utils.dumps(creds)
-+        creds_json = jsonutils.dumps(creds)
-         headers = {'Content-Type': 'application/json'}
- 
-         # Disable 'has no x member' pylint error
-         # for httplib and urlparse
-         # pylint: disable-msg=E1101
--        o = urlparse.urlparse(FLAGS.keystone_ec2_url)
-+        o = urlparse.urlparse(CONF.keystone_ec2_url)
-         if o.scheme == 'http':
-             conn = httplib.HTTPConnection(o.netloc)
-         else:
-@@ -86,7 +90,7 @@ class EC2Token(wsgi.Middleware):
-         #             having keystone return token, tenant,
-         #             user, and roles from this call.
- 
--        result = utils.loads(response)
-+        result = jsonutils.loads(response)
-         try:
-             token_id = result['access']['token']['id']
-         except (AttributeError, KeyError):
--- a/components/openstack/keystone/patches/03-sample-data-sh.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-In-house patch to the sample_data.sh script installed in
-/usr/demo/openstack/keystone in order to support all of the standard
-services and to allow customization of the individual service
-endpoints.  Solaris-specific patch and is not suitable for upstream
-
-It also includes a change to use the standard Solaris tr(1) rather than
-GNU sed.
-
---- keystone-2013.2.3/tools/sample_data.sh.orig	2014-05-27 09:17:02.379736817 -0700
-+++ keystone-2013.2.3/tools/sample_data.sh	2014-05-27 11:09:25.741756254 -0700
-@@ -2,6 +2,8 @@
- 
- # Copyright 2013 OpenStack Foundation
- #
-+# 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
-@@ -23,8 +25,8 @@
- # and the administrative API.  It will get the admin_token (SERVICE_TOKEN)
- # and admin_port from keystone.conf if available.
- #
--# Disable creation of endpoints by setting DISABLE_ENDPOINTS environment variable.
--# Use this with the Catalog Templated backend.
-+# Disable creation of endpoints by setting DISABLE_ENDPOINTS environment
-+# variable.  Use this with the Catalog Templated backend.
- #
- # A EC2-compatible credential is created for the admin user and
- # placed in etc/ec2rc.
-@@ -36,22 +38,48 @@
- # service              nova      admin
- # service              ec2       admin
- # service              swift     admin
-+# service              cinder    admin
-+# service              neutron   admin
-+
-+# By default, passwords used are those in the OpenStack Install and Deploy
-+# Manual.  One can override these (publicly known, and hence, insecure)
-+# passwords by setting the appropriate environment variables. A common default
-+# password for all the services can be used by setting the "SERVICE_PASSWORD"
-+# environment variable.
- 
--# By default, passwords used are those in the OpenStack Install and Deploy Manual.
--# One can override these (publicly known, and hence, insecure) passwords by setting the appropriate
--# environment variables. A common default password for all the services can be used by
--# setting the "SERVICE_PASSWORD" environment variable.
-+PATH=/usr/bin
- 
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
- NOVA_PASSWORD=${NOVA_PASSWORD:-${SERVICE_PASSWORD:-nova}}
- GLANCE_PASSWORD=${GLANCE_PASSWORD:-${SERVICE_PASSWORD:-glance}}
- EC2_PASSWORD=${EC2_PASSWORD:-${SERVICE_PASSWORD:-ec2}}
- SWIFT_PASSWORD=${SWIFT_PASSWORD:-${SERVICE_PASSWORD:-swiftpass}}
-+CINDER_PASSWORD=${CINDER_PASSWORD:-${SERVICE_PASSWORD:-cinder}}
-+NEUTRON_PASSWORD=${NEUTRON_PASSWORD:-${SERVICE_PASSWORD:-neutron}}
- 
- CONTROLLER_PUBLIC_ADDRESS=${CONTROLLER_PUBLIC_ADDRESS:-localhost}
- CONTROLLER_ADMIN_ADDRESS=${CONTROLLER_ADMIN_ADDRESS:-localhost}
- CONTROLLER_INTERNAL_ADDRESS=${CONTROLLER_INTERNAL_ADDRESS:-localhost}
- 
-+NOVA_PUBLIC_ADDRESS=${NOVA_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+NOVA_ADMIN_ADDRESS=${NOVA_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+NOVA_INTERNAL_ADDRESS=${NOVA_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+GLANCE_PUBLIC_ADDRESS=${GLANCE_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+GLANCE_ADMIN_ADDRESS=${GLANCE_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+GLANCE_INTERNAL_ADDRESS=${GLANCE_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+EC2_PUBLIC_ADDRESS=${EC2_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+EC2_ADMIN_ADDRESS=${EC2_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+EC2_INTERNAL_ADDRESS=${EC2_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+SWIFT_PUBLIC_ADDRESS=${SWIFT_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+SWIFT_ADMIN_ADDRESS=${SWIFT_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+SWIFT_INTERNAL_ADDRESS=${SWIFT_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+CINDER_PUBLIC_ADDRESS=${CINDER_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+CINDER_ADMIN_ADDRESS=${CINDER_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+CINDER_INTERNAL_ADDRESS=${CINDER_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+NEUTRON_PUBLIC_ADDRESS=${NEUTRON_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
-+NEUTRON_ADMIN_ADDRESS=${NEUTRON_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
-+NEUTRON_INTERNAL_ADDRESS=${NEUTRON_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
-+
- TOOLS_DIR=$(cd $(dirname "$0") && pwd)
- KEYSTONE_CONF=${KEYSTONE_CONF:-/etc/keystone/keystone.conf}
- if [[ -r "$KEYSTONE_CONF" ]]; then
-@@ -67,8 +95,8 @@
- 
- # Extract some info from Keystone's configuration file
- if [[ -r "$KEYSTONE_CONF" ]]; then
--    CONFIG_SERVICE_TOKEN=$(sed 's/[[:space:]]//g' $KEYSTONE_CONF | grep ^admin_token= | cut -d'=' -f2)
--    CONFIG_ADMIN_PORT=$(sed 's/[[:space:]]//g' $KEYSTONE_CONF | grep ^admin_port= | cut -d'=' -f2)
-+    CONFIG_SERVICE_TOKEN=$(tr -d '[\t ]' < $KEYSTONE_CONF | grep ^admin_token= | cut -d'=' -f2)
-+    CONFIG_ADMIN_PORT=$(tr -d '[\t ]' < $KEYSTONE_CONF | grep ^admin_port= | cut -d'=' -f2)
- fi
- 
- export SERVICE_TOKEN=${SERVICE_TOKEN:-$CONFIG_SERVICE_TOKEN}
-@@ -136,6 +164,22 @@
-                        --role-id $ADMIN_ROLE \
-                        --tenant-id $SERVICE_TENANT
- 
-+CINDER_USER=$(get_id keystone user-create --name=cinder \
-+                                          --pass="${CINDER_PASSWORD}" \
-+                                          --tenant-id $SERVICE_TENANT)
-+
-+keystone user-role-add --user-id $CINDER_USER \
-+                       --role-id $ADMIN_ROLE \
-+                       --tenant-id $SERVICE_TENANT
-+
-+NEUTRON_USER=$(get_id keystone user-create --name=neutron \
-+                                           --pass="${NEUTRON_PASSWORD}" \
-+                                           --tenant-id $SERVICE_TENANT)
-+
-+keystone user-role-add --user-id $NEUTRON_USER \
-+                       --role-id $ADMIN_ROLE \
-+                       --tenant-id $SERVICE_TENANT
-+
- #
- # Keystone service
- #
-@@ -159,23 +203,23 @@
-                         --description="Nova Compute Service")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $NOVA_SERVICE \
--        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s" \
--        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s"
-+        --publicurl "http://$NOVA_PUBLIC_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s" \
-+        --adminurl "http://$NOVA_ADMIN_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s" \
-+        --internalurl "http://$NOVA_INTERNAL_ADDRESS:\$(compute_port)s/v1.1/\$(tenant_id)s"
- fi
- 
- #
- # Volume service
- #
- VOLUME_SERVICE=$(get_id \
--keystone service-create --name=volume \
-+keystone service-create --name=cinder \
-                         --type=volume \
--                        --description="Nova Volume Service")
-+                        --description="Cinder Volume Service")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $VOLUME_SERVICE \
--        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8776/v1/\$(tenant_id)s" \
--        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8776/v1/\$(tenant_id)s" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8776/v1/\$(tenant_id)s"
-+        --publicurl "http://$CINDER_PUBLIC_ADDRESS:8776/v1/\$(tenant_id)s" \
-+        --adminurl "http://$CINDER_ADMIN_ADDRESS:8776/v1/\$(tenant_id)s" \
-+        --internalurl "http://$CINDER_INTERNAL_ADDRESS:8776/v1/\$(tenant_id)s"
- fi
- 
- #
-@@ -187,9 +231,9 @@
-                         --description="Glance Image Service")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $GLANCE_SERVICE \
--        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:9292" \
--        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:9292" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:9292"
-+        --publicurl "http://$GLANCE_PUBLIC_ADDRESS:9292" \
-+        --adminurl "http://$GLANCE_ADMIN_ADDRESS:9292" \
-+        --internalurl "http://$GLANCE_INTERNAL_ADDRESS:9292"
- fi
- 
- #
-@@ -201,9 +245,9 @@
-                         --description="EC2 Compatibility Layer")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $EC2_SERVICE \
--        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8773/services/Cloud" \
--        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8773/services/Admin" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8773/services/Cloud"
-+        --publicurl "http://$EC2_PUBLIC_ADDRESS:8773/services/Cloud" \
-+        --adminurl "http://$EC2_ADMIN_ADDRESS:8773/services/Admin" \
-+        --internalurl "http://$EC2_INTERNAL_ADDRESS:8773/services/Cloud"
- fi
- 
- #
-@@ -212,15 +256,34 @@
- SWIFT_SERVICE=$(get_id \
- keystone service-create --name=swift \
-                         --type="object-store" \
--                        --description="Swift Service")
-+                        --description="Swift Object Store Service")
- if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-     keystone endpoint-create --region RegionOne --service-id $SWIFT_SERVICE \
--        --publicurl   "http://$CONTROLLER_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
--        --adminurl    "http://$CONTROLLER_ADMIN_ADDRESS:8080/v1" \
--        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
-+        --publicurl "http://$SWIFT_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
-+        --adminurl "http://$SWIFT_ADMIN_ADDRESS:8080/v1" \
-+        --internalurl "http://$SWIFT_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
-+fi
-+
-+#
-+# Neutron service
-+#
-+NEUTRON_SERVICE=$(get_id \
-+keystone service-create --name=neutron \
-+                        --type=network \
-+                        --description="Neutron Network Service")
-+if [[ -z "$DISABLE_ENDPOINTS" ]]; then
-+    keystone endpoint-create --region RegionOne --service-id $NEUTRON_SERVICE \
-+        --publicurl "http://$NEUTRON_PUBLIC_ADDRESS:9696/" \
-+        --adminurl "http://$NEUTRON_ADMIN_ADDRESS:9696/" \
-+        --internalurl "http://$NEUTRON_INTERNAL_ADDRESS:9696/"
- fi
- 
- # create ec2 creds and parse the secret and access key returned
-+unset SERVICE_ENDPOINT SERVICE_TOKEN
-+export OS_AUTH_URL=http://localhost:5000/v2.0
-+export OS_PASSWORD="${ADMIN_PASSWORD}"
-+export OS_TENANT_NAME=demo
-+export OS_USERNAME=admin
- RESULT=$(keystone ec2-credentials-create --tenant-id=$SERVICE_TENANT --user-id=$ADMIN_USER)
- ADMIN_ACCESS=`echo "$RESULT" | grep access | awk '{print $4}'`
- ADMIN_SECRET=`echo "$RESULT" | grep secret | awk '{print $4}'`
--- a/components/openstack/keystone/patches/04-CVE-2014-2828.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-Upstream patch for bug 1300274.
-
-Fixed in Havana 2013.2.4, Icehouse 2014.1
-
-From: Florent Flament <[email protected]>
-Date: Tue, 1 Apr 2014 12:48:22 +0000 (+0000)
-Subject: Sanitizes authentication methods received in requests.
-X-Git-Url: https://review.openstack.org/gitweb?p=openstack%2Fkeystone.git;a=commitdiff_plain;h=e364ba5b12de8e4c11bd80bcca903f9615dcfc2e
-
-Sanitizes authentication methods received in requests.
-
-When a user authenticates against Identity V3 API, he can specify
-multiple authentication methods. This patch removes duplicates, which
-could have been used to achieve DoS attacks.
-
-Closes-Bug: 1300274
-(cherry picked from commit ef868ad92c00e23a4a5e9eb71e3e0bf5ae2fff0c)
-Cherry-pick from https://review.openstack.org/#/c/84425/
-
-Change-Id: I6e60324309baa094a5e54b012fb0fc528fea72ab
----
-
-diff --git a/keystone/auth/controllers.py b/keystone/auth/controllers.py
-index c3399df..4944316 100644
---- a/keystone/auth/controllers.py
-+++ b/keystone/auth/controllers.py
-@@ -225,7 +225,13 @@ class AuthInfo(object):
-         :returns: list of auth method names
- 
-         """
--        return self.auth['identity']['methods'] or []
-+        # Sanitizes methods received in request's body
-+        # Filters out duplicates, while keeping elements' order.
-+        method_names = []
-+        for method in self.auth['identity']['methods']:
-+            if method not in method_names:
-+                method_names.append(method)
-+        return method_names
- 
-     def get_method_data(self, method):
-         """Get the auth method payload.
-diff --git a/keystone/tests/test_v3_auth.py b/keystone/tests/test_v3_auth.py
-index d07e6ae..e89e29f 100644
---- a/keystone/tests/test_v3_auth.py
-+++ b/keystone/tests/test_v3_auth.py
-@@ -81,6 +81,18 @@ class TestAuthInfo(test_v3.RestfulTestCase):
-                           None,
-                           auth_data)
- 
-+    def test_get_method_names_duplicates(self):
-+        auth_data = self.build_authentication_request(
-+            token='test',
-+            user_id='test',
-+            password='test')['auth']
-+        auth_data['identity']['methods'] = ['password', 'token',
-+                                            'password', 'password']
-+        context = None
-+        auth_info = auth.controllers.AuthInfo(context, auth_data)
-+        self.assertEqual(auth_info.get_method_names(),
-+                         ['password', 'token'])
-+
-     def test_get_method_data_invalid_method(self):
-         auth_data = self.build_authentication_request(
-             user_id='test',
--- a/components/openstack/keystone/patches/05-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-In-house patch to remove unnecessary dependencies from Keystone's
-requirements files. The specific reasons are as follows:
-
-oauth2		Not applicable to Solaris (being replaced with oauthlib)
-		(upstream commit bed88a2e724f5f23a1c839b7872b1bc56f059df5)
-
-pam		No longer applicable
-		(upstream commit ff1b41c15b2d65443234ccdb60565d6f6709f879)
-
---- keystone-2013.2.3/keystone.egg-info/requires.txt.orig	2014-04-03 11:49:55.000000000 -0700
-+++ keystone-2013.2.3/keystone.egg-info/requires.txt	2014-05-24 23:09:25.817082422 -0700
-@@ -1,5 +1,4 @@
- pbr>=0.5.21,<1.0
--pam>=0.1.4
- WebOb>=1.2.3,<1.3
- eventlet>=0.13.0
- greenlet>=0.3.2
-@@ -15,5 +14,4 @@
- python-keystoneclient>=0.3.2
- oslo.config>=1.2.0
- Babel>=1.3
--oauth2
--dogpile.cache>=0.5.0
-\ No newline at end of file
-+dogpile.cache>=0.5.0
-
---- keystone-2013.2.3/requirements.txt.orig	2014-04-03 11:47:39.000000000 -0700
-+++ keystone-2013.2.3/requirements.txt	2014-05-24 23:09:35.044573447 -0700
-@@ -1,6 +1,5 @@
- # keystone dependencies
- pbr>=0.5.21,<1.0
--pam>=0.1.4
- WebOb>=1.2.3,<1.3
- eventlet>=0.13.0
- greenlet>=0.3.2
-@@ -16,5 +15,4 @@
- python-keystoneclient>=0.3.2
- oslo.config>=1.2.0
- Babel>=1.3
--oauth2
- dogpile.cache>=0.5.0
--- a/components/openstack/keystone/patches/06-CVE-2014-3476.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,341 +0,0 @@
-Upstream patch for CVE-2014-3476.  This fix will be included in the
-Juno-2 development milestone and in future 2013.2.4 and 2014.1.2 releases
-
-From 9162837329665b4316afc2270a602dc8ae11f6d2 Mon Sep 17 00:00:00 2001
-From: Adam Young <[email protected]>
-Date: Thu, 29 May 2014 13:56:17 -0400
-Subject: [PATCH] Block delegation escalation of privilege
-
-Forbids doing the following with either a trust
-  or oauth based token:
-  creating a trust
-  approving a request_token
-  listing request tokens
-
-Change-Id: I1528f9dd003f5e03cbc50b78e1b32dbbf85ffcc2
-Closes-Bug:  1324592
----
- keystone/common/controller.py          |   36 +++++++++++-
- keystone/contrib/oauth1/controllers.py |   12 ++++
- keystone/tests/test_v3_auth.py         |   62 ++++++++++++++++++++
- keystone/tests/test_v3_oauth1.py       |   98 ++++++++++++++++++++++++++++++++
- keystone/trust/controllers.py          |    9 +++
- 5 files changed, 216 insertions(+), 1 deletion(-)
-
-diff --git a/keystone/common/controller.py b/keystone/common/controller.py
-index faadc09..d6c33df 100644
---- a/keystone/common/controller.py
-+++ b/keystone/common/controller.py
-@@ -44,7 +44,7 @@ def _build_policy_check_credentials(self, action, context, kwargs):
-     # it would otherwise need to reload the token_ref from backing store.
-     wsgi.validate_token_bind(context, token_ref)
- 
--    creds = {}
-+    creds = {'is_delegated_auth': False}
-     if 'token_data' in token_ref and 'token' in token_ref['token_data']:
-         #V3 Tokens
-         token_data = token_ref['token_data']['token']
-@@ -66,9 +66,32 @@ def _build_policy_check_credentials(self, action, context, kwargs):
-             creds['roles'] = []
-             for role in token_data['roles']:
-                 creds['roles'].append(role['name'])
-+
-+        trust = token_data.get('OS-TRUST:trust')
-+        if trust is None:
-+            creds['trust_id'] = None
-+            creds['trustor_id'] = None
-+            creds['trustee_id'] = None
-+        else:
-+            creds['trust_id'] = trust['id']
-+            creds['trustor_id'] = trust['trustor_user']['id']
-+            creds['trustee_id'] = trust['trustee_user']['id']
-+            creds['is_delegated_auth'] = True
-+
-+        oauth1 = token_data.get('OS-OAUTH1')
-+        if oauth1 is None:
-+            creds['consumer_id'] = None
-+            creds['access_token_id'] = None
-+        else:
-+            creds['consumer_id'] = oauth1['consumer_id']
-+            creds['access_token_id'] = oauth1['access_token_id']
-+            creds['is_delegated_auth'] = True
-+
-     else:
-         #v2 Tokens
-         creds = token_ref.get('metadata', {}).copy()
-+        creds['is_delegated_auth'] = False
-+
-         try:
-             creds['user_id'] = token_ref['user'].get('id')
-         except AttributeError:
-@@ -81,6 +104,16 @@ def _build_policy_check_credentials(self, action, context, kwargs):
-         # NOTE(vish): this is pretty inefficient
-         creds['roles'] = [self.identity_api.get_role(role)['name']
-                           for role in creds.get('roles', [])]
-+        trust = token_ref.get('trust')
-+        if trust is None:
-+            creds['trust_id'] = None
-+            creds['trustor_id'] = None
-+            creds['trustee_id'] = None
-+        else:
-+            creds['trust_id'] = trust.get('id')
-+            creds['trustor_id'] = trust.get('trustor_id')
-+            creds['trustee_id'] = trust.get('trustee_id')
-+            creds['is_delegated_auth'] = True
- 
-     return creds
- 
-@@ -155,6 +188,7 @@ def protected(callback=None):
-                 policy_dict.update(kwargs)
-                 self.policy_api.enforce(creds, action, flatten(policy_dict))
-                 LOG.debug(_('RBAC: Authorization granted'))
-+                context['environment'] = {'KEYSTONE_AUTH_CONTEXT': creds}
-             return f(self, context, *args, **kwargs)
-         return inner
-     return wrapper
-diff --git a/keystone/contrib/oauth1/controllers.py b/keystone/contrib/oauth1/controllers.py
-index b8c2441..d4024df 100644
---- a/keystone/contrib/oauth1/controllers.py
-+++ b/keystone/contrib/oauth1/controllers.py
-@@ -86,6 +86,12 @@ class AccessTokenCrudV3(controller.V3Controller):
- 
-     @controller.protected()
-     def list_access_tokens(self, context, user_id):
-+        auth_context = context.get('environment',
-+                                   {}).get('KEYSTONE_AUTH_CONTEXT', {})
-+        if auth_context.get('is_delegated_auth'):
-+            raise exception.Forbidden(
-+                _('Cannot list request tokens'
-+                  ' with a token issued via delegation.'))
-         refs = self.oauth_api.list_access_tokens(user_id)
-         formatted_refs = ([self._format_token_entity(x) for x in refs])
-         return AccessTokenCrudV3.wrap_collection(context, formatted_refs)
-@@ -314,6 +320,12 @@ class OAuthControllerV3(controller.V3Controller):
-         there is not another easy way to make sure the user knows which roles
-         are being requested before authorizing.
-         """
-+        auth_context = context.get('environment',
-+                                   {}).get('KEYSTONE_AUTH_CONTEXT', {})
-+        if auth_context.get('is_delegated_auth'):
-+            raise exception.Forbidden(
-+                _('Cannot authorize a request token'
-+                  ' with a token issued via delegation.'))
- 
-         req_token = self.oauth_api.get_request_token(request_token_id)
- 
-diff --git a/keystone/tests/test_v3_auth.py b/keystone/tests/test_v3_auth.py
-index e89e29f..f3e3ace 100644
---- a/keystone/tests/test_v3_auth.py
-+++ b/keystone/tests/test_v3_auth.py
-@@ -2150,6 +2150,68 @@ class TestTrustAuth(TestAuthInfo):
-         self.assertEqual(r.result['token']['project']['name'],
-                          self.project['name'])
- 
-+    def test_impersonation_token_cannot_create_new_trust(self):
-+        ref = self.new_trust_ref(
-+            trustor_user_id=self.user_id,
-+            trustee_user_id=self.trustee_user_id,
-+            project_id=self.project_id,
-+            impersonation=True,
-+            expires=dict(minutes=1),
-+            role_ids=[self.role_id])
-+        del ref['id']
-+
-+        r = self.post('/OS-TRUST/trusts', body={'trust': ref})
-+        trust = self.assertValidTrustResponse(r)
-+
-+        auth_data = self.build_authentication_request(
-+            user_id=self.trustee_user['id'],
-+            password=self.trustee_user['password'],
-+            trust_id=trust['id'])
-+        r = self.post('/auth/tokens', body=auth_data)
-+
-+        trust_token = r.headers['X-Subject-Token']
-+
-+        # Build second trust
-+        ref = self.new_trust_ref(
-+            trustor_user_id=self.user_id,
-+            trustee_user_id=self.trustee_user_id,
-+            project_id=self.project_id,
-+            impersonation=True,
-+            expires=dict(minutes=1),
-+            role_ids=[self.role_id])
-+        del ref['id']
-+
-+        self.post('/OS-TRUST/trusts',
-+                  body={'trust': ref},
-+                  token=trust_token,
-+                  expected_status=403)
-+
-+    def test_delete_trust_revokes_tokens(self):
-+        ref = self.new_trust_ref(
-+            trustor_user_id=self.user_id,
-+            trustee_user_id=self.trustee_user_id,
-+            project_id=self.project_id,
-+            impersonation=False,
-+            expires=dict(minutes=1),
-+            role_ids=[self.role_id])
-+        del ref['id']
-+        r = self.post('/OS-TRUST/trusts', body={'trust': ref})
-+        trust = self.assertValidTrustResponse(r)
-+        trust_id = trust['id']
-+        auth_data = self.build_authentication_request(
-+            user_id=self.trustee_user['id'],
-+            password=self.trustee_user['password'],
-+            trust_id=trust_id)
-+        r = self.post('/auth/tokens', body=auth_data)
-+        self.assertValidProjectTrustScopedTokenResponse(
-+            r, self.trustee_user)
-+        trust_token = r.headers['X-Subject-Token']
-+        self.delete('/OS-TRUST/trusts/%(trust_id)s' % {
-+            'trust_id': trust_id},
-+            expected_status=204)
-+        headers = {'X-Subject-Token': trust_token}
-+        self.head('/auth/tokens', headers=headers, expected_status=404)
-+
-     def test_delete_trust(self):
-         ref = self.new_trust_ref(
-             trustor_user_id=self.user_id,
-diff --git a/keystone/tests/test_v3_oauth1.py b/keystone/tests/test_v3_oauth1.py
-index 73a34d7..a83c86e 100644
---- a/keystone/tests/test_v3_oauth1.py
-+++ b/keystone/tests/test_v3_oauth1.py
-@@ -16,6 +16,7 @@
- 
- import copy
- import os
-+import tempfile
- import urlparse
- import uuid
- 
-@@ -26,6 +27,8 @@ from keystone import contrib
- from keystone.contrib import oauth1
- from keystone.contrib.oauth1 import controllers
- from keystone.openstack.common import importutils
-+from keystone.openstack.common import jsonutils
-+from keystone.policy.backends import rules
- from keystone.tests import test_v3
- 
- 
-@@ -447,6 +450,101 @@ class AuthTokenTests(OAuthFlowTests):
-         self.assertTrue(len(tokens) > 0)
-         self.assertTrue(keystone_token_uuid in tokens)
- 
-+    def _create_trust_get_token(self):
-+        ref = self.new_trust_ref(
-+            trustor_user_id=self.user_id,
-+            trustee_user_id=self.user_id,
-+            project_id=self.project_id,
-+            impersonation=True,
-+            expires=dict(minutes=1),
-+            role_ids=[self.role_id])
-+        del ref['id']
-+
-+        r = self.post('/OS-TRUST/trusts', body={'trust': ref})
-+        trust = self.assertValidTrustResponse(r)
-+
-+        auth_data = self.build_authentication_request(
-+            user_id=self.user['id'],
-+            password=self.user['password'],
-+            trust_id=trust['id'])
-+        r = self.post('/auth/tokens', body=auth_data)
-+
-+        trust_token = r.headers['X-Subject-Token']
-+        return trust_token
-+
-+    def _approve_request_token_url(self):
-+        consumer = self._create_single_consumer()
-+        consumer_id = consumer.get('id')
-+        consumer_secret = consumer.get('secret')
-+        self.consumer = oauth1.Consumer(consumer_id, consumer_secret)
-+        self.assertIsNotNone(self.consumer.key)
-+
-+        url, headers = self._create_request_token(self.consumer,
-+                                                  self.project_id)
-+        content = self.post(url, headers=headers)
-+        credentials = urlparse.parse_qs(content.result)
-+        request_key = credentials.get('oauth_token')[0]
-+        request_secret = credentials.get('oauth_token_secret')[0]
-+        self.request_token = oauth1.Token(request_key, request_secret)
-+        self.assertIsNotNone(self.request_token.key)
-+
-+        url = self._authorize_request_token(request_key)
-+
-+        return url
-+
-+    def test_oauth_token_cannot_create_new_trust(self):
-+        self.test_oauth_flow()
-+        ref = self.new_trust_ref(
-+            trustor_user_id=self.user_id,
-+            trustee_user_id=self.user_id,
-+            project_id=self.project_id,
-+            impersonation=True,
-+            expires=dict(minutes=1),
-+            role_ids=[self.role_id])
-+        del ref['id']
-+
-+        self.post('/OS-TRUST/trusts',
-+                  body={'trust': ref},
-+                  token=self.keystone_token_id,
-+                  expected_status=403)
-+
-+    def test_oauth_token_cannot_authorize_request_token(self):
-+        self.test_oauth_flow()
-+        url = self._approve_request_token_url()
-+        body = {'roles': [{'id': self.role_id}]}
-+        self.put(url, body=body, token=self.keystone_token_id,
-+                 expected_status=403)
-+
-+    def test_oauth_token_cannot_list_request_tokens(self):
-+        self._set_policy({"identity:list_access_tokens": [],
-+                          "identity:create_consumer": [],
-+                          "identity:authorize_request_token": []})
-+        self.test_oauth_flow()
-+        url = '/users/%s/OS-OAUTH1/access_tokens' % self.user_id
-+        self.get(url, token=self.keystone_token_id,
-+                 expected_status=403)
-+
-+    def _set_policy(self, new_policy):
-+        _unused, self.tmpfilename = tempfile.mkstemp()
-+        rules.reset()
-+        self.opt(policy_file=self.tmpfilename)
-+        with open(self.tmpfilename, "w") as policyfile:
-+            policyfile.write(jsonutils.dumps(new_policy))
-+        self.addCleanup(os.remove, self.tmpfilename)
-+
-+    def test_trust_token_cannot_authorize_request_token(self):
-+        trust_token = self._create_trust_get_token()
-+        url = self._approve_request_token_url()
-+        body = {'roles': [{'id': self.role_id}]}
-+        self.put(url, body=body, token=trust_token, expected_status=403)
-+
-+    def test_trust_token_cannot_list_request_tokens(self):
-+        self._set_policy({"identity:list_access_tokens": [],
-+                          "identity:create_trust": []})
-+        trust_token = self._create_trust_get_token()
-+        url = '/users/%s/OS-OAUTH1/access_tokens' % self.user_id
-+        self.get(url, token=trust_token, expected_status=403)
-+
- 
- class MaliciousOAuth1Tests(OAuth1Tests):
- 
-diff --git a/keystone/trust/controllers.py b/keystone/trust/controllers.py
-index 1d54f51..7fdc8c2 100644
---- a/keystone/trust/controllers.py
-+++ b/keystone/trust/controllers.py
-@@ -144,6 +144,15 @@ class TrustV3(controller.V3Controller):
- 
-         # TODO(ayoung): instead of raising ValidationError on the first
-         # problem, return a collection of all the problems.
-+
-+        # Explicitly prevent a trust token from creating a new trust.
-+        auth_context = context.get('environment',
-+                                   {}).get('KEYSTONE_AUTH_CONTEXT', {})
-+        if auth_context.get('is_delegated_auth'):
-+            raise exception.Forbidden(
-+                _('Cannot create a trust'
-+                  ' with a token issued via delegation.'))
-+
-         if not trust:
-             raise exception.ValidationError(attribute='trust',
-                                             target='request')
--- a/components/openstack/keystone/patches/07-CVE-2014-3520.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-This upstream patch addresses CVE-2014-3520 and is tracked under
-Launchpad bug 1331912. It is addressed in Icehouse 2014.1.2 and Havana
-2013.2.4.
-
-commit 96d9bcf230a74d6122a2b14e00ef10915c8f76e3
-Author: Jamie Lennox <[email protected]>
-Date:   Thu Jun 19 14:41:22 2014 +1000
-
-    Ensure that in v2 auth tenant_id matches trust
-    
-    Previously if a trustee requests a trust scoped token for a project that
-    is different to the one in the trust, however the trustor has the
-    appropriate roles then a token would be issued.
-    
-    Ensure that the trust that was given matches the project that was
-    specified in the scope.
-    
-    (cherry picked from commit 1556faec2f65dba60584f0a9657d5b717a6ede3a)
-    
-    Closes-Bug: #1331912
-    Change-Id: I00ad783bcb93cea9e5622965f81b91c80f4570cc
-
-diff --git a/keystone/tests/test_auth.py b/keystone/tests/test_auth.py
-index 6371caf..0d97f44 100644
---- a/keystone/tests/test_auth.py
-+++ b/keystone/tests/test_auth.py
-@@ -624,13 +624,15 @@ class AuthWithTrust(AuthTest):
-         self.new_trust = self.trust_controller.create_trust(
-             context, trust=trust_data)['trust']
- 
--    def build_v2_token_request(self, username, password):
-+    def build_v2_token_request(self, username, password, tenant_id=None):
-+        if not tenant_id:
-+            tenant_id = self.tenant_bar['id']
-         body_dict = _build_user_auth(username=username, password=password)
-         self.unscoped_token = self.controller.authenticate({}, body_dict)
-         unscoped_token_id = self.unscoped_token['access']['token']['id']
-         request_body = _build_user_auth(token={'id': unscoped_token_id},
-                                         trust_id=self.new_trust['id'],
--                                        tenant_id=self.tenant_bar['id'])
-+                                        tenant_id=tenant_id)
-         return request_body
- 
-     def test_create_trust_bad_data_fails(self):
-@@ -704,6 +706,15 @@ class AuthWithTrust(AuthTest):
-             exception.Forbidden,
-             self.controller.authenticate, {}, request_body)
- 
-+    def test_token_from_trust_wrong_project_fails(self):
-+        for assigned_role in self.assigned_roles:
-+            self.assignment_api.add_role_to_user_and_project(
-+                self.trustor['id'], self.tenant_baz['id'], assigned_role)
-+        request_body = self.build_v2_token_request('TWO', 'two2',
-+                                                   self.tenant_baz['id'])
-+        self.assertRaises(exception.Forbidden, self.controller.authenticate,
-+                          {}, request_body)
-+
-     def fetch_v2_token_from_trust(self):
-         request_body = self.build_v2_token_request('TWO', 'two2')
-         auth_response = self.controller.authenticate({}, request_body)
-diff --git a/keystone/token/controllers.py b/keystone/token/controllers.py
-index 72486a1..de7e473 100644
---- a/keystone/token/controllers.py
-+++ b/keystone/token/controllers.py
-@@ -160,6 +160,8 @@ class Auth(controller.V2Controller):
- 
-         user_ref = old_token_ref['user']
-         user_id = user_ref['id']
-+        tenant_id = self._get_project_id_from_auth(auth)
-+
-         if not CONF.trust.enabled and 'trust_id' in auth:
-             raise exception.Forbidden('Trusts are disabled.')
-         elif CONF.trust.enabled and 'trust_id' in auth:
-@@ -168,6 +170,9 @@ class Auth(controller.V2Controller):
-                 raise exception.Forbidden()
-             if user_id != trust_ref['trustee_user_id']:
-                 raise exception.Forbidden()
-+            if (trust_ref['project_id'] and
-+                    tenant_id != trust_ref['project_id']):
-+                raise exception.Forbidden()
-             if ('expires' in trust_ref) and (trust_ref['expires']):
-                 expiry = trust_ref['expires']
-                 if expiry < timeutils.parse_isotime(timeutils.isotime()):
-@@ -190,7 +195,6 @@ class Auth(controller.V2Controller):
-             current_user_ref = self.identity_api.get_user(user_id)
- 
-         metadata_ref = {}
--        tenant_id = self._get_project_id_from_auth(auth)
-         tenant_ref, metadata_ref['roles'] = self._get_project_roles_and_ref(
-             user_id, tenant_id)
- 
--- a/components/openstack/keystone/patches/08-CVE-2014-3621.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,184 +0,0 @@
-This upstream patch addresses CVE-2014-3621 and is tracked under
-Launchpad bug 1354208.  It is addressed in Icehouse 2014.1.3 and
-Havana 2013.2.4
-
-From 52714633c9a4dae5e60279217090859aa6dbcb4f Mon Sep 17 00:00:00 2001
-From: David Stanek <[email protected]>
-Date: Fri, 15 Aug 2014 13:30:33 -0500
-Subject: [PATCH] Adds a whitelist for endpoint catalog substitution
-
-Change-Id: If02327d70d0143d805969fe927898f08eb84c4c2
-Closes-Bug: #1354208
----
- etc/keystone.conf.sample                 |    7 ++++
- keystone/catalog/core.py                 |    4 ++
- keystone/common/config.py                |   14 ++++++-
- keystone/common/utils.py                 |   12 ++++++
- keystone/tests/unit/catalog/test_core.py |   62 ++++++++++++++++++++++++++++++
- 5 files changed, 97 insertions(+), 2 deletions(-)
- create mode 100644 keystone/tests/unit/__init__.py
- create mode 100644 keystone/tests/unit/catalog/__init__.py
- create mode 100644 keystone/tests/unit/catalog/test_core.py
-
-diff --git a/etc/keystone.conf.sample b/etc/keystone.conf.sample
-index d7e1c44..c24f8ff 100644
---- a/etc/keystone.conf.sample
-+++ b/etc/keystone.conf.sample
-@@ -190,6 +190,13 @@
- 
- # template_file = default_catalog.templates
- 
-+# (Deprecated) List of possible substitutions for use in
-+# formatting endpoints. Use caution when modifying this list.
-+# It will give users with permission to create endpoints the
-+# ability to see those values in your configuration file. This
-+# option will be removed in Juno. (list value)
-+#endpoint_substitution_whitelist=tenant_id,user_id,public_bind_host,admin_bind_hostompute_hostompute_port,admin_port,public_port,public_endpoint,admin_endpoint
-+
- [endpoint_filter]
- # extension for creating associations between project and endpoints in order to
- # provide a tailored catalog for project-scoped token requests.
-diff --git a/keystone/catalog/core.py b/keystone/catalog/core.py
-index 7cc49d5..ebd56ed 100644
---- a/keystone/catalog/core.py
-+++ b/keystone/catalog/core.py
-@@ -19,6 +19,7 @@
- 
- from keystone.common import dependency
- from keystone.common import manager
-+from keystone.common import utils
- from keystone import config
- from keystone import exception
- from keystone.openstack.common import log as logging
-@@ -30,6 +31,9 @@ LOG = logging.getLogger(__name__)
- 
- def format_url(url, data):
-     """Safely string formats a user-defined URL with the given data."""
-+    data = utils.WhiteListedItemFilter(
-+        CONF.catalog.endpoint_substitution_whitelist,
-+        data)
-     try:
-         result = url.replace('$(', '%(') % data
-     except AttributeError:
-diff --git a/keystone/common/config.py b/keystone/common/config.py
-index f1a7b74..7199c43 100644
---- a/keystone/common/config.py
-+++ b/keystone/common/config.py
-@@ -260,8 +260,18 @@ FILE_OPTIONS = {
-         cfg.StrOpt('template_file',
-                    default='default_catalog.templates'),
-         cfg.StrOpt('driver',
--                   default='keystone.catalog.backends.sql.Catalog')]}
--
-+                   default='keystone.catalog.backends.sql.Catalog'),
-+        cfg.ListOpt('endpoint_substitution_whitelist',
-+                    default=['tenant_id', 'user_id', 'public_bind_host',
-+                             'admin_bind_host', 'compute_host', 'compute_port',
-+                             'admin_port', 'public_port', 'public_endpoint',
-+                             'admin_endpoint'],
-+                    help='(Deprecated) List of possible substitutions for use '
-+                         'in formatting endpoints. Use caution when modifying '
-+                         'this list. It will give users with permission to '
-+                         'create endpoints the ability to see those values '
-+                         'in your configuration file. This option will be '
-+                         'removed in Juno.')]}
- 
- CONF = cfg.CONF
- 
-diff --git a/keystone/common/utils.py b/keystone/common/utils.py
-index 402f8a2..3d4a62a 100644
---- a/keystone/common/utils.py
-+++ b/keystone/common/utils.py
-@@ -516,3 +516,15 @@ def make_dirs(path, mode=None, user=None, group=None, log=None):
-             raise EnvironmentError("makedirs('%s'): %s" % (path, exc.strerror))
- 
-     set_permissions(path, mode, user, group, log)
-+
-+
-+class WhiteListedItemFilter(object):
-+
-+    def __init__(self, whitelist, data):
-+        self._whitelist = set(whitelist or [])
-+        self._data = data
-+
-+    def __getitem__(self, name):
-+        if name not in self._whitelist:
-+            raise KeyError
-+        return self._data[name]
-diff --git a/keystone/tests/unit/__init__.py b/keystone/tests/unit/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/keystone/tests/unit/catalog/__init__.py b/keystone/tests/unit/catalog/__init__.py
-new file mode 100644
-index 0000000..e69de29
-diff --git a/keystone/tests/unit/catalog/test_core.py b/keystone/tests/unit/catalog/test_core.py
-new file mode 100644
-index 0000000..b4372b9
---- /dev/null
-+++ b/keystone/tests/unit/catalog/test_core.py
-@@ -0,0 +1,62 @@
-+# 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.
-+
-+from keystone.catalog import core
-+from keystone import config
-+from keystone import exception
-+from keystone import tests
-+
-+
-+CONF = config.CONF
-+
-+
-+class FormatUrlTests(tests.TestCase):
-+
-+    def setUp(self):
-+        super(FormatUrlTests, self).setUp()
-+        whitelist = ['host', 'port', 'part1', 'part2']
-+        self.opt_in_group('catalog', endpoint_substitution_whitelist=whitelist)
-+
-+    def test_successful_formatting(self):
-+        url_template = 'http://%(host)s:%(port)d/%(part1)s/%(part2)s'
-+        values = {'host': 'server', 'port': 9090, 'part1': 'A', 'part2': 'B'}
-+        actual_url = core.format_url(url_template, values)
-+
-+        expected_url = 'http://server:9090/A/B'
-+        self.assertEqual(actual_url, expected_url)
-+
-+    def test_raises_malformed_on_missing_key(self):
-+        self.assertRaises(exception.MalformedEndpoint,
-+                          core.format_url,
-+                          "http://%(foo)s/%(bar)s",
-+                          {"foo": "1"})
-+
-+    def test_raises_malformed_on_wrong_type(self):
-+        self.assertRaises(exception.MalformedEndpoint,
-+                          core.format_url,
-+                          "http://%foo%s",
-+                          {"foo": "1"})
-+
-+    def test_raises_malformed_on_incomplete_format(self):
-+        self.assertRaises(exception.MalformedEndpoint,
-+                          core.format_url,
-+                          "http://%(foo)",
-+                          {"foo": "1"})
-+
-+    def test_substitution_with_key_not_whitelisted(self):
-+        url_template = 'http://%(host)s:%(port)d/%(part1)s/%(part2)s/%(part3)s'
-+        values = {'host': 'server', 'port': 9090,
-+                  'part1': 'A', 'part2': 'B', 'part3': 'C'}
-+        self.assertRaises(exception.MalformedEndpoint,
-+                          core.format_url,
-+                          url_template,
-+                          values)
--- 
-1.7.9.5
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/launchpad-1384775.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,34 @@
+commit 8bd0f6ecd882a3119acb5fd7a760122c8931db94
+Author: wanghong <[email protected]>
+Date:   Sat Oct 25 10:26:55 2014 +0800
+
+    default revoke driver should be the non-deprecated driver
+    
+    Have checked other config options that default is not the deprecated
+    option, others are OK.
+    
+    Change-Id: Ie6e7351114d79eb25b392faaa0e6376c24c45fa0
+    Closes-Bug: #1384775
+
+--- keystone-2014.2.2/etc/keystone.conf.sample.~1~	2014-12-04 21:03:56.000000000 -0800
++++ keystone-2014.2.2/etc/keystone.conf.sample	2015-01-25 17:25:46.677132074 -0800
+@@ -1332,7 +1332,7 @@
+ 
+ # An implementation of the backend for persisting revocation
+ # events. (string value)
+-#driver=keystone.contrib.revoke.backends.kvs.Revoke
++#driver=keystone.contrib.revoke.backends.sql.Revoke
+ 
+ # This value (calculated in seconds) is added to token
+ # expiration before a revocation event may be removed from the
+--- keystone-2014.2.2/keystone/common/config.py.~1~	2014-12-04 21:03:56.000000000 -0800
++++ keystone-2014.2.2/keystone/common/config.py	2015-01-25 17:25:46.677474875 -0800
+@@ -275,7 +275,7 @@ FILE_OPTIONS = {
+     ],
+     'revoke': [
+         cfg.StrOpt('driver',
+-                   default='keystone.contrib.revoke.backends.kvs.Revoke',
++                   default='keystone.contrib.revoke.backends.sql.Revoke',
+                    help='An implementation of the backend for persisting '
+                         'revocation events.'),
+         cfg.IntOpt('expiration_buffer', default=1800,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/launchpad-1404354.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,32 @@
+commit 600c236e2111a770e478040a8a78bb62ef27ac39
+Author: Brant Knudson <[email protected]>
+Date:   Fri Dec 19 14:11:00 2014 -0600
+
+    Fix to not use empty IN clause
+    
+    When an empty IN clause is used with sqlalchemy, a warning is
+    printed:
+    
+     SAWarning: The IN-predicate on "assignment.actor_id" was invoked
+     with an empty sequence. ...
+    
+    With this fix, these warnings should no longer be printed.
+    
+    The tests are changed to convert these warnings into errors.
+    
+    Change-Id: I58c7e5f11fdac9bbc1e9a970ce690ea113e2bd95
+    Closes-Bug: #1404354
+
+--- keystone-2014.2.2/keystone/assignment/backends/sql.py.orig	2014-12-04 21:03:56.000000000 -0800
++++ keystone-2014.2.2/keystone/assignment/backends/sql.py	2015-01-25 20:44:40.377007906 -0800
+@@ -356,6 +356,10 @@ class Assignment(keystone_assignment.Dri
+
+     def _get_group_project_roles(self, session, groups, project_id,
+                                  project_domain_id):
++        if not groups:
++            # If there's no groups then there will be no project roles.
++            return []
++
+         sql_constraints = sqlalchemy.and_(
+             RoleAssignment.type == AssignmentType.GROUP_PROJECT,
+             RoleAssignment.target_id == project_id)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+In-house patch to remove unnecessary dependencies from Keystone's
+requirements files. The specific reasons are as follows:
+
+oslo.serialization	Not applicable
+
+paste			Not applicable
+
+posix_ipc		Not applicable
+
+--- keystone-2014.2.2/keystone.egg-info/requires.txt.~1~	2015-02-05 06:56:18.000000000 -0800
++++ keystone-2014.2.2/keystone.egg-info/requires.txt	2015-02-24 22:46:53.872644685 -0800
+@@ -4,7 +4,6 @@ eventlet>=0.15.1,<0.16.0
+ greenlet>=0.3.2
+ netaddr>=0.7.12
+ PasteDeploy>=1.5.0
+-Paste
+ Routes>=1.12.3,!=2.0
+ six>=1.7.0
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+@@ -17,11 +16,9 @@ oslo.config>=1.4.0  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.i18n>=1.0.0  # Apache-2.0
+-oslo.serialization>=1.0.0               # Apache-2.0
+ oslo.utils>=1.0.0                       # Apache-2.0
+ Babel>=1.3
+ oauthlib>=0.6
+ dogpile.cache>=0.5.3
+ jsonschema>=2.0.0,<3.0.0
+-pycadf>=0.6.0
+-posix_ipc
++pycadf>=0.6.0
+\ No newline at end of file
+--- keystone-2014.2.2/requirements.txt.~1~	2015-02-05 06:53:51.000000000 -0800
++++ keystone-2014.2.2/requirements.txt	2015-02-24 22:46:14.319449987 -0800
+@@ -9,7 +9,6 @@ eventlet>=0.15.1,<0.16.0
+ greenlet>=0.3.2
+ netaddr>=0.7.12
+ PasteDeploy>=1.5.0
+-Paste
+ Routes>=1.12.3,!=2.0
+ six>=1.7.0
+ SQLAlchemy>=0.8.4,<=0.9.99,!=0.9.0,!=0.9.1,!=0.9.2,!=0.9.3,!=0.9.4,!=0.9.5,!=0.9.6
+@@ -22,12 +21,9 @@ oslo.config>=1.4.0  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.i18n>=1.0.0  # Apache-2.0
+-# only for Keystone tests running against keystoneclient master
+-oslo.serialization>=1.0.0               # Apache-2.0
+ oslo.utils>=1.0.0                       # Apache-2.0
+ Babel>=1.3
+ oauthlib>=0.6
+ dogpile.cache>=0.5.3
+ jsonschema>=2.0.0,<3.0.0
+ pycadf>=0.6.0
+-posix_ipc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/sample-data.sh.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,199 @@
+In-house patch to the sample_data.sh script installed in
+/usr/demo/openstack/keystone in order to support all of the standard
+services and to allow customization of the individual service
+endpoints.  Solaris-specific patch and is not suitable for upstream
+
+It also includes a change to use the standard Solaris tr(1) rather than
+GNU sed.
+
+--- keystone-2014.2.rc1/tools/sample_data.sh.~1~	2014-09-30 00:14:14.000000000 -0700
++++ keystone-2014.2.rc1/tools/sample_data.sh	2014-10-13 00:53:30.614564163 -0700
+@@ -2,6 +2,8 @@
+ 
+ # Copyright 2013 OpenStack Foundation
+ #
++# 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
+@@ -36,22 +38,47 @@
+ # service              nova      admin
+ # service              ec2       admin
+ # service              swift     admin
++# service              cinder    admin
++# service              neutron   admin
+ 
+ # By default, passwords used are those in the OpenStack Install and Deploy Manual.
+ # One can override these (publicly known, and hence, insecure) passwords by setting the appropriate
+ # environment variables. A common default password for all the services can be used by
+ # setting the "SERVICE_PASSWORD" environment variable.
+ 
++PATH=/usr/bin
++
+ ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
+ NOVA_PASSWORD=${NOVA_PASSWORD:-${SERVICE_PASSWORD:-nova}}
+ GLANCE_PASSWORD=${GLANCE_PASSWORD:-${SERVICE_PASSWORD:-glance}}
+ EC2_PASSWORD=${EC2_PASSWORD:-${SERVICE_PASSWORD:-ec2}}
+-SWIFT_PASSWORD=${SWIFT_PASSWORD:-${SERVICE_PASSWORD:-swiftpass}}
++SWIFT_PASSWORD=${SWIFT_PASSWORD:-${SERVICE_PASSWORD:-swift}}
++CINDER_PASSWORD=${CINDER_PASSWORD:-${SERVICE_PASSWORD:-cinder}}
++NEUTRON_PASSWORD=${NEUTRON_PASSWORD:-${SERVICE_PASSWORD:-neutron}}
+ 
+ CONTROLLER_PUBLIC_ADDRESS=${CONTROLLER_PUBLIC_ADDRESS:-localhost}
+ CONTROLLER_ADMIN_ADDRESS=${CONTROLLER_ADMIN_ADDRESS:-localhost}
+ CONTROLLER_INTERNAL_ADDRESS=${CONTROLLER_INTERNAL_ADDRESS:-localhost}
+ 
++NOVA_PUBLIC_ADDRESS=${NOVA_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++NOVA_ADMIN_ADDRESS=${NOVA_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++NOVA_INTERNAL_ADDRESS=${NOVA_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++GLANCE_PUBLIC_ADDRESS=${GLANCE_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++GLANCE_ADMIN_ADDRESS=${GLANCE_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++GLANCE_INTERNAL_ADDRESS=${GLANCE_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++EC2_PUBLIC_ADDRESS=${EC2_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++EC2_ADMIN_ADDRESS=${EC2_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++EC2_INTERNAL_ADDRESS=${EC2_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++SWIFT_PUBLIC_ADDRESS=${SWIFT_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++SWIFT_ADMIN_ADDRESS=${SWIFT_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++SWIFT_INTERNAL_ADDRESS=${SWIFT_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++CINDER_PUBLIC_ADDRESS=${CINDER_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++CINDER_ADMIN_ADDRESS=${CINDER_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++CINDER_INTERNAL_ADDRESS=${CINDER_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++NEUTRON_PUBLIC_ADDRESS=${NEUTRON_PUBLIC_ADDRESS:-$CONTROLLER_PUBLIC_ADDRESS}
++NEUTRON_ADMIN_ADDRESS=${NEUTRON_ADMIN_ADDRESS:-$CONTROLLER_ADMIN_ADDRESS}
++NEUTRON_INTERNAL_ADDRESS=${NEUTRON_INTERNAL_ADDRESS:-$CONTROLLER_INTERNAL_ADDRESS}
++
+ TOOLS_DIR=$(cd $(dirname "$0") && pwd)
+ KEYSTONE_CONF=${KEYSTONE_CONF:-/etc/keystone/keystone.conf}
+ if [[ -r "$KEYSTONE_CONF" ]]; then
+@@ -67,8 +94,8 @@ fi
+ 
+ # Extract some info from Keystone's configuration file
+ if [[ -r "$KEYSTONE_CONF" ]]; then
+-    CONFIG_SERVICE_TOKEN=$(sed 's/[[:space:]]//g' $KEYSTONE_CONF | grep ^admin_token= | cut -d'=' -f2)
+-    CONFIG_ADMIN_PORT=$(sed 's/[[:space:]]//g' $KEYSTONE_CONF | grep ^admin_port= | cut -d'=' -f2)
++    CONFIG_SERVICE_TOKEN=$(tr -d '[\t ]' < $KEYSTONE_CONF | grep ^admin_token= | cut -d'=' -f2)
++    CONFIG_ADMIN_PORT=$(tr -d '[\t ]' < $KEYSTONE_CONF | grep ^admin_port= | cut -d'=' -f2)
+ fi
+ 
+ export OS_SERVICE_TOKEN=${OS_SERVICE_TOKEN:-$CONFIG_SERVICE_TOKEN}
+@@ -136,6 +163,22 @@ keystone user-role-add --user-id $SWIFT_
+                        --role-id $ADMIN_ROLE \
+                        --tenant-id $SERVICE_TENANT
+ 
++CINDER_USER=$(get_id keystone user-create --name=cinder \
++                                          --pass="${CINDER_PASSWORD}" \
++                                          --tenant-id $SERVICE_TENANT)
++
++keystone user-role-add --user-id $CINDER_USER \
++                       --role-id $ADMIN_ROLE \
++                       --tenant-id $SERVICE_TENANT
++
++NEUTRON_USER=$(get_id keystone user-create --name=neutron \
++                                           --pass="${NEUTRON_PASSWORD}" \
++                                           --tenant-id $SERVICE_TENANT)
++
++keystone user-role-add --user-id $NEUTRON_USER \
++                       --role-id $ADMIN_ROLE \
++                       --tenant-id $SERVICE_TENANT
++
+ #
+ # Keystone service
+ #
+@@ -159,23 +202,23 @@ keystone service-create --name=nova \
+                         --description="Nova Compute Service")
+ if [[ -z "$DISABLE_ENDPOINTS" ]]; then
+     keystone endpoint-create --region RegionOne --service-id $NOVA_SERVICE \
+-        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8774/v2/\$(tenant_id)s" \
+-        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8774/v2/\$(tenant_id)s" \
+-        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8774/v2/\$(tenant_id)s"
++        --publicurl "http://$NOVA_PUBLIC_ADDRESS:8774/v2/\$(tenant_id)s" \
++        --adminurl "http://$NOVA_ADMIN_ADDRESS:8774/v2/\$(tenant_id)s" \
++        --internalurl "http://$NOVA_INTERNAL_ADDRESS:8774/v2/\$(tenant_id)s"
+ fi
+ 
+ #
+ # Volume service
+ #
+ VOLUME_SERVICE=$(get_id \
+-keystone service-create --name=volume \
++keystone service-create --name=cinder \
+                         --type=volume \
+-                        --description="Nova Volume Service")
++                        --description="Cinder Volume Service")
+ if [[ -z "$DISABLE_ENDPOINTS" ]]; then
+     keystone endpoint-create --region RegionOne --service-id $VOLUME_SERVICE \
+-        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8776/v1/\$(tenant_id)s" \
+-        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8776/v1/\$(tenant_id)s" \
+-        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8776/v1/\$(tenant_id)s"
++        --publicurl "http://$CINDER_PUBLIC_ADDRESS:8776/v1/\$(tenant_id)s" \
++        --adminurl "http://$CINDER_ADMIN_ADDRESS:8776/v1/\$(tenant_id)s" \
++        --internalurl "http://$CINDER_INTERNAL_ADDRESS:8776/v1/\$(tenant_id)s"
+ fi
+ 
+ #
+@@ -187,9 +230,9 @@ keystone service-create --name=glance \
+                         --description="Glance Image Service")
+ if [[ -z "$DISABLE_ENDPOINTS" ]]; then
+     keystone endpoint-create --region RegionOne --service-id $GLANCE_SERVICE \
+-        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:9292" \
+-        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:9292" \
+-        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:9292"
++        --publicurl "http://$GLANCE_PUBLIC_ADDRESS:9292" \
++        --adminurl "http://$GLANCE_ADMIN_ADDRESS:9292" \
++        --internalurl "http://$GLANCE_INTERNAL_ADDRESS:9292"
+ fi
+ 
+ #
+@@ -201,9 +244,9 @@ keystone service-create --name=ec2 \
+                         --description="EC2 Compatibility Layer")
+ if [[ -z "$DISABLE_ENDPOINTS" ]]; then
+     keystone endpoint-create --region RegionOne --service-id $EC2_SERVICE \
+-        --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8773/services/Cloud" \
+-        --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8773/services/Admin" \
+-        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8773/services/Cloud"
++        --publicurl "http://$EC2_PUBLIC_ADDRESS:8773/services/Cloud" \
++        --adminurl "http://$EC2_ADMIN_ADDRESS:8773/services/Admin" \
++        --internalurl "http://$EC2_INTERNAL_ADDRESS:8773/services/Cloud"
+ fi
+ 
+ #
+@@ -212,15 +255,34 @@ fi
+ SWIFT_SERVICE=$(get_id \
+ keystone service-create --name=swift \
+                         --type="object-store" \
+-                        --description="Swift Service")
++                        --description="Swift Object Store Service")
+ if [[ -z "$DISABLE_ENDPOINTS" ]]; then
+     keystone endpoint-create --region RegionOne --service-id $SWIFT_SERVICE \
+-        --publicurl   "http://$CONTROLLER_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
+-        --adminurl    "http://$CONTROLLER_ADMIN_ADDRESS:8080/v1" \
+-        --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
++        --publicurl "http://$SWIFT_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
++        --adminurl "http://$SWIFT_ADMIN_ADDRESS:8080/v1" \
++        --internalurl "http://$SWIFT_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
++fi
++
++#
++# Neutron service
++#
++NEUTRON_SERVICE=$(get_id \
++keystone service-create --name=neutron \
++                        --type=network \
++                        --description="Neutron Network Service")
++if [[ -z "$DISABLE_ENDPOINTS" ]]; then
++    keystone endpoint-create --region RegionOne --service-id $NEUTRON_SERVICE \
++        --publicurl "http://$NEUTRON_PUBLIC_ADDRESS:9696/" \
++        --adminurl "http://$NEUTRON_ADMIN_ADDRESS:9696/" \
++        --internalurl "http://$NEUTRON_INTERNAL_ADDRESS:9696/"
+ fi
+ 
+ # create ec2 creds and parse the secret and access key returned
++unset SERVICE_ENDPOINT SERVICE_TOKEN
++export OS_AUTH_URL=http://localhost:5000/v2.0
++export OS_PASSWORD="${ADMIN_PASSWORD}"
++export OS_TENANT_NAME=demo
++export OS_USERNAME=admin
+ RESULT=$(keystone ec2-credentials-create --tenant-id=$SERVICE_TENANT --user-id=$ADMIN_USER)
+ ADMIN_ACCESS=`echo "$RESULT" | grep access | awk '{print $4}'`
+ ADMIN_SECRET=`echo "$RESULT" | grep secret | awk '{print $4}'`
--- a/components/openstack/keystone/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/keystone/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,12 +1,9 @@
-library/python-2/eventlet-26
-library/python-2/oslo.config-26
-library/python-2/pbr-26
+library/python-2/python-mysql-26
 library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
-library/python/eventlet-26
+library/python/iniparse-26
 library/python/oslo.config-26
 library/python/pbr-26
-library/python/sqlalchemy-26
-library/python/sqlalchemy-migrate-26
+library/security/openssl
 runtime/python-26
 system/core-os
--- a/components/openstack/neutron/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,25 +20,29 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		neutron
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:116cc2ce9f2f5b2dcbd5a314d78a496b180a148dadd02a076ff664b0f3c20cd3
+    sha256:6b0509f7bc12a52ef4e90e1464720cd240eb93f0db2eef7d109d51fdb836a412
 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/neutron
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+
+TPNO=			21824
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,30 +50,43 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
 # move all the proper files into place and construct .pyc files for them
 COMPONENT_POST_BUILD_ACTION += \
-	 ($(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent; \
+	($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+	 $(CP) \
+             files/neutron-dhcp-agent.xml \
+             files/neutron-l3-agent.xml \
+             files/neutron-metadata-agent.xml \
+             files/neutron-server.xml \
+             files/neutron-upgrade.xml \
+             $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+         $(MKDIR) $(PROTO_DIR)/usr/lib/neutron; \
+         $(CP) files/evs/migrate/evs-neutron-migration.py \
+	     $(PROTO_DIR)/usr/lib/neutron/evs-neutron-migration; \
+         $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent; \
 	 $(CP) files/agent/evs_l3_agent.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent; \
 	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
-	 $(CP) files/agent/solaris/__init__.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
-	 $(CP) files/agent/solaris/dhcp.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
-	 $(CP) files/agent/solaris/interface.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
-	 $(CP) files/agent/solaris/ipfilters_manager.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
-	 $(CP) files/agent/solaris/net_lib.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
+	 $(CP) \
+	     files/agent/solaris/__init__.py \
+	     files/agent/solaris/dhcp.py \
+	     files/agent/solaris/interface.py \
+	     files/agent/solaris/ipfilters_manager.py \
+	     files/agent/solaris/net_lib.py \
+	     files/agent/solaris/ra.py \
+	     $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/agent/solaris; \
 	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs; \
 	 $(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/__init__.py; \
 	 $(CP) files/evs/plugin.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs; \
-	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/db; \
-	 $(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/db/__init__.py; \
-	 $(CP) files/evs/db/api.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/db; \
-	 $(CP) files/evs/db/l3nat.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/db; \
-	 $(CP) files/evs/db/quotas_db.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/db)
-
+         $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/migrate; \
+         $(CP) files/evs/migrate/__init__.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/migrate; \
+         $(CP) files/evs/migrate/havana_api.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/neutron/plugins/evs/migrate)
 
 COMPONENT_POST_INSTALL_ACTION += \
-        $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
+	$(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
--- a/components/openstack/neutron/files/agent/evs_l3_agent.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/agent/evs_l3_agent.py	Mon Apr 20 12:35:51 2015 -0700
@@ -1,8 +1,8 @@
 # vim: tabstop=4 shiftwidth=4 softtabstop=4
 
-# Copyright 2012 Nicira Networks, Inc.  All rights reserved.
+# Copyright 2012 VMware, Inc.  All rights reserved.
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -16,24 +16,24 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 #
-# @author: Dan Wendlandt, Nicira, Inc
-# @author: Girish Moodalbail, Oracle, Inc.
-#
 
 """
 Based off generic l3_agent (neutron/agent/l3_agent) code
 """
 
+import errno
 import netaddr
 
 from oslo.config import cfg
 
+from neutron.agent.common import config
 from neutron.agent import l3_agent
 from neutron.agent.linux import utils
 from neutron.agent.solaris import interface
-from neutron.agent.solaris import ipfilters_manager
 from neutron.agent.solaris import net_lib
+from neutron.agent.solaris import ra
 from neutron.common import constants as l3_constants
+from neutron.common import utils as common_utils
 from neutron.openstack.common import log as logging
 
 
@@ -43,56 +43,7 @@
 FLOATING_IP_CIDR_SUFFIX = '/32'
 
 
-class RouterInfo(object):
-
-    def __init__(self, router_id, root_helper, use_namespaces, router):
-        self.router_id = router_id
-        self.ex_gw_port = None
-        self._snat_enabled = None
-        self._snat_action = None
-        self.internal_ports = []
-        # We do not need either root_helper or namespace, so set them to None
-        self.root_helper = None
-        self.use_namespaces = None
-        # Invoke the setter for establishing initial SNAT action
-        self.router = router
-        self.ipfilters_manager = ipfilters_manager.IPfiltersManager()
-        self.routes = []
-
-    @property
-    def router(self):
-        return self._router
-
-    @router.setter
-    def router(self, value):
-        self._router = value
-        if not self._router:
-            return
-        # enable_snat by default if it wasn't specified by plugin
-        self._snat_enabled = self._router.get('enable_snat', True)
-        # Set a SNAT action for the router
-        if self._router.get('gw_port'):
-            self._snat_action = ('add_rules' if self._snat_enabled
-                                 else 'remove_rules')
-        elif self.ex_gw_port:
-            # Gateway port was removed, remove rules
-            self._snat_action = 'remove_rules'
-
-    def ns_name(self):
-        pass
-
-    def perform_snat_action(self, snat_callback, *args):
-        # Process SNAT rules for attached subnets
-        if self._snat_action:
-            snat_callback(self, self._router.get('gw_port'),
-                          *args, action=self._snat_action)
-        self._snat_action = None
-
-
-class EVSL3NATAgent(l3_agent.L3NATAgent):
-
-    RouterInfo = RouterInfo
-
+class EVSL3NATAgent(l3_agent.L3NATAgentWithStateReport):
     OPTS = [
         cfg.StrOpt('external_network_datalink', default='net0',
                    help=_("Name of the datalink that connects to "
@@ -108,19 +59,86 @@
         super(EVSL3NATAgent, self).__init__(host=host, conf=conf)
 
     def _router_added(self, router_id, router):
-        ri = RouterInfo(router_id, self.root_helper,
-                        self.conf.use_namespaces, router)
+        ri = l3_agent.RouterInfo(router_id, None,
+                                 self.conf.use_namespaces, router)
         self.router_info[router_id] = ri
 
+        if self.conf.enable_metadata_proxy:
+            self._spawn_metadata_proxy(ri.router_id, ri.ns_name)
+
     def _router_removed(self, router_id):
-        ri = self.router_info[router_id]
+        ri = self.router_info.get(router_id)
+        if ri is None:
+            LOG.warn(_("Info for router %s were not found. "
+                       "Skipping router removal"), router_id)
+            return
         ri.router['gw_port'] = None
         ri.router[l3_constants.INTERFACE_KEY] = []
         ri.router[l3_constants.FLOATINGIP_KEY] = []
         self.process_router(ri)
+        if self.conf.enable_metadata_proxy:
+            self._destroy_metadata_proxy(ri.router_id, ri.ns_name)
+
         del self.router_info[router_id]
 
+    def _get_metadata_proxy_callback(self, router_id):
+        """Need to override this since we need to pass the absolute
+        path to neutron-ns-metadata-proxy binary.
+        """
+        def callback(pid_file):
+            metadata_proxy_socket = cfg.CONF.metadata_proxy_socket
+            proxy_cmd = ['/usr/lib/neutron/neutron-ns-metadata-proxy',
+                         '--pid_file=%s' % pid_file,
+                         '--metadata_proxy_socket=%s' % metadata_proxy_socket,
+                         '--router_id=%s' % router_id,
+                         '--state_path=%s' % self.conf.state_path,
+                         '--metadata_port=%s' % self.conf.metadata_port]
+            proxy_cmd.extend(config.get_log_args(
+                cfg.CONF, 'neutron-ns-metadata-proxy-%s.log' %
+                router_id))
+            return proxy_cmd
+
+        return callback
+
+    def external_gateway_snat_rules(self, ex_gw_ip, internal_cidrs,
+                                    interface_name):
+        rules = []
+        for cidr in internal_cidrs:
+            rules.append('map %s %s -> %s/32' %
+                         (interface_name, cidr, ex_gw_ip))
+        return rules
+
+    def _handle_router_snat_rules(self, ri, ex_gw_port, internal_cidrs,
+                                  interface_name, action):
+        assert not ri.router['distributed']
+
+        # Remove all the old SNAT rules
+        # This is safe because if use_namespaces is set as False
+        # then the agent can only configure one router, otherwise
+        # each router's SNAT rules will be in their own namespace
+
+        # get only the SNAT rules
+        old_snat_rules = [rule for rule in ri.ipfilters_manager.ipv4['nat']
+                          if rule.startswith('map')]
+        ri.ipfilters_manager.remove_nat_rules(old_snat_rules)
+
+        # And add them back if the action is add_rules
+        if action == 'add_rules' and ex_gw_port:
+            # NAT rules are added only if ex_gw_port has an IPv4 address
+            for ip_addr in ex_gw_port['fixed_ips']:
+                ex_gw_ip = ip_addr['ip_address']
+                if netaddr.IPAddress(ex_gw_ip).version == 4:
+                    rules = self.external_gateway_snat_rules(ex_gw_ip,
+                                                             internal_cidrs,
+                                                             interface_name)
+                    ri.ipfilters_manager.add_nat_rules(rules)
+                    break
+
+    @common_utils.exception_logger()
     def process_router(self, ri):
+        # TODO(mrsmith) - we shouldn't need to check here
+        if 'distributed' not in ri.router:
+            ri.router['distributed'] = False
         ex_gw_port = self._get_ex_gw_port(ri)
         internal_ports = ri.router.get(l3_constants.INTERFACE_KEY, [])
         existing_port_ids = set([p['id'] for p in ri.internal_ports])
@@ -131,16 +149,43 @@
                      p['id'] not in existing_port_ids]
         old_ports = [p for p in ri.internal_ports if
                      p['id'] not in current_port_ids]
+        new_ipv6_port = False
+        old_ipv6_port = False
         for p in new_ports:
             self._set_subnet_info(p)
+            self.internal_network_added(ri, p)
             ri.internal_ports.append(p)
-            self.internal_network_added(ri, p)
+            if (not new_ipv6_port and
+                    netaddr.IPNetwork(p['subnet']['cidr']).version == 6):
+                new_ipv6_port = True
 
         for p in old_ports:
+            self.internal_network_removed(ri, p)
             ri.internal_ports.remove(p)
-            self.internal_network_removed(ri, p)
+            if (not old_ipv6_port and
+                    netaddr.IPNetwork(p['subnet']['cidr']).version == 6):
+                old_ipv6_port = True
+
+        if new_ipv6_port or old_ipv6_port:
+            # refresh ndpd daemon after filling in ndpd.conf
+            # with the right entries
+            ra.enable_ipv6_ra(ri.router_id,
+                              internal_ports,
+                              self.get_internal_device_name)
 
-        internal_cidrs = [p['ip_cidr'] for p in ri.internal_ports]
+        # remove any internal stale router interfaces (i.e., l3i.. VNICs)
+        existing_devices = net_lib.Datalink.show_vnic()
+        current_internal_devs = set([n for n in existing_devices
+                                     if n.startswith(INTERNAL_DEV_PREFIX)])
+        current_port_devs = set([self.get_internal_device_name(id) for
+                                 id in current_port_ids])
+        stale_devs = current_internal_devs - current_port_devs
+        for stale_dev in stale_devs:
+            LOG.debug(_('Deleting stale internal router device: %s'),
+                      stale_dev)
+            self.driver.fini_l3(stale_dev)
+            self.driver.unplug(stale_dev)
+
         # TODO(salv-orlando): RouterInfo would be a better place for
         # this logic too
         ex_gw_port_id = (ex_gw_port and ex_gw_port['id'] or
@@ -149,26 +194,63 @@
         interface_name = None
         if ex_gw_port_id:
             interface_name = self.get_external_device_name(ex_gw_port_id)
-        if ex_gw_port and not ri.ex_gw_port:
+        if ex_gw_port:
+            def _gateway_ports_equal(port1, port2):
+                def _get_filtered_dict(d, ignore):
+                    return dict((k, v) for k, v in d.iteritems()
+                                if k not in ignore)
+
+                keys_to_ignore = set(['binding:host_id'])
+                port1_filtered = _get_filtered_dict(port1, keys_to_ignore)
+                port2_filtered = _get_filtered_dict(port2, keys_to_ignore)
+                return port1_filtered == port2_filtered
+
             self._set_subnet_info(ex_gw_port)
-            self.external_gateway_added(ri, ex_gw_port,
-                                        interface_name, internal_cidrs)
+            if not ri.ex_gw_port:
+                self.external_gateway_added(ri, ex_gw_port, interface_name)
+            elif not _gateway_ports_equal(ex_gw_port, ri.ex_gw_port):
+                self.external_gateway_updated(ri, ex_gw_port, interface_name)
         elif not ex_gw_port and ri.ex_gw_port:
-            self.external_gateway_removed(ri, ri.ex_gw_port,
-                                          interface_name, internal_cidrs)
+            self.external_gateway_removed(ri, ri.ex_gw_port, interface_name)
 
-        # We don't need this since our IPnat rules are bi-directional
-        # Process SNAT rules for external gateway
-        # ri.perform_snat_action(self._handle_router_snat_rules,
-        #                       internal_cidrs, interface_name)
+        # Remove any external stale router interfaces (i.e., l3e.. VNICs)
+        stale_devs = [dev for dev in existing_devices
+                      if dev.startswith(EXTERNAL_DEV_PREFIX)
+                      and dev != interface_name]
+        for stale_dev in stale_devs:
+            LOG.debug(_('Deleting stale external router device: %s'),
+                      stale_dev)
+            self.driver.fini_l3(stale_dev)
+            self.driver.unplug(stale_dev)
+
+        # Process static routes for router
+        self.routes_updated(ri)
 
-        # Process DNAT rules for floating IPs
+        # Process SNAT rules for external gateway
+        if (not ri.router['distributed'] or
+                ex_gw_port and self.get_gw_port_host(ri.router) == self.host):
+            # Get IPv4 only internal CIDRs
+            internal_cidrs = [p['ip_cidr'] for p in ri.internal_ports
+                              if netaddr.IPNetwork(p['ip_cidr']).version == 4]
+            ri.perform_snat_action(self._handle_router_snat_rules,
+                                   internal_cidrs, interface_name)
+
+        # Process SNAT/DNAT rules for floating IPs
+        fip_statuses = {}
         if ex_gw_port:
-            self.process_router_floating_ips(ri, ex_gw_port)
+            existing_floating_ips = ri.floating_ips
+            fip_statuses = self.process_router_floating_ips(ri, ex_gw_port)
+            # Identify floating IPs which were disabled
+            ri.floating_ips = set(fip_statuses.keys())
+            for fip_id in existing_floating_ips - ri.floating_ips:
+                fip_statuses[fip_id] = l3_constants.FLOATINGIP_STATUS_DOWN
+            # Update floating IP status on the neutron server
+            self.plugin_rpc.update_floatingip_statuses(
+                self.context, ri.router_id, fip_statuses)
 
+        # Update ex_gw_port and enable_snat on the router info cache
         ri.ex_gw_port = ex_gw_port
         ri.enable_snat = ri.router.get('enable_snat')
-        self.routes_updated(ri)
 
     def process_router_floating_ips(self, ri, ex_gw_port):
         """Configure the router's floating IPs
@@ -180,7 +262,7 @@
         ipintf = net_lib.IPInterface(ifname)
         ipaddr_list = ipintf.ipaddr_list()['static']
 
-        existing_cidrs = set([addr for addr in ipaddr_list])
+        existing_cidrs = set(ipaddr_list)
         new_cidrs = set()
 
         existing_nat_rules = [nat_rule for nat_rule in
@@ -188,6 +270,7 @@
         new_nat_rules = []
 
         # Loop once to ensure that floating ips are configured.
+        fip_statuses = {}
         for fip in ri.router.get(l3_constants.FLOATINGIP_KEY, []):
             fip_ip = fip['floating_ip_address']
             fip_cidr = str(fip_ip) + FLOATING_IP_CIDR_SUFFIX
@@ -196,18 +279,36 @@
             nat_rule = 'bimap %s %s -> %s' % (ifname, fixed_cidr, fip_cidr)
 
             if fip_cidr not in existing_cidrs:
-                ipintf.create_address(fip_cidr)
-                ri.ipfilters_manager.add_nat_rules([nat_rule])
+                try:
+                    ipintf.create_address(fip_cidr)
+                    ri.ipfilters_manager.add_nat_rules([nat_rule])
+                except Exception as err:
+                    # TODO(gmoodalb): If we fail in add_nat_rules(), then
+                    # we need to remove the fip_cidr address
+
+                    # any exception occurred here should cause the floating IP
+                    # to be set in error state
+                    fip_statuses[fip['id']] = (
+                        l3_constants.FLOATINGIP_STATUS_ERROR)
+                    LOG.warn(_("Unable to configure IP address for "
+                               "floating IP: %s: %s") % (fip['id'], err))
+                    continue
+            fip_statuses[fip['id']] = (
+                l3_constants.FLOATINGIP_STATUS_ACTIVE)
             new_nat_rules.append(nat_rule)
 
         # remove all the old NAT rules
-        ri.ipfilters_manager.remove_nat_rules(list(set(existing_nat_rules) -
-                                              set(new_nat_rules)))
+        old_nat_rules = list(set(existing_nat_rules) - set(new_nat_rules))
+        # Filter out 'bimap' NAT rules as we don't want to remove NAT rules
+        # that were added for Metadata server
+        old_nat_rules = [rule for rule in old_nat_rules if "bimap" in rule]
+        ri.ipfilters_manager.remove_nat_rules(old_nat_rules)
 
         # Clean up addresses that no longer belong on the gateway interface.
         for ip_cidr in existing_cidrs - new_cidrs:
             if ip_cidr.endswith(FLOATING_IP_CIDR_SUFFIX):
                 ipintf.delete_address(ip_cidr)
+        return fip_statuses
 
     def get_internal_device_name(self, port_id):
         # Because of the way how dnsmasq works on Solaris, the length
@@ -225,32 +326,67 @@
         dname += '_0'
         return dname.replace('-', '_')
 
-    def external_gateway_added(self, ri, ex_gw_port,
-                               external_dlname, internal_cidrs):
+    def external_gateway_added(self, ri, ex_gw_port, external_dlname):
 
         if not net_lib.Datalink.datalink_exists(external_dlname):
             dl = net_lib.Datalink(external_dlname)
-            # need to determine the VLAN ID for the VNIC
+            # determine the network type of the external network
             evsname = ex_gw_port['network_id']
-            tenantname = ex_gw_port['tenant_id']
-            cmd = ['/usr/sbin/evsadm', 'show-evs', '-co', 'vid',
-                   '-f', 'tenant=%s' % tenantname, evsname]
+            cmd = ['/usr/sbin/evsadm', 'show-evs', '-co', 'l2type,vid',
+                   '-f', 'evs=%s' % evsname]
             try:
                 stdout = utils.execute(cmd)
             except Exception as err:
-                LOG.error(_("Failed to retrieve the VLAN ID associated "
-                            "with the external network, and it is required "
-                            "to create external gateway port: %s") % err)
+                LOG.error(_("Failed to retrieve the network type for "
+                            "the external network, and it is required "
+                            "to create an external gateway port: %s") % err)
+                return
+            output = stdout.splitlines()[0].strip()
+            l2type, vid = output.split(':')
+            if l2type != 'flat' and l2type != 'vlan':
+                LOG.error(_("External network should be either Flat or "
+                            "VLAN based, and it is required to "
+                            "create an external gateway port"))
                 return
-            vid = stdout.splitlines()[0].strip()
-            if vid == "":
-                LOG.error(_("External Network does not have a VLAN ID "
-                            "associated with it, and it is required to "
-                            "create external gateway port"))
-                return
-            mac_address = ex_gw_port['mac_address']
-            dl.create_vnic(self.conf.external_network_datalink,
-                           mac_address=mac_address, vid=vid)
+            elif (l2type == 'vlan' and
+                  self.conf.get("external_network_datalink", None)):
+                LOG.warning(_("external_network_datalink is deprecated in "
+                             "Juno and will be removed in the next release of "
+                             "Solaris OpenStack. Please use the evsadm "
+                             "set-controlprop subcommand to setup the "
+                             "uplink-port for an external network"))
+                # proceed with the old-style of doing things
+                mac_address = ex_gw_port['mac_address']
+                dl.create_vnic(self.conf.external_network_datalink,
+                               mac_address=mac_address, vid=vid)
+            else:
+                # This is to handle HA by Solaris Cluster and is similar to
+                # the code we already have for the DHCP Agent. So, when
+                # the 1st L3 agent is down and the second L3 agent tries to
+                # connect its VNIC to EVS, we will end up in "vport in use"
+                # error. So, we need to reset the vport before we connect
+                # the VNIC to EVS.
+                cmd = ['/usr/sbin/evsadm', 'show-vport', '-f',
+                       'vport=%s' % ex_gw_port['id'], '-co',
+                       'evs,vport,status']
+                stdout = utils.execute(cmd)
+                evsname, vportname, status = stdout.strip().split(':')
+                tenant_id = ex_gw_port['tenant_id']
+                if status == 'used':
+                    cmd = ['/usr/sbin/evsadm', 'reset-vport', '-T', tenant_id,
+                           '%s/%s' % (evsname, vportname)]
+                    utils.execute(cmd)
+
+                # next remove protection setting on the VPort to allow
+                # multiple floating IPs to be configured on the l3e*
+                # interface
+                evsvport = "%s/%s" % (ex_gw_port['network_id'],
+                                      ex_gw_port['id'])
+                cmd = ['/usr/sbin/evsadm', 'set-vportprop', '-T',
+                       tenant_id, '-p', 'protection=none', evsvport]
+                utils.execute(cmd)
+                dl.connect_vnic(evsvport, tenant_id)
+
         self.driver.init_l3(external_dlname, [ex_gw_port['ip_cidr']])
 
         # TODO(gmoodalb): wrap route(1m) command within a class in net_lib.py
@@ -258,7 +394,10 @@
         if gw_ip:
             cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'add', 'default',
                    gw_ip]
-            utils.execute(cmd, check_exit_code=False)
+            stdout = utils.execute(cmd, extra_ok_codes=[errno.EEXIST])
+            ri.remove_route = True
+            if 'entry exists' in stdout:
+                ri.remove_route = False
 
             # for each of the internal ports, add Policy Based
             # Routing (PBR) rule
@@ -270,9 +409,11 @@
                 ipversion = netaddr.IPNetwork(port['subnet']['cidr']).version
                 ri.ipfilters_manager.add_ipf_rules(rules, ipversion)
 
-    def external_gateway_removed(self, ri, ex_gw_port,
-                                 external_dlname, internal_cidrs):
+    def external_gateway_updated(self, ri, ex_gw_port, external_dlname):
+        # There is nothing to do on Solaris
+        pass
 
+    def external_gateway_removed(self, ri, ex_gw_port, external_dlname):
         gw_ip = ex_gw_port['subnet']['gateway_ip']
         if gw_ip:
             # remove PBR rules
@@ -284,14 +425,25 @@
                 ipversion = netaddr.IPNetwork(port['subnet']['cidr']).version
                 ri.ipfilters_manager.remove_ipf_rules(rules, ipversion)
 
-            cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'delete', 'default',
-                   gw_ip]
-            utils.execute(cmd, check_exit_code=False)
+            if ri.remove_route:
+                cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'delete',
+                       'default', gw_ip]
+                utils.execute(cmd, check_exit_code=False)
 
         if net_lib.Datalink.datalink_exists(external_dlname):
             self.driver.fini_l3(external_dlname)
             self.driver.unplug(external_dlname)
 
+        # remove the EVS VPort associated with external network
+        cmd = ['/usr/sbin/evsadm', 'remove-vport',
+               '-T', ex_gw_port['tenant_id'],
+               '%s/%s' % (ex_gw_port['network_id'], ex_gw_port['id'])]
+        try:
+            utils.execute(cmd)
+        except Exception as err:
+            LOG.error(_("Failed to delete the EVS VPort associated with "
+                        "external network: %s") % err)
+
     def _get_ippool_name(self, mac_address, suffix=None):
         # Generate a unique-name for ippool(1m) from that last 3
         # bytes of mac-address. It is called pool name, but it is
@@ -368,6 +520,19 @@
         ipversion = netaddr.IPNetwork(port_subnet).version
         ri.ipfilters_manager.add_ipf_rules(rules, ipversion)
 
+        # if metadata proxy is enabled, then add the necessary
+        # IP NAT rules to forward the metadata requests to the
+        # metadata proxy server
+        if self.conf.enable_metadata_proxy and ipversion == 4:
+            # TODO(gmoodalb): when IP Filter allows redirection of packets
+            # to loopback IP address, then we need to add an IPF rule allowing
+            # only packets destined to 127.0.0.1:9697 to
+            # neutron-ns-metadata-proxy server
+            rules = ['rdr %s 169.254.169.254/32 port 80 -> %s port %d tcp' %
+                     (internal_dlname, port['fixed_ips'][0]['ip_address'],
+                      self.conf.metadata_port)]
+            ri.ipfilters_manager.add_nat_rules(rules)
+
     def internal_network_removed(self, ri, port):
         internal_dlname = self.get_internal_device_name(port['id'])
         port_subnet = port['subnet']['cidr']
@@ -411,18 +576,26 @@
                 ri.ipfilters_manager.remove_ippool(iport_block_pname,
                                                    [port_subnet])
 
+        # if metadata proxy is enabled, then remove the IP NAT rules that
+        # were added while adding the internal network
+        if self.conf.enable_metadata_proxy and ipversion == 4:
+            rules = ['rdr %s 169.254.169.254/32 port 80 -> %s port %d tcp' %
+                     (internal_dlname, port['fixed_ips'][0]['ip_address'],
+                      self.conf.metadata_port)]
+            ri.ipfilters_manager.remove_nat_rules(rules)
+
         if net_lib.Datalink.datalink_exists(internal_dlname):
             self.driver.fini_l3(internal_dlname)
             self.driver.unplug(internal_dlname)
 
-    def routers_updated(self, context, routers):
-        super(EVSL3NATAgent, self).routers_updated(context, routers)
-        if routers:
-            # If router's interface was removed, then the VNIC associated
-            # with that interface must be deleted immediately. The EVS
-            # plugin can delete the virtual port iff the VNIC associated
-            # with that virtual port is deleted first.
-            self._rpc_loop()
+        # remove the EVS VPort associated with internal network
+        cmd = ['/usr/sbin/evsadm', 'remove-vport', '-T', port['tenant_id'],
+               '%s/%s' % (port['network_id'], port['id'])]
+        try:
+            utils.execute(cmd)
+        except Exception as err:
+            LOG.error(_("Failed to delete the EVS VPort associated with "
+                        "internal network: %s") % err)
 
     def routes_updated(self, ri):
         pass
--- a/components/openstack/neutron/files/agent/solaris/dhcp.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/agent/solaris/dhcp.py	Mon Apr 20 12:35:51 2015 -0700
@@ -20,16 +20,17 @@
 # @author: Girish Moodalbail, Oracle, Inc.
 
 import abc
+import collections
 import os
 import re
 import shutil
 import socket
-import StringIO
 import sys
 import uuid
 
 import netaddr
 from oslo.config import cfg
+import six
 
 from neutron.agent.linux import utils
 from neutron.agent.solaris import net_lib
@@ -52,15 +53,16 @@
     cfg.StrOpt('dnsmasq_config_file',
                default='',
                help=_('Override the default dnsmasq settings with this file')),
-    cfg.StrOpt('dnsmasq_dns_server',
-               help=_('Use another DNS server before any in '
-                      '/etc/resolv.conf.')),
+    cfg.ListOpt('dnsmasq_dns_servers',
+                help=_('Comma-separated list of the DNS servers which will be '
+                       'used as forwarders.'),
+                deprecated_name='dnsmasq_dns_server'),
+    cfg.BoolOpt('dhcp_delete_namespaces', default=False,
+                help=_("Delete namespace after removing a dhcp server.")),
     cfg.IntOpt(
         'dnsmasq_lease_max',
         default=(2 ** 24),
         help=_('Limit number of leases to prevent a denial-of-service.')),
-    cfg.StrOpt('interface_driver',
-               help=_("The driver used to manage the virtual interface.")),
 ]
 
 IPV4 = 4
@@ -78,17 +80,46 @@
 WIN2k3_STATIC_DNS = 249
 
 
-class DictModel(object):
+class DictModel(dict):
     """Convert dict into an object that provides attribute access to values."""
-    def __init__(self, d):
-        for key, value in d.iteritems():
-            if isinstance(value, list):
-                value = [DictModel(item) if isinstance(item, dict) else item
-                         for item in value]
-            elif isinstance(value, dict):
-                value = DictModel(value)
+
+    def __init__(self, *args, **kwargs):
+        """Convert dict values to DictModel values."""
+        super(DictModel, self).__init__(*args, **kwargs)
+
+        def needs_upgrade(item):
+            """Check if `item` is a dict and needs to be changed to DictModel.
+            """
+            return isinstance(item, dict) and not isinstance(item, DictModel)
+
+        def upgrade(item):
+            """Upgrade item if it needs to be upgraded."""
+            if needs_upgrade(item):
+                return DictModel(item)
+            else:
+                return item
 
-            setattr(self, key, value)
+        for key, value in self.iteritems():
+            if isinstance(value, (list, tuple)):
+                # Keep the same type but convert dicts to DictModels
+                self[key] = type(value)(
+                    (upgrade(item) for item in value)
+                )
+            elif needs_upgrade(value):
+                # Change dict instance values to DictModel instance values
+                self[key] = DictModel(value)
+
+    def __getattr__(self, name):
+        try:
+            return self[name]
+        except KeyError as e:
+            raise AttributeError(e)
+
+    def __setattr__(self, name, value):
+        self[name] = value
+
+    def __delattr__(self, name):
+        del self[name]
 
 
 class NetModel(DictModel):
@@ -103,8 +134,8 @@
         return self._ns_name
 
 
[email protected]_metaclass(abc.ABCMeta)
 class DhcpBase(object):
-    __metaclass__ = abc.ABCMeta
 
     def __init__(self, conf, network, root_helper='sudo',
                  version=None, plugin=None):
@@ -127,17 +158,12 @@
         """Restart the dhcp service for the network."""
         self.disable(retain_port=True)
         self.enable()
-        self.device_manager.update(self.network)
 
     @abc.abstractproperty
     def active(self):
         """Boolean representing the running state of the DHCP server."""
 
     @abc.abstractmethod
-    def release_lease(self, mac_address, removed_ips):
-        """Release a DHCP lease."""
-
-    @abc.abstractmethod
     def reload_allocations(self):
         """Force the DHCP server to reload the assignment database."""
 
@@ -145,13 +171,23 @@
     def existing_dhcp_networks(cls, conf, root_helper):
         """Return a list of existing networks ids that we have configs for."""
 
-        raise NotImplementedError
+        raise NotImplementedError()
 
     @classmethod
     def check_version(cls):
         """Execute version checks on DHCP server."""
 
-        raise NotImplementedError
+        raise NotImplementedError()
+
+    @classmethod
+    def get_isolated_subnets(cls, network):
+        """Returns a dict indicating whether or not a subnet is isolated"""
+        raise NotImplementedError()
+
+    @classmethod
+    def should_enable_metadata(cls, conf, network):
+        """True if the metadata-proxy should be enabled for the network."""
+        raise NotImplementedError()
 
 
 class DhcpLocalProcess(DhcpBase):
@@ -166,11 +202,10 @@
 
     def enable(self):
         """Enables DHCP for this network by spawning a local process."""
-        interface_name = self.device_manager.setup(self.network,
-                                                   reuse_existing=True)
         if self.active:
             self.restart()
         elif self._enable_dhcp():
+            interface_name = self.device_manager.setup(self.network)
             self.interface_name = interface_name
             self.spawn_process()
 
@@ -178,15 +213,17 @@
         """Disable DHCP for this network by killing the local process."""
         pid = self.pid
 
-        if self.active:
-            cmd = ['kill', '-9', pid]
-            utils.execute(cmd, self.root_helper)
+        if pid:
+            if self.active:
+                cmd = ['kill', '-9', pid]
+                utils.execute(cmd, self.root_helper)
+            else:
+                LOG.debug(_('DHCP for %(net_id)s is stale, pid %(pid)d '
+                            'does not exist, performing cleanup'),
+                          {'net_id': self.network.id, 'pid': pid})
             if not retain_port:
-                self.device_manager.destroy(self.network, self.interface_name)
-
-        elif pid:
-            LOG.debug(_('DHCP for %(net_id)s pid %(pid)d is stale, ignoring '
-                        'command'), {'net_id': self.network.id, 'pid': pid})
+                self.device_manager.destroy(self.network,
+                                            self.interface_name)
         else:
             LOG.debug(_('No DHCP started for %s'), self.network.id)
 
@@ -268,7 +305,8 @@
 
     NEUTRON_NETWORK_ID_KEY = 'NEUTRON_NETWORK_ID'
     NEUTRON_RELAY_SOCKET_PATH_KEY = 'NEUTRON_RELAY_SOCKET_PATH'
-    MINIMUM_VERSION = 2.59
+    MINIMUM_VERSION = 2.63
+    MINIMUM_IPV6_VERSION = 2.67
 
     @classmethod
     def check_version(cls):
@@ -285,10 +323,19 @@
                               'DHCP AGENT MAY NOT RUN CORRECTLY! '
                               'Please ensure that its version is %s '
                               'or above!'), cls.MINIMUM_VERSION)
+                raise SystemExit(1)
+            is_valid_version = float(ver) >= cls.MINIMUM_IPV6_VERSION
+            if not is_valid_version:
+                LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. '
+                              'DHCP AGENT MAY NOT RUN CORRECTLY WHEN '
+                              'SERVING IPV6 STATEFUL SUBNETS! '
+                              'Please ensure that its version is %s '
+                              'or above!'), cls.MINIMUM_IPV6_VERSION)
         except (OSError, RuntimeError, IndexError, ValueError):
             LOG.warning(_('Unable to determine dnsmasq version. '
                           'Please ensure that its version is %s '
                           'or above!'), cls.MINIMUM_VERSION)
+            raise SystemExit(1)
         return float(ver)
 
     @classmethod
@@ -319,43 +366,60 @@
             '--pid-file=%s' % self.get_conf_file_name(
                 'pid', ensure_conf_dir=True),
             '--dhcp-hostsfile=%s' % self._output_hosts_file(),
+            '--addn-hosts=%s' % self._output_addn_hosts_file(),
             '--dhcp-optsfile=%s' % self._output_opts_file(),
             '--leasefile-ro',
         ]
 
         possible_leases = 0
         for i, subnet in enumerate(self.network.subnets):
+            mode = None
             # if a subnet is specified to have dhcp disabled
             if not subnet.enable_dhcp:
                 continue
             if subnet.ip_version == 4:
                 mode = 'static'
             else:
-                # TODO(gmoodalb): how do we indicate other options
-                # ra-only, slaac, ra-nameservers, and ra-stateless.
                 # We need to also set the DUID for the DHCPv6 server to use
                 macaddr_cmd = ['/usr/sbin/dladm', 'show-linkprop',
                                '-co', 'value', '-p', 'mac-address',
                                self.interface_name]
                 stdout = utils.execute(macaddr_cmd)
                 uid = stdout.splitlines()[0].strip()
+                # format the MAC address
+                uid = ':'.join(['%.2x' % w for w in netaddr.EUI(uid).words])
                 # IANA assigned ID for Oracle
                 enterprise_id = '111'
                 cmd.append('--dhcp-duid=%s,%s' % (enterprise_id, uid))
-                mode = 'static'
-            if self.version >= self.MINIMUM_VERSION:
-                set_tag = 'set:'
-            else:
-                set_tag = ''
+
+                # Note(scollins) If the IPv6 attributes are not set, set it as
+                # static to preserve previous behavior
+                addr_mode = getattr(subnet, 'ipv6_address_mode', None)
+                ra_mode = getattr(subnet, 'ipv6_ra_mode', None)
+                if (addr_mode in [constants.DHCPV6_STATEFUL,
+                                  constants.DHCPV6_STATELESS] or
+                        not addr_mode and not ra_mode):
+                    mode = 'static'
 
             cidr = netaddr.IPNetwork(subnet.cidr)
 
-            cmd.append('--dhcp-range=%s%s,%s,%s,%ss' %
-                       (set_tag, self._TAG_PREFIX % i,
-                        cidr.network,
-                        mode,
-                        self.conf.dhcp_lease_duration))
-            possible_leases += cidr.size
+            if self.conf.dhcp_lease_duration == -1:
+                lease = 'infinite'
+            else:
+                lease = '%ss' % self.conf.dhcp_lease_duration
+
+            # mode is optional and is not set - skip it
+            if mode:
+                if subnet.ip_version == 4:
+                    cmd.append('--dhcp-range=%s%s,%s,%s,%s' %
+                               ('set:', self._TAG_PREFIX % i,
+                                cidr.network, mode, lease))
+                else:
+                    cmd.append('--dhcp-range=%s%s,%s,%s,%d,%s' %
+                               ('set:', self._TAG_PREFIX % i,
+                                cidr.network, mode,
+                                cidr.prefixlen, lease))
+                possible_leases += cidr.size
 
         # Cap the limit because creating lots of subnets can inflate
         # this possible lease cap.
@@ -363,8 +427,10 @@
                    min(possible_leases, self.conf.dnsmasq_lease_max))
 
         cmd.append('--conf-file=%s' % self.conf.dnsmasq_config_file)
-        if self.conf.dnsmasq_dns_server:
-            cmd.append('--server=%s' % self.conf.dnsmasq_dns_server)
+        if self.conf.dnsmasq_dns_servers:
+            cmd.extend(
+                '--server=%s' % server
+                for server in self.conf.dnsmasq_dns_servers)
 
         if self.conf.dhcp_domain:
             cmd.append('--domain=%s' % self.conf.dhcp_domain)
@@ -372,12 +438,11 @@
         # TODO(gmoodalb): prepend the env vars before command
         utils.execute(cmd, self.root_helper)
 
-    def release_lease(self, mac_address, removed_ips):
+    def _release_lease(self, mac_address, ip):
         """Release a DHCP lease."""
-        for ip in removed_ips or []:
-            cmd = ['/usr/lib/inet/dhcp_release', self.interface_name,
-                   ip, mac_address]
-            utils.execute(cmd, self.root_helper)
+        cmd = ['/usr/lib/inet/dhcp_release', self.interface_name,
+               ip, mac_address]
+        utils.execute(cmd, self.root_helper)
 
     def reload_allocations(self):
         """Rebuild the dnsmasq config and signal the dnsmasq to reload."""
@@ -389,7 +454,9 @@
                         'turned off DHCP: %s'), self.network.id)
             return
 
+        self._release_unused_leases()
         self._output_hosts_file()
+        self._output_addn_hosts_file()
         self._output_opts_file()
         if self.active:
             cmd = ['kill', '-HUP', self.pid]
@@ -397,32 +464,120 @@
         else:
             LOG.debug(_('Pid %d is stale, relaunching dnsmasq'), self.pid)
         LOG.debug(_('Reloading allocations for network: %s'), self.network.id)
-        self.device_manager.update(self.network)
+        self.device_manager.update(self.network, self.interface_name)
+
+    def _iter_hosts(self):
+        """Iterate over hosts.
 
-    def _output_hosts_file(self):
-        """Writes a dnsmasq compatible hosts file."""
-        r = re.compile('[:.]')
-        buf = StringIO.StringIO()
-
+        For each host on the network we yield a tuple containing:
+        (
+            port,  # a DictModel instance representing the port.
+            alloc,  # a DictModel instance of the allocated ip and subnet.
+            host_name,  # Host name.
+            name,  # Canonical hostname in the format 'hostname[.domain]'.
+        )
+        """
+        v6_nets = dict((subnet.id, subnet) for subnet in
+                       self.network.subnets if subnet.ip_version == 6)
         for port in self.network.ports:
             for alloc in port.fixed_ips:
-                name = 'host-%s.%s' % (r.sub('-', alloc.ip_address),
-                                       self.conf.dhcp_domain)
-                set_tag = ''
-                if getattr(port, 'extra_dhcp_opts', False):
-                    if self.version >= self.MINIMUM_VERSION:
-                        set_tag = 'set:'
+                # Note(scollins) Only create entries that are
+                # associated with the subnet being managed by this
+                # dhcp agent
+                if alloc.subnet_id in v6_nets:
+                    addr_mode = v6_nets[alloc.subnet_id].ipv6_address_mode
+                    if addr_mode != constants.DHCPV6_STATEFUL:
+                        continue
+                hostname = 'host-%s' % alloc.ip_address.replace(
+                    '.', '-').replace(':', '-')
+                fqdn = hostname
+                if self.conf.dhcp_domain:
+                    fqdn = '%s.%s' % (fqdn, self.conf.dhcp_domain)
+                yield (port, alloc, hostname, fqdn)
+
+    def _output_hosts_file(self):
+        """Writes a dnsmasq compatible dhcp hosts file.
+
+        The generated file is sent to the --dhcp-hostsfile option of dnsmasq,
+        and lists the hosts on the network which should receive a dhcp lease.
+        Each line in this file is in the form::
+
+            'mac_address,FQDN,ip_address'
+
+        IMPORTANT NOTE: a dnsmasq instance does not resolve hosts defined in
+        this file if it did not give a lease to a host listed in it (e.g.:
+        multiple dnsmasq instances on the same network if this network is on
+        multiple network nodes). This file is only defining hosts which
+        should receive a dhcp lease, the hosts resolution in itself is
+        defined by the `_output_addn_hosts_file` method.
+        """
+        buf = six.StringIO()
+        filename = self.get_conf_file_name('host')
+
+        LOG.debug(_('Building host file: %s'), filename)
+        for (port, alloc, hostname, name) in self._iter_hosts():
+            # (dzyu) Check if it is legal ipv6 address, if so, need wrap
+            # it with '[]' to let dnsmasq to distinguish MAC address from
+            # IPv6 address.
+            ip_address = alloc.ip_address
+            if netaddr.valid_ipv6(ip_address):
+                ip_address = '[%s]' % ip_address
+
+            LOG.debug(_('Adding %(mac)s : %(name)s : %(ip)s'),
+                      {"mac": port.mac_address, "name": name,
+                       "ip": ip_address})
 
-                    buf.write('%s,%s,%s,%s%s\n' %
-                              (port.mac_address, name, alloc.ip_address,
-                               set_tag, port.id))
-                else:
-                    buf.write('%s,%s,%s\n' %
-                              (port.mac_address, name, alloc.ip_address))
+            if getattr(port, 'extra_dhcp_opts', False):
+                buf.write('%s,%s,%s,%s%s\n' %
+                          (port.mac_address, name, ip_address,
+                           'set:', port.id))
+            else:
+                buf.write('%s,%s,%s\n' %
+                          (port.mac_address, name, ip_address))
+
+        utils.replace_file(filename, buf.getvalue())
+        LOG.debug(_('Done building host file %s'), filename)
+        return filename
+
+    def _read_hosts_file_leases(self, filename):
+        leases = set()
+        if os.path.exists(filename):
+            with open(filename) as f:
+                for l in f.readlines():
+                    host = l.strip().split(',')
+                    leases.add((host[2], host[0]))
+        return leases
+
+    def _release_unused_leases(self):
+        filename = self.get_conf_file_name('host')
+        old_leases = self._read_hosts_file_leases(filename)
 
-        name = self.get_conf_file_name('host')
-        utils.replace_file(name, buf.getvalue())
-        return name
+        new_leases = set()
+        for port in self.network.ports:
+            for alloc in port.fixed_ips:
+                new_leases.add((alloc.ip_address, port.mac_address))
+
+        for ip, mac in old_leases - new_leases:
+            self._release_lease(mac, ip)
+
+    def _output_addn_hosts_file(self):
+        """Writes a dnsmasq compatible additional hosts file.
+
+        The generated file is sent to the --addn-hosts option of dnsmasq,
+        and lists the hosts on the network which should be resolved even if
+        the dnsmaq instance did not give a lease to the host (see the
+        `_output_hosts_file` method).
+        Each line in this file is in the same form as a standard /etc/hosts
+        file.
+        """
+        buf = six.StringIO()
+        for (port, alloc, hostname, fqdn) in self._iter_hosts():
+            # It is compulsory to write the `fqdn` before the `hostname` in
+            # order to obtain it in PTR responses.
+            buf.write('%s\t%s %s\n' % (alloc.ip_address, fqdn, hostname))
+        addn_hosts = self.get_conf_file_name('addn_hosts')
+        utils.replace_file(addn_hosts, buf.getvalue())
+        return addn_hosts
 
     def _output_opts_file(self):
         """Write a dnsmasq compatible options file."""
@@ -431,53 +586,109 @@
             subnet_to_interface_ip = self._make_subnet_interface_ip_map()
 
         options = []
+
+        isolated_subnets = self.get_isolated_subnets(self.network)
+        dhcp_ips = collections.defaultdict(list)
+        subnet_idx_map = {}
         for i, subnet in enumerate(self.network.subnets):
-            if not subnet.enable_dhcp:
+            if (not subnet.enable_dhcp or
+                (subnet.ip_version == 6 and
+                 getattr(subnet, 'ipv6_address_mode', None)
+                 in [None, constants.IPV6_SLAAC])):
                 continue
             if subnet.dns_nameservers:
                 options.append(
-                    self._format_option(i, 'dns-server',
-                                        ','.join(subnet.dns_nameservers)))
+                    self._format_option(
+                        subnet.ip_version, i, 'dns-server',
+                        ','.join(
+                            Dnsmasq._convert_to_literal_addrs(
+                                subnet.ip_version, subnet.dns_nameservers))))
+            else:
+                # use the dnsmasq ip as nameservers only if there is no
+                # dns-server submitted by the server
+                subnet_idx_map[subnet.id] = i
+
+            if self.conf.dhcp_domain and subnet.ip_version == 6:
+                options.append('tag:tag%s,option6:domain-search,%s' %
+                               (i, ''.join(self.conf.dhcp_domain)))
 
             gateway = subnet.gateway_ip
             host_routes = []
             for hr in subnet.host_routes:
                 if hr.destination == "0.0.0.0/0":
-                    gateway = hr.nexthop
+                    if not gateway:
+                        gateway = hr.nexthop
                 else:
                     host_routes.append("%s,%s" % (hr.destination, hr.nexthop))
 
             # Add host routes for isolated network segments
-            enable_metadata = (
-                self.conf.enable_isolated_metadata
-                and not subnet.gateway_ip
-                and subnet.ip_version == 4)
 
-            if enable_metadata:
+            if (isolated_subnets[subnet.id] and
+                    self.conf.enable_isolated_metadata and
+                    subnet.ip_version == 4):
                 subnet_dhcp_ip = subnet_to_interface_ip[subnet.id]
                 host_routes.append(
                     '%s/32,%s' % (METADATA_DEFAULT_IP, subnet_dhcp_ip)
                 )
 
-            if host_routes:
-                options.append(
-                    self._format_option(i, 'classless-static-route',
-                                        ','.join(host_routes)))
-                options.append(
-                    self._format_option(i, WIN2k3_STATIC_DNS,
-                                        ','.join(host_routes)))
+            if subnet.ip_version == 4:
+                if host_routes:
+                    if gateway:
+                        host_routes.append("%s,%s" % ("0.0.0.0/0", gateway))
+                    options.append(
+                        self._format_option(subnet.ip_version, i,
+                                            'classless-static-route',
+                                            ','.join(host_routes)))
+                    options.append(
+                        self._format_option(subnet.ip_version, i,
+                                            WIN2k3_STATIC_DNS,
+                                            ','.join(host_routes)))
 
-            if subnet.ip_version == 4:
                 if gateway:
-                    options.append(self._format_option(i, 'router', gateway))
+                    options.append(self._format_option(subnet.ip_version,
+                                                       i, 'router',
+                                                       gateway))
                 else:
-                    options.append(self._format_option(i, 'router'))
+                    options.append(self._format_option(subnet.ip_version,
+                                                       i, 'router'))
 
         for port in self.network.ports:
             if getattr(port, 'extra_dhcp_opts', False):
-                options.extend(
-                    self._format_option(port.id, opt.opt_name, opt.opt_value)
-                    for opt in port.extra_dhcp_opts)
+                for ip_version in (4, 6):
+                    if any(
+                        netaddr.IPAddress(ip.ip_address).version == ip_version
+                            for ip in port.fixed_ips):
+                        options.extend(
+                            # TODO(xuhanp):Instead of applying extra_dhcp_opts
+                            # to both DHCPv4 and DHCPv6, we need to find a new
+                            # way to specify options for v4 and v6
+                            # respectively. We also need to validate the option
+                            # before applying it.
+                            self._format_option(ip_version, port.id,
+                                                opt.opt_name, opt.opt_value)
+                            for opt in port.extra_dhcp_opts)
+
+            # provides all dnsmasq ip as dns-server if there is more than
+            # one dnsmasq for a subnet and there is no dns-server submitted
+            # by the server
+            if port.device_owner == constants.DEVICE_OWNER_DHCP:
+                for ip in port.fixed_ips:
+                    i = subnet_idx_map.get(ip.subnet_id)
+                    if i is None:
+                        continue
+                    dhcp_ips[i].append(ip.ip_address)
+
+        for i, ips in dhcp_ips.items():
+            for ip_version in (4, 6):
+                vx_ips = [ip for ip in ips
+                          if netaddr.IPAddress(ip).version == ip_version]
+                if vx_ips:
+                    options.append(
+                        self._format_option(
+                            ip_version, i, 'dns-server',
+                            ','.join(
+                                Dnsmasq._convert_to_literal_addrs(ip_version,
+                                                                  vx_ips))))
 
         name = self.get_conf_file_name('opts')
         utils.replace_file(name, '\n'.join(options))
@@ -487,22 +698,52 @@
         # TODO(gmoodalb): need to complete this when we support metadata
         pass
 
-    def _format_option(self, tag, option, *args):
+    def _format_option(self, ip_version, tag, option, *args):
         """Format DHCP option by option name or code."""
-        if self.version >= self.MINIMUM_VERSION:
-            set_tag = 'tag:'
-        else:
-            set_tag = ''
-
         option = str(option)
 
         if isinstance(tag, int):
             tag = self._TAG_PREFIX % tag
 
         if not option.isdigit():
-            option = 'option:%s' % option
+            if ip_version == 4:
+                option = 'option:%s' % option
+            else:
+                option = 'option6:%s' % option
+
+        return ','.join(('tag:' + tag, '%s' % option) + args)
+
+    @staticmethod
+    def _convert_to_literal_addrs(ip_version, ips):
+        if ip_version == 4:
+            return ips
+        return ['[' + ip + ']' for ip in ips]
+
+    @classmethod
+    def get_isolated_subnets(cls, network):
+        """Returns a dict indicating whether or not a subnet is isolated
 
-        return ','.join((set_tag + tag, '%s' % option) + args)
+        A subnet is considered non-isolated if there is a port connected to
+        the subnet, and the port's ip address matches that of the subnet's
+        gateway. The port must be owned by a nuetron router.
+        """
+        isolated_subnets = collections.defaultdict(lambda: True)
+        subnets = dict((subnet.id, subnet) for subnet in network.subnets)
+
+        for port in network.ports:
+            if port.device_owner != constants.DEVICE_OWNER_ROUTER_INTF:
+                continue
+            for alloc in port.fixed_ips:
+                if subnets[alloc.subnet_id].gateway_ip == alloc.ip_address:
+                    isolated_subnets[alloc.subnet_id] = False
+
+        return isolated_subnets
+
+    @classmethod
+    def should_enable_metadata(cls, conf, network):
+        """True if there exists a subnet for which a metadata proxy is needed
+        """
+        return False
 
     @classmethod
     def lease_update(cls):
@@ -538,7 +779,9 @@
         self.root_helper = root_helper
         self.plugin = plugin
         if not conf.interface_driver:
-            raise SystemExit(_('You must specify an interface driver'))
+            msg = _('An interface driver must be specified')
+            LOG.error(msg)
+            raise SystemExit(1)
         try:
             self.driver = importutils.import_object(
                 conf.interface_driver, conf)
@@ -546,7 +789,8 @@
             msg = (_("Error importing interface driver '%(driver)s': "
                    "%(inner)s") % {'driver': conf.interface_driver,
                                    'inner': e})
-            raise SystemExit(msg)
+            LOG.error(msg)
+            raise SystemExit(1)
 
     def get_interface_name(self, network, port):
         """Return interface(device) name for use by the DHCP process."""
@@ -560,6 +804,16 @@
         host_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())
         return 'dhcp%s-%s' % (host_uuid, network.id)
 
+    def _set_default_route(self, network, device_name):
+        """Sets the default gateway for this dhcp namespace.
+
+        This method is idempotent and will only adjust the route if adjusting
+        it would change it from what it already is.  This makes it safe to call
+        and avoids unnecessary perturbation of the system.
+        """
+        # we do not support namespaces
+        pass
+
     def setup_dhcp_port(self, network):
         """Create/update DHCP port for the host if needed and return port."""
 
@@ -595,12 +849,29 @@
                     port_fixed_ips.extend(
                         [dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
                     dhcp_port = self.plugin.update_dhcp_port(
-                        port.id, {'port': {'fixed_ips': port_fixed_ips}})
+                        port.id, {'port': {'network_id': network.id,
+                                           'fixed_ips': port_fixed_ips}})
+                    if not dhcp_port:
+                        raise exceptions.Conflict()
                 else:
                     dhcp_port = port
                 # break since we found port that matches device_id
                 break
 
+        # check for a reserved DHCP port
+        if dhcp_port is None:
+            LOG.debug(_('DHCP port %(device_id)s on network %(network_id)s'
+                        ' does not yet exist. Checking for a reserved port.'),
+                      {'device_id': device_id, 'network_id': network.id})
+            for port in network.ports:
+                port_device_id = getattr(port, 'device_id', None)
+                if port_device_id == constants.DEVICE_ID_RESERVED_DHCP_PORT:
+                    dhcp_port = self.plugin.update_dhcp_port(
+                        port.id, {'port': {'network_id': network.id,
+                                           'device_id': device_id}})
+                    if dhcp_port:
+                        break
+
         # DHCP port has not yet been created.
         if dhcp_port is None:
             LOG.debug(_('DHCP port %(device_id)s on network %(network_id)s'
@@ -615,6 +886,9 @@
                 fixed_ips=[dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
             dhcp_port = self.plugin.create_dhcp_port({'port': port_dict})
 
+        if not dhcp_port:
+            raise exceptions.Conflict()
+
         # Convert subnet_id to subnet dict
         fixed_ips = [dict(subnet_id=fixed_ip.subnet_id,
                           ip_address=fixed_ip.ip_address,
@@ -627,21 +901,16 @@
 
         return dhcp_port
 
-    def setup(self, network, reuse_existing=False):
+    def setup(self, network):
         """Create and initialize a device for network's DHCP on this host."""
         port = self.setup_dhcp_port(network)
         interface_name = self.get_interface_name(network, port)
 
         if net_lib.Datalink.datalink_exists(interface_name):
-            if not reuse_existing:
-                raise exceptions.PreexistingDeviceFailure(
-                    dev_name=interface_name)
-
-                LOG.debug(_('Reusing existing device: %s.'), interface_name)
+            LOG.debug(_('Reusing existing device: %s.'), interface_name)
         else:
             self.driver.plug(network.tenant_id, network.id,
-                             port.id,
-                             interface_name)
+                             port.id, interface_name)
         ip_cidrs = []
         for fixed_ip in port.fixed_ips:
             subnet = fixed_ip.subnet
@@ -649,14 +918,18 @@
             ip_cidr = '%s/%s' % (fixed_ip.ip_address, net.prefixlen)
             ip_cidrs.append(ip_cidr)
 
-        if (self.conf.enable_isolated_metadata and self.conf.use_namespaces):
+        if (self.conf.enable_isolated_metadata and
+                self.conf.use_namespaces):
             ip_cidrs.append(METADATA_DEFAULT_CIDR)
 
         self.driver.init_l3(interface_name, ip_cidrs)
 
+        if self.conf.use_namespaces:
+            self._set_default_route(network, interface_name)
+
         return interface_name
 
-    def update(self, network):
+    def update(self, network, device_name):
         """Update device settings for the network's DHCP on this host."""
         pass
 
--- a/components/openstack/neutron/files/agent/solaris/interface.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/agent/solaris/interface.py	Mon Apr 20 12:35:51 2015 -0700
@@ -37,7 +37,7 @@
     # length including the NUL character. If we change it to use new style
     # `lifreq', then we will be able to extend the length to 32 characters.
     VNIC_NAME_MAXLEN = 15
-    VNIC_NAME_PREFIX = 'evs'
+    VNIC_NAME_PREFIX = 'dh'
     VNIC_NAME_SUFFIX = '_0'
     VNIC_NAME_LEN_WO_SUFFIX = VNIC_NAME_MAXLEN - \
         len(VNIC_NAME_SUFFIX)
--- a/components/openstack/neutron/files/agent/solaris/net_lib.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/agent/solaris/net_lib.py	Mon Apr 20 12:35:51 2015 -0700
@@ -196,6 +196,13 @@
         cmd = ['/usr/sbin/dladm', 'delete-vnic', self._dlname]
         self.execute_with_pfexec(cmd)
 
+    @classmethod
+    def show_vnic(cls):
+        cmd = ['/usr/sbin/dladm', 'show-vnic', '-po', 'link']
+        stdout = utils.execute(cmd)
+
+        return stdout.splitlines()
+
 
 class IPpoolCommand(CommandBase):
     '''Wrapper around Solaris ippool(1m) command'''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/ra.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,108 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2014 OpenStack Foundation
+# All Rights Reserved.
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import jinja2
+import netaddr
+from oslo.config import cfg
+import six
+
+from neutron.agent.linux import utils
+from neutron.common import constants
+from neutron.openstack.common import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+OPTS = [
+    cfg.StrOpt('ra_confs',
+               default='$state_path/ra',
+               help=_('Location to store IPv6 RA config files')),
+]
+
+cfg.CONF.register_opts(OPTS)
+
+NDP_SMF_FMRI = 'svc:/network/routing/ndp:default'
+
+CONFIG_TEMPLATE = jinja2.Template("""if {{ interface_name }} \
+   AdvSendAdvertisements on \
+   MinRtrAdvInterval 3 \
+   MaxRtrAdvInterval 10 \
+   {% if ra_mode == constants.DHCPV6_STATELESS %}
+   AdvOtherConfigFlag on \
+   {% endif %}
+
+   {% if ra_mode == constants.DHCPV6_STATEFUL %}
+   AdvManagedFlag on
+   {% endif %}
+
+{% if ra_mode in (constants.IPV6_SLAAC, constants.DHCPV6_STATELESS) %}
+prefix {{ prefix }} {{ interface_name }} \
+        AdvOnLinkFlag on \
+        AdvAutonomousFlag on
+{% endif %}
+""")
+
+
+def _generate_ndpd_conf(router_id, router_ports, dev_name_helper):
+    ndpd_conf = utils.get_conf_file_name(cfg.CONF.ra_confs, router_id,
+                                         'ndpd.conf', True)
+    buf = six.StringIO()
+    for p in router_ports:
+        prefix = p['subnet']['cidr']
+        if netaddr.IPNetwork(prefix).version == 6:
+            interface_name = dev_name_helper(p['id'])
+            ra_mode = p['subnet']['ipv6_ra_mode']
+            buf.write('%s' % CONFIG_TEMPLATE.render(
+                ra_mode=ra_mode,
+                interface_name=interface_name,
+                prefix=prefix,
+                constants=constants))
+
+    utils.replace_file(ndpd_conf, buf.getvalue())
+    return ndpd_conf
+
+
+def _refresh_ndpd(ndpd_conf):
+    cmd = ['/usr/sbin/svccfg', '-s', NDP_SMF_FMRI, 'setprop',
+           'routing/config_file', '=', ndpd_conf]
+    utils.execute(cmd)
+    # ndpd SMF service doesn't support refresh method, so we
+    # need to restart
+    cmd = ['/usr/sbin/svcadm', 'restart', NDP_SMF_FMRI]
+    utils.execute(cmd)
+    LOG.debug(_("ndpd daemon has been refreshed to re-read the "
+                "configuration file"))
+
+
+def enable_ipv6_ra(router_id, router_ports, dev_name_helper):
+    for p in router_ports:
+        if netaddr.IPNetwork(p['subnet']['cidr']).version == 6:
+            break
+    else:
+        disable_ipv6_ra(router_id)
+        return
+    LOG.debug("enabling ndpd for router %s", router_id)
+    ndpd_conf = _generate_ndpd_conf(router_id, router_ports, dev_name_helper)
+    _refresh_ndpd(ndpd_conf)
+
+
+def disable_ipv6_ra(router_id):
+    LOG.debug("disabling ndpd for router %s", router_id)
+    utils.remove_conf_files(cfg.CONF.ra_confs, router_id)
+    _refresh_ndpd("")
--- a/components/openstack/neutron/files/dhcp_agent.ini	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/dhcp_agent.ini	Mon Apr 20 12:35:51 2015 -0700
@@ -48,8 +48,9 @@
 # Override the default dnsmasq settings with this file
 # dnsmasq_config_file =
 
-# Use another DNS server before any in /etc/resolv.conf.
-# dnsmasq_dns_server =
+# Comma-separated list of DNS servers which will be used by dnsmasq
+# as forwarders.
+# dnsmasq_dns_servers =
 
 # Limit number of leases to prevent a denial-of-service.
 # dnsmasq_lease_max = 16777216
@@ -60,6 +61,14 @@
 # Location of Metadata Proxy UNIX domain socket
 # metadata_proxy_socket = $state_path/metadata_proxy
 
+# dhcp_delete_namespaces, which is false by default, can be set to True if
+# namespaces can be deleted cleanly on the host running the dhcp agent.
+# Do not enable this until you understand the problem with the Linux iproute
+# utility mentioned in https://bugs.launchpad.net/neutron/+bug/1052535 and
+# you are sure that your version of iproute does not suffer from the problem.
+# If True, namespaces will be deleted when a dhcp server is disabled.
+# dhcp_delete_namespaces = False
+
 # DeviceManager provides methods to setup/destroy dhcp ports on the
 # host running DHCP agent
 devicemanager = neutron.agent.solaris.device.DeviceManager
--- a/components/openstack/neutron/files/evs/db/api.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# 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.
-#
-# @author: Girish Moodalbail, Oracle, Inc.
-#
-
-import sqlalchemy as sa
-from sqlalchemy.ext import declarative
-from sqlalchemy import orm
-
-from oslo.config import cfg
-
-from neutron.context import ContextBase
-from neutron.db import model_base
-
-
-EVS_DB_BASE = declarative.declarative_base(cls=model_base.NeutronBaseV2)
-EVS_DB_ENGINE = None
-EVS_DB_MAKER = None
-
-
-class EVSContext(ContextBase):
-    @property
-    def session(self):
-        return self._session
-
-    @session.setter
-    def session(self, session):
-        self._session = session
-
-
-def configure_db():
-    global EVS_DB_ENGINE
-    if not EVS_DB_ENGINE:
-        sql_connection = cfg.CONF.DATABASE.sql_connection
-        EVS_DB_ENGINE = sa.create_engine(sql_connection, echo=False)
-        EVS_DB_BASE.metadata.create_all(EVS_DB_ENGINE)
-
-
-def get_session(autocommit=True, expire_on_commit=False):
-    global EVS_DB_ENGINE, EVS_DB_MAKER
-    assert EVS_DB_ENGINE
-    if not EVS_DB_MAKER:
-        EVS_DB_MAKER = orm.sessionmaker(bind=EVS_DB_ENGINE,
-                                        autocommit=autocommit,
-                                        expire_on_commit=expire_on_commit)
-    return EVS_DB_MAKER()
-
-
-def get_evs_context(context):
-    """Overrides the Neutron DB session with EVS DB session"""
-
-    evs_context = EVSContext.from_dict(context.to_dict())
-    evs_context.session = get_session()
-
-    return evs_context
--- a/components/openstack/neutron/files/evs/db/l3nat.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2012 Nicira Networks, Inc.  All rights reserved.
-#
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    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.
-#
-# @author: Dan Wendlandt, Nicira, Inc
-# @author: Girish Moodalbail, Oracle, Inc.
-#
-
-"""
-Based off generic l3_agent (neutron/agent/l3_agent) code
-"""
-
-import sqlalchemy as sa
-
-from neutron.api.v2 import attributes
-from neutron.common import constants as l3_constants
-from neutron.common import exceptions as q_exc
-from neutron.db import l3_db
-from neutron.extensions import l3
-from neutron.extensions import external_net
-from neutron.openstack.common import log as logging
-from neutron.openstack.common import uuidutils
-from neutron.plugins.evs.db import api as evs_db
-
-
-LOG = logging.getLogger(__name__)
-
-DEVICE_OWNER_ROUTER_INTF = l3_constants.DEVICE_OWNER_ROUTER_INTF
-DEVICE_OWNER_ROUTER_GW = l3_constants.DEVICE_OWNER_ROUTER_GW
-DEVICE_OWNER_FLOATINGIP = l3_constants.DEVICE_OWNER_FLOATINGIP
-
-
-class Router(evs_db.EVS_DB_BASE):
-    """Represents a v2 neutron router."""
-
-    id = sa.Column(sa.String(36), primary_key=True,
-                   default=uuidutils.generate_uuid)
-    name = sa.Column(sa.String(255))
-    status = sa.Column(sa.String(16))
-    admin_state_up = sa.Column(sa.Boolean)
-    tenant_id = sa.Column(sa.String(255))
-    gw_port_id = sa.Column(sa.String(36))
-    gw_port_network_id = sa.Column(sa.String(36))
-
-
-class FloatingIP(evs_db.EVS_DB_BASE):
-    """Represents a floating IP address.
-
-    This IP address may or may not be allocated to a tenant, and may or
-    may not be associated with an internal port/ip address/router.
-    """
-
-    id = sa.Column(sa.String(36), primary_key=True,
-                   default=uuidutils.generate_uuid)
-    floating_ip_address = sa.Column(sa.String(64), nullable=False)
-    floating_network_id = sa.Column(sa.String(36), nullable=False)
-    floating_port_id = sa.Column(sa.String(36), nullable=False)
-    fixed_port_id = sa.Column(sa.String(36))
-    fixed_ip_address = sa.Column(sa.String(64))
-    router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id'))
-    tenant_id = sa.Column(sa.String(255))
-
-
-class EVS_L3_NAT_db_mixin(l3_db.L3_NAT_db_mixin):
-    """Mixin class to add L3/NAT router methods"""
-
-    Router = Router
-    FloatingIP = FloatingIP
-
-    def _make_router_dict(self, router, fields=None,
-                          process_extensions=True):
-        res = {'id': router['id'],
-               'name': router['name'],
-               'tenant_id': router['tenant_id'],
-               'admin_state_up': router['admin_state_up'],
-               'status': router['status'],
-               'external_gateway_info': None,
-               'gw_port_id': router['gw_port_id']}
-        if router['gw_port_id']:
-            nw_id = router['gw_port_network_id']
-            res['external_gateway_info'] = {'network_id': nw_id}
-        if process_extensions:
-            self._apply_dict_extend_functions(
-                l3.ROUTERS, res, router)
-        return self._fields(res, fields)
-
-    def create_router(self, context, router):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            create_router(evs_db.get_evs_context(context), router)
-
-    def update_router(self, context, id, router):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            update_router(evs_db.get_evs_context(context), id, router)
-
-    def _update_router_gw_info(self, context, router_id, info, router=None):
-        """This method overrides the base class method and it's contents
-        are exactly same as the base class method except that the Router
-        DB columns are different for EVS and OVS"""
-
-        router = router or self._get_router(context, router_id)
-        gw_port_id = router['gw_port_id']
-        # network_id attribute is required by API, so it must be present
-        gw_port_network_id = router['gw_port_network_id']
-
-        network_id = info.get('network_id', None) if info else None
-        if network_id:
-            self._get_network(context, network_id)
-            if not self._network_is_external(context, network_id):
-                msg = _("Network %s is not a valid external "
-                        "network") % network_id
-                raise q_exc.BadRequest(resource='router', msg=msg)
-
-        # figure out if we need to delete existing port
-        if gw_port_id and gw_port_network_id != network_id:
-            fip_count = self.get_floatingips_count(context.elevated(),
-                                                   {'router_id': [router_id]})
-            if fip_count:
-                raise l3.RouterExternalGatewayInUseByFloatingIp(
-                    router_id=router_id, net_id=gw_port_network_id)
-            with context.session.begin(subtransactions=True):
-                router['gw_port_id'] = None
-                router['gw_port_network_id'] = None
-                context.session.add(router)
-            self.delete_port(context.elevated(), gw_port_id,
-                             l3_port_check=False)
-
-        if network_id is not None and (gw_port_id is None or
-                                       gw_port_network_id != network_id):
-            subnets = self._get_subnets_by_network(context,
-                                                   network_id)
-            for subnet in subnets:
-                self._check_for_dup_router_subnet(context, router_id,
-                                                  network_id, subnet['id'],
-                                                  subnet['cidr'])
-
-            # Port has no 'tenant-id', as it is hidden from user
-            gw_port = self._core_plugin.create_port(context.elevated(), {
-                'port':
-                {'tenant_id': '',  # intentionally not set
-                 'network_id': network_id,
-                 'mac_address': attributes.ATTR_NOT_SPECIFIED,
-                 'fixed_ips': attributes.ATTR_NOT_SPECIFIED,
-                 'device_id': router_id,
-                 'device_owner': DEVICE_OWNER_ROUTER_GW,
-                 'admin_state_up': True,
-                 'name': ''}})
-
-            if not gw_port['fixed_ips']:
-                self._core_plugin.delete_port(context.elevated(),
-                                              gw_port['id'],
-                                              l3_port_check=False)
-                msg = (_('No IPs available for external network %s') %
-                       network_id)
-                raise q_exc.BadRequest(resource='router', msg=msg)
-
-            with context.session.begin(subtransactions=True):
-                router['gw_port_id'] = gw_port['id']
-                router['gw_port_network_id'] = gw_port['network_id']
-                context.session.add(router)
-
-    def delete_router(self, context, id):
-        super(EVS_L3_NAT_db_mixin, self).\
-            delete_router(evs_db.get_evs_context(context), id)
-
-    def get_router(self, context, id, fields=None):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            get_router(evs_db.get_evs_context(context), id, fields)
-
-    def get_routers(self, context, filters=None, fields=None,
-                    sorts=None, limit=None, marker=None, page_reverse=False):
-
-        query = evs_db.get_session().query(self.Router)
-        if filters is not None:
-            for key, value in filters.iteritems():
-                column = getattr(self.Router, key, None)
-                if column:
-                    query = query.filter(column.in_(value))
-
-        routers = query.all()
-        retlist = []
-        for router in routers:
-            retlist.append(self._make_router_dict(router, fields))
-        return retlist
-
-    def get_routers_count(self, context, filters=None):
-        return len(self.get_routers(context, filters))
-
-    def add_router_interface(self, context, router_id, interface_info):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            add_router_interface(evs_db.get_evs_context(context),
-                                 router_id, interface_info)
-
-    def remove_router_interface(self, context, router_id, interface_info):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            remove_router_interface(evs_db.get_evs_context(context),
-                                    router_id, interface_info)
-
-    def create_floatingip(self, context, floatingip):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            create_floatingip(evs_db.get_evs_context(context), floatingip)
-
-    def update_floatingip(self, context, id, floatingip):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            update_floatingip(evs_db.get_evs_context(context), id, floatingip)
-
-    def delete_floatingip(self, context, id):
-        super(EVS_L3_NAT_db_mixin, self).\
-            delete_floatingip(evs_db.get_evs_context(context), id)
-
-    def get_floatingip(self, context, id, fields=None):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            get_floatingip(evs_db.get_evs_context(context), id, fields)
-
-    def get_floatingips(self, context, filters=None, fields=None,
-                        sorts=None, limit=None, marker=None,
-                        page_reverse=False):
-
-        query = evs_db.get_session().query(self.FloatingIP)
-        if filters:
-            for key, value in filters.iteritems():
-                column = getattr(self.FloatingIP, key, None)
-                if column:
-                    query = query.filter(column.in_(value))
-
-        floatingips = query.all()
-        retlist = []
-        for floatingip in floatingips:
-            retlist.append(self._make_floatingip_dict(floatingip, fields))
-        return retlist
-
-    def get_floatingips_count(self, context, filters=None):
-        return len(self.get_floatingips(context, filters))
-
-    def prevent_l3_port_deletion(self, context, port_id):
-        """ Checks to make sure a port is allowed to be deleted, raising
-        an exception if this is not the case.  This should be called by
-        any plugin when the API requests the deletion of a port, since
-        some ports for L3 are not intended to be deleted directly via a
-        DELETE to /ports, but rather via other API calls that perform the
-        proper deletion checks.
-        """
-        port = self.get_port(context, port_id)
-        if not port:
-            return
-        if port['device_owner'] in [DEVICE_OWNER_ROUTER_INTF,
-                                    DEVICE_OWNER_ROUTER_GW,
-                                    DEVICE_OWNER_FLOATINGIP]:
-            raise l3.L3PortInUse(port_id=port_id,
-                                 device_owner=port['device_owner'])
-
-    def disassociate_floatingips(self, context, port_id):
-        super(EVS_L3_NAT_db_mixin, self).\
-            disassociate_floatingips(evs_db.get_evs_context(context), port_id)
-
-    def get_sync_data(self, context, router_ids=None, active=None):
-        return super(EVS_L3_NAT_db_mixin, self).\
-            get_sync_data(evs_db.get_evs_context(context), router_ids, active)
-
-    def _get_by_id(self, context, model, id):
-        return context.session.query(model).\
-            filter(model.id == id).one()
-
-    def allow_l3_port_deletion(self, context, port_id):
-        """ If an L3 agent is using this port, then we need to send
-        a notification to L3 agent to release the port before we can
-        delete the port"""
-        pass
--- a/components/openstack/neutron/files/evs/db/quotas_db.py	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2011 OpenStack Foundation.
-# All Rights Reserved.
-#
-# 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.
-#
-# @author: Girish Moodalbail, Oracle, Inc.
-#
-
-import sqlalchemy as sa
-
-from neutron.db import quota_db
-from neutron.openstack.common import uuidutils
-from neutron.plugins.evs.db import api as evs_db
-
-
-class Quota(evs_db.EVS_DB_BASE):
-    """Represent a single quota override for a tenant.
-
-    If there is no row for a given tenant id and resource, then the
-    default for the quota class is used.
-    """
-
-    id = sa.Column(sa.String(36), primary_key=True,
-                   default=uuidutils.generate_uuid)
-    tenant_id = sa.Column(sa.String(255), index=True)
-    resource = sa.Column(sa.String(255))
-    limit = sa.Column(sa.Integer)
-
-
-class EVSDbQuotaDriver(quota_db.DbQuotaDriver):
-    """
-    Driver to perform necessary checks to enforce quotas and obtain
-    quota information.  The default driver utilizes the local
-    database.
-    """
-
-    @staticmethod
-    def get_tenant_quotas(context, resources, tenant_id):
-        """
-        Given a list of resources, retrieve the quotas for the given
-        tenant.
-
-        :param context: The request context, for access checks.
-        :param resources: A dictionary of the registered resource keys.
-        :param tenant_id: The ID of the tenant to return quotas for.
-        :return dict: from resource name to dict of name and limit
-        """
-
-        return quota_db.DbQuotaDriver().\
-            get_tenant_quotas(evs_db.get_evs_context(context), resources,
-                              tenant_id)
-
-    @staticmethod
-    def delete_tenant_quota(context, tenant_id):
-        """Delete the quota entries for a given tenant_id.
-
-        Atfer deletion, this tenant will use default quota values in conf.
-        """
-
-        quota_db.DbQuotaDriver().\
-            delete_tenant_quota(evs_db.get_evs_context(context), tenant_id)
-
-    @staticmethod
-    def get_all_quotas(context, resources):
-        """
-        Given a list of resources, retrieve the quotas for the all
-        tenants.
-
-        :param context: The request context, for access checks.
-        :param resources: A dictionary of the registered resource keys.
-        :return quotas: list of dict of tenant_id:, resourcekey1:
-        resourcekey2: ...
-        """
-
-        return quota_db.DbQuotaDriver().\
-            get_all_quotas(evs_db.get_evs_context(context), resources)
-
-    @staticmethod
-    def update_quota_limit(context, tenant_id, resource, limit):
-        quota_db.DbQuotaDriver().\
-            update_quota_limit(evs_db.get_evs_context(context), tenant_id,
-                               resource, limit)
-
-    def limit_check(self, context, tenant_id, resources, values):
-        """Check simple quota limits.
-
-        For limits--those quotas for which there is no usage
-        synchronization function--this method checks that a set of
-        proposed values are permitted by the limit restriction.
-
-        This method will raise a QuotaResourceUnknown exception if a
-        given resource is unknown or if it is not a simple limit
-        resource.
-
-        If any of the proposed values is over the defined quota, an
-        OverQuota exception will be raised with the sorted list of the
-        resources which are too high.  Otherwise, the method returns
-        nothing.
-
-        :param context: The request context, for access checks.
-        :param tenant_id: The tenant_id to check the quota.
-        :param resources: A dictionary of the registered resources.
-        :param values: A dictionary of the values to check against the
-                       quota.
-        """
-
-        super(EVSDbQuotaDriver, self).\
-            limit_check(evs_db.get_evs_context(context), tenant_id, resources,
-                        values)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/migrate/__init__.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,13 @@
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,420 @@
+#!/usr/bin/python2.6
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+#
+# This script migrates the network, subnet and port information from EVS DB to
+# neutron-server DB. It also re-creates routers and floatingips tables with
+# Neutron's l3 schema. This script needs to be run for the proper upgrade of
+# Neutron from Havana to Juno release.
+#
+
+import ConfigParser
+import rad.connect as radcon
+import rad.bindings.com.oracle.solaris.rad.evscntl as evsc
+
+from neutron import context as ctx
+from neutron.db import common_db_mixin
+from neutron.db import api as db
+from neutron.db import model_base
+from neutron.plugins.evs.migrate import havana_api
+
+import sqlalchemy as sa
+from sqlalchemy import MetaData
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.schema import DropConstraint
+from sqlalchemy import sql
+
+from oslo.config import cfg
+from oslo.db import options as db_options
+from oslo.db import exception as excp
+
+
+def create_db_network(nw, engine, ext_ro):
+    ''' Method for creating networks table in the neutron-server DB
+        Input params:
+        @nw - Dictionary with values from EVS DB
+        @engine - SQL engine
+        @ext_ro - External router
+    '''
+    # Importing locally because these modules end up importing neutron.wsgi
+    # which causes RAD to hang
+    from neutron.db import db_base_plugin_v2
+    from neutron.db import external_net_db as ext_net
+    model_base.BASEV2.metadata.bind = engine
+    model_base.BASEV2.metadata.create_all(engine)
+    ctxt = ctx.get_admin_context()
+    inst = db_base_plugin_v2.NeutronDbPluginV2()
+    dup = False
+    try:
+        db_base_plugin_v2.NeutronDbPluginV2.create_network(inst, ctxt, nw)
+        print "\nnetwork=%s added" % nw['network']['name']
+        if ext_ro:
+            ext_nw = ext_net.ExternalNetwork(network_id=nw['network']['id'])
+            session = sessionmaker()
+            session.configure(bind=engine)
+            s = session()
+            s.add(ext_nw)
+            s.commit()
+    except excp.DBDuplicateEntry:
+        print "\nnetwork '%s' already exists" % nw['network']['name']
+        dup = True
+    return dup
+
+
+def create_db_subnet(sub):
+    ''' Method for creating subnets table in the neutron-server DB
+        Input params:
+        @sub - Dictionary with values from EVS DB
+    '''
+    # Importing locally because this module ends up importing neutron.wsgi
+    # which causes RAD to hang
+    from neutron.db import db_base_plugin_v2
+    ctxt = ctx.get_admin_context()
+    inst = db_base_plugin_v2.NeutronDbPluginV2()
+    try:
+        db_base_plugin_v2.NeutronDbPluginV2.create_subnet(inst, ctxt, sub)
+        print "\nsubnet=%s added" % sub['subnet']['id']
+    except excp.DBDuplicateEntry:
+        print "\nsubnet '%s' already exists" % sub['subnet']['id']
+
+
+def create_db_port(port):
+    ''' Method for creating ports table in the neutron-server DB
+        Input params:
+        @port - Dictionary with values from EVS DB
+    '''
+    # Importing locally because this module ends up importing neutron.wsgi
+    # which causes RAD to hang
+    from neutron.db import db_base_plugin_v2
+    ctxt = ctx.get_admin_context()
+    inst = db_base_plugin_v2.NeutronDbPluginV2()
+    try:
+        db_base_plugin_v2.NeutronDbPluginV2.create_port(inst, ctxt, port)
+        print "\nport=%s added" % port['port']['id']
+    except excp.DBDuplicateEntry:
+        print "\nport '%s' already exists" % port['port']['id']
+
+
+def main():
+    print "Start Migration."
+
+    # Connect to EVS controller
+    config = ConfigParser.RawConfigParser()
+    config.readfp(open("/etc/neutron/plugins/evs/evs_plugin.ini"))
+    if config.has_option("EVS", 'evs_controller'):
+        config_suh = config.get("EVS", 'evs_controller')
+    else:
+        config_suh = 'ssh://evsuser@localhost'
+    suh = config_suh.split('://')
+    if len(suh) != 2 or suh[0] != 'ssh' or not suh[1].strip():
+        raise SystemExit(_("Specified evs_controller is invalid"))
+    uh = suh[1].split('@')
+    if len(uh) != 2 or not uh[0].strip() or not uh[1].strip():
+        raise SystemExit(_("'user' and 'hostname' need to be specified "
+                           "for evs_controller"))
+    try:
+        rc = radcon.connect_ssh(uh[1], user=uh[0])
+    except:
+        raise SystemExit(_("Cannot connect to EVS Controller"))
+    try:
+        evs_contr = rc.get_object(evsc.EVSController())
+    except:
+        raise SystemExit(_("Could not retrieve EVS info from EVS Controller"))
+    evsinfo = evs_contr.getEVSInfo()
+    if not evsinfo:
+        raise SystemExit(_("No data to migrate"))
+
+    config.readfp(open("/etc/neutron/neutron.conf"))
+    if config.has_option("database", 'connection'):
+        SQL_CONNECTION = config.get("database", 'connection')
+    else:
+        SQL_CONNECTION = 'sqlite:////var/lib/neutron/neutron.sqlite'
+
+    conf = cfg.CONF
+    db_options.set_defaults(cfg.CONF,
+                            connection=SQL_CONNECTION,
+                            sqlite_db='', max_pool_size=10,
+                            max_overflow=20, pool_timeout=10)
+
+    neutron_engine = sa.create_engine(SQL_CONNECTION)
+    router_port_ids = {}
+
+    for e in evsinfo:
+        ext_ro = False
+        for p in e.props:
+            if p.name == 'OpenStack:router:external' and p.value == 'True':
+                ext_ro = True
+        # Populate networks table
+        n = {
+            'tenant_id': e.tenantname,
+            'id': e.uuid,
+            'name': e.name,
+            'status': 'ACTIVE',
+            'admin_state_up': True,
+            'shared': False
+            }
+        nw = {'network': n}
+        dup = create_db_network(nw, neutron_engine, ext_ro)
+        if dup:
+            continue  # No need to iterate over subnets and ports
+
+        # Populate subnets table
+        for i in e.ipnets:
+            cidr = None
+            gateway_ip = None
+            enable_dhcp = None
+            dns = []
+            host = []
+            start = []
+            for p in i.props:
+                if p.name == 'subnet':
+                    cidr = p.value
+                elif p.name == 'defrouter':
+                    gateway_ip = p.value
+                elif p.name == 'OpenStack:enable_dhcp':
+                    enable_dhcp = p.value == 'True'
+                elif p.name == 'OpenStack:dns_nameservers':
+                    dns = p.value.split(',')
+                elif p.name == 'OpenStack:host_routes':
+                    hh = p.value.split(',')
+                    for h in range(0, len(hh), 2):
+                        d = {hh[h]: hh[h+1]}
+                        host.append(d)
+                elif p.name == 'pool':
+                    ss = p.value.split(',')
+                    for s in ss:
+                        if '-' in s:
+                            d = {'start': s.split('-')[0],
+                                 'end': s.split('-')[1]}
+                            start.append(d)
+                        else:
+                            d = {'start': s, 'end': s}
+                            start.append(d)
+            ip_version = 4 if i.ipvers == evsc.IPVersion.IPV4 else 6
+
+            if i.name.startswith(i.uuid[:8]):
+                # Skip autogenerated names
+                name = None
+            else:
+                name = i.name
+            s = {
+                'tenant_id': i.tenantname,
+                'id': i.uuid,
+                'name': name,
+                'network_id': e.uuid,
+                'ip_version': ip_version,
+                'cidr': cidr,
+                'gateway_ip': gateway_ip,
+                'enable_dhcp': enable_dhcp,
+                'shared': False,
+                'allocation_pools': start,
+                'dns_nameservers': dns,
+                'host_routes': host
+                }
+
+            sub = {'subnet': s}
+            create_db_subnet(sub)
+
+        # Populate ports table
+        for j in e.vports:
+            device_owner = ''
+            device_id = ''
+            mac_address = None
+            ipaddr = None
+            for v in j.props:
+                if v.name == 'OpenStack:device_owner':
+                    device_owner = v.value
+                    if v.value in ('network:router_interface',
+                                   'network:router_gateway'):
+                        router_port_ids[j.uuid] = v.value
+                elif v.name == 'OpenStack:device_id':
+                    device_id = v.value
+                elif v.name == 'macaddr':
+                    mac_address = v.value
+                elif v.name == 'ipaddr':
+                    ipaddr = v.value.split('/')[0]
+            if j.name.startswith(j.uuid[:8]):
+                # Skip autogenerated names
+                name = None
+            else:
+                name = j.name
+
+            p = {
+                'tenant_id': j.tenantname,
+                'id': j.uuid,
+                'name': name,
+                'network_id': e.uuid,
+                'mac_address': mac_address,
+                'admin_state_up': True,
+                'status': 'ACTIVE',
+                'device_id': device_id,
+                'device_owner': device_owner,
+                'fixed_ips': [{'subnet_id': e.ipnets[0].uuid,
+                               'ip_address': ipaddr}]
+                }
+            port = {'port': p}
+            create_db_port(port)
+
+    # Change the schema of the floatingips and routers tables by doing
+    # the following:
+    #     Fetch the floatingip, router entry using EVS API,
+    #     Temporarily store the information,
+    #     Delete floatingip, router entry,
+    #     Remove floatingip, router as a constraint from existing tables,
+    #     Drop the routers, floatingips table,
+    #     Add router, floatingip entry using Neutron API
+
+    # Importing locally because this module ends up importing neutron.wsgi
+    # which causes RAD to hang
+    from neutron.db import l3_db
+    havana_api.configure_db()
+    session = havana_api.get_session()
+
+    # Fetch the floatingip entry using EVS API
+    query = session.query(havana_api.FloatingIP)
+    floatingips = query.all()
+    fl = []
+    if floatingips:
+        for f in floatingips:
+            fi = {
+                'id': f['id'],
+                'floating_ip_address': f['floating_ip_address'],
+                'floating_network_id': f['floating_network_id'],
+                'floating_port_id': f['floating_port_id'],
+                'fixed_port_id': f['fixed_port_id'],
+                'fixed_ip_address': f['fixed_ip_address'],
+                'tenant_id': f['tenant_id'],
+                'router_id': f['router_id'],
+                }
+            fl.append(fi)
+
+        # Delete floatingip entry
+        ctxt = ctx.get_admin_context()
+        ctxt = havana_api.get_evs_context(ctxt)
+        with ctxt.session.begin(subtransactions=True):
+            cm_db_inst = common_db_mixin.CommonDbMixin()
+            query = common_db_mixin.CommonDbMixin._model_query(cm_db_inst,
+                                                               ctxt,
+                                                               havana_api.
+                                                               FloatingIP)
+            for fip in query:
+                ctxt.session.delete(fip)
+
+    # Fetch the router entry using EVS API
+    query = session.query(havana_api.Router)
+    routers = []
+    try:
+        routers = query.all()
+    except sa.exc.OperationalError:
+        pass
+    if routers:
+        for r in routers:
+            router_id = r['id']
+            rt = {
+                'tenant_id': r['tenant_id'],
+                'id': r['id'],
+                'name': r['name'],
+                'admin_state_up': r['admin_state_up'],
+                'gw_port_id': r['gw_port_id'],
+                'status': 'ACTIVE'
+                }
+
+        # Delete router entry
+        ctxt = ctx.get_admin_context()
+        ctxt = havana_api.get_evs_context(ctxt)
+        with ctxt.session.begin(subtransactions=True):
+            cm_db_inst = common_db_mixin.CommonDbMixin()
+            query = common_db_mixin.CommonDbMixin._model_query(cm_db_inst,
+                                                               ctxt,
+                                                               havana_api.
+                                                               Router)
+            router = query.filter(havana_api.Router.id == router_id).one()
+            ctxt.session.delete(router)
+
+    engine = sa.create_engine(SQL_CONNECTION)
+    meta = MetaData()
+    conn = engine.connect()
+    trans = conn.begin()
+    meta.reflect(engine)
+
+    # Remove router as a constraint from existing tables,
+    # Drop the routers table to remove old schema
+    for t in meta.tables.values():
+        for fk in t.foreign_keys:
+            if fk.column.table.name == "routers":
+                engine.execute(DropConstraint(fk.constraint))
+    for t in meta.tables.values():
+        if t.name == "routers":
+            t.drop(bind=conn)
+
+    # Remove floatingip as a constraint from existing tables,
+    # Drop the floatingip table to remove old schema
+    for t in meta.tables.values():
+        for fk in t.foreign_keys:
+            if fk.column.table.name == "floatingips":
+                engine.execute(DropConstraint(fk.constraint))
+    for t in meta.tables.values():
+        if t.name == "floatingips":
+            t.drop(bind=conn)
+    conn.close()
+
+    # Add the routers and floatingips using the schema in l3_db.py
+
+    setattr(l3_db.Router, 'enable_snat', sa.Column(sa.Boolean,
+            default=True, server_default=sql.true(), nullable=False))
+    neutron_engine = sa.create_engine(SQL_CONNECTION)
+    model_base.BASEV2.metadata.bind = neutron_engine
+    model_base.BASEV2.metadata.create_all(neutron_engine)
+    if routers:
+        ctxt = ctx.get_admin_context()
+        with ctxt.session.begin(subtransactions=True):
+            router_db = l3_db.Router(id=router_id,
+                                     tenant_id=r['tenant_id'],
+                                     name=rt['name'],
+                                     admin_state_up=rt['admin_state_up'],
+                                     gw_port_id=rt['gw_port_id'],
+                                     status="ACTIVE")
+            ctxt.session.add(router_db)
+            print "\nrouter=%s updated" % rt['name']
+        with ctxt.session.begin(subtransactions=True):
+            for i, j in router_port_ids.iteritems():
+                router_port = l3_db.RouterPort(
+                    port_id=i,
+                    router_id=router_id,
+                    port_type=j)
+                ctxt.session.add(router_port)
+
+    if floatingips:
+        ctxt = ctx.get_admin_context()
+        with ctxt.session.begin(subtransactions=True):
+            for i in fl:
+                fl_db = l3_db.FloatingIP(
+                    id=i['id'],
+                    floating_ip_address=i['floating_ip_address'],
+                    floating_network_id=i['floating_network_id'],
+                    floating_port_id=i['floating_port_id'],
+                    fixed_port_id=i['fixed_port_id'],
+                    fixed_ip_address=i['fixed_ip_address'],
+                    router_id=i['router_id'],
+                    tenant_id=i['tenant_id'])
+                ctxt.session.add(fl_db)
+                print "\nfloatingip=%s updated" % i['floating_ip_address']
+
+    print "\nEnd Migration."
+
+
+if __name__ == '__main__':
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/migrate/havana_api.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import ConfigParser
+
+from sqlalchemy.ext import declarative
+from sqlalchemy import orm
+import sqlalchemy as sa
+
+from neutron.context import ContextBase
+from neutron.db import model_base
+from neutron.openstack.common import uuidutils
+
+EVS_DB_BASE = declarative.declarative_base(cls=model_base.NeutronBaseV2)
+EVS_DB_ENGINE = None
+EVS_DB_MAKER = None
+
+
+class EVSContext(ContextBase):
+    @property
+    def session(self):
+        return self._session
+
+    @session.setter
+    def session(self, session):
+        self._session = session
+
+
+def configure_db():
+    global EVS_DB_ENGINE
+    if not EVS_DB_ENGINE:
+        config = ConfigParser.RawConfigParser()
+        config.readfp(open("/etc/neutron/neutron.conf"))
+        if config.has_option("database", 'connection'):
+            sql_connection = config.get("database", 'connection')
+        else:
+            sql_connection = 'sqlite:////var/lib/neutron/neutron.sqlite'
+        EVS_DB_ENGINE = sa.create_engine(sql_connection, echo=False)
+        EVS_DB_BASE.metadata.create_all(EVS_DB_ENGINE)
+
+
+def get_session(autocommit=True, expire_on_commit=False):
+    global EVS_DB_ENGINE, EVS_DB_MAKER
+    assert EVS_DB_ENGINE
+    if not EVS_DB_MAKER:
+        EVS_DB_MAKER = orm.sessionmaker(bind=EVS_DB_ENGINE,
+                                        autocommit=autocommit,
+                                        expire_on_commit=expire_on_commit)
+    return EVS_DB_MAKER()
+
+
+def get_evs_context(context):
+    """Overrides the Neutron DB session with EVS DB session"""
+
+    evs_context = EVSContext.from_dict(context.to_dict())
+    evs_context.session = get_session()
+
+    return evs_context
+
+
+class Router(EVS_DB_BASE):
+    """Represents a v2 neutron router."""
+
+    id = sa.Column(sa.String(36), primary_key=True,
+                   default=uuidutils.generate_uuid)
+    name = sa.Column(sa.String(255))
+    status = sa.Column(sa.String(16))
+    admin_state_up = sa.Column(sa.Boolean)
+    tenant_id = sa.Column(sa.String(255))
+    gw_port_id = sa.Column(sa.String(36))
+    gw_port_network_id = sa.Column(sa.String(36))
+
+
+class FloatingIP(EVS_DB_BASE):
+    """Represents a floating IP address.
+
+    This IP address may or may not be allocated to a tenant, and may or
+    may not be associated with an internal port/ip address/router.
+    """
+
+    id = sa.Column(sa.String(36), primary_key=True,
+                   default=uuidutils.generate_uuid)
+    floating_ip_address = sa.Column(sa.String(64), nullable=False)
+    floating_network_id = sa.Column(sa.String(36), nullable=False)
+    floating_port_id = sa.Column(sa.String(36), nullable=False)
+    fixed_port_id = sa.Column(sa.String(36))
+    fixed_ip_address = sa.Column(sa.String(64))
+    router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id'))
+    tenant_id = sa.Column(sa.String(255))
--- a/components/openstack/neutron/files/evs/plugin.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/evs/plugin.py	Mon Apr 20 12:35:51 2015 -0700
@@ -16,7 +16,6 @@
 #
 # @author: Girish Moodalbail, Oracle, Inc.
 
-import netaddr
 import rad.client as radcli
 import rad.connect as radcon
 import rad.bindings.com.oracle.solaris.rad.evscntl_1 as evsbind
@@ -25,25 +24,27 @@
 
 from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api
 from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api
+from neutron.api.rpc.handlers import dhcp_rpc
+from neutron.api.rpc.handlers import l3_rpc
 from neutron.api.v2 import attributes
-from neutron.common import constants as l3_constants
+from neutron.common import constants
 from neutron.common import exceptions
-from neutron.common import rpc as q_rpc
+from neutron.common import rpc as n_rpc
 from neutron.common import topics
+from neutron.db import agents_db
+from neutron.db import agentschedulers_db
+from neutron.db import api as db
 from neutron.db import db_base_plugin_v2
-from neutron.db import dhcp_rpc_base
 from neutron.db import external_net_db
-from neutron.db import l3_rpc_base
+from neutron.db import l3_gwmode_db
+from neutron.db import model_base
+from neutron.db import quota_db
 from neutron.extensions import external_net
 from neutron.extensions import providernet
+from neutron.openstack.common import importutils
 from neutron.openstack.common import lockutils
 from neutron.openstack.common import log as logging
-from neutron.openstack.common import rpc
 from neutron.plugins.common import constants as svc_constants
-from neutron.plugins.evs.db import api as evs_db
-from neutron.plugins.evs.db import l3nat as evs_l3nat
-from neutron.plugins.evs.db import quotas_db
-
 
 LOG = logging.getLogger(__name__)
 
@@ -52,44 +53,7 @@
                help=_("An URI that specifies an EVS controller"))
 ]
 
-evs_database_opts = [
-    cfg.StrOpt('sql_connection',
-               default='sqlite:////var/lib/neutron/neutron.sqlite',
-               help=_("An URI that specifies SQL connectionr")),
-]
-
 cfg.CONF.register_opts(evs_controller_opts, "EVS")
-cfg.CONF.register_opts(evs_database_opts, "DATABASE")
-
-# Maps OpenStack network resource attributes to EVS properties
-NETWORK_EVS_ATTRIBUTE_MAP = {
-    'tenant_id': 'tenant',
-    'network_id': 'evs',
-    'id': 'evs',
-    'name': 'evs',
-    external_net.EXTERNAL: 'OpenStack:' + external_net.EXTERNAL,
-}
-
-# Maps OpenStack subnet resource attributes to EVS' IPnet properties
-SUBNET_IPNET_ATTRIBUTE_MAP = {
-    'tenant_id': 'tenant',
-    'network_id': 'evs',
-    'id': 'ipnet',
-    'name': 'ipnet',
-    'enable_dhcp': 'OpenStack:enable_dhcp',
-    'dns_nameservers': 'OpenStack:dns_nameservers',
-    'host_routes': 'OpenStack:host_routes',
-}
-
-# Maps OpenStack port resource attributes to EVS' VPort properties
-PORT_VPORT_ATTRIBUTE_MAP = {
-    'tenant_id': 'tenant',
-    'network_id': 'evs',
-    'id': 'vport',
-    'name': 'vport',
-    'device_id': 'OpenStack:device_id',
-    'device_owner': 'OpenStack:device_owner',
-}
 
 
 class EVSControllerError(exceptions.NeutronException):
@@ -106,29 +70,14 @@
         super(EVSOpNotSupported, self).__init__(opname=evs_errmsg)
 
 
-class EVSRpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin,
-                      l3_rpc_base.L3RpcCallbackMixin):
-    RPC_API_VERSION = '1.1'
-
-    def create_rpc_dispatcher(self):
-        '''Get the rpc dispatcher for this manager.
-
-        If a manager would like to set an rpc API version, or support more than
-        one class as the target of rpc messages, override this method.
-        '''
-        return q_rpc.PluginRpcDispatcher([self])
-
-    def report_state(self, context, **kwargs):
-        # TODO(gmoodalb): This method is currently no-op and is included
-        # here to avoid Python traceback thrown every time Neutron L3/DHCP
-        # agent is restarted. When we support Network Agents Information,
-        # we will implement this function
-        pass
+class EVSNotFound(exceptions.NeutronException):
+    message = _("Network %(net_id)s could not be found in EVS")
 
 
 class EVSNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
+                         agentschedulers_db.DhcpAgentSchedulerDbMixin,
                          external_net_db.External_net_db_mixin,
-                         evs_l3nat.EVS_L3_NAT_db_mixin):
+                         l3_gwmode_db.L3_NAT_db_mixin):
     """Implements v2 Neutron Plug-in API specification.
 
     All the neutron API calls to create/delete/retrieve Network/Subnet/Port
@@ -190,23 +139,25 @@
     |---------------------+------------------+------------------------------|
     """
 
-    # These attribute specifies whether the plugin supports or not
-    # bulk/pagination/sorting operations.
-    __native_bulk_support = False
-    __native_pagination_support = False
-    __native_sorting_support = False
-
     _supported_extension_aliases = ["provider", "external-net", "router",
-                                    "quotas"]
+                                    "ext-gw-mode", "quotas", "agent",
+                                    "dhcp_agent_scheduler"]
 
     def __init__(self):
-        # Since EVS Framework does not support router and floatingip
-        # resources, the plugin itself will maintain a DB for these
-        # two resources
-        evs_db.configure_db()
+        engine = db.get_engine()
+        model_base.BASEV2.metadata.create_all(engine)
+
+        self.network_scheduler = importutils.import_object(
+            cfg.CONF.network_scheduler_driver
+        )
 
-        # Since there is no connect_uri() yet, we need to do this ourselves
-        # parse ssh://user@hostname
+        self._setup_rpc()
+        self._rad_connection = None
+
+    @property
+    def rad_connection(self):
+        # Since there is no connect_uri() yet, we need to do
+        # parsing of ssh://user@hostname ourselves
         suh = cfg.CONF.EVS.evs_controller.split('://')
         if len(suh) != 2 or suh[0] != 'ssh' or not suh[1].strip():
             raise SystemExit(_("Specified evs_controller is invalid"))
@@ -215,165 +166,89 @@
             raise SystemExit(_("'user' and 'hostname' need to be specified "
                                "for evs_controller"))
 
-        # TODO(gmoodalb): - try few times before you give up
-        self._rc = radcon.connect_ssh(uh[1], user=uh[0])
-        self._evsc = self._rc.get_object(evsbind.EVSController())
-        self._setup_rpc()
+        if (self._rad_connection is not None and
+                self._rad_connection._closed is None):
+            return self._rad_connection
+
+        LOG.debug(_("Connecting to EVS Controller at %s as %s") %
+                  (uh[1], uh[0]))
+        self._rad_connection = radcon.connect_ssh(uh[1], user=uh[0])
+        return self._rad_connection
 
     def _setup_rpc(self):
         # RPC support
         self.service_topics = {svc_constants.CORE: topics.PLUGIN,
                                svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN}
-        self.conn = rpc.create_connection(new=True)
-        self.callbacks = EVSRpcCallbacks()
-        self.dispatcher = self.callbacks.create_rpc_dispatcher()
+        self.conn = n_rpc.create_connection(new=True)
+        self.endpoints = [dhcp_rpc.DhcpRpcCallback(),
+                          l3_rpc.L3RpcCallback(),
+                          agents_db.AgentExtRpcCallback()]
         for svc_topic in self.service_topics.values():
-            self.conn.create_consumer(svc_topic, self.dispatcher, fanout=False)
+            self.conn.create_consumer(svc_topic, self.endpoints, fanout=False)
         # Consume from all consumers in a thread
-        self.conn.consume_in_thread()
+        self.conn.consume_in_threads()
         self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
+        self.l3_agent_notifier = l3_rpc_agent_api.L3AgentNotifyAPI()
+
+        # needed by AgentSchedulerDbMixin()
+        self.agent_notifiers[constants.AGENT_TYPE_DHCP] = \
+            self.dhcp_agent_notifier
+        self.agent_notifiers[constants.AGENT_TYPE_L3] = \
+            self.l3_agent_notifier
 
     @property
     def supported_extension_aliases(self):
         return self._supported_extension_aliases
 
-    def _convert_evs_to_network(self, evs):
-        """Converts an EVS structure into Neutron Network structure."""
-
-        networkdict = dict()
-        networkdict['name'] = evs.name
-        networkdict['id'] = evs.uuid
-        networkdict['subnets'] = ([ipnet.uuid for ipnet in evs.ipnets]
-                                  if evs.ipnets else [])
-        networkdict['tenant_id'] = evs.tenantname
-        networkdict[external_net.EXTERNAL] = False
-        for prop in evs.props:
-            if prop.name == 'l2-type':
-                networkdict[providernet.NETWORK_TYPE] = prop.value
-            elif prop.name == 'vlanid' or prop.name == 'vni':
-                networkdict[providernet.SEGMENTATION_ID] = int(prop.value)
-            elif prop.name == NETWORK_EVS_ATTRIBUTE_MAP[external_net.EXTERNAL]:
-                networkdict[external_net.EXTERNAL] = \
-                    (True if prop.value == 'True' else False)
-        # fixed values as EVS framework doesn't support this
-        networkdict['admin_state_up'] = True
-        networkdict['status'] = 'ACTIVE'
-        networkdict['shared'] = False
-
-        return networkdict
-
-    def _convert_ipnet_to_subnet(self, ipnet):
-        """Converts an EVS IPnet structure into Neutron Subnet structure."""
-
-        subnetdict = dict()
-        subnetdict['name'] = ipnet.name
-        subnetdict['network_id'] = ipnet.evsuuid
-        subnetdict['id'] = ipnet.uuid
-        subnetdict['tenant_id'] = ipnet.tenantname
-        subnetdict['ip_version'] = \
-            (4 if ipnet.ipvers == evsbind.IPVersion.IPV4 else 6)
-        # assign default values to some subnet attributes
-        subnetdict['dns_nameservers'] = []
-        subnetdict['host_routes'] = []
-        subnetdict['enable_dhcp'] = False
-        for prop in ipnet.props:
-            if prop.name == 'defrouter':
-                subnetdict['gateway_ip'] = prop.value
-            elif prop.name == 'subnet':
-                subnetdict['cidr'] = prop.value
-            elif prop.name == SUBNET_IPNET_ATTRIBUTE_MAP['enable_dhcp']:
-                subnetdict['enable_dhcp'] = \
-                    (True if prop.value == 'True' else False)
-            elif prop.name == SUBNET_IPNET_ATTRIBUTE_MAP['dns_nameservers']:
-                subnetdict['dns_nameservers'] = prop.value.split(',')
-            elif prop.name == SUBNET_IPNET_ATTRIBUTE_MAP['host_routes']:
-                hrlist = []
-                vlist = prop.value.split(',')
-                for i in range(0, len(vlist), 2):
-                    hrlist.append({vlist[i]: vlist[i + 1]})
-                subnetdict['host_routes'] = hrlist
-            elif prop.name == 'pool':
-                poollist = []
-                for pool in prop.value.split(','):
-                    if '-' not in pool:
-                        start = end = pool
-                    else:
-                        start, end = pool.split('-')
-                    poollist.append(dict(start=start, end=end))
-                subnetdict['allocation_pools'] = poollist
-        subnetdict['shared'] = False
+    @lockutils.synchronized('evs-plugin', 'neutron-')
+    def _evs_controller_addIPnet(self, tenantname, evsname, ipnetname,
+                                 propstr):
+        LOG.debug(_("Adding IPnet: %s with properties: %s for tenant: %s "
+                    "and for evs: %s") %
+                  (ipnetname, propstr, tenantname, evsname))
 
-        return subnetdict
-
-    def _convert_vport_to_port(self, context, vport):
-        """Converts an EVS VPort structure into Neutron port structure."""
-
-        portdict = dict()
-        portdict['admin_state_up'] = True
-        portdict['id'] = vport.uuid
-        portdict['name'] = vport.name
-        portdict['network_id'] = vport.evsuuid
-        # TODO(gmoodalb): set to host/zonename/vnicname?
-        portdict['device_id'] = ''
-        portdict['device_owner'] = ''
-        for prop in vport.props:
-            if (prop.name == 'macaddr'):
-                portdict['mac_address'] = prop.value
-            elif (prop.name == 'ipaddr'):
-                evs = self.get_network(context, vport.evsuuid)
-                portdict['fixed_ips'] = \
-                    [{
-                        'ip_address': prop.value.split('/')[0],
-                        'subnet_id': evs['subnets'][0],
-                    }]
-            elif (prop.name == 'OpenStack:device_id'):
-                portdict['device_id'] = prop.value
-            elif (prop.name == 'OpenStack:device_owner'):
-                portdict['device_owner'] = prop.value
-        portdict['security_groups'] = []
-        portdict['status'] = 'ACTIVE'
-        portdict['tenant_id'] = vport.tenantname
-
-        return portdict
-
-    def _apply_rsrc_props_filter(self, rsrclist, filters):
-        # if all of the filter values are None, then return
-        if all([value is None for value in filters.values()]):
-            return
-
-        rsrc_to_remove = []
-        for rsrc in rsrclist:
-            propdict = dict((prop.name, prop.value) for prop in rsrc.props)
-            for key, value in filters.iteritems():
-                if value is None:
-                    continue
-                if key not in propdict:
-                    rsrc_to_remove.append(rsrc)
-                    break
-                elif isinstance(value, list):
-                    strlist = [str(v) for v in value]
-                    if propdict[key] not in strlist:
-                        rsrc_to_remove.append(rsrc)
-                        break
-                # TODO(gmoodalb): - check if it's an instance of basestring?
-                elif propdict[key] != str(value):
-                    rsrc_to_remove.append(rsrc)
-                    break
-
-        for rsrc in rsrc_to_remove:
-            rsrclist.remove(rsrc)
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_addIPnet(self, tenantname, evsname, ipnetname, propstr):
+        pat = radcli.ADRGlobPattern({'name': evsname,
+                                     'tenant': tenantname})
         try:
-            pat = radcli.ADRGlobPattern(
-                {'name': evsname, 'tenant': tenantname})
-            evs = self._rc.get_object(evsbind.EVS(), pat)
+            evs = self.rad_connection.get_object(evsbind.EVS(), pat)
             ipnet = evs.addIPnet(propstr, ipnetname)
         except radcli.ObjectError as oe:
             raise EVSControllerError(oe.get_payload().errmsg)
         return ipnet
 
+    @lockutils.synchronized('evs-plugin', 'neutron-')
+    def _evs_controller_updateIPnet(self, ipnetuuid, propstr):
+        LOG.debug(_("Updating IPnet with id: %s with property string: %s") %
+                  (ipnetuuid, propstr))
+        pat = radcli.ADRGlobPattern({'uuid': ipnetuuid})
+        try:
+            ipnetlist = self.rad_connection.list_objects(evsbind.IPnet(), pat)
+            if not ipnetlist:
+                return
+            assert len(ipnetlist) == 1
+            ipnet = self.rad_connection.get_object(ipnetlist[0])
+            ipnet.setProperty(propstr)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+    def _subnet_pool_to_evs_pool(self, subnet):
+        poolstr = ""
+        # obtain the optional allocation pool
+        pools = subnet.get('allocation_pools')
+        if not pools or pools is attributes.ATTR_NOT_SPECIFIED:
+            return poolstr
+
+        for pool in pools:
+            if poolstr:
+                poolstr += ","
+            # if start and end address is same, EVS expects the address
+            # to be provided as-is instead of x.x.x.x-x.x.x.x
+            if pool['start'] == pool['end']:
+                poolstr += pool['start']
+            else:
+                poolstr += "%s-%s" % (pool['start'], pool['end'])
+        return poolstr
+
     def create_subnet(self, context, subnet):
         """Creates a subnet(IPnet) for a given network(EVS).
 
@@ -383,93 +258,66 @@
          connect to the EVS, through a VPort, will get an IP address from the
          IPnet associated with the EVS.
         """
-        ipnetname = subnet['subnet']['name']
-        if not ipnetname:
-            ipnetname = None
 
-        proplist = ['subnet=%s' % (subnet['subnet']['cidr'])]
-
-        # obtain the optional default router
-        defrouter = subnet['subnet']['gateway_ip']
-        if defrouter is None:
-            # user specified --no-gateway and we don't support it
-            raise EVSOpNotSupported(_("cannot use --no-gateway"))
-
-        if defrouter is not attributes.ATTR_NOT_SPECIFIED:
-            proplist.append('defrouter=%s' % (defrouter))
+        # TODO(gmoodalb): Take care of this now that we have pool.
+        # Even though EVS does not support allocation pools, it is OK for an
+        # user to specify --allocation-pool because allocation pool management
+        # is done by neutron-server and is transparent to EVS framework.
 
-        # obtain the optional allocation pool
-        pools = subnet['subnet']['allocation_pools']
-        if pools is not attributes.ATTR_NOT_SPECIFIED:
-            poolstr = ""
-            for pool in pools:
-                if poolstr:
-                    poolstr += ","
-                # if start and end address is same, EVS expects the address
-                # to be provided as-is instead of x.x.x.x-x.x.x.x
-                if pool['start'] == pool['end']:
-                    poolstr += pool['start']
-                else:
-                    poolstr += "%s-%s" % (pool['start'], pool['end'])
-            proplist.append('pool=%s' % (poolstr))
+        # user specified --no-gateway, and we don't support it
+        if subnet['subnet']['gateway_ip'] is None:
+            raise EVSOpNotSupported(_("setting --no-gateway for a subnet "
+                                      "not supported"))
+        if (subnet['subnet']['host_routes'] is not
+                attributes.ATTR_NOT_SPECIFIED):
+            raise EVSOpNotSupported(_("setting --host-route for a subnet "
+                                      "not supported"))
+
+        poolstr = self._subnet_pool_to_evs_pool(subnet['subnet'])
 
-        # obtain the optional DNS nameservers
-        nameservers = subnet['subnet']['dns_nameservers']
-        if attributes.is_attr_set(nameservers):
-            proplist.append('%s=%s' %
-                            (SUBNET_IPNET_ATTRIBUTE_MAP['dns_nameservers'],
-                             ','.join(nameservers)))
-
-        # obtain the host routes
-        hostroutes = subnet['subnet']['host_routes']
-        if attributes.is_attr_set(hostroutes):
-            hrlist = ['%s,%s' % (destination, nexthop)
-                      for destination, nexthop in hostroutes]
-            proplist.append('%s=%s' %
-                            (SUBNET_IPNET_ATTRIBUTE_MAP['host_routes'],
-                             ",".join(hrlist)))
-
-        enable_dhcp = subnet['subnet']['enable_dhcp']
-        proplist.append('%s=%s' %
-                        (SUBNET_IPNET_ATTRIBUTE_MAP['enable_dhcp'],
-                         enable_dhcp))
-
-        propstr = None
-        if proplist:
-            propstr = ",".join(proplist)
-
-        evsname = subnet['subnet']['network_id']
-        tenantname = self._get_tenant_id_for_create(context, subnet['subnet'])
-        ipnet = self.evs_controller_addIPnet(tenantname, evsname, ipnetname,
-                                             propstr)
-        retval = self._convert_ipnet_to_subnet(ipnet)
+        with context.session.begin(subtransactions=True):
+            # create the subnet in the DB
+            db_subnet = super(EVSNeutronPluginV2, self).create_subnet(context,
+                                                                      subnet)
+            ipnetname = db_subnet['name']
+            if not ipnetname:
+                ipnetname = None
+            evsname = db_subnet['network_id']
+            tenantname = db_subnet['tenant_id']
+            proplist = ['subnet=%s' % db_subnet['cidr']]
+            proplist.append('defrouter=%s' % db_subnet['gateway_ip'])
+            proplist.append('uuid=%s' % db_subnet['id'])
+            if poolstr:
+                proplist.append('pool=%s' % (poolstr))
+            self._evs_controller_addIPnet(tenantname, evsname, ipnetname,
+                                          ",".join(proplist))
 
         # notify dhcp agent of subnet creation
-        self.dhcp_agent_notifier.notify(context, {'subnet': retval},
+        self.dhcp_agent_notifier.notify(context, {'subnet': db_subnet},
                                         'subnet.create.end')
-        return retval
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_updateIPnet(self, ipnetuuid, propstr):
-        try:
-            pat = radcli.ADRGlobPattern({'uuid': ipnetuuid})
-            ipnetlist = self._rc.list_objects(evsbind.IPnet(), pat)
-            assert len(ipnetlist) == 1
-            ipnet = self._rc.get_object(ipnetlist[0])
-            ipnet.setProperty(propstr)
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
+        return db_subnet
 
     def update_subnet(self, context, id, subnet):
+        LOG.debug(_("Updating Subnet: %s with %s") % (id, subnet))
         evs_rpccall_sync = subnet.pop('evs_rpccall_sync', False)
-        if not (set(subnet['subnet'].keys()) == set(('enable_dhcp',))):
-                raise EVSOpNotSupported(_("only subnets with enable_dhcp "
-                                          "set can be updated"))
+        if (set(subnet['subnet'].keys()) - set(('enable_dhcp',
+                                                'allocation_pools',
+                                                'ipv6_address_mode',
+                                                'ipv6_ra_mode'))):
+                raise EVSOpNotSupported(_("only following subnet attributes "
+                                          "enable-dhcp, allocation-pool, "
+                                          "ipv6-address-mode, and "
+                                          "ipv6-ra-mode can be updated"))
 
-        propstr = "%s=%s" % (SUBNET_IPNET_ATTRIBUTE_MAP['enable_dhcp'],
-                             subnet['subnet']['enable_dhcp'])
-        self.evs_controller_updateIPnet(id, propstr)
-        retval = self.get_subnet(context, id)
+        poolstr = self._subnet_pool_to_evs_pool(subnet['subnet'])
+
+        with context.session.begin(subtransactions=True):
+            # update subnet in DB
+            retval = super(EVSNeutronPluginV2, self).\
+                update_subnet(context, id, subnet)
+            # update EVS IPnet with allocation pool info
+            if poolstr:
+                self._evs_controller_updateIPnet(id, "pool=%s" % poolstr)
 
         # notify dhcp agent of subnet update
         methodname = 'subnet.update.end'
@@ -483,77 +331,21 @@
                                           topic=topics.DHCP_AGENT)
         return retval
 
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getIPnet(self, ipnetuuid):
-        try:
-            ipnetlist = self._evsc.getIPnetInfo('ipnet=%s' % (ipnetuuid))
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
-        return (ipnetlist[0] if ipnetlist else None)
-
     def get_subnet(self, context, id, fields=None):
-        ipnet = self.evs_controller_getIPnet(id)
-        if not ipnet:
-            return {}
-        subnetdict = self._convert_ipnet_to_subnet(ipnet)
-        return self._fields(subnetdict, fields)
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getIPnetList(self, filterstr):
-        try:
-            ipnetlist = self._evsc.getIPnetInfo(filterstr)
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
-        return ipnetlist
+        LOG.debug(_("Getting subnet: %s"), id)
+        subnet = super(EVSNeutronPluginV2, self).get_subnet(context, id, None)
+        return self._fields(subnet, fields)
 
     def get_subnets(self, context, filters=None, fields=None,
                     sorts=None, limit=None, marker=None, page_reverse=False):
-
-        filterstr = None
-        # EVS desn't support filtering of resource based on
-        # properties, so we will have to filter ourselves
-        ipnet_props = {'OpenStack:enable_dhcp': None}
-        if filters is not None:
-            filterlist = []
-            for key, value in filters.items():
-                if key == 'shared':
-                    if any(value):
-                        return []
-                    continue
-                if key == 'verbose':
-                    continue
-                if key == 'enable_dhcp':
-                    ipnet_props[SUBNET_IPNET_ATTRIBUTE_MAP[key]] = value
-                    continue
-                key = SUBNET_IPNET_ATTRIBUTE_MAP.get(key, key)
-                if isinstance(value, list):
-                    value = ",".join(map(str, set(value)))
-                    if not value:
-                        continue
-                filterlist.append("%s=%s" % (key, value))
-
-            if filterlist:
-                filterstr = ",".join(filterlist)
-
-        LOG.debug(_("calling ListIPnet from get_subnets() filterstr: '%s'")
-                  % (filterstr))
-
-        ipnetlist = self.evs_controller_getIPnetList(filterstr)
-        self._apply_rsrc_props_filter(ipnetlist, ipnet_props)
-
-        retme = []
-        for ipnet in ipnetlist:
-            subnetdict = self._convert_ipnet_to_subnet(ipnet)
-            retme.append(self._fields(subnetdict, fields))
-
-        return retme
-
-    def get_subnets_count(self, context, filters=None):
-        return len(self.get_subnets(context, filters))
+        subnets = super(EVSNeutronPluginV2, self).\
+            get_subnets(context, filters, None, sorts, limit, marker,
+                        page_reverse)
+        return [self._fields(subnet, fields) for subnet in subnets]
 
     def _release_subnet_dhcp_port(self, context, subnet, delete_network):
         """Release any dhcp port associated with the subnet"""
-        filters = dict(evs=subnet['network_id'])
+        filters = dict(network_id=[subnet['network_id']])
         portlist = self.get_ports(context, filters)
 
         if delete_network:
@@ -567,6 +359,16 @@
             # port happens to be a DHCP port.
             update_subnet = len(portlist) == 1
         if update_subnet:
+            # For IPv6 we need to first reset the IPv6 attributes
+            if subnet['ip_version'] == 6:
+                if (attributes.is_attr_set(subnet.get('ipv6_address_mode'))):
+                    subnet_update = {'subnet':
+                                     {'ipv6_address_mode': None,
+                                      'ipv6_ra_mode': None
+                                      },
+                                     'evs_rpccall_sync': True
+                                     }
+                    self.update_subnet(context, subnet['id'], subnet_update)
             # the lone port is a dhcp port created by dhcp agent
             # it must be released before we can delete the subnet
             subnet_update = {'subnet': {'enable_dhcp': False},
@@ -574,12 +376,20 @@
             self.update_subnet(context, subnet['id'], subnet_update)
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_removeIPnet(self, tenantname, evsname, ipnetuuid):
+    def _evs_controller_removeIPnet(self, tenantname, evsname, ipnetuuid):
+        LOG.debug(_("Removing IPnet with id: %s for tenant: %s for evs: %s") %
+                  (ipnetuuid, tenantname, evsname))
         pat = radcli.ADRGlobPattern({'name': evsname, 'tenant': tenantname})
         try:
-            evs = self._rc.get_object(evsbind.EVS(), pat)
+            evs = self.rad_connection.get_object(evsbind.EVS(), pat)
             evs.removeIPnet(ipnetuuid)
         except radcli.ObjectError as oe:
+            # '42' corresponds to EVS' EVS_ENOENT_IPNET error code
+            if oe.get_payload().err == 42:
+                # EVS doesn't have that IPnet, return success to delete
+                # the IPnet from Neutron DB.
+                LOG.debug(_("IPnet could not be found in EVS."))
+                return
             raise EVSControllerError(oe.get_payload().errmsg)
 
     def delete_subnet(self, context, id):
@@ -596,8 +406,11 @@
         # results in DHCP agent releasing the port.
         if subnet['enable_dhcp']:
                 self._release_subnet_dhcp_port(context, subnet, False)
-        self.evs_controller_removeIPnet(subnet['tenant_id'],
-                                        subnet['network_id'], id)
+        with context.session.begin(subtransactions=True):
+            # delete subnet in DB
+            super(EVSNeutronPluginV2, self).delete_subnet(context, id)
+            self._evs_controller_removeIPnet(subnet['tenant_id'],
+                                             subnet['network_id'], id)
 
         # notify dhcp agent
         payload = {
@@ -609,13 +422,24 @@
         self.dhcp_agent_notifier.notify(context, payload, 'subnet.delete.end')
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_createEVS(self, tenantname, evsname, propstr):
+    def _evs_controller_createEVS(self, tenantname, evsname, propstr):
+        LOG.debug(_("Adding EVS: %s with properties: %s for tenant: %s") %
+                  (evsname, propstr, tenantname))
         try:
-            evs = self._evsc.createEVS(propstr, tenantname, evsname)
+            evs = self.rad_connection.\
+                get_object(evsbind.EVSController()).\
+                createEVS(propstr, tenantname, evsname)
         except radcli.ObjectError as oe:
             raise EVSControllerError(oe.get_payload().errmsg)
         return evs
 
+    def _extend_network_dict(self, network, evs):
+        for prop in evs.props:
+            if prop.name == 'l2-type':
+                network[providernet.NETWORK_TYPE] = prop.value
+            elif prop.name == 'vlanid' or prop.name == 'vni':
+                network[providernet.SEGMENTATION_ID] = int(prop.value)
+
     def create_network(self, context, network):
         """Creates a network(EVS) for a given tenant.
 
@@ -626,6 +450,15 @@
         Machines connected to it. There are two main resources associated with
         an EVS: IPnet and VPort.
         """
+
+        if network['network']['admin_state_up'] is False:
+            raise EVSOpNotSupported(_("setting admin_state_up=False for a "
+                                      "network not supported"))
+
+        if network['network']['shared'] is True:
+            raise EVSOpNotSupported(_("setting shared=True for a "
+                                      "network not supported"))
+
         evsname = network['network']['name']
         if not evsname:
             evsname = None
@@ -654,125 +487,125 @@
                                            "provider:network_type '%s' not "
                                            "supported") % network_type)
 
-        router_external = network['network'][external_net.EXTERNAL]
-        if attributes.is_attr_set(router_external):
-            proplist.append("%s=%s" %
-                            (NETWORK_EVS_ATTRIBUTE_MAP[external_net.EXTERNAL],
-                             router_external))
-
         propstr = None
         if proplist:
             propstr = ",".join(proplist)
 
-        evs = self.evs_controller_createEVS(tenantname, evsname, propstr)
-        return self._convert_evs_to_network(evs)
+        with context.session.begin(subtransactions=True):
+            # create the network in DB
+            net = super(EVSNeutronPluginV2, self).create_network(context,
+                                                                 network)
+            self._process_l3_create(context, net, network['network'])
+            # if --router:external is not set, the above function does
+            # not update net with router:external set to False
+            if net.get(external_net.EXTERNAL) is None:
+                net[external_net.EXTERNAL] = False
+
+            # create EVS on the EVS controller
+            if propstr:
+                propstr += ",uuid=%s" % net['id']
+            else:
+                propstr = "uuid=%s" % net['id']
+            evs = self._evs_controller_createEVS(tenantname, evsname, propstr)
+
+            # add provider information into net
+            self._extend_network_dict(net, evs)
+
+        return net
 
     def update_network(self, context, id, network):
         raise EVSOpNotSupported(_("net-update"))
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getEVS(self, evsuuid):
+    def _evs_controller_getEVS(self, evsuuid):
+        LOG.debug(_("Getting EVS: %s"), evsuuid)
         try:
-            evslist = self._evsc.getEVSInfo('evs=%s' % evsuuid)
+            evslist = self.rad_connection.\
+                get_object(evsbind.EVSController()).\
+                getEVSInfo('evs=%s' % evsuuid)
         except radcli.ObjectError as oe:
             raise EVSControllerError(oe.getpayload().errmsg)
-        return (evslist[0] if evslist else None)
+        if not evslist:
+            LOG.error(_("EVS framework does not have Neutron network "
+                        "'%s' defined"), evsuuid)
+            return None
+        return evslist[0]
 
     def get_network(self, context, id, fields=None):
-        evs = self.evs_controller_getEVS(id)
-        if not evs:
-            return {}
-        networkdict = self._convert_evs_to_network(evs)
-        return self._fields(networkdict, fields)
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getEVSList(self, filterstr):
-        try:
-            evslist = self._evsc.getEVSInfo(filterstr)
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
-        return evslist
+        with context.session.begin(subtransactions=True):
+            net = super(EVSNeutronPluginV2, self).get_network(context,
+                                                              id, None)
+            # call EVS controller to get provider network information
+            evs = self._evs_controller_getEVS(net['id'])
+            if evs:
+                self._extend_network_dict(net, evs)
+        return self._fields(net, fields)
 
     def get_networks(self, context, filters=None, fields=None,
                      sorts=None, limit=None, marker=None, page_reverse=False):
 
-        filterstr = None
-        # EVS desn't support filtering of resource based on
-        # properties, so we will have to filter ourselves
-        evs_props = {'OpenStack:router:external': None}
-        if filters is not None:
-            filterlist = []
-            for key, value in filters.items():
-                if key == 'shared':
-                    if any(value):
-                        # EVS doesn't support shared networks
-                        return []
-                    continue
-                if key in ('admin_state_up', 'verbose'):
-                    continue
-                if key == 'router:external':
-                    evs_props[NETWORK_EVS_ATTRIBUTE_MAP[key]] = value
-                    continue
-                key = NETWORK_EVS_ATTRIBUTE_MAP.get(key, key)
-                if isinstance(value, list):
-                    value = ",".join(map(str, set(value)))
-                    if not value:
-                        continue
-                filterlist.append("%s=%s" % (key, value))
-
-            if filterlist:
-                filterstr = ",".join(filterlist)
-
-        LOG.debug(_("calling ListEVswitch from get_networks(): '%s'")
-                  % (filterstr))
-        evslist = self.evs_controller_getEVSList(filterstr)
-        self._apply_rsrc_props_filter(evslist, evs_props)
-
-        retme = []
-        for evs in evslist:
-            networkdict = self._convert_evs_to_network(evs)
-            retme.append(self._fields(networkdict, fields))
-
-        return retme
-
-    def get_networks_count(self, context, filters=None):
-        return len(self.get_networks(context, filters))
+        with context.session.begin(subtransactions=True):
+            nets = super(EVSNeutronPluginV2, self).\
+                get_networks(context, filters, None, sorts, limit, marker,
+                             page_reverse)
+            for net in nets:
+                evs = self._evs_controller_getEVS(net['id'])
+                if evs:
+                    self._extend_network_dict(net, evs)
+        return [self._fields(net, fields) for net in nets]
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_deleteEVS(self, tenantname, evsuuid):
+    def _evs_controller_deleteEVS(self, tenantname, evsuuid):
+        LOG.debug(_("Removing EVS with id: %s for tenant: %s") %
+                  (evsuuid, tenantname))
         try:
-            self._evsc.deleteEVS(evsuuid, tenantname)
+            self.rad_connection.\
+                get_object(evsbind.EVSController()).\
+                deleteEVS(evsuuid, tenantname)
         except radcli.ObjectError as oe:
+            # '41' corresponds to EVS' EVS_ENOENT_EVS error code
+            if oe.get_payload().err == 41:
+                # EVS doesn't have that EVS, return success to delete
+                # the EVS from Neutron DB.
+                LOG.debug(_("EVS could not be found in EVS backend."))
+                return
             raise EVSControllerError(oe.get_payload().errmsg)
 
     def delete_network(self, context, id):
         # Check if it is an external network and whether addresses in that
         # network are being used for floating ips
-        evs = self.get_network(context, id)
-        if evs[external_net.EXTERNAL]:
-            filters = dict(evs=id)
+        net = self.get_network(context, id)
+        if net[external_net.EXTERNAL]:
+            filters = dict(network_id=[id])
             portlist = self.get_ports(context, filters)
             ports_with_deviceid = [port for port in portlist
                                    if port['device_id'] != '']
             if ports_with_deviceid:
                 raise exceptions.NetworkInUse(net_id=id)
-        filters = dict(network_id=id)
+        filters = dict(network_id=[id])
         subnets = self.get_subnets(context, filters=filters)
         dhcp_subnets = [s for s in subnets if s['enable_dhcp']]
         for subnet in dhcp_subnets:
             self._release_subnet_dhcp_port(context, subnet, True)
-        self.evs_controller_deleteEVS(context.tenant_id, id)
+        with context.session.begin(subtransactions=True):
+            super(EVSNeutronPluginV2, self).delete_network(context, id)
+            self._evs_controller_deleteEVS(net['tenant_id'], id)
 
         # notify dhcp agent of network deletion
         self.dhcp_agent_notifier.notify(context, {'network': {'id': id}},
                                         'network.delete.end')
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_addVPort(self, tenantname, evsname, vportname, propstr):
+    def _evs_controller_addVPort(self, tenantname, evsname, vportname,
+                                 propstr):
+        LOG.debug(_("Adding VPort: %s with properties: %s for tenant: %s "
+                    "and for evs: %s") %
+                  (vportname, propstr, tenantname, evsname))
+
         try:
             pat = radcli.ADRGlobPattern({'name': evsname,
                                          'tenant': tenantname})
-            evs = self._rc.get_object(evsbind.EVS(), pat)
+            evs = self.rad_connection.get_object(evsbind.EVS(), pat)
             vport = evs.addVPort(propstr, vportname)
         except radcli.ObjectError as oe:
             raise EVSControllerError(oe.get_payload().errmsg)
@@ -789,179 +622,93 @@
          This configuration is inherited by the VNIC when it connects to the
          VPort.
         """
-        vportname = port['port']['name']
-        if not vportname:
-            vportname = None
-
-        proplist = []
-        macaddr = port['port']['mac_address']
-        if attributes.is_attr_set(macaddr):
-            proplist.append('macaddr=%s' % (macaddr))
-
-        fixed_ips = port['port']['fixed_ips']
-        if attributes.is_attr_set(fixed_ips):
-            # we only support one subnet
-            ipaddr = fixed_ips[0].get('ip_address')
-            if ipaddr is not None:
-                proplist.append('ipaddr=%s' % ipaddr)
+        if port['port']['admin_state_up'] is False:
+            raise EVSOpNotSupported(_("setting admin_state_up=False for a "
+                                      "port not supported"))
 
-        # retrieve device_id and device_owner
-        device_id = port['port']['device_id']
-        if attributes.is_attr_set(device_id) and device_id:
-            proplist.append("%s=%s" %
-                            (PORT_VPORT_ATTRIBUTE_MAP['device_id'], device_id))
-
-        device_owner = port['port']['device_owner']
-        if attributes.is_attr_set(device_owner) and device_owner:
-            proplist.append("%s=%s" %
-                            (PORT_VPORT_ATTRIBUTE_MAP['device_owner'],
-                             device_owner))
+        with context.session.begin(subtransactions=True):
+            # for external gateway ports and floating ips, tenant_id
+            # is not set, but EVS does not like it.
+            tenant_id = self._get_tenant_id_for_create(context, port['port'])
+            if not tenant_id:
+                network = self.get_network(context, port['port']['network_id'])
+                port['port']['tenant_id'] = network['tenant_id']
+            # create the port in the DB
+            db_port = super(EVSNeutronPluginV2, self).create_port(context,
+                                                                  port)
 
-        propstr = None
-        if proplist:
-            propstr = ",".join(proplist)
+            tenantname = db_port['tenant_id']
+            vportname = db_port['name']
+            if not vportname:
+                vportname = None
+            evs_id = db_port['network_id']
+            proplist = ['macaddr=%s' % db_port['mac_address']]
+            proplist.append('ipaddr=%s' %
+                            db_port['fixed_ips'][0].get('ip_address'))
+            proplist.append('uuid=%s' % db_port['id'])
 
-        evsname = port['port']['network_id']
-        tenantname = self._get_tenant_id_for_create(context, port['port'])
-        if not tenantname:
-            network = self.get_network(context, evsname)
-            tenantname = network['tenant_id']
-        vport = self.evs_controller_addVPort(tenantname, evsname, vportname,
-                                             propstr)
-        retval = self._convert_vport_to_port(context, vport)
+            self._evs_controller_addVPort(tenantname, evs_id, vportname,
+                                          ",".join(proplist))
 
         # notify dhcp agent of port creation
-        self.dhcp_agent_notifier.notify(context, {'port': retval},
+        self.dhcp_agent_notifier.notify(context, {'port': db_port},
                                         'port.create.end')
-        return retval
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_updateVPort(self, vportuuid, proplist):
-        try:
-            pat = radcli.ADRGlobPattern({'uuid': vportuuid})
-            vportlist = self._rc.list_objects(evsbind.VPort(), pat)
-            assert len(vportlist) == 1
-            vport = self._rc.get_object(vportlist[0])
-            for prop in proplist:
-                vport.setProperty(prop)
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
+        return db_port
 
     def update_port(self, context, id, port):
-        # EVS does not allow updating certain attributes
-        if not (set(port['port'].keys()) <=
-                set(('device_id', 'device_owner'))):
-            raise EVSOpNotSupported(_("only device_id and "
-                                      "device_owner supported"))
+        # EVS does not allow updating certain attributes, so check for it
+        state = port['port'].get('admin_state_up')
+        if state and state is False:
+            raise EVSOpNotSupported(_("updating port's admin_state_up to "
+                                      "False is not supported"))
 
-        proplist = []
-        device_id = port['port'].get('device_id')
-        if device_id is not None:
-            # EVS expects property values to be non-zero length
-            if len(device_id) == 0:
-                device_id = " "
-            proplist.append("%s=%s" %
-                            (PORT_VPORT_ATTRIBUTE_MAP['device_id'], device_id))
-
-        device_owner = port['port'].get('device_owner')
-        if device_owner is not None:
-            if len(device_owner) == 0:
-                device_owner = " "
-            proplist.append("%s=%s" %
-                            (PORT_VPORT_ATTRIBUTE_MAP['device_owner'],
-                             device_owner))
-
-        if not proplist:
-            return dict()
-
-        self.evs_controller_updateVPort(id, proplist)
-        retval = self.get_port(context, id)
+        # Get the original port and fail if any attempt is being made
+        # to change fixed_ips of the port since EVS doesn't support it
+        original_port = super(EVSNeutronPluginV2, self).get_port(context, id)
+        original_ips = original_port['fixed_ips']
+        update_ips = port['port'].get('fixed_ips')
+        if (update_ips and
+            (len(update_ips) != 1 or
+             update_ips[0]['subnet_id'] != original_ips[0]['subnet_id'] or
+             update_ips[0]['ip_address'] != original_ips[0]['ip_address'])):
+            raise EVSOpNotSupported(_("updating port's fixed_ips "
+                                      "is not supported"))
+        LOG.debug(_("Updating port %s with %s") % (id, port))
+        db_port = super(EVSNeutronPluginV2, self).update_port(context,
+                                                              id, port)
 
         # notify dhcp agent of port update
-        self.dhcp_agent_notifier.notify(context, {'port': retval},
+        self.dhcp_agent_notifier.notify(context, {'port': db_port},
                                         'port.update.end')
-        return retval
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getVPort(self, vportuuid):
-        try:
-            vportlist = self._evsc.getVPortInfo('vport=%s' % (vportuuid))
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
-        return (vportlist[0] if vportlist else None)
+        return db_port
 
     def get_port(self, context, id, fields=None):
-        vport = self.evs_controller_getVPort(id)
-        if not vport:
-            return {}
-        portdict = self._convert_vport_to_port(context, vport)
-        return self._fields(portdict, fields)
-
-    @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_getVPortList(self, filterstr):
-        try:
-            vportlist = self._evsc.getVPortInfo(filterstr)
-        except radcli.ObjectError as oe:
-            raise EVSControllerError(oe.get_payload().errmsg)
-        return vportlist
+        LOG.debug(_("Getting port: %s"), id)
+        port = super(EVSNeutronPluginV2, self).get_port(context, id, None)
+        return self._fields(port, fields)
 
     def get_ports(self, context, filters=None, fields=None,
                   sorts=None, limit=None, marker=None, page_reverse=False):
-        LOG.debug(_("inside the get_ports() method: filters: '%s'") %
-                  str(filters))
+        ports = super(EVSNeutronPluginV2, self).\
+            get_ports(context, filters, None, sorts, limit, marker,
+                      page_reverse)
+        return [self._fields(port, fields) for port in ports]
 
-        filterstr = None
-        # EVS desn't support filtering of resource based on
-        # properties, so we will have to filter ourselves
-        vport_props = {'OpenStack:device_id': None,
-                       'OpenStack:device_owner': None}
-        if filters is not None:
-            filterlist = []
-            for key, value in filters.items():
-                if key == 'shared':
-                    if any(value):
-                        return []
-                    continue
-                if key == 'admin_state_up':
-                    continue
-                if key in ('device_id', 'device_owner'):
-                    vport_props[PORT_VPORT_ATTRIBUTE_MAP[key]] = value
-                    continue
-                key = PORT_VPORT_ATTRIBUTE_MAP.get(key, key)
-                if isinstance(value, list):
-                    value = ",".join(map(str, set(value)))
-                    if not value:
-                        continue
-                filterlist.append("%s=%s" % (key, value))
+    def notify_l3agent(self, context, port):
+        """ If an L3 agent is using this port, then we need to send
+        a notification to the L3 agent so that it can remove the EVS VPort
+        associated with the Neutron Port. In that case, the EVS Plugin will
+        only remove the Neutron port from the DB, so return False.
 
-            if filterlist:
-                filterstr = ",".join(filterlist)
-
-        LOG.debug(_("calling getVPortInfo from get_ports(): '%s'") %
-                  (filterstr))
-        vportlist = self.evs_controller_getVPortList(filterstr)
-        self._apply_rsrc_props_filter(vportlist, vport_props)
-
-        retme = []
-        for vport in vportlist:
-            portdict = self._convert_vport_to_port(context, vport)
-            retme.append(self._fields(portdict, fields))
-
-        return retme
-
-    def get_ports_count(self, context, filters=None):
-        return len(self.get_ports(context, filters))
-
-    def _release_l3agent_internal_port(self, context, port):
-        """ If an L3 agent is using this port, then we need to send
-        a notification to L3 agent to release the port before we can
-        delete the port"""
+        If the port is not used by the L3 agent, then the EVS plugin
+        will remove both the Neutron port and EVS VPort, so return True.
+        """
 
         device_owner = port['device_owner']
-        if device_owner not in [l3_constants.DEVICE_OWNER_ROUTER_INTF,
-                                l3_constants.DEVICE_OWNER_ROUTER_GW,
-                                l3_constants.DEVICE_OWNER_FLOATINGIP]:
-            return
+        if device_owner not in [constants.DEVICE_OWNER_ROUTER_INTF,
+                                constants.DEVICE_OWNER_ROUTER_GW,
+                                constants.DEVICE_OWNER_FLOATINGIP]:
+            return True
         router_id = port['device_id']
         port_update = {
             'port': {
@@ -970,20 +717,20 @@
             }
         }
         self.update_port(context, port['id'], port_update)
-        if device_owner in [l3_constants.DEVICE_OWNER_ROUTER_INTF,
-                            l3_constants.DEVICE_OWNER_ROUTER_GW]:
-            msg = l3_rpc_agent_api.L3AgentNotify.make_msg("routers_updated",
-                                                          routers=[router_id])
-            l3_rpc_agent_api.L3AgentNotify.call(context, msg,
-                                                topic=topics.L3_AGENT)
+        if device_owner in [constants.DEVICE_OWNER_ROUTER_INTF,
+                            constants.DEVICE_OWNER_ROUTER_GW]:
+            self.l3_agent_notifier.routers_updated(context, [router_id])
+            return False
+        return True
 
     @lockutils.synchronized('evs-plugin', 'neutron-')
-    def evs_controller_removeVPort(self, tenantname, evsname, vportuuid,
-                                   vportname):
+    def _evs_controller_removeVPort(self, tenantname, evsname, vportuuid):
+        LOG.debug(_("Removing VPort with id: %s for tenant: %s for evs: %s") %
+                  (vportuuid, tenantname, evsname))
         pat = radcli.ADRGlobPattern({'name': evsname,
                                      'tenant': tenantname})
         try:
-            evs = self._rc.get_object(evsbind.EVS(), pat)
+            evs = self.rad_connection.get_object(evsbind.EVS(), pat)
             evs.removeVPort(vportuuid)
         except radcli.ObjectError as oe:
             # '7' corresponds to EVS' EVS_EBUSY_VPORT error code
@@ -991,8 +738,10 @@
                 # It is possible that the VM is destroyed, but EVS is unaware
                 # of it. So, try to reset the vport. If it succeeds, then call
                 # removeVPort() again.
+                LOG.debug(_("EVS VPort is busy. We will need to reset "
+                            "and then remove"))
                 try:
-                    evs.resetVPort(vportname)
+                    evs.resetVPort(vportuuid)
                     evs.removeVPort(vportuuid)
                 except:
                     # we failed one of the above operations, just return
@@ -1001,6 +750,12 @@
                 else:
                     # the reset and remove succeeded, just return.
                     return
+            # '43' corresponds to EVS' EVS_ENOENT_VPORT error code
+            elif oe.get_payload().err == 43:
+                # EVS doesn't have that VPort, return success to delete
+                # the VPort from Neutron DB.
+                LOG.debug(_("VPort could not be found in EVS."))
+                return
             raise EVSControllerError(oe.get_payload().errmsg)
 
     def delete_port(self, context, id, l3_port_check=True):
@@ -1010,10 +765,13 @@
         port = self.get_port(context, id)
         if not port:
             return
-        if not l3_port_check:
-            self._release_l3agent_internal_port(context, port)
-        self.evs_controller_removeVPort(port['tenant_id'], port['network_id'],
-                                        id, port['name'])
+        del_vport = l3_port_check or self.notify_l3agent(context, port)
+        with context.session.begin(subtransactions=True):
+            super(EVSNeutronPluginV2, self).delete_port(context, id)
+            if del_vport:
+                self._evs_controller_removeVPort(port['tenant_id'],
+                                                 port['network_id'],
+                                                 port['id'])
 
         # notify dhcp agent of port deletion
         payload = {
@@ -1023,31 +781,3 @@
             }
         }
         self.dhcp_agent_notifier.notify(context, payload, 'port.delete.end')
-
-    # needed for DHCP agent support
-    def update_fixed_ip_lease_expiration(self, context, network_id,
-                                         ip_address, lease_remaining):
-        pass
-
-    # needed for L3 agent support
-    def _get_network(self, context, network_id):
-        return self.get_network(context, network_id)
-
-    def _get_subnet(self, context, subnet_id):
-        return self.get_subnet(context, subnet_id)
-
-    def _get_port(self, context, port_id):
-        return self.get_port(context, port_id)
-
-    def _delete_port(self, context, port_id):
-        return self.delete_port(context, port_id)
-
-    def _get_subnets_by_network(self, context, network_id):
-        return self.get_subnets(context, filters={'network_id': network_id})
-
-    def _network_is_external(self, context, net_id):
-        try:
-            evs = self.get_network(context, net_id)
-            return evs[external_net.EXTERNAL]
-        except:
-            return False
--- a/components/openstack/neutron/files/evs_plugin.ini	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/evs_plugin.ini	Mon Apr 20 12:35:51 2015 -0700
@@ -4,8 +4,3 @@
 # to EVS controller specified by hostname. By default it's set to
 # ssh://evsuser@localhost.
 # evs_controller = ssh://evsuser@localhost
-
-[DATABASE]
-# The SQLAlchemy connection string used to connect to the
-# database (string value). By default set to:
-# sql_connection = sqlite:////var/lib/neutron/neutron.sqlite
--- a/components/openstack/neutron/files/l3_agent.ini	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/l3_agent.ini	Mon Apr 20 12:35:51 2015 -0700
@@ -13,14 +13,14 @@
 
 # If use_namespaces is set as False then the agent can only configure one
 # router.
-
 # This is done by setting the specific router_id.
 # router_id =
 
-# Each L3 agent can be associated with at most one external network.  This
-# value should be set to the UUID of that external network.  If empty,
-# the agent will enforce that only a single external networks exists and
-# use that external network id
+# When external_network_bridge is set, each L3 agent can be associated
+# with no more than one external network. This value should be set to the UUID
+# of that external network. To allow L3 agent support multiple external
+# networks, both the external_network_bridge and gateway_external_network_id
+# must be left empty.
 # gateway_external_network_id =
 
 # Indicates that this L3 agent should also handle routers that do not have
@@ -30,9 +30,17 @@
 # handle_internal_only_routers = True
 
 # Name of bridge used for external network traffic. This should be set to
-# empty value for the linux bridge
+# empty value for the linux bridge. when this parameter is set, each L3 agent
+# can be associated with no more than one external network.
 external_network_bridge =
 
+# TCP Port used by Neutron metadata server
+# metadata_port = 9697
+
+# Send this many gratuitous ARPs for HA setup. Set it below or equal to 0
+# to disable this feature.
+# send_arp_for_ha = 3
+
 # seconds between re-sync routers' data if needed
 # periodic_interval = 40
 
@@ -42,7 +50,41 @@
 
 # enable_metadata_proxy, which is true by default, can be set to False
 # if the Nova metadata server is not available
-enable_metadata_proxy = False
+enable_metadata_proxy = True
+
+# Location of Metadata Proxy UNIX domain socket
+# metadata_proxy_socket = $state_path/metadata_proxy
+
+# router_delete_namespaces, which is false by default, can be set to True if
+# namespaces can be deleted cleanly on the host running the L3 agent.
+# Do not enable this until you understand the problem with the Linux iproute
+# utility mentioned in https://bugs.launchpad.net/neutron/+bug/1052535 and
+# you are sure that your version of iproute does not suffer from the problem.
+# If True, namespaces will be deleted when a router is destroyed.
+# router_delete_namespaces = False
+
+# The working mode for the agent. Allowed values are:
+# - legacy: this preserves the existing behavior where the L3 agent is
+#   deployed on a centralized networking node to provide L3 services
+#   like DNAT, and SNAT. Use this mode if you do not want to adopt DVR.
+# - dvr: this mode enables DVR functionality, and must be used for an L3
+#   agent that runs on a compute host.
+# - dvr_snat: this enables centralized SNAT support in conjunction with
+#   DVR. This mode must be used for an L3 agent running on a centralized
+#   node (or in single-host deployments, e.g. devstack).
+# agent_mode = legacy
+
+# Location to store keepalived and all HA configurations
+# ha_confs_path = $state_path/ha_confs
+
+# VRRP authentication type AH/PASS
+# ha_vrrp_auth_type = PASS
+
+# VRRP authentication password
+# ha_vrrp_auth_password =
+
+# The advertisement interval in seconds
+# ha_vrrp_advert_int = 2
 
 # Name of the datalink that connects to an external network. By default it's
 # set to net0.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/metadata_agent.ini	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,59 @@
+[DEFAULT]
+# Show debugging output in log (sets DEBUG log level output)
+# debug = True
+
+# The Neutron user information for accessing the Neutron API.
+auth_url = http://localhost:5000/v2.0
+auth_region = RegionOne
+# Turn off verification of the certificate for ssl
+# auth_insecure = False
+# Certificate Authority public key (CA cert) file for ssl
+# auth_ca_cert =
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+
+# Network service endpoint type to pull from the keystone catalog
+# endpoint_type = adminURL
+
+# IP address used by Nova metadata server
+# nova_metadata_ip = 127.0.0.1
+
+# TCP Port used by Nova metadata server
+# nova_metadata_port = 8775
+
+# Which protocol to use for requests to Nova metadata server, http or https
+# nova_metadata_protocol = http
+
+# Whether insecure SSL connection should be accepted for Nova metadata server
+# requests
+# nova_metadata_insecure = False
+
+# Client certificate for nova api, needed when nova api requires client
+# certificates
+# nova_client_cert =
+
+# Private key for nova client certificate
+# nova_client_priv_key =
+
+# When proxying metadata requests, Neutron signs the Instance-ID header with a
+# shared secret to prevent spoofing.  You may select any string for a secret,
+# but it must match here and in the configuration used by the Nova Metadata
+# Server. NOTE: Nova uses a different key: neutron_metadata_proxy_shared_secret
+# metadata_proxy_shared_secret =
+
+# Location of Metadata Proxy UNIX domain socket
+# metadata_proxy_socket = $state_path/metadata_proxy
+
+# Number of separate worker processes for metadata server. Defaults to
+# half the number of CPU cores
+metadata_workers = 1
+
+# Number of backlog requests to configure the metadata server socket with
+# metadata_backlog = 4096
+
+# URL to connect to the cache backend.
+# default_ttl=0 parameter will cause cache entries to never expire.
+# Otherwise default_ttl specifies time in seconds a cache entry is valid for.
+# No cache is used in case no value is passed.
+# cache_url = memory://?default_ttl=5
--- a/components/openstack/neutron/files/neutron-dhcp-agent	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron-dhcp-agent	Mon Apr 20 12:35:51 2015 -0700
@@ -23,6 +23,26 @@
 from subprocess import CalledProcessError, Popen, PIPE, check_call
 
 
+def set_hostmodel(value):
+    cmd = ["/usr/sbin/ipadm", "show-prop", "-p", "hostmodel",
+           "-co", "current", "ipv4"]
+    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+    output, error = p.communicate()
+    if p.returncode != 0:
+        print "failed to retrieve hostmodel ipadm property"
+        return False
+    if output.strip() == value:
+        return True
+    cmd = ["/usr/sbin/ipadm", "set-prop", "-t", "-p", "hostmodel=%s" % value,
+           "ipv4"]
+    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+    output, error = p.communicate()
+    if p.returncode != 0:
+        print "failed to set ipadm hostmodel property to %s" % value
+        return False
+    return True
+
+
 def start():
     # verify paths are valid
     for f in sys.argv[2:4]:
@@ -30,6 +50,10 @@
             print '%s does not exist or is not readable' % f
             return smf_include.SMF_EXIT_ERR_CONFIG
 
+    # set the hostmodel property if necessary
+    if not set_hostmodel("src-priority"):
+        return smf_include.SMF_EXIT_ERR_FATAL
+
     cmd = "/usr/lib/neutron/neutron-dhcp-agent --config-file %s " \
         "--config-file %s" % tuple(sys.argv[2:4])
     smf_include.smf_subprocess(cmd)
@@ -52,8 +76,8 @@
 
     ifnames = output.splitlines()
     # DHCP agent datalinks are always 15 characters in length. They start with
-    # 'evs', end with '_0', and in between they are hexadecimal digits.
-    prog = re.compile('evs[0-9A-Fa-f\_]{10}_0')
+    # 'dh', end with '_0', and in between they are hexadecimal digits.
+    prog = re.compile('dh[0-9A-Fa-f\_]{11}_0')
     for ifname in ifnames:
         if not prog.search(ifname):
             continue
@@ -62,25 +86,16 @@
             # first remove the IP
             check_call(["/usr/bin/pfexec", "/usr/sbin/ipadm", "delete-ip",
                         ifname])
-            # get the tenant, evs, and vport name for the VNIC
-            cmd = ["/usr/sbin/dladm", "show-vnic", "-po",
-                   "tenant,evs,vport", ifname]
-            p = Popen(cmd, stdout=PIPE, stderr=PIPE)
-            output, error = p.communicate()
-            if p.returncode != 0:
-                print "failed to retrieve Tenant, EVS," \
-                      " and VPort info for a VNIC"
-                return smf_include.SMF_EXIT_ERR_FATAL
-            tenant, evs, vport = output.strip().split(':')
             # next remove the VNIC
             check_call(["/usr/bin/pfexec", "/usr/sbin/dladm", "delete-vnic",
                         ifname])
-            # remove the EVS VPort
-            check_call(["/usr/sbin/evsadm", "remove-vport", "-T", tenant,
-                        "%s/%s" % (evs, vport)])
         except CalledProcessError as err:
             print "failed to remove datalinks used by DHCP agent: %s" % err
             return smf_include.SMF_EXIT_ERR_FATAL
+
+    # finally reset the hostmodel property
+    if not set_hostmodel("weak"):
+        return smf_include.SMF_EXIT_ERR_FATAL
     return smf_include.SMF_EXIT_OK
 
 if __name__ == "__main__":
--- a/components/openstack/neutron/files/neutron-dhcp-agent.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron-dhcp-agent.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/neutron/neutron-upgrade' />
+    </dependency>
+
     <!-- neutron-dhcp-agent uses dnsmasq which is incompatible with running
          BIND, ISC DHCP, and TFTP -->
     <dependency name='exclude-bind' grouping='exclude_all' restart_on='none'
@@ -62,6 +68,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -74,7 +85,8 @@
     <exec_method timeout_seconds="600" type="method" name="stop"
       exec="/lib/svc/method/neutron-dhcp-agent %m %{restarter/contract}">
       <method_context>
-        <method_credential user='neutron' group='neutron' />
+        <!-- sys_ip_config is required to set 'hostmodel' ipadm property -->
+        <method_credential user='neutron' group='neutron' privileges='basic,sys_ip_config' />
       </method_context>
     </exec_method>
 
--- a/components/openstack/neutron/files/neutron-l3-agent	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron-l3-agent	Mon Apr 20 12:35:51 2015 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/python2.6
 
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -24,6 +24,26 @@
 from subprocess import CalledProcessError, Popen, PIPE, check_call
 
 
+def set_hostmodel(value):
+    cmd = ["/usr/sbin/ipadm", "show-prop", "-p", "hostmodel",
+           "-co", "current", "ipv4"]
+    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+    output, error = p.communicate()
+    if p.returncode != 0:
+        print "failed to retrieve hostmodel ipadm property"
+        return False
+    if output.strip() == value:
+        return True
+    cmd = ["/usr/sbin/ipadm", "set-prop", "-t", "-p", "hostmodel=%s" % value,
+           "ipv4"]
+    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+    output, error = p.communicate()
+    if p.returncode != 0:
+        print "failed to set ipadm hostmodel property to %s" % value
+        return False
+    return True
+
+
 def start():
     # verify paths are valid
     for f in sys.argv[2:4]:
@@ -56,6 +76,10 @@
               "enabled before enabling neutron-l3-agent"
         return smf_include.SMF_EXIT_ERR_CONFIG
 
+    # set the hostmodel property if necessary
+    if not set_hostmodel("src-priority"):
+        return smf_include.SMF_EXIT_ERR_FATAL
+
     cmd = "/usr/lib/neutron/neutron-l3-agent --config-file %s " \
         "--config-file %s" % tuple(sys.argv[2:4])
     smf_include.smf_subprocess(cmd)
@@ -137,8 +161,9 @@
 
     ipnat_rules = output.splitlines()
     # L3 agent IP NAT rules are of the form
-    # bimap l3e64ccc496_a_0 192.168.1.3/32 -> 172.16.10.3/32
-    prog = re.compile('l3e[0-9A-Fa-f\_]{10}_0')
+    # bimap l3e64ccc496_a_0 .... OR
+    # rdr l3iedf345cc96_a_0 ....
+    prog = re.compile('l3[ie][0-9A-Fa-f\_]{10}_0')
     for ipnat_rule in ipnat_rules:
         if not prog.search(ipnat_rule):
             continue
@@ -178,6 +203,9 @@
             print "failed to remove datalinks used by L3 agent: %s" % (err)
             return smf_include.SMF_EXIT_ERR_FATAL
 
+    # finally reset the hostmodel property
+    if not set_hostmodel("weak"):
+        return smf_include.SMF_EXIT_ERR_FATAL
     return smf_include.SMF_EXIT_OK
 
 if __name__ == "__main__":
--- a/components/openstack/neutron/files/neutron-l3-agent.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron-l3-agent.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/neutron/neutron-upgrade' />
+    </dependency>
+
     <dependency name='ipfilter' grouping='require_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/network/ipfilter:default' />
@@ -40,18 +46,25 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
       exec="/lib/svc/method/neutron-l3-agent %m %{config/config_path} %{config/l3_config_path}">
       <method_context>
-        <method_credential user='neutron' group='neutron' />
+        <!-- sys_ip_config is required to set 'hostmodel' ipadm property -->
+        <method_credential user='neutron' group='neutron' privileges='basic,sys_ip_config' />
       </method_context>
     </exec_method>
     <exec_method timeout_seconds="600" type="method" name="stop"
       exec="/lib/svc/method/neutron-l3-agent %m %{restarter/contract}">
       <method_context>
-        <method_credential user='neutron' group='neutron' />
+        <!-- sys_ip_config is required to set 'hostmodel' ipadm property -->
+        <method_credential user='neutron' group='neutron' privileges='basic,sys_ip_config' />
       </method_context>
     </exec_method>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-metadata-agent	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+import sys
+
+import smf_include
+
+
+def start():
+    # verify paths are valid
+    for f in sys.argv[2:4]:
+        if not os.path.exists(f) or not os.access(f, os.R_OK):
+            print '%s does not exist or is not readable' % f
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+    cmd = "/usr/lib/neutron/neutron-metadata-agent --config-file %s " \
+        "--config-file %s" % tuple(sys.argv[2:4])
+    smf_include.smf_subprocess(cmd)
+
+if __name__ == "__main__":
+    os.putenv("LC_ALL", "C")
+    smf_include.smf_main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-metadata-agent.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,110 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="neutron-metadata-agent">
+
+  <service version="1" type="service"
+    name="application/openstack/neutron/neutron-metadata-agent">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/neutron/neutron-upgrade' />
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/neutron-metadata-agent %m %{config/config_path} %{config/metadata_config_path}">
+      <method_context>
+        <method_credential user='neutron' group='neutron' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":kill"/>
+
+    <instance name='default' enabled='false'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.neutron' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.neutron' />
+      </property_group>
+
+      <property_group name='config' type='application'>
+        <propval name='config_path' type='astring'
+          value='/etc/neutron/neutron.conf'/>
+        <propval name='metadata_config_path' type='astring'
+          value='/etc/neutron/metadata_agent.ini'/>
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Neutron Metadata Agent
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          neutron-metadata-agent is a server daemon that proxies both OpenStack
+          and EC2-compatible API metadata requests made by the VMs on tenant
+          networks to nova-api-metadata
+        </loctext>
+      </description>
+      <pg_pattern name='config' type='application' required='true'>
+        <prop_pattern name='config_path' type='astring'
+          required='true'>
+          <common_name>
+            <loctext xml:lang='C'>
+              Filesystem path to Neutron configuration file
+            </loctext>
+          </common_name>
+        </prop_pattern>
+        <prop_pattern name='metadata_config_path' type='astring'
+          required='true'>
+          <common_name>
+            <loctext xml:lang='C'>
+              Filesystem path to Neutron Metadata .ini file
+            </loctext>
+          </common_name>
+        </prop_pattern>
+      </pg_pattern>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/neutron/files/neutron-server.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron-server.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,27 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/neutron/neutron-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,253 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+NEUTRON_CONF_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'rabbit_durable_queues'): ('DEFAULT', 'amqp_durable_queues'),
+    ('rpc_notifier2', 'topics'): ('DEFAULT', 'notification_topics'),
+    ('DEFAULT', 'matchmaker_ringfile'): ('matchmaker_ring', 'ringfile'),
+    # As of Juno, EVS now uses the standard quota driver
+    ('quotas', 'quota_driver'): (None, None)
+}
+
+DHCP_AGENT_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'dnsmasq_dns_server'): ('DEFAULT', 'dnsmasq_dns_servers'),
+}
+
+EVS_PLUGIN_MAPPINGS = {
+    # No longer referenced by the service
+    ('DATABASE', 'sql_connection'): (None, None),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/neutron'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/neutron/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/neutron/api-paste.ini')
+        modify_conf('/etc/neutron/dhcp_agent.ini', DHCP_AGENT_MAPPINGS)
+        modify_conf('/etc/neutron/l3_agent.ini')
+        modify_conf('/etc/neutron/neutron.conf', NEUTRON_CONF_MAPPINGS)
+        modify_conf('/etc/neutron/plugins/evs/evs_plugin.ini',
+                    EVS_PLUGIN_MAPPINGS)
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/neutron/neutron.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+        engine = sqlalchemy.create_engine(db_connection)
+
+        # migrate EVS to Neutron db
+        if engine.url.username != '%SERVICE_USER%':
+            check_call(['/usr/lib/neutron/evs-neutron-migration'])
+            print "EVS to Neutron migration complete"
+
+            if engine.url.drivername == 'mysql':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in neutron tables"
+
+            check_call(['/usr/bin/neutron-db-manage', '--config-file',
+                        '/etc/neutron/neutron.conf', '--config-file',
+                        '/etc/neutron/plugins/evs/evs_plugin.ini', 'stamp',
+                        'juno'])
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="neutron">
+
+  <service version="1" type="service"
+    name="application/openstack/neutron/neutron-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/neutron-upgrade %m">
+      <method_context>
+        <method_credential user='neutron' group='neutron' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.neutron' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.neutron' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.neutron' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Neutron Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          neutron-upgrade is a transient service to upgrade the Neutron
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/neutron/files/neutron.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,9 +1,19 @@
 [DEFAULT]
-# Default log level is INFO
-# verbose and debug has the same result.
-# One of them will set DEBUG log level output
+# Print more verbose output (set logging level to INFO instead of default WARNING level).
+# verbose = False
+
+# =========Start Global Config Option for Distributed L3 Router===============
+# Setting the "router_distributed" flag to "True" will default to the creation
+# of distributed tenant routers. The admin can override this flag by specifying
+# the type of the router on the create request (admin-only attribute). Default
+# value is "False" to support legacy mode (centralized) routers.
+#
+# router_distributed = False
+#
+# ===========End Global Config Option for Distributed L3 Router===============
+
+# Print debugging output (set logging level to DEBUG instead of default WARNING level).
 # debug = False
-# verbose = False
 
 # Where to store Neutron state files.  This directory must be writable by the
 # user executing the agent.
@@ -31,7 +41,7 @@
 
 # publish_errors = False
 
-# Address to bind the API server
+# Address to bind the API server to
 # bind_host = 0.0.0.0
 
 # Port the bind the API server to
@@ -44,14 +54,28 @@
 # extensions are in there you don't need to specify them here
 # api_extensions_path =
 
-# Neutron plugin provider module
+# (StrOpt) Neutron core plugin entrypoint to be loaded from the
+# neutron.core_plugins namespace. See setup.cfg for the entrypoint names of the
+# plugins included in the neutron source distribution. For compatibility with
+# previous versions, the class name of a plugin can be specified instead of its
+# entrypoint name.
+#
+# core_plugin =
+# Example: core_plugin = ml2
+#
 # The EVSNeutronPluginV2 Neutron plugin connects to the Solaris Elastic
 # Virtual Switch framework to provide virtual networking between Solaris
 # Zones.
 core_plugin = neutron.plugins.evs.plugin.EVSNeutronPluginV2
 
-# Advanced service modules
+# (ListOpt) List of service plugin entrypoints to be loaded from the
+# neutron.service_plugins namespace. See setup.cfg for the entrypoint names of
+# the plugins included in the neutron source distribution. For compatibility
+# with previous versions, the class name of a plugin can be specified instead
+# of its entrypoint name.
+#
 # service_plugins =
+# Example: service_plugins = router,firewall,lbaas,vpnaas,metering
 
 # Paste configuration file
 # api_paste_config = api-paste.ini
@@ -61,17 +85,26 @@
 # auth_strategy = keystone
 
 # Base MAC address. The first 3 octets will remain unchanged. If the
-# 4h octet is not 00, it will also used. The others will be
+# 4h octet is not 00, it will also be used. The others will be
 # randomly generated.
 # 3 octet
 # base_mac = fa:16:3e:00:00:00
 # 4 octet
 # base_mac = fa:16:3e:4f:00:00
 
+# DVR Base MAC address. The first 3 octets will remain unchanged. If the
+# 4th octet is not 00, it will also be used.  The others will be randomly
+# generated. The 'dvr_base_mac' *must* be different from 'base_mac' to
+# avoid mixing them up with MAC's allocated for tenant ports.
+# A 4 octet example would be dvr_base_mac = fa:16:3f:4f:00:00
+# The default is 3 octet
+# dvr_base_mac = fa:16:3f:00:00:00
+
 # Maximum amount of retries to generate a unique MAC address
 # mac_generation_retries = 16
 
-# DHCP Lease duration (in seconds)
+# DHCP Lease duration (in seconds).  Use -1 to
+# tell dnsmasq to use infinite lease times.
 # dhcp_lease_duration = 86400
 
 # Allow sending resource operation notification to DHCP agent
@@ -87,119 +120,14 @@
 # Attention: the following parameter MUST be set to False if Neutron is
 # being used in conjunction with nova security groups
 # allow_overlapping_ips = False
-# Ensure that configured gateway is on subnet
-# force_gateway_on_subnet = False
-
-
-# RPC configuration options. Defined in rpc __init__
-# The messaging module to use, defaults to kombu.
-# rpc_backend = neutron.openstack.common.rpc.impl_kombu
-# Size of RPC thread pool
-# rpc_thread_pool_size = 64
-# Size of RPC connection pool
-# rpc_conn_pool_size = 30
-# Seconds to wait for a response from call or multicall
-# rpc_response_timeout = 60
-# Seconds to wait before a cast expires (TTL). Only supported by impl_zmq.
-# rpc_cast_timeout = 30
-# Modules of exceptions that are permitted to be recreated
-# upon receiving exception data from an rpc call.
-# allowed_rpc_exception_modules = neutron.openstack.common.exception, nova.exception
-# AMQP exchange to connect to if using RabbitMQ or QPID
-# control_exchange = neutron
-
-# If passed, use a fake RabbitMQ provider
-# fake_rabbit = False
-
-# Configuration options if sending notifications via kombu rpc (these are
-# the defaults)
-# SSL version to use (valid only if SSL enabled)
-# kombu_ssl_version =
-# SSL key file (valid only if SSL enabled)
-# kombu_ssl_keyfile =
-# SSL cert file (valid only if SSL enabled)
-# kombu_ssl_certfile =
-# SSL certification authority file (valid only if SSL enabled)'
-# kombu_ssl_ca_certs =
-# IP address of the RabbitMQ installation
-# rabbit_host = localhost
-# Password of the RabbitMQ server
-# rabbit_password = guest
-# Port where RabbitMQ server is running/listening
-# rabbit_port = 5672
-# RabbitMQ single or HA cluster (host:port pairs i.e: host1:5672, host2:5672)
-# rabbit_hosts is defaulted to '$rabbit_host:$rabbit_port'
-# rabbit_hosts = localhost:5672
-# User ID used for RabbitMQ connections
-# rabbit_userid = guest
-# Location of a virtual RabbitMQ installation.
-# rabbit_virtual_host = /
-# Maximum retries with trying to connect to RabbitMQ
-# (the default of 0 implies an infinite retry count)
-# rabbit_max_retries = 0
-# RabbitMQ connection retry interval
-# rabbit_retry_interval = 1
-# Use HA queues in RabbitMQ (x-ha-policy: all).You need to
-# wipe RabbitMQ database when changing this option. (boolean value)
-# rabbit_ha_queues = false
-
-# QPID
-# rpc_backend=neutron.openstack.common.rpc.impl_qpid
-# Qpid broker hostname
-# qpid_hostname = localhost
-# Qpid broker port
-# qpid_port = 5672
-# Qpid single or HA cluster (host:port pairs i.e: host1:5672, host2:5672)
-# qpid_hosts is defaulted to '$qpid_hostname:$qpid_port'
-# qpid_hosts = localhost:5672
-# Username for qpid connection
-# qpid_username = ''
-# Password for qpid connection
-# qpid_password = ''
-# Space separated list of SASL mechanisms to use for auth
-# qpid_sasl_mechanisms = ''
-# Seconds between connection keepalive heartbeats
-# qpid_heartbeat = 60
-# Transport to use, either 'tcp' or 'ssl'
-# qpid_protocol = tcp
-# Disable Nagle algorithm
-# qpid_tcp_nodelay = True
-
-# ZMQ
-# rpc_backend=neutron.openstack.common.rpc.impl_zmq
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP.
-# The "host" option should point or resolve to this address.
-# rpc_zmq_bind_address = *
-
-# ============ Notification System Options =====================
-
-# Notifications can be sent when network/subnet/port are create, updated or deleted.
-# There are three methods of sending notifications: logging (via the
-# log_file directive), rpc (via a message queue) and
-# noop (no notifications sent, the default)
-
-# Notification_driver can be defined multiple times
-# Do nothing driver
-# notification_driver = neutron.openstack.common.notifier.no_op_notifier
-# Logging driver
-# notification_driver = neutron.openstack.common.notifier.log_notifier
-# RPC driver. DHCP agents needs it.
-notification_driver = neutron.openstack.common.notifier.rpc_notifier
-
-# default_notification_level is used to form actual topic name(s) or to set logging level
-# default_notification_level = INFO
-
-# default_publisher_id is a part of the notification payload
-# host = myhost.com
-# default_publisher_id = $host
-
-# Defined in rpc_notifier, can be comma separated values.
-# The actual topic names will be %s.%(default_notification_level)s
-# notification_topics = notifications
+# Ensure that configured gateway is on subnet. For IPv6, validate only if
+# gateway is not a link local address. Deprecated, to be removed during the
+# K release, at which point the check will be mandatory.
+# force_gateway_on_subnet = True
 
 # Default maximum number of items returned in a single response,
 # value == infinite and value < 0 means no max limit, and value must
-# greater than 0. If the number of items requested is greater than
+# be greater than 0. If the number of items requested is greater than
 # pagination_max_limit, server will just return pagination_max_limit
 # of number of items.
 # pagination_max_limit = -1
@@ -213,10 +141,13 @@
 # Maximum number of fixed ips per port
 # max_fixed_ips_per_port = 5
 
+# Maximum number of routes per router
+# max_routes = 30
+
 # =========== items for agent management extension =============
 # Seconds to regard the agent as down; should be at least twice
 # report_interval, to be sure the agent is down for good
-# agent_down_time = 9
+# agent_down_time = 75
 # ===========  end of items for agent management extension =====
 
 # =========== items for agent scheduler extension =============
@@ -236,17 +167,57 @@
 # routers to first L3 agent which sends sync_routers message to neutron server
 # router_auto_schedule = True
 
+# Allow automatic rescheduling of routers from dead L3 agents with
+# admin_state_up set to True to alive agents.
+# allow_automatic_l3agent_failover = False
+
 # Number of DHCP agents scheduled to host a network. This enables redundant
 # DHCP agents for configured networks.
 # dhcp_agents_per_network = 1
 
 # ===========  end of items for agent scheduler extension =====
 
+# =========== items for l3 extension ==============
+# Enable high availability for virtual routers.
+# l3_ha = False
+#
+# Maximum number of l3 agents which a HA router will be scheduled on. If it
+# is set to 0 the router will be scheduled on every agent.
+# max_l3_agents_per_router = 3
+#
+# Minimum number of l3 agents which a HA router will be scheduled on. The
+# default value is 2.
+# min_l3_agents_per_router = 2
+#
+# CIDR of the administrative network if HA mode is enabled
+# l3_ha_net_cidr = 169.254.192.0/18
+# =========== end of items for l3 extension =======
+
 # =========== WSGI parameters related to the API server ==============
 # Number of separate worker processes to spawn.  The default, 0, runs the
 # worker thread in the current process.  Greater than 0 launches that number of
 # child processes as workers.  The parent process manages them.
 # api_workers = 0
+
+# Number of separate RPC worker processes to spawn.  The default, 0, runs the
+# worker thread in the current process.  Greater than 0 launches that number of
+# child processes as RPC workers.  The parent process manages them.
+# This feature is experimental until issues are addressed and testing has been
+# enabled for various plugins for compatibility.
+# rpc_workers = 0
+
+# Timeout for client connections socket operations. If an
+# incoming connection is idle for this number of seconds it
+# will be closed. A value of '0' means wait forever. (integer
+# value)
+# client_socket_timeout = 900
+
+# wsgi keepalive option. Determines if connections are allowed to be held open
+# by clients after a request is fulfilled. A value of False will ensure that
+# the socket connection will be explicitly closed once a response has been
+# sent to the client.
+# wsgi_keep_alive = True
+
 # Sets the value of TCP_KEEPIDLE in seconds to use for each server socket when
 # starting API server. Not supported on OS X.
 # tcp_keepidle = 600
@@ -257,6 +228,9 @@
 # Number of backlog requests to configure the socket with.
 # backlog = 4096
 
+# Max header line to accommodate large tokens
+# max_header_line = 16384
+
 # Enable SSL on the API server
 # use_ssl = False
 
@@ -273,35 +247,314 @@
 # ssl_ca_file = /path/to/cafile
 # ======== end of WSGI parameters related to the API server ==========
 
+
+# ======== neutron nova interactions ==========
+# Send notification to nova when port status is active.
+# notify_nova_on_port_status_changes = True
+
+# Send notifications to nova when port data (fixed_ips/floatingips) change
+# so nova can update it's cache.
+# notify_nova_on_port_data_changes = True
+
+# URL for connection to nova (Only supports one nova region currently).
+# nova_url = http://127.0.0.1:8774/v2
+
+# Name of nova region to use. Useful if keystone manages more than one region
+# nova_region_name =
+
+# Username for connection to nova in admin context
+# nova_admin_username =
+
+# The uuid of the admin nova tenant
+# nova_admin_tenant_id =
+
+# Password for connection to nova in admin context.
+# nova_admin_password =
+
+# Authorization URL for connection to nova in admin context.
+# nova_admin_auth_url =
+
+# CA file for novaclient to verify server certificates
+# nova_ca_certificates_file =
+
+# Boolean to control ignoring SSL errors on the nova url
+# nova_api_insecure = False
+
+# Number of seconds between sending events to nova if there are any events to send
+# send_events_interval = 2
+
+# ======== end of neutron nova interactions ==========
+
+#
+# Options defined in oslo.messaging
+#
+
+# Use durable queues in amqp. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
+#amqp_durable_queues=false
+
+# Auto-delete queues in amqp. (boolean value)
+#amqp_auto_delete=false
+
+# Size of RPC connection pool. (integer value)
+#rpc_conn_pool_size=30
+
+# Qpid broker hostname. (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port. (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs. (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for Qpid connection. (string value)
+#qpid_username=
+
+# Password for Qpid connection. (string value)
+#qpid_password=
+
+# Space separated list of SASL mechanisms to use for auth.
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats. (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl'. (string value)
+#qpid_protocol=tcp
+
+# Whether to disable the Nagle algorithm. (boolean value)
+#qpid_tcp_nodelay=true
+
+# The 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
+
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some
+# distributions. (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled). (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled). (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL
+# enabled). (string value)
+#kombu_ssl_ca_certs=
+
+# How long to wait before reconnecting in response to an AMQP
+# consumer cancel notification. (floating point value)
+#kombu_reconnect_delay=1.0
+
+# The RabbitMQ broker address where a single node is used.
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used.
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs. (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# Connect over SSL for RabbitMQ. (boolean value)
+#rabbit_use_ssl=false
+
+# The RabbitMQ userid. (string value)
+#rabbit_userid=guest
+
+# The RabbitMQ password. (string value)
+#rabbit_password=guest
+
+# the RabbitMQ login method (string value)
+#rabbit_login_method=AMQPLAIN
+
+# The RabbitMQ virtual host. (string value)
+#rabbit_virtual_host=/
+
+# How frequently to retry connecting with RabbitMQ. (integer
+# value)
+#rabbit_retry_interval=1
+
+# How long to backoff for between retries when connecting to
+# RabbitMQ. (integer value)
+#rabbit_retry_backoff=2
+
+# Maximum number of RabbitMQ connection retries. Default is 0
+# (infinite retry count). (integer value)
+#rabbit_max_retries=0
+
+# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
+# this option, you must wipe the RabbitMQ database. (boolean
+# value)
+#rabbit_ha_queues=false
+
+# If passed, use a fake RabbitMQ provider. (boolean value)
+#fake_rabbit=false
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
+
+# MatchMaker driver. (string value)
+#rpc_zmq_matchmaker=oslo.messaging._drivers.matchmaker.MatchMakerLocalhost
+
+# ZeroMQ receiver listening port. (integer value)
+#rpc_zmq_port=9501
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
+
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=oslo
+
+# Seconds to wait before a cast expires (TTL). Only supported
+# by impl_zmq. (integer value)
+#rpc_cast_timeout=30
+
+# Heartbeat frequency. (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+# Size of RPC greenthread pool. (integer value)
+#rpc_thread_pool_size=64
+
+# Driver or drivers to handle sending notifications. (multi
+# valued)
+#notification_driver=
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+#notification_topics=notifications
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
+
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include qpid and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=openstack
+
+
+[matchmaker_redis]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Host to locate redis. (string value)
+#host=127.0.0.1
+
+# Use this port to connect to redis host. (integer value)
+#port=6379
+
+# Password for Redis server (optional). (string value)
+#password=<None>
+
+
+[matchmaker_ring]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Matchmaker ring file (JSON). (string value)
+# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
+#ringfile=/etc/oslo/matchmaker_ring.json
+
 [quotas]
-# resource name(s) that are supported in quota features
+# Default driver to use for quota checks
+# quota_driver = neutron.db.quota_db.DbQuotaDriver
+
+# Resource name(s) that are supported in quota features
 # quota_items = network,subnet,port
 
-# default number of resource allowed per tenant, minus for unlimited
+# Default number of resource allowed per tenant. A negative value means
+# unlimited.
 # default_quota = -1
 
-# number of networks allowed per tenant, and minus means unlimited
+# Number of networks allowed per tenant. A negative value means unlimited.
 # quota_network = 10
 
-# number of subnets allowed per tenant, and minus means unlimited
+# Number of subnets allowed per tenant. A negative value means unlimited.
 # quota_subnet = 10
 
-# number of ports allowed per tenant, and minus means unlimited
+# Number of ports allowed per tenant. A negative value means unlimited.
 # quota_port = 50
 
-# number of security groups allowed per tenant, and minus means unlimited
+# Number of security groups allowed per tenant. A negative value means
+# unlimited.
 # quota_security_group = 10
 
-# number of security group rules allowed per tenant, and minus means unlimited
+# Number of security group rules allowed per tenant. A negative value means
+# unlimited.
 # quota_security_group_rule = 100
 
-# default driver to use for quota checks
-# The default quota driver, neutron.db.quota_db.DbQuotaDriver, supports
-# static quotas defined in the [quotas] section. The Elastic Virtual
-# Switch plugin supports per-tenant quota limits via the quota extension
-# API. To enable per-tenant quotas, the quota_driver should be set to
-# neutron.plugins.evs.db.quotas_db.EVSDbQuotaDriver.
-quota_driver = neutron.plugins.evs.db.quotas_db.EVSDbQuotaDriver
+# Number of vips allowed per tenant. A negative value means unlimited.
+# quota_vip = 10
+
+# Number of pools allowed per tenant. A negative value means unlimited.
+# quota_pool = 10
+
+# Number of pool members allowed per tenant. A negative value means unlimited.
+# The default is unlimited because a member is not a real resource consumer
+# on Openstack. However, on back-end, a member is a resource consumer
+# and that is the reason why quota is possible.
+# quota_member = -1
+
+# Number of health monitors allowed per tenant. A negative value means
+# unlimited.
+# The default is unlimited because a health monitor is not a real resource
+# consumer on Openstack. However, on back-end, a member is a resource consumer
+# and that is the reason why quota is possible.
+# quota_health_monitor = -1
+
+# Number of routers allowed per tenant. A negative value means unlimited.
+# quota_router = 10
+
+# Number of floating IPs allowed per tenant. A negative value means unlimited.
+# quota_floatingip = 50
+
+# Number of firewalls allowed per tenant. A negative value means unlimited.
+# quota_firewall = 1
+
+# Number of firewall policies allowed per tenant. A negative value means
+# unlimited.
+# quota_firewall_policy = 1
+
+# Number of firewall rules allowed per tenant. A negative value means
+# unlimited.
+# quota_firewall_rule = 100
 
 [agent]
 # Use "sudo neutron-rootwrap /etc/neutron/rootwrap.conf" to use the real
@@ -312,13 +565,13 @@
 # =========== items for agent management extension =============
 # seconds between nodes reporting state to server; should be less than
 # agent_down_time, best if it is half or less than agent_down_time
-# report_interval = 4
+# report_interval = 30
 
 # ===========  end of items for agent management extension =====
 
 [keystone_authtoken]
-auth_uri = http://127.0.0.1:5000/v2.0
-identity_uri = http://127.0.0.1:35357
+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%
@@ -330,7 +583,15 @@
 # connection = mysql://root:[email protected]:3306/neutron
 # Replace 127.0.0.1 above with the IP address of the database used by the
 # main neutron server. (Leave it as is if the database runs on this host.)
-# connection = sqlite://
+# NOTE: In deployment the [database] section and its connection attribute may
+# be set in the corresponding core plugin '.ini' file. However, it is suggested
+# to put the [database] section and its connection attribute in this
+# configuration file.
+connection = mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/neutron
+
+# Database engine for which script will be generated when using offline
+# migration
+# engine =
 
 # The SQLAlchemy connection string used to connect to the slave database
 # slave_connection =
@@ -368,11 +629,26 @@
 # Specify service providers (drivers) for advanced services like loadbalancer, VPN, Firewall.
 # Must be in form:
 # service_provider=<service_type>:<name>:<driver>[:default]
-# List of allowed service type include LOADBALANCER, FIREWALL, VPN
+# List of allowed service types includes LOADBALANCER, FIREWALL, VPN
 # Combination of <service type> and <name> must be unique; <driver> must also be unique
-# this is multiline option, example for default provider:
+# This is multiline option, example for default provider:
 # service_provider=LOADBALANCER:name:lbaas_plugin_driver_path:default
 # example of non-default provider:
 # service_provider=FIREWALL:name2:firewall_driver_path
 # --- Reference implementations ---
 service_provider=LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
+service_provider=VPN:openswan:neutron.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default
+# In order to activate Radware's lbaas driver you need to uncomment the next line.
+# If you want to keep the HA Proxy as the default lbaas driver, remove the attribute default from the line below.
+# Otherwise comment the HA Proxy line
+# service_provider = LOADBALANCER:Radware:neutron.services.loadbalancer.drivers.radware.driver.LoadBalancerDriver:default
+# uncomment the following line to make the 'netscaler' LBaaS provider available.
+# service_provider=LOADBALANCER:NetScaler:neutron.services.loadbalancer.drivers.netscaler.netscaler_driver.NetScalerPluginDriver
+# Uncomment the following line (and comment out the OpenSwan VPN line) to enable Cisco's VPN driver.
+# service_provider=VPN:cisco:neutron.services.vpn.service_drivers.cisco_ipsec.CiscoCsrIPsecVPNDriver:default
+# Uncomment the line below to use Embrane heleos as Load Balancer service provider.
+# service_provider=LOADBALANCER:Embrane:neutron.services.loadbalancer.drivers.embrane.driver.EmbraneLbaas:default
+# Uncomment the line below to use the A10 Networks LBaaS driver.  Requires 'pip install a10-neutron-lbaas'.
+#service_provider = LOADBALANCER:A10Networks:neutron.services.loadbalancer.drivers.a10networks.driver_v1.ThunderDriver:default
+# Uncomment the following line to test the LBaaS v2 API _WITHOUT_ a real backend
+# service_provider = LOADBALANCER:LoggingNoop:neutron.services.loadbalancer.drivers.logging_noop.driver.LoggingNoopLoadBalancerDriver:default
--- a/components/openstack/neutron/files/neutron.exec_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron.exec_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,3 +1,6 @@
+OpenStack Network Management:solaris:cmd:RO::/usr/bin/neutron-db-manage:\
+uid=neutron;gid=neutron
+
 neutron-agent:solaris:cmd:RO::/usr/sbin/dladm:\
 privs=net_icmpaccess,net_privaddr,net_rawaccess,proc_audit,sys_dl_config
 
--- a/components/openstack/neutron/files/neutron.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,12 +1,9 @@
 OpenStack Network Management:RO::\
 Manage OpenStack Neutron:\
-auths=solaris.admin.edit/etc/neutron/api-paste.ini,\
-solaris.admin.edit/etc/neutron/dhcp_agent.ini,\
-solaris.admin.edit/etc/neutron/l3_agent.ini,\
-solaris.admin.edit/etc/neutron/logging.conf,\
-solaris.admin.edit/etc/neutron/neutron.conf,\
-solaris.admin.edit/etc/neutron/plugins/evs/evs_plugin.ini,\
-solaris.admin.edit/etc/neutron/policy.json,\
+auths=solaris.admin.edit/etc/neutron/*.conf,\
+solaris.admin.edit/etc/neutron/*.ini,\
+solaris.admin.edit/etc/neutron/*.json,\
+solaris.admin.edit/etc/neutron/plugins/*/*.ini,\
 solaris.smf.manage.neutron,\
 solaris.smf.value.neutron;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
@@ -16,5 +13,7 @@
 neutron-agent:RO::\
 Do not assign to users. \
 Commands required for application/openstack/neutron agents:\
-auths=solaris.network.interface.config;\
+auths=solaris.network.interface.config,\
+solaris.smf.manage.routing,\
+solaris.smf.value.routing;\
 profiles=Elastic Virtual Switch Administration,IP Filter Management
--- a/components/openstack/neutron/files/neutron.user_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/files/neutron.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,1 +1,1 @@
-neutron::RO::profiles=neutron-agent
+neutron::RO::profiles=OpenStack Network Management,neutron-agent
--- a/components/openstack/neutron/neutron.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/neutron.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,10 +28,10 @@
 set name=pkg.summary value="OpenStack Neutron (Networking Service)"
 set name=pkg.description \
     value="Neutron provides an API to dynamically request and configure virtual networks. These networks connect 'interfaces' from other OpenStack services (e.g., VNICs from Nova VMs). The Neutron API supports extensions to provide advanced network capabilities (e.g., QoS, ACLs, network monitoring, etc)."
-set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Neutron, the OpenStack virtual network service"
-set name=com.oracle.info.tpno value=17716
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -40,8 +40,11 @@
 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/059
+set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/059 \
+    value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 dir  path=etc/neutron owner=neutron group=neutron mode=0700
 file etc/api-paste.ini path=etc/neutron/api-paste.ini owner=neutron \
     group=neutron mode=0644 overlay=allow preserve=renamenew
@@ -49,14 +52,40 @@
     group=neutron mode=0644 overlay=allow preserve=renamenew
 file files/l3_agent.ini path=etc/neutron/l3_agent.ini owner=neutron \
     group=neutron mode=0644 overlay=allow preserve=renamenew
+file files/metadata_agent.ini path=etc/neutron/metadata_agent.ini \
+    owner=neutron group=neutron mode=0644 overlay=allow preserve=renamenew
 file files/neutron.conf path=etc/neutron/neutron.conf owner=neutron \
     group=neutron mode=0644 \
     original_name=cloud/openstack/neutron:etc/neutron/quantum.conf \
     overlay=allow preserve=renamenew
-dir  path=etc/neutron/plugins owner=neutron group=neutron
-dir  path=etc/neutron/plugins/evs owner=neutron group=neutron
 file files/evs_plugin.ini path=etc/neutron/plugins/evs/evs_plugin.ini \
     owner=neutron group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_arista.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_brocade.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_cisco.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_fslsdn.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_mlnx.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_ncs.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_odl.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_ofa.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/neutron/plugins/ml2/ml2_conf_sriov.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=renamenew
+file etc/neutron/plugins/nuage/nuage_plugin.ini \
+    path=etc/neutron/plugins/ml2/nuage_plugin.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
+file etc/neutron/plugins/bigswitch/restproxy.ini \
+    path=etc/neutron/plugins/ml2/restproxy.ini owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=renamenew
 file etc/policy.json path=etc/neutron/policy.json owner=neutron group=neutron \
     mode=0644 overlay=allow preserve=renamenew
 link path=etc/quantum target=./neutron
@@ -68,24 +97,34 @@
     path=etc/security/prof_attr.d/cloud:openstack:neutron group=sys
 file files/neutron.user_attr path=etc/user_attr.d/cloud:openstack:neutron \
     group=sys
-file files/neutron-dhcp-agent.xml \
-    path=lib/svc/manifest/application/openstack/neutron-dhcp-agent.xml
-file files/neutron-l3-agent.xml \
-    path=lib/svc/manifest/application/openstack/neutron-l3-agent.xml
-file files/neutron-server.xml \
-    path=lib/svc/manifest/application/openstack/neutron-server.xml
+file path=lib/svc/manifest/application/openstack/neutron-dhcp-agent.xml
+file path=lib/svc/manifest/application/openstack/neutron-l3-agent.xml
+file path=lib/svc/manifest/application/openstack/neutron-metadata-agent.xml
+file path=lib/svc/manifest/application/openstack/neutron-server.xml
+file path=lib/svc/manifest/application/openstack/neutron-upgrade.xml
 file files/neutron-dhcp-agent path=lib/svc/method/neutron-dhcp-agent
 file files/neutron-l3-agent path=lib/svc/method/neutron-l3-agent
+file files/neutron-metadata-agent path=lib/svc/method/neutron-metadata-agent
 file files/neutron-server path=lib/svc/method/neutron-server
+file files/neutron-upgrade path=lib/svc/method/neutron-upgrade
+file path=usr/bin/neutron-db-manage
+file path=usr/lib/neutron/evs-neutron-migration mode=0555
 file usr/bin/neutron-dhcp-agent path=usr/lib/neutron/neutron-dhcp-agent \
     mode=0555
 file usr/bin/neutron-l3-agent path=usr/lib/neutron/neutron-l3-agent mode=0555
+file usr/bin/neutron-metadata-agent \
+    path=usr/lib/neutron/neutron-metadata-agent mode=0555
+file usr/bin/neutron-ns-metadata-proxy \
+    path=usr/lib/neutron/neutron-ns-metadata-proxy mode=0555
 file usr/bin/neutron-server path=usr/lib/neutron/neutron-server mode=0555
+file usr/bin/neutron-usage-audit path=usr/lib/neutron/neutron-usage-audit \
+    mode=0555
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/__init__.py
@@ -97,6 +136,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/firewall.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/l2population_rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/l3_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/l3_ha_agent.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/async_process.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/daemon.py
@@ -104,9 +144,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/external_process.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/interface.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/ip_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/ipset_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/iptables_firewall.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/iptables_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/keepalived.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/ovs_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/ovsdb_monitor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/polling.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/ra.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/linux/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/metadata/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/metadata/agent.py
@@ -120,6 +165,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/solaris/interface.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/solaris/ipfilters_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/solaris/net_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/agent/solaris/ra.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/api_common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/extensions.py
@@ -128,22 +174,31 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/handlers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/handlers/dhcp_rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/handlers/dvr_rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/handlers/l3_rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/rpc/handlers/securitygroups_rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/attributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/resource_helper.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/v2/router.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/views/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/api/views/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/auth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/cmd/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/cmd/sanity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/cmd/sanity/checks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/cmd/sanity_check.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/cmd/usage_audit.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/exceptions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/legacy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/ipv6_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/log.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/common/test_lib.py
@@ -155,96 +210,117 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/agentschedulers_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/allowedaddresspairs_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/common_db_mixin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/db_base_plugin_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/dhcp_rpc_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/dvr_mac_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/external_net_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/extradhcpopt_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/extraroute_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/firewall/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/firewall/firewall_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_agentschedulers_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_attrs_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_dvr_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_dvrscheduler_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_gwmode_db.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_rpc_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_hamode_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/l3_hascheduler_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/loadbalancer/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/loadbalancer/loadbalancer_db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/metering/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/metering/metering_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/metering/metering_rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic.ini
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/common_ext_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/agent_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/brocade_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/cisco_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/core_init_ops.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/env.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/firewall_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/heal_script.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/l3_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/lb_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/loadbalancer_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/metering_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/ml2_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/mlnx_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/nec_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/other_extensions_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/other_plugins_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/ovs_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/portsec_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/ryu_init_ops.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/script.py.mako
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1064e98b7917_nec_pf_port_del.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1149d7de0cfa_port_security.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/11c6e18605c8_pool_monitor_status_.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/128e042a2b68_ext_gw_mode.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1341ed32cc1e_nvp_netbinding_update.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/13de305df56e_add_nec_pf_name.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/14f24494ca31_arista_ml2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/176a85fc7d79_add_portbindings_db.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1b693c095aa3_quota_ext_db_grizzly.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1c33fa3cd1a1_extra_route_config.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1d76643bcec4_nvp_netbinding.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1efb85914233_allowedaddresspairs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2032abe8edac_lbaas_add_status_des.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/20ae61555e95_ml2_gre_type_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2528ceb28230_nec_pf_netid_fix.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/263772d65691_cisco_db_cleanup_2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/27ef74513d33_quota_in_plumgrid_pl.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2a3bae1ceb8_nec_port_binding.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2a6d0b51f4bb_cisco_plugin_cleanup.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2c4af419145b_l3_support.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/32a65f71af51_ml2_portbinding.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/32b517556ec9_remove_tunnelip_mode.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/338d7508968c_vpnaas_peer_address_.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/35c7c198ddea_lbaas_healthmon_del_status.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/363468ac592c_nvp_network_gw.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/38335592a0dc_nvp_portmap.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/38fc1f6789f8_cisco_n1kv_overlay.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/39cf3f799352_fwaas_havana_2_model.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3a520dd165d0_cisco_nexus_multi_switch.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3b54bf9e29f7_nec_plugin_sharednet.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3c6e57a23db4_add_multiprovider.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3cabb850f4a5_table_to_track_port_.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3cb5d900c5de_security_groups.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3cbf70257c28_nvp_mac_learning.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3d6fae8b70b0_nvp_lbaas_plugin.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3ed8f075e38a_nvp_fwaas_plugin.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/40dffbf4b549_nvp_dist_router.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/45680af419f9_nvp_qos.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/4692d074d587_agent_scheduler.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/46a0efbd8f0_cisco_n1kv_multisegm.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/477a4488d3f4_ml2_vxlan_type_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/48b6f43f7471_service_type.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/49332180ca96_ryu_plugin_update.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/4a666eb208c2_service_router.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/511471cc46b_agent_ext_model_supp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/51b4de912379_cisco_nexus_ml2_mech.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/52c5e4a18807_lbaas_pool_scheduler.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/52ff27f7567a_support_for_vpnaas.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/53bbd27ec841_extra_dhcp_opts_supp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/54c2c487e913_lbaas.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/557edfc53098_new_service_types.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/569e98a8132b_metering.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5918cbddab04_add_tables_for_route.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5a875d0e5c_ryu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5ac71e65402c_ml2_initial.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/63afba73813_ovs_tunnelendpoints_id_unique.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/66a59a7f516_nec_openflow_router.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/86cf4d88bd3_remove_bigswitch_por.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/secgroup_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/10cd28e692e9_nuage_extraroute.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/117643811bca_nec_delete_ofc_mapping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1421183d533f_nsx_dhcp_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/157a5d299379_ml2_binding_profile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1680e1f0c4dc_remove_cisco_nexus_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/16a27a58e093_ext_l3_ha_mode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/19180cf98af6_nsx_gw_devices.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1b2580001654_nsx_sec_group_mappin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1b837a7125a9_cisco_apic_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1d6ee1ae5da5_db_healing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1e5dd1d09b22_set_not_null_fields_lb_stats.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/1fcfc149aca4_agents_unique_by_type_and_host.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2026156eab2f_l2_dvr_models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/236b90af57ab_ml2_refactor_for_dynamic_segments.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2447ad0e9585_add_ipv6_mode_props.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/24c7ea5160d7_cisco_csr_vpnaas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/27cc183af192_ml2_vnic_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2db5203cb7a9_nuage_floatingip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/2eeaf963a447_floatingip_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/31d7f831a591_add_constraint_for_routerid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/327ee5fde2c7_set_innodb_engine.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/32f3915891fd_cisco_apic_driver_update.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/33c3db036fe4_set_length_of_description_field_metering.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/33dd0a9fa487_embrane_lbaas_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/37f322991f59_nuage_removing_mapping_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3927f7f7c456_l3_extension_distributed_mode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3b85b693a95f_remove_service_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3c346828361e_metering_label_shared.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3d2585038b95_vmware_nsx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/3d3cb89d84ee_nsx_switch_mappings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/492a106273f8_brocade_ml2_mech_dri.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/4ca36cfc898c_nsx_router_mappings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/4eba2f05c2f4_correct_vxlan_endpoint_primary_key.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/4eca4a84f08a_remove_ml2_cisco_cred_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/50e86cb2637a_nsx_mappings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/538732fa21e1_nec_rename_quantum_id_to_neutron_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/544673ac99ab_add_router_port_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5446f2a45467_set_server_default.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/54f7549a0e5f_set_not_null_peer_address.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5589aa32bf80_l3_dvr_scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/58fe87a01143_cisco_csr_routing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/5ac1c354a051_n1kv_segment_alloc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/6be312499f9_set_not_null_vlan_id_cisco.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/81c553f3776c_bsn_consistencyhashes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/86d6d9776e2b_cisco_apic_driver_update_l3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/884573acbf1c_unify_nsx_router_extra_attributes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/HEAD
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/README
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/b7a8863760e_rm_cisco_vlan_bindin.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/c88b6b5fea3_cisco_n1kv_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/e6b16a30d97_cisco_provider_nets.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/f489cf14a79c_lbaas_havana.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/f9263d6df56_remove_dhcp_lease.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/folsom_initial.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/grizzly_release.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/havana_release.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/aae5706a396_nuage_provider_networks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/abc88c33f74f_lb_stats_needs_bigint.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/b65aa907aec_set_length_of_protocol_field.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/d06e871c0d5_set_admin_state_up_not_null_ml2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/e197124d4b9_add_unique_constrain.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/e766b19a3bb_nuage_initial.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/havana_initial.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/icehouse_release.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/versions/juno_release.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/vmware_init_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/alembic_migrations/vpn_init_ops.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/migrate_to_ml2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/models/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/models/frozen.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/migration/models/head.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/model_base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/models_v2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/portbindings_base.py
@@ -259,6 +335,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/sqlalchemyutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/vpn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/vpn/vpn_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/db/vpn/vpn_validator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/debug/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/debug/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/debug/commands.py
@@ -268,6 +345,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/agent.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/allowedaddresspairs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/dhcpagentscheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/dvr.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/external_net.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/extra_dhcp_opt.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/extraroute.py
@@ -275,6 +353,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/flavor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/l3.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/l3_ext_gw_mode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/l3_ext_ha_mode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/l3agentscheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/lbaas_agentscheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/loadbalancer.py
@@ -289,69 +368,29 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/securitygroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/servicetype.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/extensions/vpnaas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/hacking/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/hacking/checks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/hooks.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ar/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/bg_BG/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/bs/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ca/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/cs/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/da/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/de/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/en_AU/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/en_GB/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/en_US/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/es/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/es_MX/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/fi_FI/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/fil/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/fr/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/hi/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/hr/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/hu/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/id/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/it/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/it_IT/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ja/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ka_GE/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/kn/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ko/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ko_KR/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ms/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/nb/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ne/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/nl_NL/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/pl_PL/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/pt/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/pt_BR/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ro/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ru/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/ru_RU/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/sk/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/sl_SI/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/sw_KE/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/tl/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/tl_PH/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/tr_TR/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/uk/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/vi_VN/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/zh_CN/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/zh_HK/LC_MESSAGES/neutron.po
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/locale/zh_TW/LC_MESSAGES/neutron.po
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/neutron_plugin_base_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/notifiers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/notifiers/nova.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/cache/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/cache/_backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/cache/_backends/memory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/cache/backends.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/cache/cache.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/context.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/sqlalchemy/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/sqlalchemy/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/sqlalchemy/session.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/db/sqlalchemy/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/eventlet_backdoor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/excutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fixture/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fixture/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fixture/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fixture/mockpatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/fixture/moxstubout.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/jsonutils.py
@@ -359,51 +398,177 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/log.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/catch_errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/correlation_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/debug.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/request_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/middleware/sizelimit.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/network_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/log_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/rabbit_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/rpc_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/rpc_notifier2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/notifier/test_notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/periodic_task.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/processutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rootwrap/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rootwrap/cmd.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rootwrap/filters.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rootwrap/wrapper.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/amqp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/dispatcher.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/impl_fake.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/impl_kombu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/impl_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/impl_zmq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/matchmaker.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/matchmaker_redis.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/matchmaker_ring.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/proxy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/serializer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/rpc/zmq_receiver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/sslutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/systemd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/threadgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/openstack/common/versionutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/agent/restproxy_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/db/consistency_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/db/porttracker_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/extensions/routerrule.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/l3_router_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/routerrule_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/servermanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/vcsversion.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/bigswitch/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/NeutronPlugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/README.md
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/db/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/nos/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/nos/fake_nosdriver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/nos/nctemplates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/nos/nosdriver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/brocade/vlanbm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/cfg_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/cfg_exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/cisco_csr1kv_snippets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/devicedriver_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/driver_mgr.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_drivers/dummy_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/device_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/service_helpers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/cfg_agent/service_helpers/routing_svc_helper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/cisco_constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/cisco_credentials_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/cisco_exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/cisco_faults.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/l3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/l3/device_handling_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/l3/l3_models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/l3/l3_router_appliance_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/n1kv_db_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/n1kv_models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/network_db_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/db/network_models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/_credential_view.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/_qos_view.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/credential.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/n1kv.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/network_profile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/policy_profile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/extensions/qos.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l2device_plugin_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/configdrive_templates/csr1kv_cfg_template
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/hosting_device_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/hosting_device_drivers/csr1kv_hd_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/plugging_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/plugging_drivers/n1kv_plugging_constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/plugging_drivers/n1kv_trunking_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/rpc/devices_cfgagent_rpc_cb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/rpc/l3_router_cfgagent_rpc_cb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/rpc/l3_router_rpc_joint_agent_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/l3/service_vm_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/models/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/models/virt_phy_sw_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/n1kv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/n1kv/n1kv_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/network_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/service_plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/cisco/service_plugins/cisco_router_plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/common/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/agent/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/agent/operations/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/agent/operations/router_operations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/base_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/contexts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/operation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/fake/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/fake/fake_l2_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/fake/fakeplugin_support.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/ml2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/ml2/ml2_support.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/support_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/l2base/support_exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/plugins/embrane_fake_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/embrane/plugins/embrane_ml2_plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/db/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/db/l3nat.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/db/quotas_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/migrate/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/migrate/havana_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/evs/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/security_groups_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/utilsfactory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent/utilsv2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/agent_notifier_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/hyperv_neutron_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/hyperv/rpc_callbacks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/agent/sdnve_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/sdnve_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/sdnve_api_fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ibm/sdnve_neutron_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/linuxbridge/db/l2network_models_v2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/common/__init__.py
@@ -412,6 +577,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/meta_models_v2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/meta_neutron_plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/metaplugin/proxy_neutron_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/agent/midonet_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/common/net_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/midonet_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/midonet/plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/common/__init__.py
@@ -420,20 +593,46 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/driver_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/driver_context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/README.odl
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/arista_l3_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/arista/mechanism_arista.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/README.md
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/db/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/mechanism_brocade.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/nos/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/nos/nctemplates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/brocade/nos/nosdriver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/config.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/constants.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/credentials_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/exceptions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/mech_cisco_nexus.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/network_db_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/network_models_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus_db_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus_models_v2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus_network_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus_snippets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/apic_model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/apic_sync.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/apic_topology.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/apic/mechanism_apic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/mech_cisco_nexus.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/nexus_db_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/nexus_models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/nexus_network_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/cisco/nexus/nexus_snippets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/freescale/README.fslsdn
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/freescale/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/freescale/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/freescale/mechanism_fslsdn.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/constants.py
@@ -441,16 +640,21 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/mech_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/l2pop/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_agent.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/README
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/config.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/db.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/exceptions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_arista/mechanism_arista.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_bigswitch/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_bigswitch/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_hyperv.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_linuxbridge.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_nuage/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_nuage/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_ofagent.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_openvswitch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_sriov/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mech_sriov/mech_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mechanism_ncs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mechanism_odl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mlnx/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mlnx/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/mlnx/mech_mlnx.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/type_flat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/type_gre.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/drivers/type_local.py
@@ -461,9 +665,207 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ml2/rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/agent/eswitch_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/agent/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/agent_notify_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/common/comm_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/db/mlnx_db_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/db/mlnx_models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/mlnx_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/mlnx/rpc_callbacks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/agent/nec_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/ofc_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/db/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/db/packetfilter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/db/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/drivers/pfc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/drivers/trema.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/extensions/packetfilter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/extensions/router_provider.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/nec_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/nec_router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/ofc_driver_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/ofc_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/packet_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nec/router_drivers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/extensions/netpartition.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/extensions/nuage_router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/extensions/nuage_subnet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/nuage_models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/nuagedb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/nuage/syncmanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/arp_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/flows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/main.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/ofa_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/ofswitch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/ports.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/agent/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ofagent/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/agent/nvsd_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/nvsd_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/nvsdlib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/lib/plugin_helper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/oneconvergence/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/opencontrail/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/opencontrail/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/opencontrail/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/opencontrail/contrail_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/xenapi/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/xenapi/contrib/build-rpm.sh
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/xenapi/contrib/rpmbuild/SPECS/openstack-quantum-xen-plugins.spec
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/agent/xenapi/etc/xapi.d/plugins/netwrap \
+    pkg.depend.bypass-generate=.*/XenAPIPlugin.*
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/common/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/openvswitch/ovs_models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/drivers/fake_plumlib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/drivers/plumlib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/plumgrid_plugin/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/plumgrid_plugin/plugin_ver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/plumgrid/plumgrid_plugin/plumgrid_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/agent/__init__.py
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/agent/ryu_neutron_agent.py \
+    pkg.depend.bypass-generate=.*/ryu.*
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/db/api_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/db/models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/ryu/ryu_neutron_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/eswitch_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/pci_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/sriovnicagent/sriov_nic_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/eventlet_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/eventlet_request.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/request.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/api_client/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/check_nsx_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/nsx_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/securitygroups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/sync.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/lsn_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/maclearning.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/networkgw_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/qos_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/servicerouter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/vcns_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dbexts/vcns_models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/combined.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/lsnmanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/nsx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcp_meta/rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/dhcpmeta_modes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/distributedrouter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/lsn.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/maclearning.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/networkgw.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/nvp_qos.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/qos.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/extensions/servicerouter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsx_cluster.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/l2gateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/lsn.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/queue.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/secgroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/switch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/nsxlib/versioning.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/plugins/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/plugins/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/shell/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/shell/commands.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/common/VcnsApiClient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/edge_appliance_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/edge_firewall_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/edge_ipsecvpn_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/edge_loadbalancer_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/tasks/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/tasks/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/tasks/tasks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/vcns.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/plugins/vmware/vshield/vcns_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/quota.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/scheduler/__init__.py
@@ -490,21 +892,51 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/firewall/fwaas_plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/README
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/brocade/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/brocade/l3_router_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/l3_apic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/l3_arista.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/l3_router/l3_router_plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent/agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent/agent_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent/agent_device_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent/agent_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/agent_scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/a10networks/README.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/a10networks/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/a10networks/driver_v1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/abstract_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/common/agent_driver_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/driver_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/driver_mixins.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/README
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/embrane/poller.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/agent.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/agent_api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/agent_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/cfg.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/namespace_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/noop/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/noop/noop_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/logging_noop/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/logging_noop/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/netscaler/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/netscaler/ncc_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/netscaler/netscaler_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/radware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/radware/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/drivers/radware/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/loadbalancer/plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/metering/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/metering/agents/__init__.py
@@ -523,27 +955,32 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/common/topics.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/cisco_csr_rest_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/cisco_ipsec.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/ipsec.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/template/openswan/ipsec.conf.template
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/device_drivers/template/openswan/ipsec.secret.template
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/plugin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/cisco_cfg_loader.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/cisco_csr_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/cisco_ipsec.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/cisco_validator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/services/vpn/service_drivers/ipsec.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutron/wsgi.py
-file path=usr/lib/python$(PYVER)/vendor-packages/quantum/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/quantum/auth.py
 dir  path=var/lib/neutron owner=neutron group=neutron mode=0700
 link path=var/lib/quantum target=neutron
+#
 group groupname=neutron gid=84
 user username=neutron ftpuser=false gcos-field="OpenStack Neutron" \
     group=neutron home-dir=/var/lib/neutron uid=84
+#
 license neutron.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
 
 # force a dependency on package delivering dnsmasq(8)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/lib/inet/dnsmasq
@@ -570,66 +1007,68 @@
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/ippool
 
 # force a dependency on alembic; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/alembic-26
+depend type=require fmri=library/python-2/alembic-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
 
 # force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-26
+depend type=require fmri=library/python-2/babel-$(PYV)
 
 # force a dependency on cliff; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/cliff-26
+depend type=require fmri=library/python-2/cliff-$(PYV)
 
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/greenlet-26
+depend type=require fmri=library/python-2/greenlet-$(PYV)
 
 # force a dependency on httplib2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/httplib2-26
+depend type=require fmri=library/python-2/httplib2-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on jinja2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/jinja2-$(PYV)
 
 # force a dependency on jsonrpclib; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/jsonrpclib-26
+depend type=require fmri=library/python-2/jsonrpclib-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-26
+# force a dependency on neutronclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/neutronclient-$(PYV)
 
-# force a dependency on mako; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/mako-26
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
 
 # force a dependency on requests; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/requests-26
+depend type=require fmri=library/python-2/requests-$(PYV)
 
 # force a dependency on routes; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/routes-26
+depend type=require fmri=library/python-2/routes-$(PYV)
 
-# 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 setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
 
 # force a dependency on stevedore; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/stevedore-26
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # 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 iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-26
-
-# force a dependency on jinja2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/jinja2-26
-
-# force a dependency on keystoneclient; used via a paste.deploy filter
-depend type=require fmri=library/python/keystoneclient-26
-
-# force a dependency on neutronclient; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/neutronclient-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 rad-python; pkgdepend work is needed to flush this out
-depend type=require fmri=system/management/rad/client/rad-python
+depend type=require fmri=library/python-2/webob-$(PYV)
--- a/components/openstack/neutron/patches/01-dhcp-agent-add-solaris.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/patches/01-dhcp-agent-add-solaris.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,32 +1,27 @@
---- neutron-2013.2.3/neutron/agent/dhcp_agent.py.orig	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/agent/dhcp_agent.py	2014-05-29 14:07:12.811163548 -0700
-@@ -3,6 +3,8 @@
- # Copyright 2012 OpenStack Foundation
- # All Rights Reserved.
- #
-+# Copyright (c) 2013, 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
-@@ -16,15 +18,14 @@
+Changes to the Neutron DHCP agent to port it to Solaris. These changes
+will eventually be proposed upstream.
+
+--- neutron-2014.2.2/neutron/agent/dhcp_agent.py.~1~	2015-02-05 07:45:33.000000000 -0800
++++ neutron-2014.2.2/neutron/agent/dhcp_agent.py	2015-02-25 00:44:00.464466509 -0800
+@@ -14,6 +14,7 @@
  #    under the License.
  
  import os
 +import platform
+ import sys
  
  import eventlet
- import netaddr
+@@ -22,9 +23,7 @@ eventlet.monkey_patch()
  from oslo.config import cfg
  
  from neutron.agent.common import config
 -from neutron.agent.linux import dhcp
  from neutron.agent.linux import external_process
 -from neutron.agent.linux import interface
+ from neutron.agent.linux import ovs_lib  # noqa
  from neutron.agent import rpc as agent_rpc
- from neutron.common import constants
- from neutron.common import exceptions
-@@ -42,6 +43,9 @@
+ from neutron.common import config as common_config
+@@ -42,6 +41,9 @@ from neutron.openstack.common import ser
  from neutron import service as neutron_service
  
  LOG = logging.getLogger(__name__)
@@ -36,8 +31,8 @@
  
  
  class DhcpAgent(manager.Manager):
-@@ -602,6 +606,16 @@
-     cfg.CONF.register_opts(DhcpAgent.OPTS)
+@@ -609,6 +611,16 @@ def register_options():
+     config.register_use_namespaces_opts_helper(cfg.CONF)
      config.register_agent_state_opts_helper(cfg.CONF)
      config.register_root_helper(cfg.CONF)
 +    global dhcp
@@ -53,9 +48,9 @@
      cfg.CONF.register_opts(dhcp.OPTS)
      cfg.CONF.register_opts(interface.OPTS)
  
---- neutron-2013.2.3/neutron/db/dhcp_rpc_base.py.orig	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/db/dhcp_rpc_base.py	2014-05-29 14:07:45.666828914 -0700
-@@ -131,11 +131,13 @@
+--- neutron-2014.2.2/neutron/api/rpc/handlers/dhcp_rpc.py.~1~	2015-02-05 07:45:33.000000000 -0800
++++ neutron-2014.2.2/neutron/api/rpc/handlers/dhcp_rpc.py	2015-02-25 00:44:00.464738154 -0800
+@@ -168,11 +168,13 @@ class DhcpRpcCallback(n_rpc.RpcCallback)
                  for fixed_ip in port['fixed_ips']:
                      if fixed_ip['subnet_id'] in dhcp_enabled_subnet_ids:
                          dhcp_enabled_subnet_ids.remove(fixed_ip['subnet_id'])
--- a/components/openstack/neutron/patches/02-l3-agent-add-solaris.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/patches/02-l3-agent-add-solaris.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,384 +1,70 @@
---- neutron-2013.2.3/neutron/agent/l3_agent.py.orig	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/agent/l3_agent.py	2014-06-02 02:31:42.660207857 -0700
-@@ -2,6 +2,8 @@
- #
- # Copyright 2012 Nicira Networks, Inc.  All rights reserved.
- #
-+# 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
-@@ -15,8 +17,11 @@
- #    under the License.
- #
- # @author: Dan Wendlandt, Nicira, Inc
-+# @author: Girish Moodalbail, Oracle, Inc
- #
- 
-+import platform
-+
- import eventlet
- import netaddr
- from oslo.config import cfg
-@@ -28,6 +33,8 @@
- from neutron.agent.linux import iptables_manager
- from neutron.agent.linux import utils
- from neutron.agent import rpc as agent_rpc
-+from neutron.agent.solaris import ipfilters_manager
-+from neutron.agent.solaris import net_lib
- from neutron.common import constants as l3_constants
- from neutron.common import legacy
- from neutron.common import topics
-@@ -150,6 +157,7 @@
-             Per rpc versioning rules,  it is backwards compatible.
-     """
-     RPC_API_VERSION = '1.1'
-+    RouterInfo = RouterInfo
- 
-     OPTS = [
-         cfg.StrOpt('external_network_bridge', default='br-ex',
-@@ -292,8 +300,8 @@
-                 raise
- 
-     def _router_added(self, router_id, router):
--        ri = RouterInfo(router_id, self.root_helper,
--                        self.conf.use_namespaces, router)
-+        ri = self.RouterInfo(router_id, self.root_helper,
-+                             self.conf.use_namespaces, router)
-         self.router_info[router_id] = ri
-         if self.conf.use_namespaces:
-             self._create_router_namespace(ri)
-@@ -380,12 +388,11 @@
-         for p in new_ports:
-             self._set_subnet_info(p)
-             ri.internal_ports.append(p)
--            self.internal_network_added(ri, p['network_id'], p['id'],
--                                        p['ip_cidr'], p['mac_address'])
-+            self.internal_network_added(ri, p)
- 
-         for p in old_ports:
-             ri.internal_ports.remove(p)
--            self.internal_network_removed(ri, p['id'], p['ip_cidr'])
-+            self.internal_network_removed(ri, p)
- 
-         internal_cidrs = [p['ip_cidr'] for p in ri.internal_ports]
-         # TODO(salv-orlando): RouterInfo would be a better place for
-@@ -572,23 +579,24 @@
-             rules.extend(self.internal_network_nat_rules(ex_gw_ip, cidr))
-         return rules
- 
--    def internal_network_added(self, ri, network_id, port_id,
--                               internal_cidr, mac_address):
--        interface_name = self.get_internal_device_name(port_id)
-+    def internal_network_added(self, ri, port):
-+        interface_name = self.get_internal_device_name(port['id'])
-         if not ip_lib.device_exists(interface_name,
-                                     root_helper=self.root_helper,
-                                     namespace=ri.ns_name()):
--            self.driver.plug(network_id, port_id, interface_name, mac_address,
-+            self.driver.plug(port['network_id'], port['id'], interface_name,
-+                             port['mac_address'],
-                              namespace=ri.ns_name(),
-                              prefix=INTERNAL_DEV_PREFIX)
-+        internal_cidr = port['ip_cidr']
- 
-         self.driver.init_l3(interface_name, [internal_cidr],
-                             namespace=ri.ns_name())
-         ip_address = internal_cidr.split('/')[0]
-         self._send_gratuitous_arp_packet(ri, interface_name, ip_address)
- 
--    def internal_network_removed(self, ri, port_id, internal_cidr):
--        interface_name = self.get_internal_device_name(port_id)
-+    def internal_network_removed(self, ri, port):
-+        interface_name = self.get_internal_device_name(port['id'])
-         if ip_lib.device_exists(interface_name,
-                                 root_helper=self.root_helper,
-                                 namespace=ri.ns_name()):
-@@ -839,6 +847,8 @@
-     config.register_root_helper(conf)
-     conf.register_opts(interface.OPTS)
-     conf.register_opts(external_process.OPTS)
-+    if platform.system() == "SunOS":
-+        manager = 'neutron.agent.evs_l3_agent.EVSL3NATAgent'
-     conf(project='neutron')
-     config.setup_logging(conf)
-     legacy.modernize_quantum_config(conf)
---- neutron-2013.2.3/neutron/db/l3_db.py.~1~	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/db/l3_db.py	2014-06-02 23:20:58.933635798 -0700
-@@ -2,6 +2,8 @@
- 
- # Copyright 2012 Nicira Networks, Inc.  All rights reserved.
- #
-+# 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
-@@ -15,6 +17,7 @@
- #    under the License.
- #
- # @author: Dan Wendlandt, Nicira, Inc
-+# @author: Girish Moodalbail, Oracle, Inc
- #
- 
- import netaddr
-@@ -56,7 +59,7 @@
-     status = sa.Column(sa.String(16))
-     admin_state_up = sa.Column(sa.Boolean)
-     gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id'))
--    gw_port = orm.relationship(models_v2.Port)
-+    gw_port = orm.relationship(models_v2.Port, lazy='joined')
- 
- 
- class FloatingIP(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
-@@ -79,6 +82,8 @@
-     """Mixin class to add L3/NAT router methods to db_plugin_base_v2."""
- 
-     l3_rpc_notifier = l3_rpc_agent_api.L3AgentNotify
-+    Router = Router
-+    FloatingIP = FloatingIP
- 
-     @property
-     def _core_plugin(self):
-@@ -86,7 +91,7 @@
- 
-     def _get_router(self, context, id):
-         try:
--            router = self._get_by_id(context, Router, id)
-+            router = self._get_by_id(context, self.Router, id)
-         except exc.NoResultFound:
-             raise l3.RouterNotFound(router_id=id)
-         return router
-@@ -122,11 +127,11 @@
-         with context.session.begin(subtransactions=True):
-             # pre-generate id so it will be available when
-             # configuring external gw port
--            router_db = Router(id=uuidutils.generate_uuid(),
--                               tenant_id=tenant_id,
--                               name=r['name'],
--                               admin_state_up=r['admin_state_up'],
--                               status="ACTIVE")
-+            router_db = self.Router(id=uuidutils.generate_uuid(),
-+                                    tenant_id=tenant_id,
-+                                    name=r['name'],
-+                                    admin_state_up=r['admin_state_up'],
-+                                    status="ACTIVE")
-             context.session.add(router_db)
-             if has_gw_info:
-                 self._update_router_gw_info(context, router_db['id'], gw_info)
-@@ -237,7 +242,10 @@
-             if vpnservice:
-                 vpnservice.check_router_in_use(context, id)
- 
--            # delete any gw port
-+            context.session.delete(router)
-+
-+            # Delete the gw port after the router has been removed to
-+            # avoid a constraint violation.
-             device_filter = {'device_id': [id],
-                              'device_owner': [DEVICE_OWNER_ROUTER_GW]}
-             ports = self._core_plugin.get_ports(context.elevated(),
-@@ -246,7 +254,6 @@
-                 self._core_plugin._delete_port(context.elevated(),
-                                                ports[0]['id'])
- 
--            context.session.delete(router)
-         self.l3_rpc_notifier.router_deleted(context, id)
- 
-     def get_router(self, context, id, fields=None):
-@@ -257,7 +264,7 @@
-                     sorts=None, limit=None, marker=None,
-                     page_reverse=False):
-         marker_obj = self._get_marker_obj(context, 'router', limit, marker)
--        return self._get_collection(context, Router,
-+        return self._get_collection(context, self.Router,
-                                     self._make_router_dict,
-                                     filters=filters, fields=fields,
-                                     sorts=sorts,
-@@ -266,14 +273,14 @@
-                                     page_reverse=page_reverse)
- 
-     def get_routers_count(self, context, filters=None):
--        return self._get_collection_count(context, Router,
-+        return self._get_collection_count(context, self.Router,
-                                           filters=filters)
- 
-     def _check_for_dup_router_subnet(self, context, router_id,
-                                      network_id, subnet_id, subnet_cidr):
-         try:
--            rport_qry = context.session.query(models_v2.Port)
--            rports = rport_qry.filter_by(device_id=router_id)
-+            filters = {'device_id': [router_id]}
-+            rports = self._core_plugin.get_ports(context, filters)
-             # It's possible these ports are on the same network, but
-             # different subnets.
-             new_ipnet = netaddr.IPNetwork(subnet_cidr)
-@@ -329,8 +336,11 @@
-                                                   port['network_id'],
-                                                   subnet['id'],
-                                                   subnet['cidr'])
--                port.update({'device_id': router_id,
--                             'device_owner': DEVICE_OWNER_ROUTER_INTF})
-+                self._core_plugin.update_port(context,
-+                                              interface_info['port_id'],
-+                                              {'device_id': router_id,
-+                                               'device_owner':
-+                                               DEVICE_OWNER_ROUTER_INTF})
-         elif 'subnet_id' in interface_info:
-             subnet_id = interface_info['subnet_id']
-             subnet = self._core_plugin._get_subnet(context, subnet_id)
-@@ -372,7 +382,7 @@
-                                              subnet_id):
-         subnet_db = self._core_plugin._get_subnet(context, subnet_id)
-         subnet_cidr = netaddr.IPNetwork(subnet_db['cidr'])
--        fip_qry = context.session.query(FloatingIP)
-+        fip_qry = context.session.query(self.FloatingIP)
-         for fip_db in fip_qry.filter_by(router_id=router_id):
-             if netaddr.IPAddress(fip_db['fixed_ip_address']) in subnet_cidr:
-                 raise l3.RouterInterfaceInUseByFloatingIP(
-@@ -409,22 +419,21 @@
-             subnet = self._core_plugin._get_subnet(context, subnet_id)
-             found = False
- 
--            try:
--                rport_qry = context.session.query(models_v2.Port)
--                ports = rport_qry.filter_by(
--                    device_id=router_id,
--                    device_owner=DEVICE_OWNER_ROUTER_INTF,
--                    network_id=subnet['network_id'])
--
--                for p in ports:
--                    if p['fixed_ips'][0]['subnet_id'] == subnet_id:
--                        port_id = p['id']
--                        self._core_plugin.delete_port(context, p['id'],
--                                                      l3_port_check=False)
--                        found = True
--                        break
--            except exc.NoResultFound:
-+            filters = {
-+                'device_id': router_id,
-+                'device_owner': DEVICE_OWNER_ROUTER_INTF,
-+                'network_id': subnet['network_id']
-+            }
-+            ports = self._core_plugin.get_ports(context, filters)
-+            if not ports:
-                 pass
-+            for p in ports:
-+                if p['fixed_ips'][0]['subnet_id'] == subnet_id:
-+                    port_id = p['id']
-+                    self._core_plugin.delete_port(context, p['id'],
-+                                                  l3_port_check=False)
-+                    found = True
-+                    break
- 
-             if not found:
-                 raise l3.RouterInterfaceNotFoundForSubnet(router_id=router_id,
-@@ -444,7 +453,7 @@
- 
-     def _get_floatingip(self, context, id):
-         try:
--            floatingip = self._get_by_id(context, FloatingIP, id)
-+            floatingip = self._get_by_id(context, self.FloatingIP, id)
-         except exc.NoResultFound:
-             raise l3.FloatingIPNotFound(floatingip_id=id)
-         return floatingip
-@@ -470,19 +479,22 @@
-             raise q_exc.BadRequest(resource='floatingip', msg=msg)
- 
-         # find router interface ports on this network
--        router_intf_qry = context.session.query(models_v2.Port)
--        router_intf_ports = router_intf_qry.filter_by(
--            network_id=internal_port['network_id'],
--            device_owner=DEVICE_OWNER_ROUTER_INTF)
--
-+        router_intf_filter = {
-+            'network_id': internal_port['network_id'],
-+            'device_owner': DEVICE_OWNER_ROUTER_INTF
-+        }
-+        router_intf_ports = self._core_plugin.get_ports(
-+            context, filters=router_intf_filter)
-         for intf_p in router_intf_ports:
-             if intf_p['fixed_ips'][0]['subnet_id'] == internal_subnet_id:
-                 router_id = intf_p['device_id']
--                router_gw_qry = context.session.query(models_v2.Port)
--                has_gw_port = router_gw_qry.filter_by(
--                    network_id=external_network_id,
--                    device_id=router_id,
--                    device_owner=DEVICE_OWNER_ROUTER_GW).count()
-+                filters = {
-+                    'network_id': external_network_id,
-+                    'device_id': router_id,
-+                    'device_owner': DEVICE_OWNER_ROUTER_GW
-+                }
-+                has_gw_port = self._core_plugin.get_ports_count(
-+                    context, filters)
-                 if has_gw_port:
-                     return router_id
- 
-@@ -556,13 +568,13 @@
-                                                     floating_network_id)
-         # confirm that this router has a floating
-         # ip enabled gateway with support for this floating IP network
--        try:
--            port_qry = context.elevated().session.query(models_v2.Port)
--            port_qry.filter_by(
--                network_id=floating_network_id,
--                device_id=router_id,
--                device_owner=DEVICE_OWNER_ROUTER_GW).one()
--        except exc.NoResultFound:
-+        filters = {
-+            'network_id': floating_network_id,
-+            'device_id': router_id,
-+            'device_owner': DEVICE_OWNER_ROUTER_GW
-+        }
-+        ports = self._core_plugin.get_ports(context.elevated(), filters)
-+        if not ports:
-             raise l3.ExternalGatewayForFloatingIPNotFound(
-                 subnet_id=internal_subnet_id,
-                 port_id=internal_port['id'])
-@@ -580,7 +592,7 @@
-                 context,
-                 fip,
-                 floatingip_db['floating_network_id'])
--            fip_qry = context.session.query(FloatingIP)
-+            fip_qry = context.session.query(self.FloatingIP)
-             try:
-                 fip_qry.filter_by(
-                     fixed_port_id=fip['port_id'],
-@@ -628,7 +640,7 @@
- 
-             floating_fixed_ip = external_port['fixed_ips'][0]
-             floating_ip_address = floating_fixed_ip['ip_address']
--            floatingip_db = FloatingIP(
-+            floatingip_db = self.FloatingIP(
-                 id=fip_id,
-                 tenant_id=tenant_id,
-                 floating_network_id=fip['floating_network_id'],
-@@ -697,7 +709,7 @@
-                 if key in filters:
-                     filters[val] = filters.pop(key)
- 
--        return self._get_collection(context, FloatingIP,
-+        return self._get_collection(context, self.FloatingIP,
-                                     self._make_floatingip_dict,
-                                     filters=filters, fields=fields,
-                                     sorts=sorts,
-@@ -706,7 +718,7 @@
-                                     page_reverse=page_reverse)
- 
-     def get_floatingips_count(self, context, filters=None):
--        return self._get_collection_count(context, FloatingIP,
-+        return self._get_collection_count(context, self.FloatingIP,
-                                           filters=filters)
- 
-     def prevent_l3_port_deletion(self, context, port_id):
-@@ -737,7 +749,7 @@
-     def disassociate_floatingips(self, context, port_id):
-         with context.session.begin(subtransactions=True):
-             try:
--                fip_qry = context.session.query(FloatingIP)
-+                fip_qry = context.session.query(self.FloatingIP)
-                 floating_ip = fip_qry.filter_by(fixed_port_id=port_id).one()
-                 router_id = floating_ip['router_id']
-                 floating_ip.update({'fixed_port_id': None,
+*** neutron-2014.2.2/neutron/agent/l3_agent.py	2015-02-05 07:45:33.000000000 -0800
+--- NEW/neutron/agent/l3_agent.py	2015-02-06 11:10:53.164349168 -0800
+***************
+*** 1,5 ****
+--- 1,7 ----
+  # Copyright 2012 VMware, Inc.  All rights reserved.
+  #
++ # Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
++ #
+  #    Licensed under the Apache License, Version 2.0 (the "License"); you may
+  #    not use this file except in compliance with the License. You may obtain
+  #    a copy of the License at
+***************
+*** 13,18 ****
+--- 15,21 ----
+  #    under the License.
+  #
+  
++ import platform
+  import sys
+  
+  import datetime
+***************
+*** 33,38 ****
+--- 36,42 ----
+  from neutron.agent.linux import iptables_manager
+  from neutron.agent.linux import ra
+  from neutron.agent import rpc as agent_rpc
++ from neutron.agent.solaris import ipfilters_manager
+  from neutron.common import config as common_config
+  from neutron.common import constants as l3_constants
+  from neutron.common import ipv6_utils
+***************
+*** 257,266 ****
+          # Invoke the setter for establishing initial SNAT action
+          self.router = router
+          self.ns_name = NS_PREFIX + router_id if use_namespaces else None
+!         self.iptables_manager = iptables_manager.IptablesManager(
+!             root_helper=root_helper,
+!             use_ipv6=use_ipv6,
+!             namespace=self.ns_name)
+          self.snat_iptables_manager = None
+          self.routes = []
+          # DVR Data
+--- 261,274 ----
+          # Invoke the setter for establishing initial SNAT action
+          self.router = router
+          self.ns_name = NS_PREFIX + router_id if use_namespaces else None
+!         if platform.system() == "SunOS":
+!             self.ipfilters_manager = ipfilters_manager.IPfiltersManager()
+!             self.iptables_manager = None
+!         else:
+!             self.iptables_manager = iptables_manager.IptablesManager(
+!                 root_helper=root_helper,
+!                 use_ipv6=use_ipv6,
+!                 namespace=self.ns_name)
+          self.snat_iptables_manager = None
+          self.routes = []
+          # DVR Data
+***************
+*** 2049,2054 ****
+--- 2057,2064 ----
+      _register_opts(cfg.CONF)
+      common_config.init(sys.argv[1:])
+      config.setup_logging()
++     if platform.system() == "SunOS":
++         manager = 'neutron.agent.evs_l3_agent.EVSL3NATAgent'
+      server = neutron_service.Service.create(
+          binary='neutron-l3-agent',
+          topic=topics.L3_AGENT,
--- a/components/openstack/neutron/patches/03-CVE-2014-0187.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-This upstream patch addresses CVE-2014-0187 and is tracked under
-Launchpad bug 1300785. It is addressed in Icehouse 2014.1.2 and Havana
-2013.2.4.
-
-commit 03eed8cd34cd4fb043c11fc99f6bb0b4fbd5728d
-Author: marios <[email protected]>
-Date:   Fri Nov 29 18:23:54 2013 +0200
-
-    Validate CIDR given as ip-prefix in security-group-rule-create
-    
-    There was no validation for the provided ip prefix. This just adds
-    a simple parse using netaddr and explodes with appropriate message.
-    Also makes sure ip prefix _is_ cidr (192.168.1.1-->192.168.1.1/32).
-    
-    Validation occurs at the attribute level (API model) as well as at
-    the db level, where the ethertype is validated against the ip_prefix
-    address type.
-    
-    Unit test cases added - bad prefix, unmasked prefix and incorrect
-    ethertype. Also adds attribute test cases for the added
-    convert_ip_prefix_to_cidr method
-    
-    Closes-Bug: 1255338
-    
-    Conflicts:
-    	neutron/tests/unit/test_security_groups_rpc.py
-    	neutron/tests/unit/test_extension_security_group.py
-    
-    Change-Id: I71fb8c887963a122a5bd8cfdda800026c1cd3954
-    (cherry picked from commit 65aa92b0348b7ab8413f359b00825610cdf66607)
-
-diff --git a/neutron/common/exceptions.py b/neutron/common/exceptions.py
-index 88fa6e4..80a75d1 100644
---- a/neutron/common/exceptions.py
-+++ b/neutron/common/exceptions.py
-@@ -306,3 +306,7 @@ class NetworkVxlanPortRangeError(object):
- class DeviceIDNotOwnedByTenant(Conflict):
-     message = _("The following device_id %(device_id)s is not owned by your "
-                 "tenant or matches another tenants router.")
-+
-+
-+class InvalidCIDR(BadRequest):
-+    message = _("Invalid CIDR %(input)s given as IP prefix")
-diff --git a/neutron/db/securitygroups_db.py b/neutron/db/securitygroups_db.py
-index 2a7d2ef..8868546 100644
---- a/neutron/db/securitygroups_db.py
-+++ b/neutron/db/securitygroups_db.py
-@@ -16,6 +16,7 @@
- #
- # @author: Aaron Rosen, Nicira, Inc
- 
-+import netaddr
- import sqlalchemy as sa
- from sqlalchemy import orm
- from sqlalchemy.orm import exc
-@@ -331,6 +332,7 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
-             new_rules.add(rule['security_group_id'])
- 
-             self._validate_port_range(rule)
-+            self._validate_ip_prefix(rule)
- 
-             if rule['remote_ip_prefix'] and rule['remote_group_id']:
-                 raise ext_sg.SecurityGroupRemoteGroupAndRemoteIpPrefix()
-@@ -411,6 +413,24 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
-                 if (i['security_group_rule'] == db_rule):
-                     raise ext_sg.SecurityGroupRuleExists(id=id)
- 
-+    def _validate_ip_prefix(self, rule):
-+        """Check that a valid cidr was specified as remote_ip_prefix
-+
-+        No need to check that it is in fact an IP address as this is already
-+        validated by attribute validators.
-+        Check that rule ethertype is consistent with remote_ip_prefix ip type.
-+        Add mask to ip_prefix if absent (192.168.1.10 -> 192.168.1.10/32).
-+        """
-+        input_prefix = rule['remote_ip_prefix']
-+        if input_prefix:
-+            addr = netaddr.IPNetwork(input_prefix)
-+            # set input_prefix to always include the netmask:
-+            rule['remote_ip_prefix'] = str(addr)
-+            # check consistency of ethertype with addr version
-+            if rule['ethertype'] != "IPv%d" % (addr.version):
-+                raise ext_sg.SecurityGroupRuleParameterConflict(
-+                    ethertype=rule['ethertype'], cidr=input_prefix)
-+
-     def get_security_group_rules(self, context, filters=None, fields=None,
-                                  sorts=None, limit=None, marker=None,
-                                  page_reverse=False):
-diff --git a/neutron/extensions/securitygroup.py b/neutron/extensions/securitygroup.py
-index 85d499a..3d10b5a 100644
---- a/neutron/extensions/securitygroup.py
-+++ b/neutron/extensions/securitygroup.py
-@@ -17,6 +17,7 @@
- 
- from abc import ABCMeta
- from abc import abstractmethod
-+import netaddr
- 
- from oslo.config import cfg
- 
-@@ -102,6 +103,10 @@ class SecurityGroupRuleExists(qexception.InUse):
-     message = _("Security group rule already exists. Group id is %(id)s.")
- 
- 
-+class SecurityGroupRuleParameterConflict(qexception.InvalidInput):
-+    message = _("Conflicting value ethertype %(ethertype)s for CIDR %(cidr)s")
-+
-+
- def convert_protocol(value):
-     if value is None:
-         return
-@@ -152,6 +157,16 @@ def convert_to_uuid_list_or_none(value_list):
-     return value_list
- 
- 
-+def convert_ip_prefix_to_cidr(ip_prefix):
-+    if not ip_prefix:
-+        return
-+    try:
-+        cidr = netaddr.IPNetwork(ip_prefix)
-+        return str(cidr)
-+    except (TypeError, netaddr.AddrFormatError):
-+        raise qexception.InvalidCIDR(input=ip_prefix)
-+
-+
- def _validate_name_not_default(data, valid_values=None):
-     if data == "default":
-         raise SecurityGroupDefaultAlreadyExists()
-@@ -207,7 +222,8 @@ RESOURCE_ATTRIBUTE_MAP = {
-                       'convert_to': convert_ethertype_to_case_insensitive,
-                       'validate': {'type:values': sg_supported_ethertypes}},
-         'remote_ip_prefix': {'allow_post': True, 'allow_put': False,
--                             'default': None, 'is_visible': True},
-+                             'default': None, 'is_visible': True,
-+                             'convert_to': convert_ip_prefix_to_cidr},
-         'tenant_id': {'allow_post': True, 'allow_put': False,
-                       'required_by_policy': True,
-                       'is_visible': True},
-diff --git a/neutron/tests/unit/test_extension_security_group.py b/neutron/tests/unit/test_extension_security_group.py
-index d53e140..f0b1636 100644
---- a/neutron/tests/unit/test_extension_security_group.py
-+++ b/neutron/tests/unit/test_extension_security_group.py
-@@ -21,11 +21,13 @@ import webob.exc
- 
- from neutron.api.v2 import attributes as attr
- from neutron.common import constants as const
-+from neutron.common import exceptions as n_exc
- from neutron.common.test_lib import test_config
- from neutron import context
- from neutron.db import db_base_plugin_v2
- from neutron.db import securitygroups_db
- from neutron.extensions import securitygroup as ext_sg
-+from neutron.tests import base
- from neutron.tests.unit import test_db_plugin
- 
- DB_PLUGIN_KLASS = ('neutron.tests.unit.test_extension_security_group.'
-@@ -413,6 +415,70 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
-             self.deserialize(self.fmt, res)
-             self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
- 
-+    def test_create_security_group_rule_invalid_ip_prefix(self):
-+        name = 'webservers'
-+        description = 'my webservers'
-+        for bad_prefix in ['bad_ip', 256, "2001:db8:a::123/129", '172.30./24']:
-+            with self.security_group(name, description) as sg:
-+                sg_id = sg['security_group']['id']
-+                remote_ip_prefix = bad_prefix
-+                rule = self._build_security_group_rule(
-+                    sg_id,
-+                    'ingress',
-+                    const.PROTO_NAME_TCP,
-+                    '22', '22',
-+                    remote_ip_prefix)
-+                res = self._create_security_group_rule(self.fmt, rule)
-+                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
-+
-+    def test_create_security_group_rule_invalid_ethertype_for_prefix(self):
-+        name = 'webservers'
-+        description = 'my webservers'
-+        test_addr = {'192.168.1.1/24': 'ipv4', '192.168.1.1/24': 'IPv6',
-+                     '2001:db8:1234::/48': 'ipv6',
-+                     '2001:db8:1234::/48': 'IPv4'}
-+        for prefix, ether in test_addr.iteritems():
-+            with self.security_group(name, description) as sg:
-+                sg_id = sg['security_group']['id']
-+                ethertype = ether
-+                remote_ip_prefix = prefix
-+                rule = self._build_security_group_rule(
-+                    sg_id,
-+                    'ingress',
-+                    const.PROTO_NAME_TCP,
-+                    '22', '22',
-+                    remote_ip_prefix,
-+                    None,
-+                    None,
-+                    ethertype)
-+                res = self._create_security_group_rule(self.fmt, rule)
-+                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
-+
-+    def test_create_security_group_rule_with_unmasked_prefix(self):
-+        name = 'webservers'
-+        description = 'my webservers'
-+        addr = {'10.1.2.3': {'mask': '32', 'ethertype': 'IPv4'},
-+                'fe80::2677:3ff:fe7d:4c': {'mask': '128', 'ethertype': 'IPv6'}}
-+        for ip in addr:
-+            with self.security_group(name, description) as sg:
-+                sg_id = sg['security_group']['id']
-+                ethertype = addr[ip]['ethertype']
-+                remote_ip_prefix = ip
-+                rule = self._build_security_group_rule(
-+                    sg_id,
-+                    'ingress',
-+                    const.PROTO_NAME_TCP,
-+                    '22', '22',
-+                    remote_ip_prefix,
-+                    None,
-+                    None,
-+                    ethertype)
-+                res = self._create_security_group_rule(self.fmt, rule)
-+                self.assertEqual(res.status_int, 201)
-+                res_sg = self.deserialize(self.fmt, res)
-+                prefix = res_sg['security_group_rule']['remote_ip_prefix']
-+                self.assertEqual(prefix, '%s/%s' % (ip, addr[ip]['mask']))
-+
-     def test_create_security_group_rule_tcp_protocol_as_number(self):
-         name = 'webservers'
-         description = 'my webservers'
-@@ -1348,5 +1414,25 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
-                 self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
- 
- 
-+class TestConvertIPPrefixToCIDR(base.BaseTestCase):
-+
-+    def test_convert_bad_ip_prefix_to_cidr(self):
-+        for val in ['bad_ip', 256, "2001:db8:a::123/129"]:
-+            self.assertRaises(n_exc.InvalidCIDR,
-+                              ext_sg.convert_ip_prefix_to_cidr, val)
-+        self.assertIsNone(ext_sg.convert_ip_prefix_to_cidr(None))
-+
-+    def test_convert_ip_prefix_no_netmask_to_cidr(self):
-+        addr = {'10.1.2.3': '32', 'fe80::2677:3ff:fe7d:4c': '128'}
-+        for k, v in addr.iteritems():
-+            self.assertEqual(ext_sg.convert_ip_prefix_to_cidr(k),
-+                             '%s/%s' % (k, v))
-+
-+    def test_convert_ip_prefix_with_netmask_to_cidr(self):
-+        addresses = ['10.1.0.0/16', '10.1.2.3/32', '2001:db8:1234::/48']
-+        for addr in addresses:
-+            self.assertEqual(ext_sg.convert_ip_prefix_to_cidr(addr), addr)
-+
-+
- class TestSecurityGroupsXML(TestSecurityGroups):
-     fmt = 'xml'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/patches/03-metadata-agent-add-solaris.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,93 @@
+Generalizes the dameon.py and external_process.py to work on Solaris. These
+changes will eventually be proposed upstream.
+
+*** neutron-2014.2.2/neutron/agent/linux/daemon.py	2015-02-05 07:45:33.000000000 -0800
+--- NEW/neutron/agent/linux/daemon.py	2015-02-16 12:37:23.181739275 -0800
+***************
+*** 15,23 ****
+--- 15,25 ----
+  import atexit
+  import fcntl
+  import os
++ import platform
+  import signal
+  import sys
+  
++ from neutron.agent.linux import utils
+  from neutron.openstack.common import log as logging
+  
+  LOG = logging.getLogger(__name__)
+***************
+*** 60,65 ****
+--- 62,76 ----
+          if not pid:
+              return False
+  
++         if platform.system() == "SunOS":
++             cmd = ['/usr/bin/pargs', pid]
++             try:
++                 exec_out = utils.execute(cmd)
++                 return self.procname in exec_out and (not self.uuid or
++                                                       self.uuid in exec_out)
++             except RuntimeError:
++                 return False
++ 
+          cmdline = '/proc/%s/cmdline' % pid
+          try:
+              with open(cmdline, "r") as f:
+*** neutron-2014.2.2/neutron/agent/linux/external_process.py	2015-02-05 07:45:33.000000000 -0800
+--- NEW/neutron/agent/linux/external_process.py	2015-02-16 12:37:39.202659518 -0800
+***************
+*** 13,18 ****
+--- 13,19 ----
+  #    under the License.
+  
+  import collections
++ import platform
+  
+  import eventlet
+  from oslo.config import cfg
+***************
+*** 75,82 ****
+                  cmd_callback = self.default_cmd_callback
+              cmd = cmd_callback(self.get_pid_file_name(ensure_pids_dir=True))
+  
+!             ip_wrapper = ip_lib.IPWrapper(self.root_helper, self.namespace)
+!             ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env)
+          elif reload_cfg:
+              self.reload_cfg()
+  
+--- 76,91 ----
+                  cmd_callback = self.default_cmd_callback
+              cmd = cmd_callback(self.get_pid_file_name(ensure_pids_dir=True))
+  
+!             if self.namespace:
+!                 ip_wrapper = ip_lib.IPWrapper(self.root_helper, self.namespace)
+!                 ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env)
+!             else:
+!                 env_params = []
+!                 if self.cmd_addl_env:
+!                     env_params = (['/usr/bin/env'] +
+!                                   ['%s=%s' % pair for pair in
+!                                    self.cmd_addl_env.items()])
+!                 utils.execute(env_params + list(cmd))
+          elif reload_cfg:
+              self.reload_cfg()
+  
+***************
+*** 122,127 ****
+--- 131,144 ----
+          if pid is None:
+              return False
+  
++         if platform.system() == "SunOS":
++             cmd = ['/usr/bin/pargs', pid]
++             try:
++                 exec_out = utils.execute(cmd)
++                 return self.uuid in exec_out
++             except RuntimeError:
++                 return False
++ 
+          cmdline = '/proc/%s/cmdline' % pid
+          try:
+              with open(cmdline, "r") as f:
--- a/components/openstack/neutron/patches/04-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/patches/04-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,48 +1,40 @@
 In-house patch to remove unnecessary dependencies from Neutron's
 requirements files. The specific reasons are as follows:
 
-amqplib		No longer applicable
-		(upstream commit 39ffcb0dd75d9dc5d8a249f2974a67f0def5204b)
+oslo.rootwrap	Not applicable to Solaris
 
-argparse	Not applicable to Solaris (Brocade specific)
-
-novaclient	No longer applicable
-
-pyudev		Not applicable to Solaris (Linux bridging specific)
+paste		Not applicable
 
---- neutron-2013.2.3/neutron.egg-info/requires.txt.orig	2014-04-03 11:49:53.000000000 -0700
-+++ neutron-2013.2.3/neutron.egg-info/requires.txt	2014-05-24 23:12:26.486505631 -0700
-@@ -1,9 +1,7 @@
--pyudev
- pbr>=0.5.21,<1.0
- Paste
+--- neutron-2014.2.2/neutron.egg-info/requires.txt.~1~	2015-02-05 07:46:25.000000000 -0800
++++ neutron-2014.2.2/neutron.egg-info/requires.txt	2015-02-25 00:20:01.378154156 -0800
+@@ -1,5 +1,4 @@
+ pbr>=0.6,!=0.7,<1.0
+-Paste
  PasteDeploy>=1.5.0
- Routes>=1.12.3
--amqplib>=0.6.1
+ Routes>=1.12.3,!=2.0
  anyjson>=0.3.3
- Babel>=1.3
- eventlet>=0.13.0
-@@ -23,4 +21,3 @@
- six>=1.4.1
- stevedore>=0.10
- oslo.config>=1.2.0
--python-novaclient>=2.15.0
+@@ -24,5 +23,4 @@ stevedore>=1.0.0  # Apache-2.0
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+-oslo.rootwrap>=1.3.0
+-python-novaclient>=2.18.0
++python-novaclient>=2.18.0
 \ No newline at end of file
-
---- neutron-2013.2.3/requirements.txt.orig	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/requirements.txt	2014-05-24 23:12:57.116696613 -0700
-@@ -3,9 +3,7 @@
- Paste
+--- neutron-2014.2.2/requirements.txt.~1~	2015-02-05 07:45:33.000000000 -0800
++++ neutron-2014.2.2/requirements.txt	2015-02-25 00:19:55.500774949 -0800
+@@ -3,7 +3,6 @@
+ # process, which may cause wedges in the gate later.
+ pbr>=0.6,!=0.7,<1.0
+ 
+-Paste
  PasteDeploy>=1.5.0
- Routes>=1.12.3
--amqplib>=0.6.1
+ Routes>=1.12.3,!=2.0
  anyjson>=0.3.3
--argparse
- Babel>=1.3
- eventlet>=0.13.0
- greenlet>=0.3.2
-@@ -25,4 +23,3 @@
- stevedore>=0.10
- oslo.config>=1.2.0
+@@ -28,6 +27,5 @@ stevedore>=1.0.0  # Apache-2.0
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+-oslo.rootwrap>=1.3.0
  
--python-novaclient>=2.15.0
+ python-novaclient>=2.18.0
--- a/components/openstack/neutron/patches/05-launchpad-1210121.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-This proposed upstream patch addresses Launchpad bug 1210121. Although
-it's been addressed in Icehouse 2014.1, the patch below is still not
-yet released for Havana.
-
-From dbbc8338770d2c340903e006dcb3c90c4aad7b29 Mon Sep 17 00:00:00 2001
-From: armando-migliaccio <[email protected]>
-Date: Thu, 13 Mar 2014 12:40:01 -0700
-Subject: [PATCH] Kill 'Skipping unknown group key: firewall_driver' log trace
-
-This is done by trying to import the option first. If this
-does not work, emit a warning instead as in most cases this is
-harmless for a number of reasons: a) the service might not
-even need the opt; b) if things do break down the line, we'll
-see bigger traces; c) it's not gonna be long for this legacy
-quantum/neutron stuff to be removed altogether.
-
-Closes-bug: 1210121
-
-Change-Id: I34917da9cb6117ee1d42140621c742f503279b6b
-(cherry picked from commit b5ee49623982530bfb3c3fe2eefb9d8ddb6353bc)
----
- neutron/common/legacy.py          |   20 ++++++++++++++++----
- neutron/quota.py                  |    2 +-
- neutron/tests/unit/test_legacy.py |    2 +-
- 3 files changed, 18 insertions(+), 6 deletions(-)
-
-diff --git a/neutron/common/legacy.py b/neutron/common/legacy.py
-index cf37281..d387aa2 100644
---- a/neutron/common/legacy.py
-+++ b/neutron/common/legacy.py
-@@ -17,6 +17,8 @@
- 
- # @author Mark McClain (DreamHost)
- 
-+from oslo.config import cfg
-+
- from neutron.openstack.common import log as logging
- 
- LOG = logging.getLogger(__name__)
-@@ -45,11 +47,19 @@ def override_config(config, config_keys=None):
-         group = None
-         if not isinstance(key, basestring):
-             try:
--                group, key = key
-+                group, key, module_str = key
-                 old_value = getattr(getattr(config, group), key, None)
-             except AttributeError:
--                LOG.error(_('Skipping unknown group key: %s'), key)
--                continue
-+                try:
-+                    config.import_opt(key, module_str, group)
-+                    old_value = getattr(getattr(config, group), key, None)
-+                except (cfg.NoSuchOptError,
-+                        cfg.NoSuchGroupError,
-+                        AttributeError):
-+                    LOG.warn(_('Key %(key)s in group %(group)s is unknown. '
-+                               'It may not be defined or needed by this '
-+                               'service.') % {'key': key, 'group': group})
-+                    continue
-         else:
-             old_value = getattr(config, key, None)
-         if not old_value:
-@@ -77,7 +87,9 @@ def modernize_quantum_config(config):
-         'router_scheduler_driver',
-         'rpc_backend',
-         'service_plugins',
--        ('SECURITYGROUP', 'firewall_driver'),
-+        ('SECURITYGROUP',
-+         'firewall_driver',
-+         'neutron.agent.securitygroups_rpc'),
-     ]
- 
-     override_config(config, config_keys)
-diff --git a/neutron/quota.py b/neutron/quota.py
-index 4111078..105be06 100644
---- a/neutron/quota.py
-+++ b/neutron/quota.py
-@@ -58,7 +58,7 @@ quota_opts = [
- ]
- # Register the configuration options
- cfg.CONF.register_opts(quota_opts, 'QUOTAS')
--legacy.override_config(cfg.CONF, [('QUOTAS', 'quota_driver')])
-+legacy.override_config(cfg.CONF, [('QUOTAS', 'quota_driver', 'neutron.quota')])
- 
- 
- class ConfDriver(object):
-diff --git a/neutron/tests/unit/test_legacy.py b/neutron/tests/unit/test_legacy.py
-index 539f7de..6723d06 100644
---- a/neutron/tests/unit/test_legacy.py
-+++ b/neutron/tests/unit/test_legacy.py
-@@ -71,7 +71,7 @@ class TestLegacyConfigOverride(base.BaseTestCase):
- 
-     def test_override_config_group_key(self):
-         self.cfg(args=['--bar-baz=quantum'])
--        legacy.override_config(self.cfg, [('bar', 'baz')])
-+        legacy.override_config(self.cfg, [('bar', 'baz', 'mod')])
-         self.assertEqual(self.cfg.bar.baz, 'neutron')
- 
-     def test_override_config_list_value(self):
--- 
-1.7.9.2
-
--- a/components/openstack/neutron/patches/06-launchpad-1255441.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-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 5b61df1f539d78cf9d164a142d731e471aa18d4e
-Author: Maru Newby <[email protected]>
-Date:   Wed Nov 27 07:57:48 2013 +0000
-
-    Stop logging unnecessary warning on context create
-    
-    The context was previously logging at the 'warn' level when unknown
-    kwargs were being passed to its __init__().  Since the agents were
-    passing tenant=None with each rpc request, this was generating an
-    unreasonable amount of log chatter that would not be useful to an
-    operator.  The fix is to log at the debug level instead so that
-    the operators don't see the output by default but developers can
-    still choose to.
-    
-    Change-Id: I5c328f628c597eb949c1fe67b23120d2b5d1c7da
-    Related-Bug: #1254530
-    Partial-Bug: #1255441
-
---- neutron-2013.2.3/neutron/context.py.~1~	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/context.py	2014-06-08 12:01:16.420520735 -0700
-@@ -46,8 +46,8 @@
-             *only* deleted records are visible.
-         """
-         if kwargs:
--            LOG.warn(_('Arguments dropped when creating '
--                       'context: %s'), kwargs)
-+            LOG.debug(_('Arguments dropped when creating '
-+                        'context: %s'), kwargs)
-         super(ContextBase, self).__init__(user=user_id, tenant=tenant_id,
-                                           is_admin=is_admin)
-         self.read_deleted = read_deleted
---- neutron-2013.2.3/neutron/tests/unit/test_neutron_context.py.~1~	2014-04-03 11:49:01.000000000 -0700
-+++ neutron-2013.2.3/neutron/tests/unit/test_neutron_context.py	2014-06-08 12:10:04.483779074 -0700
-@@ -35,6 +35,11 @@
-         self.assertEqual('user_id', cxt.user_id)
-         self.assertEqual('tenant_id', cxt.project_id)
- 
-+    def test_neutron_context_create_logs_unknown_kwarg(self):
-+        with mock.patch.object(context.LOG, 'debug') as mock_log:
-+            context.Context('user_id', 'tenant_id', foo=None)
-+        self.assertEqual(mock_log.call_count, 1)
-+
-     def test_neutron_context_to_dict(self):
-         cxt = context.Context('user_id', 'tenant_id')
-         cxt_dict = cxt.to_dict()
--- a/components/openstack/neutron/patches/07-CVE-2014-6414.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-This patch addresses CVE-2014-6414 and is tracked under Launchpad bug
-1357379. It is addressed in the Juno trunk and Icehouse 2014.1.3. There
-is no patch for Havana since it is EOL'ed by upstream. Therefore, this
-patch is derived from the patch for Icehouse 2014.1.3
-
-commit dd4b77ff53479389a5af8b45fd95ee2987562f29
-Author: Elena Ezhova <[email protected]>
-Date:   Tue Aug 19 15:54:36 2014 +0400
-
-    Forbid regular users to reset admin-only attrs to default values
-
-    A regular user can reset an admin-only attribute to its default
-    value due to the fact that a corresponding policy rule is
-    enforced only in the case when an attribute is present in the
-    target AND has a non-default value.
-
-    Added a new attribute "attributes_to_update" which contains a list
-    of all to-be updated attributes to the body of the target that is
-    passed to policy.enforce.
-
-    Changed a check for whether an attribute is explicitly set.
-    Now, in the case of update, the function should not pay attention
-    to a default value of an attribute, but check whether it was
-    explicitly marked as being updated.
-
-    Added unit-tests.
-
-    Conflicts:
-        neutron/common/constants.py
-
-    Closes-Bug: #1357379
-    Related-Bug: #1338880
-    Change-Id: I6537bb1da5ef0d6899bc71e4e949f2c760c103c2
-    (cherry picked from commit 74d10939903984d5f06c1749a8707fa3257e44ff)
-
---- neutron-2013.2.3/neutron/api/v2/base.py	2014-04-03 11:49:01.000000000 -0700
-+++ NEW/neutron/api/v2/base.py	2014-09-30 10:03:51.003850651 -0700
-@@ -24,6 +24,7 @@
- from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api
- from neutron.api.v2 import attributes
- from neutron.api.v2 import resource as wsgi_resource
-+from neutron.common import constants as const
- from neutron.common import exceptions
- from neutron.openstack.common import log as logging
- from neutron.openstack.common.notifier import api as notifier_api
-@@ -469,6 +470,10 @@
-         orig_obj = self._item(request, id, field_list=field_list,
-                               parent_id=parent_id)
-         orig_obj.update(body[self._resource])
-+        # Make a list of attributes to be updated to inform the policy engine
-+        # which attributes are set explicitly so that it can distinguish them
-+        # from the ones that are set to their default values.
-+        orig_obj[const.ATTRIBUTES_TO_UPDATE] = body[self._resource].keys()
-         try:
-             policy.enforce(request.context,
-                            action,
---- neutron-2013.2.3/neutron/common/constants.py	2014-04-03 11:49:01.000000000 -0700
-+++ NEW/neutron/common/constants.py	2014-09-30 10:24:19.837488691 -0700
-@@ -92,3 +92,5 @@
- PROTO_NUM_ICMP = 1
- PROTO_NUM_ICMP_V6 = 58
- PROTO_NUM_UDP = 17
-+
-+ATTRIBUTES_TO_UPDATE = 'attributes_to_update'
---- neutron-2013.2.3/neutron/policy.py	2014-04-03 11:49:01.000000000 -0700
-+++ NEW/neutron/policy.py	2014-09-30 10:12:16.819335023 -0700
-@@ -18,12 +18,15 @@
- """
- Policy engine for neutron.  Largely copied from nova.
- """
-+
-+import collections
- import itertools
- import re
- 
- from oslo.config import cfg
- 
- from neutron.api.v2 import attributes
-+from neutron.common import constants as const
- from neutron.common import exceptions
- import neutron.common.utils as utils
- from neutron import manager
-@@ -118,14 +121,28 @@
-     policy.set_rules(policies)
- 
- 
--def _is_attribute_explicitly_set(attribute_name, resource, target):
--    """Verify that an attribute is present and has a non-default value."""
-+def _is_attribute_explicitly_set(attribute_name, resource, target, action):
-+    """Verify that an attribute is present and is explicitly set."""
-+    if 'update' in action:
-+        # In the case of update, the function should not pay attention to a
-+        # default value of an attribute, but check whether it was explicitly
-+        # marked as being updated instead.
-+        return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and
-+                target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)
-     return ('default' in resource[attribute_name] and
-             attribute_name in target and
-             target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED and
-             target[attribute_name] != resource[attribute_name]['default'])
- 
- 
-+def _should_validate_sub_attributes(attribute, sub_attr):
-+    """Verify that sub-attributes are iterable and should be validated."""
-+    validate = attribute.get('validate')
-+    return (validate and isinstance(sub_attr, collections.Iterable) and
-+            any([k.startswith('type:dict') and
-+                 v for (k, v) in validate.iteritems()]))
-+
-+
- def _build_subattr_match_rule(attr_name, attr, action, target):
-     """Create the rule to match for sub-attribute policy checks."""
-     # TODO(salv-orlando): Instead of relying on validator info, introduce
-@@ -174,16 +191,14 @@
-             for attribute_name in res_map[resource]:
-                 if _is_attribute_explicitly_set(attribute_name,
-                                                 res_map[resource],
--                                                target):
-+                                                target, action):
-                     attribute = res_map[resource][attribute_name]
-                     if 'enforce_policy' in attribute:
-                         attr_rule = policy.RuleCheck('rule', '%s:%s' %
-                                                      (action, attribute_name))
--                        # Build match entries for sub-attributes, if present
--                        validate = attribute.get('validate')
--                        if (validate and any([k.startswith('type:dict') and v
--                                              for (k, v) in
--                                              validate.iteritems()])):
-+                        # Build match entries for sub-attributes
-+                        if _should_validate_sub_attributes(
-+                                attribute, target[attribute_name]):
-                             attr_rule = policy.AndCheck(
-                                 [attr_rule, _build_subattr_match_rule(
-                                     attribute_name, attribute,
---- neutron-2013.2.3/neutron/tests/unit/test_api_v2.py	2014-04-03 11:49:01.000000000 -0700
-+++ NEW/neutron/tests/unit/test_api_v2.py	2014-09-30 10:06:01.484803124 -0700
-@@ -1210,6 +1210,18 @@
-                                                               network_id='id1',
-                                                               dummy=body)
- 
-+    def test_update_subresource_to_none(self):
-+        instance = self.plugin.return_value
-+
-+        dummy_id = _uuid()
-+        body = {'dummy': {}}
-+        self.api.put_json('/networks/id1' + _get_path('dummies', id=dummy_id),
-+                          body)
-+        instance.update_network_dummy.assert_called_once_with(mock.ANY,
-+                                                              dummy_id,
-+                                                              network_id='id1',
-+                                                              dummy=body)
-+
-     def test_delete_sub_resource(self):
-         instance = self.plugin.return_value
- 
---- neutron-2013.2.3/neutron/tests/unit/test_policy.py	2014-04-03 11:49:01.000000000 -0700
-+++ NEW/neutron/tests/unit/test_policy.py	2014-09-30 10:09:03.707133011 -0700
-@@ -24,6 +24,7 @@
- 
- import neutron
- from neutron.api.v2 import attributes
-+from neutron.common import constants as const
- from neutron.common import exceptions
- from neutron import context
- from neutron import manager
-@@ -280,9 +281,11 @@
-         self.addCleanup(self.manager_patcher.stop)
- 
-     def _test_action_on_attr(self, context, action, attr, value,
--                             exception=None):
-+                             exception=None, **kwargs):
-         action = "%s_network" % action
-         target = {'tenant_id': 'the_owner', attr: value}
-+        if kwargs:
-+            target.update(kwargs)
-         if exception:
-             self.assertRaises(exception, policy.enforce,
-                               context, action, target)
-@@ -291,10 +294,10 @@
-             self.assertEqual(result, True)
- 
-     def _test_nonadmin_action_on_attr(self, action, attr, value,
--                                      exception=None):
-+                                      exception=None, **kwargs):
-         user_context = context.Context('', "user", roles=['user'])
-         self._test_action_on_attr(user_context, action, attr,
--                                  value, exception)
-+                                  value, exception, **kwargs)
- 
-     def test_nonadmin_write_on_private_fails(self):
-         self._test_nonadmin_action_on_attr('create', 'shared', False,
-@@ -311,9 +314,11 @@
-     def test_nonadmin_read_on_shared_succeeds(self):
-         self._test_nonadmin_action_on_attr('get', 'shared', True)
- 
--    def _test_enforce_adminonly_attribute(self, action):
-+    def _test_enforce_adminonly_attribute(self, action, **kwargs):
-         admin_context = context.get_admin_context()
-         target = {'shared': True}
-+        if kwargs:
-+            target.update(kwargs)
-         result = policy.enforce(admin_context, action, target)
-         self.assertEqual(result, True)
- 
-@@ -321,7 +326,14 @@
-         self._test_enforce_adminonly_attribute('create_network')
- 
-     def test_enforce_adminonly_attribute_update(self):
--        self._test_enforce_adminonly_attribute('update_network')
-+        kwargs = {const.ATTRIBUTES_TO_UPDATE: ['shared']}
-+        self._test_enforce_adminonly_attribute('update_network', **kwargs)
-+
-+    def test_reset_adminonly_attr_to_default_fails(self):
-+        kwargs = {const.ATTRIBUTES_TO_UPDATE: ['shared']}
-+        self._test_nonadmin_action_on_attr('update', 'shared', False,
-+                                           exceptions.PolicyNotAuthorized,
-+                                           **kwargs)
- 
-     def test_enforce_adminonly_attribute_no_context_is_admin_policy(self):
-         del self.rules[policy.ADMIN_CTX_POLICY]
--- a/components/openstack/neutron/patches/08-CVE-2014-7821.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-This patch addresses CVE-2014-7821 and is tracked under Launchpad bug
-1378450. It is addressed in the stable/Juno and stable/Icehouse. There
-is no patch for Havana since it is EOL'ed by upstream. Therefore, this
-patch is derived from the patch for stable/Icehouse
-
-commit ab7ea069de5cecf1c26af50996a26e1a7f86def4
-Author: John Perkins <email address hidden>
-Date: Mon Oct 6 16:24:57 2014 -0500
-
-    Fix hostname regex pattern
-
-    Current hostname_pattern regex complexity grows exponentially
-    when given a string of just digits, which can be exploited to
-    cause neutron-server to freeze.
-
-    Change-Id: I886c6d883a9cb0acd9908495eec50bf0411d8ba8
-    Closes-bug: #1378450
-
-*** neutron-2013.2.3/neutron/api/v2/attributes.py	2014-04-03 11:49:01.000000000 -0700
---- NEW/neutron/api/v2/attributes.py	2014-11-19 22:04:06.880132434 -0800
-***************
-*** 494,501 ****
-          return [data]
-  
-  
-! HOSTNAME_PATTERN = ("(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]"
-!                     "{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)")
-  
-  HEX_ELEM = '[0-9A-Fa-f]'
-  UUID_PATTERN = '-'.join([HEX_ELEM + '{8}', HEX_ELEM + '{4}',
---- 494,501 ----
-          return [data]
-  
-  
-! HOSTNAME_PATTERN = ("(?=^.{1,254}$)(^(?:(?!\d+.|-)[a-zA-Z0-9_\-]{1,62}"
-!                     "[a-zA-Z0-9]\.?)+(?:[a-zA-Z]{2,})$)")
-  
-  HEX_ELEM = '[0-9A-Fa-f]'
-  UUID_PATTERN = '-'.join([HEX_ELEM + '{8}', HEX_ELEM + '{4}',
-*** neutron-2013.2.3/neutron/tests/unit/test_attributes.py	2014-04-03 11:49:01.000000000 -0700
---- NEW/neutron/tests/unit/test_attributes.py	2014-11-19 22:15:26.539566055 -0800
-***************
-*** 246,251 ****
---- 246,252 ----
-                      ['www.hostname.com', 'www.hostname.com'],
-                      ['77.hostname.com'],
-                      ['1000.0.0.1'],
-+                     ['111111111111111111111111111111111111111111111111111111111111'],  # noqa
-                      None]
-  
-          for ns in ns_pools:
--- a/components/openstack/neutron/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/neutron/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,12 +1,16 @@
 library/python-2/eventlet-26
 library/python-2/netaddr-26
-library/python-2/oslo.config-26
-library/python/eventlet-26
-library/python/netaddr-26
+library/python-2/python-mysql-26
+library/python-2/simplejson-26
+library/python-2/sqlalchemy-26
+library/python/iniparse-26
 library/python/oslo.config-26
+library/python/oslo.db-26
+library/python/six-26
 network/ipfilter
 runtime/python-26
 service/network/dnsmasq
 service/network/evs
 system/core-os
+system/management/rad/client/rad-python
 system/network
--- a/components/openstack/nova/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -22,23 +22,27 @@
 #
 # Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		nova
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	2013.2.3
+COMPONENT_CODENAME=	juno
+COMPONENT_VERSION=	2014.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:02902cb65b5adb0419c69cdb03ea2a0cfdfe8f7df342be44f3760d66cdecb61e
+    sha256:18dfd433aa043389318f28890578dcbe3c0606a38360f39ec8df8670150f89d7
 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/nova
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
+
+TPNO=			21825
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -46,16 +50,43 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
 
+#
 # Replace the standard nova/virt/libvirt/__init__.py with an empty file.
+#
+# All of the nova SMF manifests depend on nova-upgrade so copy it into
+# the proto directory for pkgdepend(1) to find.
+#
 COMPONENT_POST_INSTALL_ACTION += \
 	($(CP) /dev/null $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/libvirt/__init__.py; \
+         $(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+         $(CP) \
+             files/nova-api-ec2.xml \
+             files/nova-api-metadata.xml \
+             files/nova-api-osapi-compute.xml \
+             files/nova-cert.xml \
+             files/nova-compute.xml \
+             files/nova-conductor.xml \
+             files/nova-consoleauth.xml \
+             files/nova-novncproxy.xml \
+             files/nova-objectstore.xml \
+             files/nova-scheduler.xml \
+             files/nova-upgrade.xml \
+             files/zone-vnc-console.xml \
+             $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+	 $(CP) \
+	     files/network/solaris_net.py \
+	     $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/network; \
 	 $(MKDIR) $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/solariszones; \
-	 $(CP) files/solariszones/__init__.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/solariszones; \
-	 $(CP) files/solariszones/driver.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/solariszones; \
-	 $(CP) files/solariszones/sysconfig.py $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/solariszones); \
-        $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
+	 $(CP) \
+	     files/solariszones/__init__.py \
+	     files/solariszones/driver.py \
+	     files/solariszones/sysconfig.py \
+	     $(PROTO_DIR)/usr/lib/python2.6/vendor-packages/nova/virt/solariszones); \
+	$(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
--- a/components/openstack/nova/files/api-paste.ini	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-############
-# Metadata #
-############
-[composite:metadata]
-use = egg:Paste#urlmap
-/: meta
-
-[pipeline:meta]
-pipeline = ec2faultwrap logrequest metaapp
-
-[app:metaapp]
-paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory
-
-#######
-# EC2 #
-#######
-
-[composite:ec2]
-use = egg:Paste#urlmap
-/services/Cloud: ec2cloud
-
-[composite:ec2cloud]
-use = call:nova.api.auth:pipeline_factory
-noauth = ec2faultwrap logrequest ec2noauth cloudrequest validator ec2executor
-keystone = ec2faultwrap logrequest ec2keystoneauth cloudrequest validator ec2executor
-
-[filter:ec2faultwrap]
-paste.filter_factory = nova.api.ec2:FaultWrapper.factory
-
-[filter:logrequest]
-paste.filter_factory = nova.api.ec2:RequestLogging.factory
-
-[filter:ec2lockout]
-paste.filter_factory = nova.api.ec2:Lockout.factory
-
-[filter:ec2keystoneauth]
-paste.filter_factory = nova.api.ec2:EC2KeystoneAuth.factory
-
-[filter:ec2noauth]
-paste.filter_factory = nova.api.ec2:NoAuth.factory
-
-[filter:cloudrequest]
-controller = nova.api.ec2.cloud.CloudController
-paste.filter_factory = nova.api.ec2:Requestify.factory
-
-[filter:authorizer]
-paste.filter_factory = nova.api.ec2:Authorizer.factory
-
-[filter:validator]
-paste.filter_factory = nova.api.ec2:Validator.factory
-
-[app:ec2executor]
-paste.app_factory = nova.api.ec2:Executor.factory
-
-#############
-# Openstack #
-#############
-
-[composite:osapi_compute]
-use = call:nova.api.openstack.urlmap:urlmap_factory
-/: oscomputeversions
-/v1.1: openstack_compute_api_v2
-/v2: openstack_compute_api_v2
-/v3: openstack_compute_api_v3
-
-[composite:openstack_compute_api_v2]
-use = call:nova.api.auth:pipeline_factory
-noauth = faultwrap sizelimit noauth ratelimit osapi_compute_app_v2
-keystone = faultwrap sizelimit authtoken keystonecontext ratelimit osapi_compute_app_v2
-keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v2
-
-[composite:openstack_compute_api_v3]
-use = call:nova.api.auth:pipeline_factory
-noauth = faultwrap sizelimit noauth_v3 ratelimit_v3 osapi_compute_app_v3
-keystone = faultwrap sizelimit authtoken keystonecontext ratelimit_v3 osapi_compute_app_v3
-keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v3
-
-[filter:faultwrap]
-paste.filter_factory = nova.api.openstack:FaultWrapper.factory
-
-[filter:noauth]
-paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory
-
-[filter:noauth_v3]
-paste.filter_factory = nova.api.openstack.auth:NoAuthMiddlewareV3.factory
-
-[filter:ratelimit]
-paste.filter_factory = nova.api.openstack.compute.limits:RateLimitingMiddleware.factory
-
-[filter:ratelimit_v3]
-paste.filter_factory = nova.api.openstack.compute.plugins.v3.limits:RateLimitingMiddleware.factory
-
-[filter:sizelimit]
-paste.filter_factory = nova.api.sizelimit:RequestBodySizeLimiter.factory
-
-[app:osapi_compute_app_v2]
-paste.app_factory = nova.api.openstack.compute:APIRouter.factory
-
-[app:osapi_compute_app_v3]
-paste.app_factory = nova.api.openstack.compute:APIRouterV3.factory
-
-[pipeline:oscomputeversions]
-pipeline = faultwrap oscomputeversionapp
-
-[app:oscomputeversionapp]
-paste.app_factory = nova.api.openstack.compute.versions:Versions.factory
-
-##########
-# Shared #
-##########
-
-[filter:keystonecontext]
-paste.filter_factory = nova.api.auth:NovaKeystoneContext.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 nova process is running as.
-signing_dir = /var/lib/nova/keystone-signing
-# Workaround for https://bugs.launchpad.net/nova/+bug/1154809
-auth_version = v2.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/network/solaris_net.py	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,18 @@
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+def metadata_accept():
+    """There is nothing to do for Solaris"""
+    pass
--- a/components/openstack/nova/files/nova-api-ec2.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-api-ec2.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/nova/files/nova-api-metadata.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-api-metadata.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/nova/files/nova-api-osapi-compute.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-api-osapi-compute.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/nova/files/nova-cert.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-cert.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='conductor' grouping='optional_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/application/openstack/nova/nova-conductor' />
@@ -40,6 +46,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -64,7 +75,7 @@
     <template>
       <common_name>
         <loctext xml:lang="C">
-          OpenStack Nova Cert Service 
+          OpenStack Nova Cert Service
         </loctext>
       </common_name>
       <description>
--- a/components/openstack/nova/files/nova-compute.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-compute.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='evs' grouping='require_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/network/evs:default' />
@@ -45,6 +51,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <!-- increase the timeout to 120 seconds.  Nova's RPC calls have a timeout
--- a/components/openstack/nova/files/nova-conductor.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-conductor.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,27 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='mysql' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/database/mysql'/>
+    </dependency>
+
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/nova/files/nova-consoleauth.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-consoleauth.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- a/components/openstack/nova/files/nova-novncproxy.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-novncproxy.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -56,10 +67,6 @@
       </property_group>
     </instance>
 
-    <property_group type="framework" name="startd">
-      <propval type="astring" name="duration" value="child"/>
-    </property_group>
-
     <template>
       <common_name>
         <loctext xml:lang="C">
--- a/components/openstack/nova/files/nova-objectstore.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-objectstore.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,11 +30,22 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
@@ -59,7 +70,7 @@
     <template>
       <common_name>
         <loctext xml:lang="C">
-          OpenStack Nova Object Store Service 
+          OpenStack Nova Object Store Service
         </loctext>
       </common_name>
       <description>
--- a/components/openstack/nova/files/nova-scheduler.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova-scheduler.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,12 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri
+        value='svc:/application/openstack/nova/nova-upgrade' />
+    </dependency>
+
     <dependency name='conductor' grouping='optional_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/application/openstack/nova/nova-conductor' />
@@ -40,6 +46,11 @@
       <service_fmri value='svc:/network/ntp'/>
     </dependency>
 
+    <dependency name='rabbitmq' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/amqp/rabbitmq'/>
+    </dependency>
+
     <logfile_attributes permissions='600'/>
 
     <exec_method timeout_seconds="60" type="method" name="start"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,319 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import time
+import traceback
+
+import iniparse
+import smf_include
+import sqlalchemy
+
+
+NOVA_CONF_MAPPINGS = {
+    # Deprecated group/name
+    ('DEFAULT', 'rabbit_durable_queues'): ('DEFAULT', 'amqp_durable_queues'),
+    ('rpc_notifier2', 'topics'): ('DEFAULT', 'notification_topics'),
+    ('DEFAULT', 'quota_injected_file_path_bytes'):
+        ('DEFAULT', 'quota_injected_file_path_length'),
+    ('DEFAULT', 'log_config'): ('DEFAULT', 'log_config_append'),
+    ('DEFAULT', 'logfile'): ('DEFAULT', 'log_file'),
+    ('DEFAULT', 'logdir'): ('DEFAULT', 'log_dir'),
+    ('DEFAULT', 'cinder_catalog_info'): ('cinder', 'catalog_info'),
+    ('DEFAULT', 'cinder_endpoint_template'): ('cinder', 'endpoint_template'),
+    ('DEFAULT', 'os_region_name'): ('cinder', 'os_region_name'),
+    ('DEFAULT', 'cinder_ca_certificates_file'):
+        ('cinder', 'ca_certificates_file'),
+    ('DEFAULT', 'cinder_http_retries'): ('cinder', 'http_retries'),
+    ('DEFAULT', 'cinder_http_timeout'): ('cinder', 'http_timeout'),
+    ('DEFAULT', 'cinder_api_insecure'): ('cinder', 'api_insecure'),
+    ('DEFAULT', 'cinder_cross_az_attach'): ('cinder', 'cross_az_attach'),
+    ('DEFAULT', 'db_backend'): ('database', 'backend'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_connection'): ('database', 'connection'),
+    ('sql', 'connection'): ('database', 'connection'),
+    ('DEFAULT', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('DATABASE', 'sql_idle_timeout'): ('database', 'idle_timeout'),
+    ('sql', 'idle_timeout'): ('database', 'idle_timeout'),
+    ('DEFAULT', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DATABASE', 'sql_min_pool_size'): ('database', 'min_pool_size'),
+    ('DEFAULT', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DATABASE', 'sql_max_pool_size'): ('database', 'max_pool_size'),
+    ('DEFAULT', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DATABASE', 'sql_max_retries'): ('database', 'max_retries'),
+    ('DEFAULT', 'sql_retry_interval'): ('database', 'retry_interval'),
+    ('DATABASE', 'reconnect_interval'): ('database', 'retry_interval'),
+    ('DEFAULT', 'sql_max_overflow'): ('database', 'max_overflow'),
+    ('DATABASE', 'sqlalchemy_max_overflow'): ('database', 'max_overflow'),
+    ('DEFAULT', 'sql_connection_debug'): ('database', 'connection_debug'),
+    ('DEFAULT', 'sql_connection_trace'): ('database', 'connection_trace'),
+    ('DATABASE', 'sqlalchemy_pool_timeout'): ('database', 'pool_timeout'),
+    ('DEFAULT', 'glance_host'): ('glance', 'host'),
+    ('DEFAULT', 'glance_port'): ('glance', 'port'),
+    ('DEFAULT', 'glance_protocol'): ('glance', 'protocol'),
+    ('DEFAULT', 'glance_api_servers'): ('glance', 'api_servers'),
+    ('DEFAULT', 'glance_api_insecure'): ('glance', 'api_insecure'),
+    ('DEFAULT', 'glance_num_retries'): ('glance', 'num_retries'),
+    ('DEFAULT', 'memcache_servers'):
+        ('keystone_authtoken', 'memcached_servers'),
+    ('DEFAULT', 'matchmaker_ringfile'): ('matchmaker_ring', 'ringfile'),
+    ('DEFAULT', 'service_neutron_metadata_proxy'):
+        ('neutron', 'service_metadata_proxy'),
+    ('DEFAULT', 'neutron_metadata_proxy_shared_secret'):
+        ('neutron', 'metadata_proxy_shared_secret'),
+    ('DEFAULT', 'neutron_url'): ('neutron', 'url'),
+    ('DEFAULT', 'neutron_url_timeout'): ('neutron', 'url_timeout'),
+    ('DEFAULT', 'neutron_admin_username'): ('neutron', 'admin_username'),
+    ('DEFAULT', 'neutron_admin_password'): ('neutron', 'admin_password'),
+    ('DEFAULT', 'neutron_admin_tenant_id'): ('neutron', 'admin_tenant_id'),
+    ('DEFAULT', 'neutron_admin_tenant_name'): ('neutron', 'admin_tenant_name'),
+    ('DEFAULT', 'neutron_region_name'): ('neutron', 'region_name'),
+    ('DEFAULT', 'neutron_admin_auth_url'): ('neutron', 'admin_auth_url'),
+    ('DEFAULT', 'neutron_api_insecure'): ('neutron', 'api_insecure'),
+    ('DEFAULT', 'neutron_auth_strategy'): ('neutron', 'auth_strategy'),
+    ('DEFAULT', 'neutron_ovs_bridge'): ('neutron', 'ovs_bridge'),
+    ('DEFAULT', 'neutron_extension_sync_interval'):
+        ('neutron', 'extension_sync_interval'),
+    ('DEFAULT', 'neutron_ca_certificates_file'):
+        ('neutron', 'ca_certificates_file'),
+    ('DEFAULT', 'spicehtml5proxy_host'): ('spice', 'html5proxy_host'),
+    ('DEFAULT', 'spicehtml5proxy_port'): ('spice', 'html5proxy_port'),
+    # No longer referenced by the service
+    ('DEFAULT', 'sql_connection'): (None, None),
+}
+
+
+def update_mapping(section, key, mapping):
+    """ look for deprecated variables and, if found, convert it to the new
+    section/key.
+    """
+
+    if (section, key) in mapping:
+        print "Deprecated value found: [%s] %s" % (section, key)
+        section, key = mapping[(section, key)]
+        if section is None and key is None:
+            print "Removing from configuration"
+        else:
+            print "Updating to: [%s] %s" % (section, key)
+    return section, key
+
+
+def alter_mysql_tables(engine):
+    """ Convert MySQL tables to use utf8
+    """
+
+    import MySQLdb
+
+    for _none in range(5):
+        try:
+            db = MySQLdb.connect(host=engine.url.host,
+                                 user=engine.url.username,
+                                 passwd=engine.url.password,
+                                 db=engine.url.database)
+            break
+        except MySQLdb.OperationalError as err:
+            # mysql is not ready. sleep for 2 more seconds
+            time.sleep(2)
+    else:
+        print "Unable to connect to MySQL:  %s" % err
+        print ("Please verify MySQL is properly configured and online "
+               "before using svcadm(1M) to clear this service.")
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
+
+    cursor = db.cursor()
+    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
+                   engine.url.database)
+    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
+                   engine.url.database)
+    cursor.execute("SHOW tables")
+    res = cursor.fetchall()
+    if res:
+        cursor.execute("SET foreign_key_checks = 0")
+        for item in res:
+            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
+                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
+                           % (engine.url.database, item[0]))
+        cursor.execute("SET foreign_key_checks = 1")
+        db.commit()
+        db.close()
+
+
+def modify_conf(old_file, mapping=None):
+    """ Copy over all uncommented options from the old configuration file.  In
+    addition, look for deprecated section/keys and convert them to the new
+    section/key.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # It's possible that nova.conf has database.connection commented out (to
+    # use the default value).  If it is, and none of other deprecated values
+    # are set, manually set database.connection in the new conf file.
+    if 'nova.conf' in old_file:
+        options = [
+            ('database', 'sql_connection'),
+            ('sql', 'connection'),
+            ('database', 'connection'),
+            ('DEFAULT', 'sql_connection')
+        ]
+        test = lambda x: old.has_section(x[0]) and old.has_option(x[0], x[1])
+        if not any(map(test, options)):
+            if old.has_option('DEFAULT', 'state_path'):
+                state_path = old.get('DEFAULT', 'state_path')
+            else:
+                state_path = '/var/lib/nova'
+
+            if old.has_option('DEFAULT', 'sqlite_db'):
+                sqlite_db = old.get('DEFAULT', 'sqlite_db')
+            else:
+                sqlite_db = 'nova.sqlite'
+
+            new.set('database', 'connection',
+                    'sqlite:///%s/%s' % (state_path, sqlite_db))
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if mapping is not None:
+                section, key = update_mapping(section, key, mapping)
+
+                if section is None and key is None:
+                    # option is deprecated so continue
+                    continue
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/nova'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/nova/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/nova/api-paste.ini')
+        modify_conf('/etc/nova/logging.conf')
+        modify_conf('/etc/nova/nova.conf', NOVA_CONF_MAPPINGS)
+
+    config = iniparse.RawConfigParser()
+    config.read('/etc/nova/nova.conf')
+    # In certain cases the database section does not exist and the
+    # default database chosen is sqlite.
+    if config.has_section('database'):
+        db_connection = config.get('database', 'connection')
+
+        if db_connection.startswith('mysql'):
+            engine = sqlalchemy.create_engine(db_connection)
+            if engine.url.username != '%SERVICE_USER%':
+                alter_mysql_tables(engine)
+                print "altered character set to utf8 in nova tables"
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="nova">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/nova-upgrade %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-upgrade is a transient service to upgrade the Nova
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/nova/files/nova.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,14 +1,200 @@
 [DEFAULT]
 
 #
+# Options defined in oslo.messaging
+#
+
+# Use durable queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
+#amqp_durable_queues=false
+
+# Auto-delete queues in AMQP. (boolean value)
+#amqp_auto_delete=false
+
+# Size of RPC connection pool. (integer value)
+#rpc_conn_pool_size=30
+
+# Qpid broker hostname. (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port. (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs. (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for Qpid connection. (string value)
+#qpid_username=
+
+# Password for Qpid connection. (string value)
+#qpid_password=
+
+# Space separated list of SASL mechanisms to use for auth.
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats. (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl'. (string value)
+#qpid_protocol=tcp
+
+# Whether to disable the Nagle algorithm. (boolean value)
+#qpid_tcp_nodelay=true
+
+# The number of prefetched messages held by receiver. (integer
+# value)
+#qpid_receiver_capacity=1
+
+# The qpid topology version to use.  Version 1 is what was
+# originally used by impl_qpid.  Version 2 includes some
+# backwards-incompatible changes that allow broker federation
+# to work.  Users should update to version 2 when they are
+# able to take everything down, as it requires a clean break.
+# (integer value)
+#qpid_topology_version=1
+
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1 and SSLv23. SSLv2 and SSLv3 may be available on
+# some distributions. (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled). (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled). (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL
+# enabled). (string value)
+#kombu_ssl_ca_certs=
+
+# How long to wait before reconnecting in response to an AMQP
+# consumer cancel notification. (floating point value)
+#kombu_reconnect_delay=1.0
+
+# The RabbitMQ broker address where a single node is used.
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used.
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs. (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# Connect over SSL for RabbitMQ. (boolean value)
+#rabbit_use_ssl=false
+
+# The RabbitMQ userid. (string value)
+#rabbit_userid=guest
+
+# The RabbitMQ password. (string value)
+#rabbit_password=guest
+
+# The RabbitMQ login method. (string value)
+#rabbit_login_method=AMQPLAIN
+
+# The RabbitMQ virtual host. (string value)
+#rabbit_virtual_host=/
+
+# How frequently to retry connecting with RabbitMQ. (integer
+# value)
+#rabbit_retry_interval=1
+
+# How long to backoff for between retries when connecting to
+# RabbitMQ. (integer value)
+#rabbit_retry_backoff=2
+
+# Maximum number of RabbitMQ connection retries. Default is 0
+# (infinite retry count). (integer value)
+#rabbit_max_retries=0
+
+# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
+# this option, you must wipe the RabbitMQ database. (boolean
+# value)
+#rabbit_ha_queues=false
+
+# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
+# (boolean value)
+#fake_rabbit=false
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
+
+# MatchMaker driver. (string value)
+#rpc_zmq_matchmaker=oslo.messaging._drivers.matchmaker.MatchMakerLocalhost
+
+# ZeroMQ receiver listening port. (integer value)
+#rpc_zmq_port=9501
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
+
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=nova
+
+# Seconds to wait before a cast expires (TTL). Only supported
+# by impl_zmq. (integer value)
+#rpc_cast_timeout=30
+
+# Heartbeat frequency. (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+# Size of RPC greenthread pool. (integer value)
+#rpc_thread_pool_size=64
+
+# Driver or drivers to handle sending notifications. (multi
+# valued)
+#notification_driver=
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+#notification_topics=notifications
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
+
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include qpid and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=openstack
+
+
+#
 # Options defined in nova.availability_zones
 #
 
-# availability_zone to show internal services under (string
-# value)
+# The availability_zone to show internal services under
+# (string value)
 #internal_service_availability_zone=internal
 
-# default compute node availability_zone (string value)
+# Default compute node availability_zone (string value)
 #default_availability_zone=nova
 
 
@@ -47,7 +233,7 @@
 # Options defined in nova.exception
 #
 
-# make exception message format errors fatal (boolean value)
+# Make exception message format errors fatal (boolean value)
 #fatal_exception_format_errors=false
 
 
@@ -55,7 +241,7 @@
 # Options defined in nova.netconf
 #
 
-# ip address of this host (string value)
+# IP address of this host (string value)
 #my_ip=10.0.0.1
 
 # Name of this node.  This can be an opaque identifier.  It is
@@ -64,7 +250,7 @@
 # ZeroMQ, a valid hostname, FQDN, or IP address (string value)
 #host=nova
 
-# use ipv6 (boolean value)
+# Use IPv6 (boolean value)
 #use_ipv6=false
 
 
@@ -83,6 +269,14 @@
 # the API service. (boolean value)
 #notify_api_faults=false
 
+# Default notification level for outgoing notifications
+# (string value)
+#default_notification_level=INFO
+
+# Default publisher_id for outgoing notifications (string
+# value)
+#default_publisher_id=<None>
+
 
 #
 # Options defined in nova.paths
@@ -90,7 +284,7 @@
 
 # Directory where the nova python module is installed (string
 # value)
-#pybasedir=/usr/lib/python2.6/vendor-packages
+pybasedir=/usr/lib/python2.6/vendor-packages
 
 # Directory where nova binaries are installed (string value)
 bindir=/usr/bin
@@ -101,73 +295,68 @@
 
 
 #
-# Options defined in nova.policy
-#
-
-# JSON file representing policy (string value)
-#policy_file=policy.json
-
-# Rule checked when requested rule is not found (string value)
-#policy_default_rule=default
-
-
-#
 # Options defined in nova.quota
 #
 
-# number of instances allowed per project (integer value)
+# Number of instances allowed per project (integer value)
 #quota_instances=10
 
-# number of instance cores allowed per project (integer value)
+# Number of instance cores allowed per project (integer value)
 #quota_cores=20
 
-# megabytes of instance ram allowed per project (integer
+# Megabytes of instance RAM allowed per project (integer
 # value)
 #quota_ram=51200
 
-# number of floating ips allowed per project (integer value)
+# Number of floating IPs allowed per project (integer value)
 #quota_floating_ips=10
 
-# number of fixed ips allowed per project (this should be at
+# Number of fixed IPs allowed per project (this should be at
 # least the number of instances allowed) (integer value)
 #quota_fixed_ips=-1
 
-# number of metadata items allowed per instance (integer
+# Number of metadata items allowed per instance (integer
 # value)
 #quota_metadata_items=128
 
-# number of injected files allowed (integer value)
+# Number of injected files allowed (integer value)
 #quota_injected_files=5
 
-# number of bytes allowed per injected file (integer value)
+# Number of bytes allowed per injected file (integer value)
 #quota_injected_file_content_bytes=10240
 
-# number of bytes allowed per injected file path (integer
-# value)
-#quota_injected_file_path_bytes=255
-
-# number of security groups per project (integer value)
+# Length of injected file path (integer value)
+# Deprecated group/name - [DEFAULT]/quota_injected_file_path_bytes
+#quota_injected_file_path_length=255
+
+# Number of security groups per project (integer value)
 #quota_security_groups=10
 
-# number of security rules per security group (integer value)
+# Number of security rules per security group (integer value)
 #quota_security_group_rules=20
 
-# number of key pairs per user (integer value)
+# Number of key pairs per user (integer value)
 #quota_key_pairs=100
 
-# number of seconds until a reservation expires (integer
+# Number of server groups per project (integer value)
+#quota_server_groups=10
+
+# Number of servers per server group (integer value)
+#quota_server_group_members=10
+
+# Number of seconds until a reservation expires (integer
 # value)
 #reservation_expire=86400
 
-# count of reservations until usage is refreshed (integer
+# Count of reservations until usage is refreshed (integer
 # value)
 #until_refresh=0
 
-# number of seconds between subsequent usage refreshes
+# Number of seconds between subsequent usage refreshes
 # (integer value)
 #max_age=0
 
-# default driver to use for quota checks (string value)
+# Default driver to use for quota checks (string value)
 #quota_driver=nova.quota.DbQuotaDriver
 
 
@@ -175,71 +364,82 @@
 # Options defined in nova.service
 #
 
-# seconds between nodes reporting state to datastore (integer
+# Seconds between nodes reporting state to datastore (integer
 # value)
 #report_interval=10
 
-# enable periodic tasks (boolean value)
+# Enable periodic tasks (boolean value)
 #periodic_enable=true
 
-# range of seconds to randomly delay when starting the
+# Range of seconds to randomly delay when starting the
 # periodic task scheduler to reduce stampeding. (Disable by
 # setting to 0) (integer value)
 #periodic_fuzzy_delay=60
 
-# a list of APIs to enable by default (list value)
+# A list of APIs to enable by default (list value)
 #enabled_apis=ec2,osapi_compute,metadata
 
-# a list of APIs with enabled SSL (list value)
+# A list of APIs with enabled SSL (list value)
 #enabled_ssl_apis=
 
-# IP address for EC2 API to listen (string value)
+# The IP address on which the EC2 API will listen. (string
+# value)
 #ec2_listen=0.0.0.0
 
-# port for ec2 api to listen (integer value)
+# The port on which the EC2 API will listen. (integer value)
 #ec2_listen_port=8773
 
-# Number of workers for EC2 API service (integer value)
-#ec2_workers=<None>
-
-# IP address for OpenStack API to listen (string value)
+# Number of workers for EC2 API service. The default will be
+# equal to the number of CPUs available. (integer value)
+ec2_workers=1
+
+# The IP address on which the OpenStack API will listen.
+# (string value)
 #osapi_compute_listen=0.0.0.0
 
-# list port for osapi compute (integer value)
+# The port on which the OpenStack API will listen. (integer
+# value)
 #osapi_compute_listen_port=8774
 
-# Number of workers for OpenStack API service (integer value)
-#osapi_compute_workers=<None>
+# Number of workers for OpenStack API service. The default
+# will be the number of CPUs available. (integer value)
+osapi_compute_workers=1
 
 # OpenStack metadata service manager (string value)
 #metadata_manager=nova.api.manager.MetadataManager
 
-# IP address for metadata api to listen (string value)
+# The IP address on which the metadata API will listen.
+# (string value)
 #metadata_listen=0.0.0.0
 
-# port for metadata api to listen (integer value)
+# The port on which the metadata API will listen. (integer
+# value)
 #metadata_listen_port=8775
 
-# Number of workers for metadata service (integer value)
-#metadata_workers=<None>
-
-# full class name for the Manager for compute (string value)
+# Number of workers for metadata service. The default will be
+# the number of CPUs available. (integer value)
+metadata_workers=1
+
+# Full class name for the Manager for compute (string value)
 #compute_manager=nova.compute.manager.ComputeManager
 
-# full class name for the Manager for console proxy (string
+# Full class name for the Manager for console proxy (string
 # value)
 #console_manager=nova.console.manager.ConsoleProxyManager
 
-# full class name for the Manager for cert (string value)
+# Manager for console auth (string value)
+#consoleauth_manager=nova.consoleauth.manager.ConsoleAuthManager
+
+# Full class name for the Manager for cert (string value)
 #cert_manager=nova.cert.manager.CertManager
 
-# full class name for the Manager for network (string value)
+# Full class name for the Manager for network (string value)
 #network_manager=nova.network.manager.VlanManager
 
-# full class name for the Manager for scheduler (string value)
+# Full class name for the Manager for scheduler (string value)
 #scheduler_manager=nova.scheduler.manager.SchedulerManager
 
-# maximum time since last check-in for up service (integer
+# Maximum time since last check-in for up service (integer
 # value)
 #service_down_time=60
 
@@ -265,7 +465,7 @@
 # Length of generated instance admin passwords (integer value)
 #password_length=12
 
-# time period to generate instance usages for.  Time period
+# Time period to generate instance usages for.  Time period
 # must be hour, day, month or year (string value)
 #instance_usage_audit_period=month
 
@@ -306,18 +506,39 @@
 # socket. Not supported on OS X. (integer value)
 #tcp_keepidle=600
 
+# Size of the pool of greenthreads used by wsgi (integer
+# value)
+#wsgi_default_pool_size=1000
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs). (integer value)
+#max_header_line=16384
+
+# If False, closes the client socket connection explicitly.
+# (boolean value)
+#wsgi_keep_alive=true
+
+# Timeout for client connections' socket operations. If an
+# incoming connection is idle for this number of seconds it
+# will be closed. A value of '0' means wait forever. (integer
+# value)
+#client_socket_timeout=0
+
 
 #
 # Options defined in nova.api.auth
 #
 
-# whether to use per-user rate limiting for the api. (boolean
-# value)
+# Whether to use per-user rate limiting for the api. This
+# option is only used by v2 api. Rate limiting is removed from
+# v3 api. (boolean value)
 #api_rate_limit=false
 
 # The strategy to use for auth: noauth or keystone. (string
 # value)
-auth_strategy=keystone
+#auth_strategy=keystone
 
 # Treat X-Forwarded-For as the canonical remote address. Only
 # enable this if you have a sanitizing proxy. (boolean value)
@@ -356,24 +577,24 @@
 # Options defined in nova.api.ec2.cloud
 #
 
-# the ip of the ec2 api server (string value)
+# The IP address of the EC2 API server (string value)
 #ec2_host=$my_ip
 
-# the internal ip of the ec2 api server (string value)
+# The internal IP address of the EC2 API server (string value)
 #ec2_dmz_host=$my_ip
 
-# the port of the ec2 api server (integer value)
+# The port of the EC2 API server (integer value)
 #ec2_port=8773
 
-# the protocol to use when connecting to the ec2 api server
+# The protocol to use when connecting to the EC2 API server
 # (http, https) (string value)
 #ec2_scheme=http
 
-# the path prefix used to call the ec2 api server (string
+# The path prefix used to call the ec2 API server (string
 # value)
 #ec2_path=/services/Cloud
 
-# list of region=fqdn pairs separated by commas (list value)
+# List of region=fqdn pairs separated by commas (list value)
 #region_list=
 
 
@@ -390,23 +611,10 @@
 
 
 #
-# Options defined in nova.api.metadata.handler
-#
-
-# Set flag to indicate Neutron will proxy metadata requests
-# and resolve instance ids. (boolean value)
-#service_neutron_metadata_proxy=false
-
-# Shared secret to validate proxies Neutron metadata requests
-# (string value)
-#neutron_metadata_proxy_shared_secret=
-
-
-#
 # Options defined in nova.api.metadata.vendordata_json
 #
 
-# File to load json formated vendor data from (string value)
+# File to load JSON formatted vendor data from (string value)
 #vendordata_jsonfile_path=<None>
 
 
@@ -414,7 +622,7 @@
 # Options defined in nova.api.openstack.common
 #
 
-# the maximum number of items returned in a single response
+# The maximum number of items returned in a single response
 # from a collection resource (integer value)
 #osapi_max_limit=1000
 
@@ -491,8 +699,10 @@
 # Options defined in nova.api.openstack.compute.servers
 #
 
-# Allows use of instance password during server creation
-# (boolean value)
+# Enables returning of the instance password by the relevant
+# server API calls such as create, rebuild or rescue, If the
+# hypervisor does not support password injection then the
+# password returned will not be correct (boolean value)
 #enable_instance_password=true
 
 
@@ -500,25 +710,16 @@
 # Options defined in nova.api.sizelimit
 #
 
-# the maximum body size per each osapi request(bytes) (integer
+# The maximum body size per each osapi request(bytes) (integer
 # value)
 #osapi_max_request_body_size=114688
 
 
 #
-# Options defined in nova.cells.opts
-#
-
-# The full class name of the compute API class to use
-# (deprecated) (string value)
-#compute_api_class=nova.compute.api.API
-
-
-#
 # Options defined in nova.cert.rpcapi
 #
 
-# the topic cert nodes listen on (string value)
+# The topic cert nodes listen on (string value)
 #cert_topic=cert
 
 
@@ -526,7 +727,7 @@
 # Options defined in nova.cloudpipe.pipelib
 #
 
-# image id used when starting up a cloudpipe vpn server
+# Image ID used when starting up a cloudpipe vpn server
 # (string value)
 #vpn_image_id=0
 
@@ -587,18 +788,6 @@
 
 
 #
-# Options defined in nova.cmd.spicehtml5proxy
-#
-
-# Host on which to listen for incoming requests (string value)
-#spicehtml5proxy_host=0.0.0.0
-
-# Port on which to listen for incoming requests (integer
-# value)
-#spicehtml5proxy_port=6082
-
-
-#
 # Options defined in nova.compute.api
 #
 
@@ -610,7 +799,7 @@
 # in single-host environments. (boolean value)
 #allow_migrate_to_same_host=false
 
-# availability zone to use when user doesn't specify one
+# Availability zone to use when user doesn't specify one
 # (string value)
 #default_schedule_zone=<None>
 
@@ -618,7 +807,7 @@
 # inherit from an instance (list value)
 #non_inheritable_image_properties=cache_in_nova,bittorrent
 
-# kernel image that indicates not to use a kernel, but to use
+# Kernel image that indicates not to use a kernel, but to use
 # a raw disk image instead (string value)
 #null_kernel=nokernel
 
@@ -642,7 +831,7 @@
 # Options defined in nova.compute.flavors
 #
 
-# default flavor to use for the EC2 API only. The Nova API
+# Default flavor to use for the EC2 API only. The Nova API
 # does not support a default flavor. (string value)
 #default_flavor=m1.small
 
@@ -655,7 +844,7 @@
 # host. (string value)
 #console_host=nova
 
-# Name of network to use to set access ips for instances
+# Name of network to use to set access IPs for instances
 # (string value)
 #default_access_ip_network_name=<None>
 
@@ -664,7 +853,7 @@
 # (boolean value)
 #defer_iptables_apply=false
 
-# where instances are stored on disk (string value)
+# Where instances are stored on disk (string value)
 #instances_path=$state_path/instances
 
 # Generate periodic compute.instance.exists notifications
@@ -683,29 +872,30 @@
 # (integer value)
 #network_allocate_retries=0
 
+# Number of times to retry block device allocation on failures
+# (integer value)
+#block_device_allocate_retries=60
+
 # The number of times to attempt to reap an instance's files.
 # (integer value)
 #maximum_instance_delete_attempts=5
 
-# interval to pull bandwidth usage info (integer value)
+# Interval to pull network bandwidth usage info. Not supported
+# on all hypervisors. Set to -1 to disable. Setting this to 0
+# will disable, but this will change in the K release to mean
+# "run at the default rate". (integer value)
 #bandwidth_poll_interval=600
 
-# interval to sync power states between the database and the
-# hypervisor (integer value)
+# Interval to sync power states between the database and the
+# hypervisor. Set to -1 to disable. Setting this to 0 will
+# disable, but this will change in Juno to mean "run at the
+# default rate". (integer value)
 #sync_power_state_interval=600
 
 # Number of seconds between instance info_cache self healing
 # updates (integer value)
 #heal_instance_info_cache_interval=60
 
-# Interval in seconds for querying the host status (integer
-# value)
-#host_state_interval=120
-
-# Number of seconds to wait between runs of the image cache
-# manager (integer value)
-#image_cache_manager_interval=2400
-
 # Interval in seconds for reclaiming deleted instances
 # (integer value)
 #reclaim_instance_interval=0
@@ -714,8 +904,10 @@
 # value)
 #volume_usage_poll_interval=0
 
-# Interval in seconds for polling shelved instances to offload
-# (integer value)
+# Interval in seconds for polling shelved instances to
+# offload. Set to -1 to disable.Setting this to 0 will
+# disable, but this will change in Juno to mean "run at the
+# default rate". (integer value)
 #shelved_poll_interval=3600
 
 # Time in seconds before a shelved instance is eligible for
@@ -727,10 +919,14 @@
 # deletes (integer value)
 #instance_delete_interval=300
 
+# Waiting time interval (seconds) between block device
+# allocation retries on failures (integer value)
+#block_device_allocate_retries_interval=3
+
 # Action to take if a running deleted instance is
-# detected.Valid options are 'noop', 'log' and 'reap'. Set to
-# 'noop' to disable. (string value)
-#running_deleted_instance_action=log
+# detected.Valid options are 'noop', 'log', 'shutdown', or
+# 'reap'. Set to 'noop' to take no action. (string value)
+#running_deleted_instance_action=reap
 
 # Number of seconds to wait between runs of the cleanup task.
 # (integer value)
@@ -758,6 +954,23 @@
 # disable. (integer value)
 #resize_confirm_window=0
 
+# Total amount of time to wait in seconds for an instance to
+# perform a clean shutdown. (integer value)
+#shutdown_timeout=60
+
+
+#
+# Options defined in nova.compute.monitors
+#
+
+# Monitor classes available to the compute which may be
+# specified more than once. (multi valued)
+#compute_available_monitors=nova.compute.monitors.all_monitors
+
+# A list of monitors that can be used for getting compute
+# metrics. (list value)
+#compute_monitors=
+
 
 #
 # Options defined in nova.compute.resource_tracker
@@ -774,12 +987,15 @@
 # (string value)
 #compute_stats_class=nova.compute.stats.Stats
 
+# The names of the extra resources to track. (list value)
+#compute_resources=vcpu
+
 
 #
 # Options defined in nova.compute.rpcapi
 #
 
-# the topic compute nodes listen on (string value)
+# The topic compute nodes listen on (string value)
 #compute_topic=compute
 
 
@@ -811,7 +1027,7 @@
 # Options defined in nova.console.rpcapi
 #
 
-# the topic console proxy nodes listen on (string value)
+# The topic console proxy nodes listen on (string value)
 #console_topic=console
 
 
@@ -819,11 +1035,11 @@
 # Options defined in nova.console.vmrc
 #
 
-# port for VMware VMRC connections (integer value)
+# DEPRECATED. Port for VMware VMRC connections (integer value)
 #console_vmrc_port=443
 
-# number of retries for retrieving VMRC information (integer
-# value)
+# DEPRECATED. Number of retries for retrieving VMRC
+# information (integer value)
 #console_vmrc_error_retries=10
 
 
@@ -834,7 +1050,7 @@
 # XVP conf template (string value)
 #console_xvp_conf_template=$pybasedir/nova/console/xvp.conf.template
 
-# generated XVP conf file (string value)
+# Generated XVP conf file (string value)
 #console_xvp_conf=/etc/xvp.conf
 
 # XVP master process pid file (string value)
@@ -843,7 +1059,7 @@
 # XVP log file (string value)
 #console_xvp_log=/var/log/xvp.log
 
-# port for XVP to multiplex VNC connections on (integer value)
+# Port for XVP to multiplex VNC connections on (integer value)
 #console_xvp_multiplex_port=5900
 
 
@@ -851,7 +1067,7 @@
 # Options defined in nova.consoleauth
 #
 
-# the topic console auth proxy nodes listen on (string value)
+# The topic console auth proxy nodes listen on (string value)
 #consoleauth_topic=consoleauth
 
 
@@ -862,9 +1078,6 @@
 # How many seconds before deleting tokens (integer value)
 #console_token_ttl=600
 
-# Manager for console auth (string value)
-#consoleauth_manager=nova.consoleauth.manager.ConsoleAuthManager
-
 
 #
 # Options defined in nova.db.api
@@ -887,7 +1100,7 @@
 # Options defined in nova.db.base
 #
 
-# driver to use for database access (string value)
+# The driver to use for database access (string value)
 #db_driver=nova.db
 
 
@@ -902,64 +1115,31 @@
 
 
 #
-# Options defined in nova.image.glance
-#
-
-# default glance hostname or ip (string value)
-#glance_host=$my_ip
-
-# default glance port (integer value)
-#glance_port=9292
-
-# Default protocol to use when connecting to glance. Set to
-# https for SSL. (string value)
-#glance_protocol=http
-
-# A list of the glance api servers available to nova. Prefix
-# with https:// for ssl-based glance api servers.
-# ([hostname|ip]:port) (list value)
-#glance_api_servers=$glance_host:$glance_port
-
-# Allow to perform insecure SSL (https) requests to glance
-# (boolean value)
-#glance_api_insecure=false
-
-# Number retries when downloading an image from glance
-# (integer value)
-#glance_num_retries=0
-
-# A list of url scheme that can be downloaded directly via the
-# direct_url.  Currently supported schemes: [file]. (list
-# value)
-#allowed_direct_url_schemes=
-
-
-#
 # Options defined in nova.image.s3
 #
 
-# parent dir for tempdir used for image decryption (string
-# value)
+# Parent directory for tempdir used for image decryption
+# (string value)
 #image_decryption_dir=/tmp
 
-# hostname or ip for OpenStack to use when accessing the s3
+# Hostname or IP for OpenStack to use when accessing the S3
 # api (string value)
 #s3_host=$my_ip
 
-# port used when accessing the s3 api (integer value)
+# Port used when accessing the S3 api (integer value)
 #s3_port=3333
 
-# access key to use for s3 server for images (string value)
+# Access key to use for S3 server for images (string value)
 #s3_access_key=notchecked
 
-# secret key to use for s3 server for images (string value)
+# Secret key to use for S3 server for images (string value)
 #s3_secret_key=notchecked
 
-# whether to use ssl when talking to s3 (boolean value)
+# Whether to use SSL when talking to S3 (boolean value)
 #s3_use_ssl=false
 
-# whether to affix the tenant id to the access key when
-# downloading from s3 (boolean value)
+# Whether to affix the tenant id to the access key when
+# downloading from S3 (boolean value)
 #s3_affix_tenant=false
 
 
@@ -985,28 +1165,28 @@
 #
 
 # Driver to use for network creation (string value)
-#network_driver=nova.network.linux_net
+network_driver=nova.network.solaris_net
 
 
 #
 # Options defined in nova.network.floating_ips
 #
 
-# Default pool for floating ips (string value)
+# Default pool for floating IPs (string value)
 #default_floating_pool=nova
 
-# Autoassigning floating ip to VM (boolean value)
+# Autoassigning floating IP to VM (boolean value)
 #auto_assign_floating_ip=false
 
-# full class name for the DNS Manager for floating IPs (string
+# Full class name for the DNS Manager for floating IPs (string
 # value)
 #floating_ip_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
 
-# full class name for the DNS Manager for instance IPs (string
+# Full class name for the DNS Manager for instance IPs (string
 # value)
 #instance_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
 
-# full class name for the DNS Zone for instance IPs (string
+# Full class name for the DNS Zone for instance IPs (string
 # value)
 #instance_dns_domain=
 
@@ -1015,39 +1195,39 @@
 # Options defined in nova.network.ldapdns
 #
 
-# URL for ldap server which will store dns entries (string
+# URL for LDAP server which will store DNS entries (string
 # value)
 #ldap_dns_url=ldap://ldap.example.com:389
 
-# user for ldap DNS (string value)
+# User for LDAP DNS (string value)
 #ldap_dns_user=uid=admin,ou=people,dc=example,dc=org
 
-# password for ldap DNS (string value)
+# Password for LDAP DNS (string value)
 #ldap_dns_password=password
 
-# Hostmaster for ldap dns driver Statement of Authority
+# Hostmaster for LDAP DNS driver Statement of Authority
 # (string value)
 #[email protected]
 
-# DNS Servers for ldap dns driver (multi valued)
+# DNS Servers for LDAP DNS driver (multi valued)
 #ldap_dns_servers=dns.example.org
 
-# Base DN for DNS entries in ldap (string value)
+# Base DN for DNS entries in LDAP (string value)
 #ldap_dns_base_dn=ou=hosts,dc=example,dc=org
 
-# Refresh interval (in seconds) for ldap dns driver Statement
+# Refresh interval (in seconds) for LDAP DNS driver Statement
 # of Authority (string value)
 #ldap_dns_soa_refresh=1800
 
-# Retry interval (in seconds) for ldap dns driver Statement of
+# Retry interval (in seconds) for LDAP DNS driver Statement of
 # Authority (string value)
 #ldap_dns_soa_retry=3600
 
-# Expiry interval (in seconds) for ldap dns driver Statement
+# Expiry interval (in seconds) for LDAP DNS driver Statement
 # of Authority (string value)
 #ldap_dns_soa_expiry=86400
 
-# Minimum interval (in seconds) for ldap dns driver Statement
+# Minimum interval (in seconds) for LDAP DNS driver Statement
 # of Authority (string value)
 #ldap_dns_soa_minimum=7200
 
@@ -1056,7 +1236,7 @@
 # Options defined in nova.network.linux_net
 #
 
-# location of flagfiles for dhcpbridge (multi valued)
+# Location of flagfiles for dhcpbridge (multi valued)
 #dhcpbridge_flagfile=/etc/nova/nova-dhcpbridge.conf
 
 # Location to keep network config files (string value)
@@ -1065,23 +1245,20 @@
 # Interface for public IP addresses (string value)
 #public_interface=eth0
 
-# MTU setting for vlan (string value)
-#network_device_mtu=<None>
-
-# location of nova-dhcpbridge (string value)
+# Location of nova-dhcpbridge (string value)
 #dhcpbridge=$bindir/nova-dhcpbridge
 
 # Public IP of network host (string value)
 #routing_source_ip=$my_ip
 
 # Lifetime of a DHCP lease in seconds (integer value)
-#dhcp_lease_time=120
-
-# if set, uses specific dns server for dnsmasq. Canbe
+#dhcp_lease_time=86400
+
+# If set, uses specific DNS server for dnsmasq. Can be
 # specified multiple times. (multi valued)
 #dns_server=
 
-# if set, uses the dns1 and dns2 from the network ref.as dns
+# If set, uses the dns1 and dns2 from the network ref. as dns
 # servers. (boolean value)
 #use_network_dns_servers=false
 
@@ -1104,10 +1281,10 @@
 # value)
 #linuxnet_ovs_integration_bridge=br-int
 
-# send gratuitous ARPs for HA setup (boolean value)
+# Send gratuitous ARPs for HA setup (boolean value)
 #send_arp_for_ha=false
 
-# send this many gratuitous ARPs for HA setup (integer value)
+# Send this many gratuitous ARPs for HA setup (integer value)
 #send_arp_for_ha_count=3
 
 # Use single default gateway. Only first nic of vm will get
@@ -1119,10 +1296,10 @@
 # multiple times. (multi valued)
 #forward_bridge_interface=all
 
-# the ip for the metadata api server (string value)
+# The IP address for the metadata API server (string value)
 #metadata_host=$my_ip
 
-# the port for the metadata api port (integer value)
+# The port for the metadata API port (integer value)
 #metadata_port=8775
 
 # Regular expression to match iptables rule that should always
@@ -1137,6 +1314,15 @@
 # dropped. (string value)
 #iptables_drop_action=DROP
 
+# Amount of time, in seconds, that ovs_vsctl should wait for a
+# response from the database. 0 is to wait forever. (integer
+# value)
+#ovs_vsctl_timeout=120
+
+# If passed, use fake network devices and addresses (boolean
+# value)
+#fake_network=false
+
 
 #
 # Options defined in nova.network.manager
@@ -1145,7 +1331,7 @@
 # Bridge for simple network instances (string value)
 #flat_network_bridge=<None>
 
-# Dns for simple network (string value)
+# DNS server for simple network (string value)
 #flat_network_dns=8.8.4.4
 
 # Whether to attempt to inject network setup into guest
@@ -1159,7 +1345,7 @@
 # First VLAN for private networks (integer value)
 #vlan_start=100
 
-# vlans will bridge into this interface if set (string value)
+# VLANs will bridge into this interface if set (string value)
 #vlan_interface=<None>
 
 # Number of networks to support (integer value)
@@ -1186,7 +1372,7 @@
 # Number of addresses reserved for vpn clients (integer value)
 #cnt_vpn_clients=0
 
-# Seconds after which a deallocated ip is disassociated
+# Seconds after which a deallocated IP is disassociated
 # (integer value)
 #fixed_ip_disassociate_timeout=600
 
@@ -1194,10 +1380,6 @@
 # value)
 #create_unique_mac_address_attempts=5
 
-# If passed, use fake network devices and addresses (boolean
-# value)
-#fake_network=false
-
 # If True, skip using the queue and make local calls (boolean
 # value)
 #fake_call=false
@@ -1211,12 +1393,6 @@
 # (boolean value)
 #force_dhcp_release=true
 
-# If True in multi_host mode, all compute hosts share the same
-# dhcp address. The same IP address used for DHCP will be
-# added on each nova-network node which is only visible to the
-# vms on the same host. (boolean value)
-#share_dhcp_address=false
-
 # If True, when a DNS entry must be updated, it sends a fanout
 # cast to all network hosts to update their DNS entries in
 # multi host mode (boolean value)
@@ -1226,7 +1402,7 @@
 # entries. (integer value)
 #dns_update_periodic_interval=-1
 
-# domain to use for building the hostnames (string value)
+# Domain to use for building the hostnames (string value)
 #dhcp_domain=novalocal
 
 # Indicates underlying L3 management library (string value)
@@ -1234,64 +1410,10 @@
 
 
 #
-# Options defined in nova.network.neutronv2.api
-#
-
-# URL for connecting to neutron (string value)
-#neutron_url=http://127.0.0.1:9696
-
-# timeout value for connecting to neutron in seconds (integer
-# value)
-#neutron_url_timeout=30
-
-# username for connecting to neutron in admin context (string
-# value)
-#neutron_admin_username=<None>
-
-# password for connecting to neutron in admin context (string
-# value)
-#neutron_admin_password=<None>
-
-# tenant name for connecting to neutron in admin context
-# (string value)
-#neutron_admin_tenant_name=<None>
-
-# region name for connecting to neutron in admin context
-# (string value)
-#neutron_region_name=<None>
-
-# auth url for connecting to neutron in admin context (string
-# value)
-#neutron_admin_auth_url=http://localhost:5000/v2.0
-
-# if set, ignore any SSL validation issues (boolean value)
-#neutron_api_insecure=false
-
-# auth strategy for connecting to neutron in admin context
-# (string value)
-#neutron_auth_strategy=keystone
-
-# Name of Integration Bridge used by Open vSwitch (string
-# value)
-#neutron_ovs_bridge=br-int
-
-# Number of seconds before querying neutron for extensions
-# (integer value)
-#neutron_extension_sync_interval=600
-
-# Location of ca certificates file to use for neutron client
-# requests. (string value)
-#neutron_ca_certificates_file=<None>
-
-# Use per-port DHCP options with Neutron (boolean value)
-#dhcp_options_enabled=false
-
-
-#
 # Options defined in nova.network.rpcapi
 #
 
-# the topic network nodes listen on (string value)
+# The topic network nodes listen on (string value)
 #network_topic=network
 
 # Default value for multi_host in networks. Also, if set, some
@@ -1309,42 +1431,47 @@
 
 
 #
+# Options defined in nova.objects.network
+#
+
+# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
+# NETWORK. If True in multi_host mode, all compute hosts share
+# the same dhcp address. The same IP address used for DHCP
+# will be added on each nova-network node which is only
+# visible to the vms on the same host. (boolean value)
+#share_dhcp_address=false
+
+# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
+# NETWORK. MTU setting for network interface. (integer value)
+#network_device_mtu=<None>
+
+
+#
 # Options defined in nova.objectstore.s3server
 #
 
-# path to s3 buckets (string value)
+# Path to S3 buckets (string value)
 #buckets_path=$state_path/buckets
 
 # IP address for S3 API to listen (string value)
 #s3_listen=0.0.0.0
 
-# port for s3 api to listen (integer value)
+# Port for S3 API to listen (integer value)
 #s3_listen_port=3333
 
 
 #
-# Options defined in nova.openstack.common.db.sqlalchemy.session
-#
-
-# the filename to use with sqlite (string value)
-#sqlite_db=nova.sqlite
-
-# If true, use synchronous mode for sqlite (boolean value)
-#sqlite_synchronous=true
-
-
-#
 # Options defined in nova.openstack.common.eventlet_backdoor
 #
 
-# Enable eventlet backdoor. Acceptable values are 0, <port>
+# Enable eventlet backdoor.  Acceptable values are 0, <port>,
 # and <start>:<end>, where 0 results in listening on a random
-# tcp port number, <port> results in listening on the
-# specified port number and not enabling backdoorif it is in
-# use and <start>:<end> results in listening on the smallest
-# unused port number within the specified range of port
-# numbers. The chosen port is displayed in the service's log
-# file. (string value)
+# tcp port number; <port> results in listening on the
+# specified port number (and not enabling backdoor if that
+# port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range
+# of port numbers.  The chosen port is displayed in the
+# service's log file. (string value)
 #backdoor_port=<None>
 
 
@@ -1352,11 +1479,11 @@
 # Options defined in nova.openstack.common.lockutils
 #
 
-# Whether to disable inter-process locks (boolean value)
+# Enables or disables inter-process locks. (boolean value)
 #disable_process_locking=false
 
 # Directory to use for lock files. (string value)
-lock_path=$state_path
+lock_path=$state_path/lock
 
 
 #
@@ -1371,48 +1498,50 @@
 # of default WARNING level). (boolean value)
 #verbose=false
 
-# Log output to standard error (boolean value)
+# Log output to standard error. (boolean value)
 #use_stderr=true
 
-# format string to use for log messages with context (string
+# Format string to use for log messages with context. (string
 # value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
-
-# format string to use for log messages without context
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages without context.
 # (string value)
 #logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
 
-# data to append to log format when level is DEBUG (string
+# Data to append to log format when level is DEBUG. (string
 # value)
 #logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
 
-# prefix each line of exception output with this format
+# Prefix each line of exception output with this format.
 # (string value)
 #logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
 
-# list of logger=LEVEL pairs (list value)
-#default_log_levels=amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN
-
-# publish error events (boolean value)
+# List of logger=LEVEL pairs. (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
+
+# Enables or disables publication of error events. (boolean
+# value)
 #publish_errors=false
 
-# make deprecations fatal (boolean value)
+# Enables or disables fatal status of deprecations. (boolean
+# value)
 #fatal_deprecations=false
 
-# If an instance is passed with the log message, format it
-# like this (string value)
+# The format for an instance that is passed with the log
+# message. (string value)
 #instance_format="[instance: %(uuid)s] "
 
-# If an instance UUID is passed with the log message, format
-# it like this (string value)
+# The format for an instance UUID that is passed with the log
+# message. (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>
+# The name of a logging configuration file. This file is
+# appended to any existing logging configuration files. For
+# details about logging configuration files, see the Python
+# logging module documentation. (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
 
 # DEPRECATED. A logging.Formatter log message format string
 # which may use any of the available logging.LogRecord
@@ -1422,21 +1551,32 @@
 #log_format=<None>
 
 # Format string for %%(asctime)s in log records. Default:
-# %(default)s (string value)
+# %(default)s . (string value)
 #log_date_format=%Y-%m-%d %H:%M:%S
 
 # (Optional) Name of log file to output to. If no default is
 # set, logging will go to stdout. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
 #log_file=<None>
 
 # (Optional) The base directory used for relative --log-file
-# paths (string value)
+# paths. (string value)
+# Deprecated group/name - [DEFAULT]/logdir
 #log_dir=<None>
 
-# Use syslog for logging. (boolean value)
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# during I, and will change in J to honor RFC5424. (boolean
+# value)
 #use_syslog=false
 
-# syslog facility to receive log lines (string value)
+# (Optional) Enables or disables syslog rfc5424 format for
+# logging. If enabled, prefixes the MSG part of the syslog
+# message with APP-NAME (RFC5424). The format without the APP-
+# NAME is deprecated in I, and will be removed in J. (boolean
+# value)
+#use_syslog_rfc_format=false
+
+# Syslog facility to receive log lines. (string value)
 #syslog_log_facility=LOG_USER
 
 
@@ -1449,31 +1589,6 @@
 
 
 #
-# Options defined in nova.openstack.common.notifier.api
-#
-
-# Driver or drivers to handle sending notifications (multi
-# valued)
-#notification_driver=
-
-# Default notification level for outgoing notifications
-# (string value)
-#default_notification_level=INFO
-
-# Default publisher_id for outgoing notifications (string
-# value)
-#default_publisher_id=<None>
-
-
-#
-# Options defined in nova.openstack.common.notifier.rpc_notifier
-#
-
-# AMQP topic used for OpenStack notifications (list value)
-#notification_topics=notifications
-
-
-#
 # Options defined in nova.openstack.common.periodic_task
 #
 
@@ -1483,193 +1598,15 @@
 
 
 #
-# Options defined in nova.openstack.common.rpc
-#
-
-# The messaging module to use, defaults to kombu. (string
-# value)
-#rpc_backend=nova.openstack.common.rpc.impl_kombu
-
-# Size of RPC thread pool (integer value)
-#rpc_thread_pool_size=64
-
-# Size of RPC connection pool (integer value)
-#rpc_conn_pool_size=30
-
-# Seconds to wait for a response from call or multicall
-# (integer value)
-#rpc_response_timeout=60
-
-# Seconds to wait before a cast expires (TTL). Only supported
-# by impl_zmq. (integer value)
-#rpc_cast_timeout=30
-
-# Modules of exceptions that are permitted to be recreatedupon
-# receiving exception data from an rpc call. (list value)
-#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 nova.openstack.common.rpc.amqp
-#
-
-# 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 nova.openstack.common.rpc.impl_kombu
-#
-
-# SSL version to use (valid only if SSL enabled). valid values
-# are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some
-# distributions (string value)
-#kombu_ssl_version=
-
-# SSL key file (valid only if SSL enabled) (string value)
-#kombu_ssl_keyfile=
-
-# SSL cert file (valid only if SSL enabled) (string value)
-#kombu_ssl_certfile=
-
-# SSL certification authority file (valid only if SSL enabled)
-# (string value)
-#kombu_ssl_ca_certs=
-
-# The RabbitMQ broker address where a single node is used
+# Options defined in nova.openstack.common.policy
+#
+
+# The JSON file that defines policies. (string value)
+#policy_file=policy.json
+
+# Default rule. Enforced when a requested rule is not found.
 # (string value)
-#rabbit_host=localhost
-
-# The RabbitMQ broker port where a single node is used
-# (integer value)
-#rabbit_port=5672
-
-# RabbitMQ HA cluster host:port pairs (list value)
-#rabbit_hosts=$rabbit_host:$rabbit_port
-
-# connect over SSL for RabbitMQ (boolean value)
-#rabbit_use_ssl=false
-
-# the RabbitMQ userid (string value)
-#rabbit_userid=guest
-
-# the RabbitMQ password (string value)
-#rabbit_password=guest
-
-# the RabbitMQ virtual host (string value)
-#rabbit_virtual_host=/
-
-# how frequently to retry connecting with RabbitMQ (integer
-# value)
-#rabbit_retry_interval=1
-
-# how long to backoff for between retries when connecting to
-# RabbitMQ (integer value)
-#rabbit_retry_backoff=2
-
-# maximum retries with trying to connect to RabbitMQ (the
-# default of 0 implies an infinite retry count) (integer
-# value)
-#rabbit_max_retries=0
-
-# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
-# wipe RabbitMQ database when changing this option. (boolean
-# value)
-#rabbit_ha_queues=false
-
-
-#
-# Options defined in nova.openstack.common.rpc.impl_qpid
-#
-
-# Qpid broker hostname (string value)
-#qpid_hostname=localhost
-
-# Qpid broker port (integer value)
-#qpid_port=5672
-
-# Qpid HA cluster host:port pairs (list value)
-#qpid_hosts=$qpid_hostname:$qpid_port
-
-# Username for qpid connection (string value)
-#qpid_username=
-
-# Password for qpid connection (string value)
-#qpid_password=
-
-# Space separated list of SASL mechanisms to use for auth
-# (string value)
-#qpid_sasl_mechanisms=
-
-# Seconds between connection keepalive heartbeats (integer
-# value)
-#qpid_heartbeat=60
-
-# Transport to use, either 'tcp' or 'ssl' (string value)
-#qpid_protocol=tcp
-
-# 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 nova.openstack.common.rpc.impl_zmq
-#
-
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet
-# interface, or IP. The "host" option should point or resolve
-# to this address. (string value)
-#rpc_zmq_bind_address=*
-
-# MatchMaker driver (string value)
-#rpc_zmq_matchmaker=nova.openstack.common.rpc.matchmaker.MatchMakerLocalhost
-
-# ZeroMQ receiver listening port (integer value)
-#rpc_zmq_port=9501
-
-# Number of ZeroMQ contexts, defaults to 1 (integer value)
-#rpc_zmq_contexts=1
-
-# Maximum number of ingress messages to locally buffer per
-# topic. Default is unlimited. (integer value)
-#rpc_zmq_topic_backlog=<None>
-
-# Directory for holding IPC sockets (string value)
-#rpc_zmq_ipc_dir=/var/run/openstack
-
-# Name of this node. Must be a valid hostname, FQDN, or IP
-# address. Must match "host" option, if running Nova. (string
-# value)
-#rpc_zmq_host=nova
-
-
-#
-# Options defined in nova.openstack.common.rpc.matchmaker
-#
-
-# Heartbeat frequency (integer value)
-#matchmaker_heartbeat_freq=300
-
-# Heartbeat time-to-live. (integer value)
-#matchmaker_heartbeat_ttl=600
+#policy_default_rule=default
 
 
 #
@@ -1703,10 +1640,6 @@
 # The scheduler host manager class to use (string value)
 #scheduler_host_manager=nova.scheduler.host_manager.HostManager
 
-# Maximum number of attempts to schedule an instance (integer
-# value)
-#scheduler_max_attempts=3
-
 
 #
 # Options defined in nova.scheduler.filter_scheduler
@@ -1722,6 +1655,19 @@
 
 
 #
+# Options defined in nova.scheduler.filters.aggregate_image_properties_isolation
+#
+
+# Force the filter to consider only keys matching the given
+# namespace. (string value)
+#aggregate_image_properties_isolation_namespace=<None>
+
+# The separator used between the namespace and keys (string
+# value)
+#aggregate_image_properties_isolation_separator=.
+
+
+#
 # Options defined in nova.scheduler.filters.core_filter
 #
 
@@ -1737,7 +1683,7 @@
 # Options defined in nova.scheduler.filters.disk_filter
 #
 
-# virtual disk to physical disk allocation ratio (floating
+# Virtual disk to physical disk allocation ratio (floating
 # point value)
 #disk_allocation_ratio=1.0
 
@@ -1746,8 +1692,9 @@
 # Options defined in nova.scheduler.filters.io_ops_filter
 #
 
-# Ignore hosts that have too many
-# builds/resizes/snaps/migrations (integer value)
+# Tells filters to ignore hosts that have this many or more
+# instances currently in build, resize, snapshot, migrate,
+# rescue or unshelve task states (integer value)
 #max_io_ops_per_host=8
 
 
@@ -1798,7 +1745,7 @@
 
 # Which filter class names to use for filtering hosts when not
 # specified in the request. (list value)
-#scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter
+#scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
 
 # Which weight class names to use for weighing hosts (list
 # value)
@@ -1806,18 +1753,38 @@
 
 
 #
+# Options defined in nova.scheduler.ironic_host_manager
+#
+
+# Which filter class names to use for filtering baremetal
+# hosts when not specified in the request. (list value)
+#baremetal_scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ExactRamFilter,ExactDiskFilter,ExactCoreFilter
+
+# Flag to decide whether to use
+# baremetal_scheduler_default_filters or not. (boolean value)
+#scheduler_use_baremetal_filters=false
+
+
+#
 # Options defined in nova.scheduler.manager
 #
 
 # Default driver to use for the scheduler (string value)
 #scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
 
+# How often (in seconds) to run periodic tasks in the
+# scheduler driver of your choice. Please note this is likely
+# to interact with the value of service_down_time, but exactly
+# how they interact will depend on your choice of scheduler
+# driver. (integer value)
+#scheduler_driver_task_period=60
+
 
 #
 # Options defined in nova.scheduler.rpcapi
 #
 
-# the topic scheduler nodes listen on (string value)
+# The topic scheduler nodes listen on (string value)
 #scheduler_topic=scheduler
 
 
@@ -1831,6 +1798,15 @@
 
 
 #
+# Options defined in nova.scheduler.utils
+#
+
+# Maximum number of attempts to schedule an instance (integer
+# value)
+#scheduler_max_attempts=3
+
+
+#
 # Options defined in nova.scheduler.weights.ram
 #
 
@@ -1856,8 +1832,8 @@
 # (string value)
 #config_drive_format=iso9660
 
-# Where to put temporary files associated with config drive
-# creation (string value)
+# DEPRECATED (not needed any more):  Where to put temporary
+# files associated with config drive creation (string value)
 #config_drive_tempdir=<None>
 
 # Set to force injection to take place on a config drive (if
@@ -1873,14 +1849,9 @@
 # Options defined in nova.virt.disk.api
 #
 
-# Template file for injected network (string value)
-#injected_network_template=$pybasedir/nova/virt/interfaces.template
-
-# mkfs commands for ephemeral device. The format is
-# <os_type>=<mkfs command> (multi valued)
-#virt_mkfs=default=mkfs.ext3 -L %(fs_label)s -F %(target)s
-#virt_mkfs=linux=mkfs.ext3 -L %(fs_label)s -F %(target)s
-#virt_mkfs=windows=mkfs.ntfs --force --fast --label %(fs_label)s %(target)s
+# Name of the mkfs commands for ephemeral device. The format
+# is <os_type>=<mkfs command> (multi valued)
+#virt_mkfs=
 
 # Attempt to resize the filesystem by accessing the image over
 # a block device. This is done by the host and may not be
@@ -1894,28 +1865,19 @@
 # Options defined in nova.virt.disk.mount.nbd
 #
 
-# time to wait for a NBD device coming up (integer value)
+# Amount of time, in seconds, to wait for NBD device start up.
+# (integer value)
 #timeout_nbd=10
 
 
 #
-# Options defined in nova.virt.docker.driver
-#
-
-# Default TCP port to find the docker-registry container
-# (integer value)
-#docker_registry_default_port=5042
-
-
-#
 # Options defined in nova.virt.driver
 #
 
 # Driver to use for controlling virtualization. Options
 # include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
 # fake.FakeDriver, baremetal.BareMetalDriver,
-# vmwareapi.VMwareESXDriver, vmwareapi.VMwareVCDriver (string
-# value)
+# vmwareapi.VMwareVCDriver, hyperv.HyperVDriver (string value)
 compute_driver=solariszones.SolarisZonesDriver
 
 # The default format an ephemeral_volume will be formatted
@@ -1930,6 +1892,16 @@
 # Whether to use cow images (boolean value)
 #use_cow_images=true
 
+# Fail instance boot if vif plugging fails (boolean value)
+#vif_plugging_is_fatal=true
+
+# Number of seconds to wait for neutron vif plugging events to
+# arrive before continuing or failing (see
+# vif_plugging_is_fatal). If this is set to zero and
+# vif_plugging_is_fatal is False, events should not be
+# expected to arrive at all. (integer value)
+#vif_plugging_timeout=300
+
 
 #
 # Options defined in nova.virt.firewall
@@ -1945,6 +1917,38 @@
 
 
 #
+# Options defined in nova.virt.hardware
+#
+
+# Defines which pcpus that instance vcpus can use. For
+# example, "4-12,^8,15" (string value)
+#vcpu_pin_set=<None>
+
+
+#
+# Options defined in nova.virt.imagecache
+#
+
+# Number of seconds to wait between runs of the image cache
+# manager. Set to -1 to disable. Setting this to 0 will
+# disable, but this will change in the K release to mean "run
+# at the default rate". (integer value)
+#image_cache_manager_interval=2400
+
+# Where cached images are stored under $instances_path. This
+# is NOT the full path - just a folder name. For per-compute-
+# host cached images, set to _base_$my_ip (string value)
+#image_cache_subdirectory_name=_base
+
+# Should unused base images be removed? (boolean value)
+#remove_unused_base_images=true
+
+# Unused unresized base images younger than this will not be
+# removed (integer value)
+#remove_unused_original_minimum_age_seconds=86400
+
+
+#
 # Options defined in nova.virt.images
 #
 
@@ -1953,512 +1957,36 @@
 
 
 #
-# Options defined in nova.virt.libvirt.driver
-#
-
-# Rescue ami image (string value)
-#rescue_image_id=<None>
-
-# Rescue aki image (string value)
-#rescue_kernel_id=<None>
-
-# Rescue ari image (string value)
-#rescue_ramdisk_id=<None>
-
-# Libvirt domain type (valid options are: kvm, lxc, qemu, uml,
-# xen) (string value)
-#libvirt_type=kvm
-
-# Override the default libvirt URI (which is dependent on
-# libvirt_type) (string value)
-#libvirt_uri=
-
-# Inject the admin password at boot time, without an agent.
-# (boolean value)
-#libvirt_inject_password=false
-
-# Inject the ssh public key at boot time (boolean value)
-#libvirt_inject_key=true
-
-# The partition to inject to : -2 => disable, -1 => inspect
-# (libguestfs only), 0 => not partitioned, >0 => partition
-# number (integer value)
-#libvirt_inject_partition=1
-
-# Sync virtual and real mouse cursors in Windows VMs (boolean
-# value)
-#use_usb_tablet=true
-
-# Migration target URI (any included "%s" is replaced with the
-# migration target hostname) (string value)
-#live_migration_uri=qemu+tcp://%s/system
-
-# Migration flags to be set for live migration (string value)
-#live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER
-
-# Migration flags to be set for block migration (string value)
-#block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_NON_SHARED_INC
-
-# Maximum bandwidth to be used during migration, in Mbps
-# (integer value)
-#live_migration_bandwidth=0
-
-# Snapshot image format (valid options are : raw, qcow2, vmdk,
-# vdi). Defaults to same as source image (string value)
-#snapshot_image_format=<None>
-
-# The libvirt VIF driver to configure the VIFs. (string value)
-#libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtGenericVIFDriver
-
-# Libvirt handlers for remote volumes. (list value)
-#libvirt_volume_drivers=iscsi=nova.virt.libvirt.volume.LibvirtISCSIVolumeDriver,iser=nova.virt.libvirt.volume.LibvirtISERVolumeDriver,local=nova.virt.libvirt.volume.LibvirtVolumeDriver,fake=nova.virt.libvirt.volume.LibvirtFakeVolumeDriver,rbd=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,sheepdog=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,nfs=nova.virt.libvirt.volume.LibvirtNFSVolumeDriver,aoe=nova.virt.libvirt.volume.LibvirtAOEVolumeDriver,glusterfs=nova.virt.libvirt.volume.LibvirtGlusterfsVolumeDriver,fibre_channel=nova.virt.libvirt.volume.LibvirtFibreChannelVolumeDriver,scality=nova.virt.libvirt.volume.LibvirtScalityVolumeDriver
-
-# Override the default disk prefix for the devices attached to
-# a server, which is dependent on libvirt_type. (valid options
-# are: sd, xvd, uvd, vd) (string value)
-#libvirt_disk_prefix=<None>
-
-# Number of seconds to wait for instance to shut down after
-# soft reboot request is made. We fall back to hard reboot if
-# instance does not shutdown within this window. (integer
-# value)
-#libvirt_wait_soft_reboot_seconds=120
-
-# Use a separated OS thread pool to realize non-blocking
-# libvirt calls (boolean value)
-#libvirt_nonblocking=true
-
-# Set to "host-model" to clone the host CPU feature flags; to
-# "host-passthrough" to use the host CPU model exactly; to
-# "custom" to use a named CPU model; to "none" to not set any
-# CPU model. If libvirt_type="kvm|qemu", it will default to
-# "host-model", otherwise it will default to "none" (string
-# value)
-#libvirt_cpu_mode=<None>
-
-# Set to a named libvirt CPU model (see names listed in
-# /usr/share/libvirt/cpu_map.xml). Only has effect if
-# libvirt_cpu_mode="custom" and libvirt_type="kvm|qemu"
-# (string value)
-#libvirt_cpu_model=<None>
-
-# Location where libvirt driver will store snapshots before
-# uploading them to image service (string value)
-#libvirt_snapshots_directory=$instances_path/snapshots
-
-# Location where the Xen hvmloader is kept (string value)
-#xen_hvmloader_path=/usr/lib/xen/boot/hvmloader
-
-# Specific cachemodes to use for different disk types e.g:
-# ["file=directsync","block=none"] (list value)
-#disk_cachemodes=
-
-# Which pcpus can be used by vcpus of instance e.g:
-# "4-12,^8,15" (string value)
-#vcpu_pin_set=<None>
-
-
-#
-# Options defined in nova.virt.libvirt.imagebackend
-#
-
-# VM Images format. Acceptable values are: raw, qcow2,
-# lvm,rbd, default. If default is specified, then
-# use_cow_images flag is used instead of this one. (string
-# value)
-#libvirt_images_type=default
-
-# LVM Volume Group that is used for VM images, when you
-# specify libvirt_images_type=lvm. (string value)
-#libvirt_images_volume_group=<None>
-
-# Create sparse logical volumes (with virtualsize) if this
-# flag is set to True. (boolean value)
-#libvirt_sparse_logical_volumes=false
-
-# The amount of storage (in megabytes) to allocate for LVM
-# snapshot copy-on-write blocks. (integer value)
-#libvirt_lvm_snapshot_size=1000
-
-# the RADOS pool in which rbd volumes are stored (string
-# value)
-#libvirt_images_rbd_pool=rbd
-
-# path to the ceph configuration file to use (string value)
-#libvirt_images_rbd_ceph_conf=
-
-
-#
-# Options defined in nova.virt.libvirt.imagecache
-#
-
-# Where cached images are stored under $instances_path.This is
-# NOT the full path - just a folder name.For per-compute-host
-# cached images, set to _base_$my_ip (string value)
-#base_dir_name=_base
-
-# Allows image information files to be stored in non-standard
-# locations (string value)
-#image_info_filename_pattern=$instances_path/$base_dir_name/%(image)s.info
-
-# Should unused base images be removed? (boolean value)
-#remove_unused_base_images=true
-
-# Should unused kernel images be removed? This is only safe to
-# enable if all compute nodes have been updated to support
-# this option. This will enabled by default in future.
-# (boolean value)
-#remove_unused_kernels=false
-
-# Unused resized base images younger than this will not be
-# removed (integer value)
-#remove_unused_resized_minimum_age_seconds=3600
-
-# Unused unresized base images younger than this will not be
-# removed (integer value)
-#remove_unused_original_minimum_age_seconds=86400
-
-# Write a checksum for files in _base to disk (boolean value)
-#checksum_base_images=false
-
-# How frequently to checksum base images (integer value)
-#checksum_interval_seconds=3600
-
-
-#
-# Options defined in nova.virt.libvirt.utils
-#
-
-# Compress snapshot images when possible. This currently
-# applies exclusively to qcow2 images (boolean value)
-#libvirt_snapshot_compression=false
-
-
-#
-# Options defined in nova.virt.libvirt.vif
-#
-
-# Name of Integration Bridge used by Open vSwitch (string
-# value)
-#libvirt_ovs_bridge=br-int
-
-# Use virtio for bridge interfaces with KVM/QEMU (boolean
-# value)
-#libvirt_use_virtio_for_bridges=true
-
-
-#
-# Options defined in nova.virt.libvirt.volume
-#
-
-# number of times to rescan iSCSI target to find volume
-# (integer value)
-#num_iscsi_scan_tries=3
-
-# number of times to rescan iSER target to find volume
-# (integer value)
-#num_iser_scan_tries=3
-
-# the RADOS client name for accessing rbd volumes (string
-# value)
-#rbd_user=<None>
-
-# the libvirt uuid of the secret for the rbd_uservolumes
-# (string value)
-#rbd_secret_uuid=<None>
-
-# Dir where the nfs volume is mounted on the compute node
-# (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>
-
-# number of times to rediscover AoE target to find volume
-# (integer value)
-#num_aoe_discover_tries=3
-
-# Dir where the glusterfs volume is mounted on the compute
-# node (string value)
-#glusterfs_mount_point_base=$state_path/mnt
-
-# use multipath connection of the iSCSI volume (boolean value)
-#libvirt_iscsi_use_multipath=false
-
-# use multipath connection of the iSER volume (boolean value)
-#libvirt_iser_use_multipath=false
-
-# Path or URL to Scality SOFS configuration file (string
+# Options defined in nova.virt.netutils
+#
+
+# Template file for injected network (string value)
+#injected_network_template=$pybasedir/nova/virt/interfaces.template
+
+
+#
+# Options defined in nova.virt.solariszones.driver
+#
+
+# Default path to Glance cache for Solaris Zones. (string
 # value)
-#scality_sofs_config=<None>
-
-# Base dir where Scality SOFS shall be mounted (string value)
-#scality_sofs_mount_point=$state_path/scality
-
-# Protocols listed here will be accessed directly from QEMU.
-# Currently supported protocols: [gluster] (list value)
-#qemu_allowed_storage_drivers=
-
-
-#
-# Options defined in nova.virt.powervm.driver
-#
-
-# PowerVM manager type (ivm, hmc) (string value)
-#powervm_mgr_type=ivm
-
-# PowerVM manager host or ip (string value)
-#powervm_mgr=<None>
-
-# PowerVM manager user name (string value)
-#powervm_mgr_user=<None>
-
-# PowerVM manager user password (string value)
-#powervm_mgr_passwd=<None>
-
-# PowerVM image remote path where images will be moved. Make
-# sure this path can fit your biggest image in glance (string
-# value)
-#powervm_img_remote_path=/home/padmin
-
-# Local directory to download glance images to. Make sure this
-# path can fit your biggest image in glance (string value)
-#powervm_img_local_path=/tmp
-
-
-#
-# Options defined in nova.virt.xenapi.agent
-#
-
-# number of seconds to wait for agent reply (integer value)
-#agent_timeout=30
-
-# number of seconds to wait for agent to be fully operational
-# (integer value)
-#agent_version_timeout=300
-
-# number of seconds to wait for agent reply to resetnetwork
-# request (integer value)
-#agent_resetnetwork_timeout=60
-
-# Specifies the path in which the xenapi guest agent should be
-# located. If the agent is present, network configuration is
-# not injected into the image. Used if
-# compute_driver=xenapi.XenAPIDriver and  flat_injected=True
-# (string value)
-#xenapi_agent_path=usr/sbin/xe-update-networking
-
-# Disables the use of the XenAPI agent in any image regardless
-# of what image properties are present.  (boolean value)
-#xenapi_disable_agent=false
-
-# Determines if the xenapi agent should be used when the image
-# used does not contain a hint to declare if the agent is
-# present or not. The hint is a glance property
-# "xenapi_use_agent" that has the value "true" or "false".
-# Note that waiting for the agent when it is not present will
-# significantly increase server boot times. (boolean value)
-#xenapi_use_agent_default=false
-
-
-#
-# Options defined in nova.virt.xenapi.driver
-#
-
-# URL for connection to XenServer/Xen Cloud Platform. A
-# special value of unix://local can be used to connect to the
-# local unix socket.  Required if
-# compute_driver=xenapi.XenAPIDriver (string value)
-#xenapi_connection_url=<None>
-
-# Username for connection to XenServer/Xen Cloud Platform.
-# Used only if compute_driver=xenapi.XenAPIDriver (string
-# value)
-#xenapi_connection_username=root
-
-# Password for connection to XenServer/Xen Cloud Platform.
-# Used only if compute_driver=xenapi.XenAPIDriver (string
+#glancecache_dirname=$state_path/images
+
+# Location where solariszones driver will store snapshots
+# before uploading them to the Glance image service (string
 # value)
-#xenapi_connection_password=<None>
-
-# Maximum number of concurrent XenAPI connections. Used only
-# if compute_driver=xenapi.XenAPIDriver (integer value)
-#xenapi_connection_concurrent=5
-
-# The interval used for polling of coalescing vhds. Used only
-# if compute_driver=xenapi.XenAPIDriver (floating point value)
-#xenapi_vhd_coalesce_poll_interval=5.0
-
-# Ensure compute service is running on host XenAPI connects
-# to. (boolean value)
-#xenapi_check_host=true
-
-# Max number of times to poll for VHD to coalesce. Used only
-# if compute_driver=xenapi.XenAPIDriver (integer value)
-#xenapi_vhd_coalesce_max_attempts=5
-
-# Base path to the storage repository (string value)
-#xenapi_sr_base_path=/var/run/sr-mount
-
-# iSCSI Target Host (string value)
-#target_host=<None>
-
-# iSCSI Target Port, 3260 Default (string value)
-#target_port=3260
-
-# IQN Prefix (string value)
-#iqn_prefix=iqn.2010-10.org.openstack
-
-# Used to enable the remapping of VBD dev (Works around an
-# issue in Ubuntu Maverick) (boolean value)
-#xenapi_remap_vbd_dev=false
-
-# Specify prefix to remap VBD dev to (ex. /dev/xvdb ->
-# /dev/sdb) (string value)
-#xenapi_remap_vbd_dev_prefix=sd
-
-# Timeout in seconds for XenAPI login. (integer value)
-#xenapi_login_timeout=10
-
-
-#
-# Options defined in nova.virt.xenapi.image.bittorrent
-#
-
-# Base URL for torrent files. (string value)
-#xenapi_torrent_base_url=<None>
-
-# Probability that peer will become a seeder. (1.0 = 100%)
-# (floating point value)
-#xenapi_torrent_seed_chance=1.0
-
-# Number of seconds after downloading an image via BitTorrent
-# that it should be seeded for other peers. (integer value)
-#xenapi_torrent_seed_duration=3600
-
-# Cached torrent files not accessed within this number of
-# seconds can be reaped (integer value)
-#xenapi_torrent_max_last_accessed=86400
-
-# Beginning of port range to listen on (integer value)
-#xenapi_torrent_listen_port_start=6881
-
-# End of port range to listen on (integer value)
-#xenapi_torrent_listen_port_end=6891
-
-# Number of seconds a download can remain at the same progress
-# percentage w/o being considered a stall (integer value)
-#xenapi_torrent_download_stall_cutoff=600
-
-# Maximum number of seeder processes to run concurrently
-# within a given dom0. (-1 = no limit) (integer value)
-#xenapi_torrent_max_seeder_processes_per_host=1
-
-
-#
-# Options defined in nova.virt.xenapi.pool
-#
-
-# To use for hosts with different CPUs (boolean value)
-#use_join_force=true
-
-
-#
-# Options defined in nova.virt.xenapi.vif
-#
-
-# Name of Integration Bridge used by Open vSwitch (string
-# value)
-#xenapi_ovs_integration_bridge=xapi1
-
-
-#
-# Options defined in nova.virt.xenapi.vm_utils
-#
-
-# Cache glance images locally. `all` will cache all images,
-# `some` will only cache images that have the image_property
-# `cache_in_nova=True`, and `none` turns off caching entirely
-# (string value)
-#cache_images=all
-
-# Compression level for images, e.g., 9 for gzip -9. Range is
-# 1-9, 9 being most compressed but most CPU intensive on dom0.
-# (integer value)
-#xenapi_image_compression_level=<None>
-
-# Default OS type (string value)
-#default_os_type=linux
-
-# Time to wait for a block device to be created (integer
-# value)
-#block_device_creation_timeout=10
-
-# Maximum size in bytes of kernel or ramdisk images (integer
-# value)
-#max_kernel_ramdisk_size=16777216
-
-# Filter for finding the SR to be used to install guest
-# instances on. To use the Local Storage in default
-# XenServer/XCP installations set this flag to other-config
-# :i18n-key=local-storage. To select an SR with a different
-# matching criteria, you could set it to other-
-# config:my_favorite_sr=true. On the other hand, to fall back
-# on the Default SR, as displayed by XenCenter, set this flag
-# to: default-sr:true (string value)
-#sr_matching_filter=default-sr:true
-
-# Whether to use sparse_copy for copying data on a resize down
-# (False will use standard dd). This speeds up resizes down
-# considerably since large runs of zeros won't have to be
-# rsynced (boolean value)
-#xenapi_sparse_copy=true
-
-# Maximum number of retries to unplug VBD (integer value)
-#xenapi_num_vbd_unplug_retries=10
-
-# Whether or not to download images via Bit Torrent
-# (all|some|none). (string value)
-#xenapi_torrent_images=none
-
-# Name of network to use for booting iPXE ISOs (string value)
-#xenapi_ipxe_network_name=<None>
-
-# URL to the iPXE boot menu (string value)
-#xenapi_ipxe_boot_menu_url=<None>
-
-# Name and optionally path of the tool used for ISO image
-# creation (string value)
-#xenapi_ipxe_mkisofs_cmd=mkisofs
-
-
-#
-# Options defined in nova.virt.xenapi.vmops
-#
-
-# number of seconds to wait for instance to go to running
-# state (integer value)
-#xenapi_running_timeout=60
-
-# The XenAPI VIF driver using XenServer Network APIs. (string
-# value)
-#xenapi_vif_driver=nova.virt.xenapi.vif.XenAPIBridgeDriver
-
-# Dom0 plugin driver used to handle image uploads. (string
-# value)
-#xenapi_image_upload_handler=nova.virt.xenapi.image.glance.GlanceStore
+#solariszones_snapshots_directory=$instances_path/snapshots
 
 
 #
 # Options defined in nova.vnc
 #
 
-# location of vnc console proxy, in the form
+# Location of VNC console proxy, in the form
 # "http://127.0.0.1:6080/vnc_auto.html" (string value)
-#novncproxy_base_url=http://127.0.0.1:6080/vnc_auto.html
-
-# location of nova xvp vnc console proxy, in the form
+novncproxy_base_url=http://$my_ip:6080/vnc_auto.html
+
+# Location of nova xvp VNC console proxy, in the form
 # "http://127.0.0.1:6081/console" (string value)
 #xvpvncproxy_base_url=http://127.0.0.1:6081/console
 
@@ -2466,14 +1994,14 @@
 # (string value)
 #vncserver_listen=127.0.0.1
 
-# the address to which proxy clients (like nova-xvpvncproxy)
+# The address to which proxy clients (like nova-xvpvncproxy)
 # should connect (string value)
 #vncserver_proxyclient_address=127.0.0.1
 
-# enable vnc related features (boolean value)
+# Enable VNC related features (boolean value)
 #vnc_enabled=true
 
-# keymap for vnc (string value)
+# Keymap for VNC (string value)
 #vnc_keymap=en-us
 
 
@@ -2497,51 +2025,553 @@
 #volume_api_class=nova.volume.cinder.API
 
 
+[baremetal]
+
+#
+# Options defined in nova.virt.baremetal.db.api
+#
+
+# The backend to use for bare-metal database (string value)
+#db_backend=sqlalchemy
+
+
+#
+# Options defined in nova.virt.baremetal.db.sqlalchemy.session
+#
+
+# The SQLAlchemy connection string used to connect to the
+# bare-metal database (string value)
+#sql_connection=sqlite:///$state_path/baremetal_nova.sqlite
+
+
+#
+# Options defined in nova.virt.baremetal.driver
+#
+
+# Baremetal VIF driver. (string value)
+#vif_driver=nova.virt.baremetal.vif_driver.BareMetalVIFDriver
+
+# Baremetal volume driver. (string value)
+#volume_driver=nova.virt.baremetal.volume_driver.LibvirtVolumeDriver
+
+# A list of additional capabilities corresponding to
+# flavor_extra_specs for this compute host to advertise. Valid
+# entries are name=value, pairs For example, "key1:val1,
+# key2:val2" (list value)
+#flavor_extra_specs=
+
+# Baremetal driver back-end (pxe or tilera) (string value)
+#driver=nova.virt.baremetal.pxe.PXE
+
+# Baremetal power management method (string value)
+#power_manager=nova.virt.baremetal.ipmi.IPMI
+
+# Baremetal compute node's tftp root path (string value)
+#tftp_root=/tftpboot
+
+
+#
+# Options defined in nova.virt.baremetal.ipmi
+#
+
+# Path to baremetal terminal program (string value)
+#terminal=shellinaboxd
+
+# Path to baremetal terminal SSL cert(PEM) (string value)
+#terminal_cert_dir=<None>
+
+# Path to directory stores pidfiles of baremetal_terminal
+# (string value)
+#terminal_pid_dir=$state_path/baremetal/console
+
+# Maximal number of retries for IPMI operations (integer
+# value)
+#ipmi_power_retry=10
+
+
+#
+# Options defined in nova.virt.baremetal.pxe
+#
+
+# Default kernel image ID used in deployment phase (string
+# value)
+#deploy_kernel=<None>
+
+# Default ramdisk image ID used in deployment phase (string
+# value)
+#deploy_ramdisk=<None>
+
+# Template file for injected network config (string value)
+#net_config_template=$pybasedir/nova/virt/baremetal/net-dhcp.ubuntu.template
+
+# Additional append parameters for baremetal PXE boot (string
+# value)
+#pxe_append_params=nofb nomodeset vga=normal
+
+# Template file for PXE configuration (string value)
+#pxe_config_template=$pybasedir/nova/virt/baremetal/pxe_config.template
+
+# If True, enable file injection for network info, files and
+# admin password (boolean value)
+#use_file_injection=false
+
+# Timeout for PXE deployments. Default: 0 (unlimited) (integer
+# value)
+#pxe_deploy_timeout=0
+
+# If set, pass the network configuration details to the
+# initramfs via cmdline. (boolean value)
+#pxe_network_config=false
+
+# This gets passed to Neutron as the bootfile dhcp parameter.
+# (string value)
+#pxe_bootfile_name=pxelinux.0
+
+
+#
+# Options defined in nova.virt.baremetal.tilera_pdu
+#
+
+# IP address of tilera pdu (string value)
+#tile_pdu_ip=10.0.100.1
+
+# Management script for tilera pdu (string value)
+#tile_pdu_mgr=/tftpboot/pdu_mgr
+
+# Power status of tilera PDU is OFF (integer value)
+#tile_pdu_off=2
+
+# Power status of tilera PDU is ON (integer value)
+#tile_pdu_on=1
+
+# Power status of tilera PDU (integer value)
+#tile_pdu_status=9
+
+# Wait time in seconds until check the result after tilera
+# power operations (integer value)
+#tile_power_wait=9
+
+
+#
+# Options defined in nova.virt.baremetal.virtual_power_driver
+#
+
+# IP or name to virtual power host (string value)
+#virtual_power_ssh_host=
+
+# Port to use for ssh to virtual power host (integer value)
+#virtual_power_ssh_port=22
+
+# Base command to use for virtual power(vbox, virsh) (string
+# value)
+#virtual_power_type=virsh
+
+# User to execute virtual power commands as (string value)
+#virtual_power_host_user=
+
+# Password for virtual power host_user (string value)
+#virtual_power_host_pass=
+
+# The ssh key for virtual power host_user (string value)
+#virtual_power_host_key=<None>
+
+
+#
+# Options defined in nova.virt.baremetal.volume_driver
+#
+
+# Do not set this out of dev/test environments. If a node does
+# not have a fixed PXE IP address, volumes are exported with
+# globally opened ACL (boolean value)
+#use_unsafe_iscsi=false
+
+# The iSCSI IQN prefix used in baremetal volume connections.
+# (string value)
+#iscsi_iqn_prefix=iqn.2010-10.org.openstack.baremetal
+
+
+[cells]
+
+#
+# Options defined in nova.cells.manager
+#
+
+# Cells communication driver to use (string value)
+#driver=nova.cells.rpc_driver.CellsRPCDriver
+
+# Number of seconds after an instance was updated or deleted
+# to continue to update cells (integer value)
+#instance_updated_at_threshold=3600
+
+# Number of instances to update per periodic task run (integer
+# value)
+#instance_update_num_instances=1
+
+
+#
+# Options defined in nova.cells.messaging
+#
+
+# Maximum number of hops for cells routing. (integer value)
+#max_hop_count=10
+
+# Cells scheduler to use (string value)
+#scheduler=nova.cells.scheduler.CellsScheduler
+
+
+#
+# Options defined in nova.cells.opts
+#
+
+# Enable cell functionality (boolean value)
+#enable=false
+
+# The topic cells nodes listen on (string value)
+#topic=cells
+
+# Manager for cells (string value)
+#manager=nova.cells.manager.CellsManager
+
+# Name of this cell (string value)
+#name=nova
+
+# Key/Multi-value list with the capabilities of the cell (list
+# value)
+#capabilities=hypervisor=xenserver;kvm,os=linux;windows
+
+# Seconds to wait for response from a call to a cell. (integer
+# value)
+#call_timeout=60
+
+# Percentage of cell capacity to hold in reserve. Affects both
+# memory and disk utilization (floating point value)
+#reserve_percent=10.0
+
+# Type of cell: api or compute (string value)
+#cell_type=compute
+
+# Number of seconds after which a lack of capability and
+# capacity updates signals the child cell is to be treated as
+# a mute. (integer value)
+#mute_child_interval=300
+
+# Seconds between bandwidth updates for cells. (integer value)
+#bandwidth_update_interval=600
+
+
+#
+# Options defined in nova.cells.rpc_driver
+#
+
+# Base queue name to use when communicating between cells.
+# Various topics by message type will be appended to this.
+# (string value)
+#rpc_driver_queue_base=cells.intercell
+
+
+#
+# Options defined in nova.cells.scheduler
+#
+
+# Filter classes the cells scheduler should use.  An entry of
+# "nova.cells.filters.all_filters" maps to all cells filters
+# included with nova. (list value)
+#scheduler_filter_classes=nova.cells.filters.all_filters
+
+# Weigher classes the cells scheduler should use.  An entry of
+# "nova.cells.weights.all_weighers" maps to all cell weighers
+# included with nova. (list value)
+#scheduler_weight_classes=nova.cells.weights.all_weighers
+
+# How many retries when no cells are available. (integer
+# value)
+#scheduler_retries=10
+
+# How often to retry in seconds when no cells are available.
+# (integer value)
+#scheduler_retry_delay=2
+
+
+#
+# Options defined in nova.cells.state
+#
+
+# Interval, in seconds, for getting fresh cell information
+# from the database. (integer value)
+#db_check_interval=60
+
+# Configuration file from which to read cells configuration.
+# If given, overrides reading cells from the database. (string
+# value)
+#cells_config=<None>
+
+
+#
+# Options defined in nova.cells.weights.mute_child
+#
+
+# Multiplier used to weigh mute children. (The value should be
+# negative.) (floating point value)
+#mute_weight_multiplier=-10.0
+
+# Weight value assigned to mute children. (The value should be
+# positive.) (floating point value)
+#mute_weight_value=1000.0
+
+
+#
+# Options defined in nova.cells.weights.ram_by_instance_type
+#
+
+# Multiplier used for weighing ram.  Negative numbers mean to
+# stack vs spread. (floating point value)
+#ram_weight_multiplier=10.0
+
+
+#
+# Options defined in nova.cells.weights.weight_offset
+#
+
+# Multiplier used to weigh offset weigher. (floating point
+# value)
+#offset_weight_multiplier=1.0
+
+
+[cinder]
+
 #
 # Options defined in nova.volume.cinder
 #
 
 # Info to match when looking for cinder in the service
-# catalog. Format is : separated values of the form:
+# catalog. Format is: separated values of the form:
 # <service_type>:<service_name>:<endpoint_type> (string value)
-#cinder_catalog_info=volume:cinder:publicURL
+# Deprecated group/name - [DEFAULT]/cinder_catalog_info
+#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)
+# Deprecated group/name - [DEFAULT]/cinder_endpoint_template
+#endpoint_template=<None>
+
+# Region name of this node (string value)
+# Deprecated group/name - [DEFAULT]/os_region_name
 #os_region_name=<None>
 
 # Location of ca certificates file to use for cinder client
 # requests. (string value)
-#cinder_ca_certificates_file=<None>
+# Deprecated group/name - [DEFAULT]/cinder_ca_certificates_file
+#ca_certificates_file=<None>
 
 # Number of cinderclient retries on failed http calls (integer
 # value)
-#cinder_http_retries=3
+# Deprecated group/name - [DEFAULT]/cinder_http_retries
+#http_retries=3
+
+# HTTP inactivity timeout (in seconds) (integer value)
+# Deprecated group/name - [DEFAULT]/cinder_http_timeout
+#http_timeout=<None>
 
 # Allow to perform insecure SSL requests to cinder (boolean
 # value)
-#cinder_api_insecure=false
+# Deprecated group/name - [DEFAULT]/cinder_api_insecure
+#api_insecure=false
 
 # Allow attach between instance and volume in different
 # availability zones. (boolean value)
-#cinder_cross_az_attach=true
-
-
-#
-# Options defined in nova.virt.solariszones.driver
-#
-
-# Default path to Glance cache for Solaris Zones. (string
+# Deprecated group/name - [DEFAULT]/cinder_cross_az_attach
+#cross_az_attach=true
+
+
+[conductor]
+
+#
+# Options defined in nova.conductor.api
+#
+
+# Perform nova-conductor operations locally (boolean value)
+#use_local=false
+
+# The topic on which conductor nodes listen (string value)
+#topic=conductor
+
+# Full class name for the Manager for conductor (string value)
+#manager=nova.conductor.manager.ConductorManager
+
+# Number of workers for OpenStack Conductor service. The
+# default will be the number of CPUs available. (integer
+# value)
+workers=1
+
+
+[database]
+
+#
+# Options defined in oslo.db
+#
+
+# The file name to use with SQLite. (string value)
+#sqlite_db=oslo.sqlite
+
+# If True, SQLite uses synchronous mode. (boolean value)
+#sqlite_synchronous=true
+
+# The back end to use for the database. (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend=sqlalchemy
+
+# The SQLAlchemy connection string to use to connect to the
+# database. (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/nova
+
+# The SQLAlchemy connection string to use to connect to the
+# slave database. (string value)
+#slave_connection=<None>
+
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode=TRADITIONAL
+
+# Timeout before idle SQL connections are reaped. (integer
 # value)
-#glancecache_dirname=$state_path/images
-
-# Location where solariszones driver will store snapshots
-# before uploading them to image service (string value)
-#solariszones_snapshots_directory=$instances_path/snapshots
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size=<None>
+
+# Maximum db connection retries during startup. Set to -1 to
+# specify an infinite retry count. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries=10
+
+# Interval between retries of opening a SQL connection.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval=10
+
+# If set, use this value for max_overflow with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information: 0=None,
+# 100=Everything. (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug=0
+
+# Add Python stack traces to SQL as comment strings. (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace=false
+
+# If set, use this value for pool_timeout with SQLAlchemy.
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout=<None>
+
+# Enable the experimental use of database reconnect on
+# connection lost. (boolean value)
+#use_db_reconnect=false
+
+# Seconds between database connection retries. (integer value)
+#db_retry_interval=1
+
+# If True, increases the interval between database connection
+# retries up to db_max_retry_interval. (boolean value)
+#db_inc_retry_interval=true
+
+# If db_inc_retry_interval is set, the maximum seconds between
+# database connection retries. (integer value)
+#db_max_retry_interval=10
+
+# Maximum database connection retries before error is raised.
+# Set to -1 to specify an infinite retry count. (integer
+# value)
+#db_max_retries=20
+
+
+[ephemeral_storage_encryption]
+
+#
+# Options defined in nova.compute.api
+#
+
+# Whether to encrypt ephemeral storage (boolean value)
+#enabled=false
+
+# The cipher and mode to be used to encrypt ephemeral storage.
+# Which ciphers are available ciphers depends on kernel
+# support. See /proc/crypto for the list of available options.
+# (string value)
+#cipher=aes-xts-plain64
+
+# The bit length of the encryption key to be used to encrypt
+# ephemeral storage (in XTS mode only half of the bits are
+# used for encryption key) (integer value)
+#key_size=512
+
+
+[glance]
+
+#
+# Options defined in nova.image.glance
+#
+
+# Default glance hostname or IP address (string value)
+# Deprecated group/name - [DEFAULT]/glance_host
+#host=$my_ip
+
+# Default glance port (integer value)
+# Deprecated group/name - [DEFAULT]/glance_port
+#port=9292
+
+# Default protocol to use when connecting to glance. Set to
+# https for SSL. (string value)
+# Deprecated group/name - [DEFAULT]/glance_protocol
+#protocol=http
+
+# A list of the glance api servers available to nova. Prefix
+# with https:// for ssl-based glance api servers.
+# ([hostname|ip]:port) (list value)
+# Deprecated group/name - [DEFAULT]/glance_api_servers
+#api_servers=<None>
+
+# Allow to perform insecure SSL (https) requests to glance
+# (boolean value)
+# Deprecated group/name - [DEFAULT]/glance_api_insecure
+#api_insecure=false
+
+# Number of retries when downloading an image from glance
+# (integer value)
+# Deprecated group/name - [DEFAULT]/glance_num_retries
+#num_retries=0
+
+# A list of url scheme that can be downloaded directly via the
+# direct_url.  Currently supported schemes: [file]. (list
+# value)
+#allowed_direct_url_schemes=
 
 
 [hyperv]
@@ -2590,8 +2620,8 @@
 # value)
 #config_drive_inject_password=false
 
-# qemu-img is used to convert between different image types
-# (string value)
+# Path of qemu-img command which is used to convert between
+# different image types (string value)
 #qemu_img_cmd=qemu-img.exe
 
 # Attaches the Config Drive image as a cdrom drive instead of
@@ -2612,6 +2642,12 @@
 # (floating point value)
 #dynamic_memory_ratio=1.0
 
+# Number of seconds to wait for instance to shut down after
+# soft reboot request is made. We fall back to hard reboot if
+# instance does not shutdown within this window. (integer
+# value)
+#wait_soft_reboot_seconds=60
+
 
 #
 # Options defined in nova.virt.hyperv.volumeops
@@ -2634,65 +2670,56 @@
 #mounted_disk_query_retry_interval=5
 
 
-[zookeeper]
-
-#
-# Options defined in nova.servicegroup.drivers.zk
-#
-
-# The ZooKeeper addresses for servicegroup service in the
-# format of host1:port,host2:port,host3:port (string value)
-#address=<None>
-
-# recv_timeout parameter for the zk session (integer value)
-#recv_timeout=4000
-
-# The prefix used in ZooKeeper to store ephemeral nodes
-# (string value)
-#sg_prefix=/servicegroups
-
-# Number of seconds to wait until retrying to join the session
+[image_file_url]
+
+#
+# Options defined in nova.image.download.file
+#
+
+# List of file systems that are configured in this file in the
+# image_file_url:<list entry name> sections (list value)
+#filesystems=
+
+
+[ironic]
+
+#
+# Options defined in nova.virt.ironic.driver
+#
+
+# Version of Ironic API service endpoint. (integer value)
+#api_version=1
+
+# URL for Ironic API endpoint. (string value)
+#api_endpoint=<None>
+
+# Ironic keystone admin name (string value)
+#admin_username=<None>
+
+# Ironic keystone admin password. (string value)
+#admin_password=<None>
+
+# Ironic keystone auth token. (string value)
+#admin_auth_token=<None>
+
+# Keystone public API endpoint. (string value)
+#admin_url=<None>
+
+# Log level override for ironicclient. Set this in order to
+# override the global "default_log_levels", "verbose", and
+# "debug" settings. (string value)
+#client_log_level=<None>
+
+# Ironic keystone tenant name. (string value)
+#admin_tenant_name=<None>
+
+# How many retries when a request does conflict. (integer
+# value)
+#api_max_retries=60
+
+# How often to retry in seconds when a request does conflict
 # (integer value)
-#sg_retry_interval=5
-
-
-[osapi_v3]
-
-#
-# Options defined in nova.api.openstack
-#
-
-# Whether the V3 API is enabled or not (boolean value)
-#enabled=false
-
-# A list of v3 API extensions to never load. Specify the
-# extension aliases here. (list value)
-#extensions_blacklist=
-
-# If the list is not empty then a v3 API extension will only
-# be loaded if it exists in this list. Specify the extension
-# aliases here. (list value)
-#extensions_whitelist=
-
-
-[conductor]
-
-#
-# Options defined in nova.conductor.api
-#
-
-# Perform nova-conductor operations locally (boolean value)
-#use_local=false
-
-# the topic conductor nodes listen on (string value)
-#topic=conductor
-
-# full class name for the Manager for conductor (string value)
-#manager=nova.conductor.manager.ConductorManager
-
-# Number of workers for OpenStack Conductor service (integer
-# value)
-#workers=<None>
+#api_retry_interval=2
 
 
 [keymgr]
@@ -2715,421 +2742,782 @@
 #fixed_key=<None>
 
 
-[cells]
-
-#
-# Options defined in nova.cells.manager
-#
-
-# Cells communication driver to use (string value)
-#driver=nova.cells.rpc_driver.CellsRPCDriver
-
-# Number of seconds after an instance was updated or deleted
-# to continue to update cells (integer value)
-#instance_updated_at_threshold=3600
-
-# Number of instances to update per periodic task run (integer
+[keystone_authtoken]
+
+#
+# Options defined in keystonemiddleware.auth_token
+#
+
+# Complete public Identity API endpoint. (string value)
+auth_uri=http://127.0.0.1:5000/v2.0/
+
+# API version of the admin Identity API endpoint. (string
 # value)
-#instance_update_num_instances=1
-
-
-#
-# Options defined in nova.cells.messaging
-#
-
-# Maximum number of hops for cells routing. (integer value)
-#max_hop_count=10
-
-# Cells scheduler to use (string value)
-#scheduler=nova.cells.scheduler.CellsScheduler
-
-
-#
-# Options defined in nova.cells.opts
-#
-
-# Enable cell functionality (boolean value)
-#enable=false
-
-# the topic cells nodes listen on (string value)
-#topic=cells
-
-# Manager for cells (string value)
-#manager=nova.cells.manager.CellsManager
-
-# name of this cell (string value)
-#name=nova
-
-# Key/Multi-value list with the capabilities of the cell (list
-# value)
-#capabilities=hypervisor=xenserver;kvm,os=linux;windows
-
-# Seconds to wait for response from a call to a cell. (integer
-# value)
-#call_timeout=60
-
-# Percentage of cell capacity to hold in reserve. Affects both
-# memory and disk utilization (floating point value)
-#reserve_percent=10.0
-
-# Type of cell: api or compute (string value)
-#cell_type=<None>
-
-# Number of seconds after which a lack of capability and
-# capacity updates signals the child cell is to be treated as
-# a mute. (integer value)
-#mute_child_interval=300
-
-# Seconds between bandwidth updates for cells. (integer value)
-#bandwidth_update_interval=600
-
-
-#
-# Options defined in nova.cells.rpc_driver
-#
-
-# Base queue name to use when communicating between cells.
-# Various topics by message type will be appended to this.
+#auth_version=<None>
+
+# Do not handle authorization requests within the middleware,
+# but delegate the authorization decision to downstream WSGI
+# components. (boolean value)
+#delay_auth_decision=false
+
+# Request timeout value for communicating with Identity API
+# server. (integer value)
+#http_connect_timeout=<None>
+
+# How many times are we trying to reconnect when communicating
+# with Identity API Server. (integer value)
+#http_request_max_retries=3
+
+# Env key for the swift cache. (string value)
+#cache=<None>
+
+# Required if identity server requires client certificate
+# (string value)
+#certfile=<None>
+
+# Required if identity server requires client certificate
 # (string value)
-#rpc_driver_queue_base=cells.intercell
-
-
-#
-# Options defined in nova.cells.scheduler
-#
-
-# Filter classes the cells scheduler should use.  An entry of
-# "nova.cells.filters.all_filters"maps to all cells filters
-# included with nova. (list value)
-#scheduler_filter_classes=nova.cells.filters.all_filters
-
-# Weigher classes the cells scheduler should use.  An entry of
-# "nova.cells.weights.all_weighers"maps to all cell weighers
-# included with nova. (list value)
-#scheduler_weight_classes=nova.cells.weights.all_weighers
-
-# How many retries when no cells are available. (integer
+#keyfile=<None>
+
+# A PEM encoded Certificate Authority to use when verifying
+# HTTPs connections. Defaults to system CAs. (string value)
+#cafile=<None>
+
+# Verify HTTPS connections. (boolean value)
+#insecure=false
+
+# Directory used to cache files related to PKI tokens. (string
+# value)
+signing_dir=$state_path/keystone-signing
+
+# Optionally specify a list of memcached server(s) to use for
+# caching. If left undefined, tokens will instead be cached
+# in-process. (list value)
+# Deprecated group/name - [DEFAULT]/memcache_servers
+#memcached_servers=<None>
+
+# In order to prevent excessive effort spent validating
+# tokens, the middleware caches previously-seen tokens for a
+# configurable duration (in seconds). Set to -1 to disable
+# caching completely. (integer value)
+#token_cache_time=300
+
+# Determines the frequency at which the list of revoked tokens
+# is retrieved from the Identity service (in seconds). A high
+# number of revocation events combined with a low cache
+# duration may significantly reduce performance. (integer
 # value)
-#scheduler_retries=10
-
-# How often to retry in seconds when no cells are available.
-# (integer value)
-#scheduler_retry_delay=2
-
-
-#
-# Options defined in nova.cells.state
-#
-
-# Seconds between getting fresh cell info from db. (integer
+#revocation_cache_time=10
+
+# (Optional) If defined, indicate whether token data should be
+# authenticated or authenticated and encrypted. Acceptable
+# values are MAC or ENCRYPT.  If MAC, token data is
+# authenticated (with HMAC) in the cache. If ENCRYPT, token
+# data is encrypted and authenticated in the cache. If the
+# value is not one of these options or empty, auth_token will
+# raise an exception on initialization. (string value)
+#memcache_security_strategy=<None>
+
+# (Optional, mandatory if memcache_security_strategy is
+# defined) This string is used for key derivation. (string
 # value)
-#db_check_interval=60
-
-# Configuration file from which to read cells configuration.
-# If given, overrides reading cells from the database. (string
+#memcache_secret_key=<None>
+
+# (Optional) Number of seconds memcached server is considered
+# dead before it is tried again. (integer value)
+#memcache_pool_dead_retry=300
+
+# (Optional) Maximum total number of open connections to every
+# memcached server. (integer value)
+#memcache_pool_maxsize=10
+
+# (Optional) Socket timeout in seconds for communicating with
+# a memcache server. (integer value)
+#memcache_pool_socket_timeout=3
+
+# (Optional) Number of seconds a connection to memcached is
+# held unused in the pool before it is closed. (integer value)
+#memcache_pool_unused_timeout=60
+
+# (Optional) Number of seconds that an operation will wait to
+# get a memcache client connection from the pool. (integer
+# value)
+#memcache_pool_conn_get_timeout=10
+
+# (Optional) Use the advanced (eventlet safe) memcache client
+# pool. The advanced pool will only work under python 2.x.
+# (boolean value)
+#memcache_use_advanced_pool=false
+
+# (Optional) Indicate whether to set the X-Service-Catalog
+# header. If False, middleware will not ask for service
+# catalog on token validation and will not set the X-Service-
+# Catalog header. (boolean value)
+#include_service_catalog=true
+
+# Used to control the use and type of token binding. Can be
+# set to: "disabled" to not check token binding. "permissive"
+# (default) to validate binding information if the bind type
+# is of a form known to the server and ignore it if not.
+# "strict" like "permissive" but if the bind type is unknown
+# the token will be rejected. "required" any form of token
+# binding is needed to be allowed. Finally the name of a
+# binding method that must be present in tokens. (string
 # value)
-#cells_config=<None>
-
-
-#
-# Options defined in nova.cells.weights.mute_child
-#
-
-# Multiplier used to weigh mute children.  (The value should
-# be negative.) (floating point value)
-#mute_weight_multiplier=-10.0
-
-# Weight value assigned to mute children.  (The value should
-# be positive.) (floating point value)
-#mute_weight_value=1000.0
-
-
-#
-# Options defined in nova.cells.weights.ram_by_instance_type
-#
-
-# Multiplier used for weighing ram.  Negative numbers mean to
-# stack vs spread. (floating point value)
-#ram_weight_multiplier=10.0
-
-
-[database]
-
-#
-# Options defined in nova.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 nova.openstack.common.db.sqlalchemy.session
-#
-
-# The SQLAlchemy connection string used to connect to the
-# database (string value)
-#connection=sqlite:///$state_path/$sqlite_db
-
-# The SQLAlchemy connection string used to connect to the
-# slave database (string value)
-#slave_connection=
-
-# timeout before idle sql connections are reaped (integer
+#enforce_token_bind=permissive
+
+# If true, the revocation list will be checked for cached
+# tokens. This requires that PKI tokens are configured on the
+# identity server. (boolean value)
+#check_revocations_for_cached=false
+
+# Hash algorithms to use for hashing PKI tokens. This may be a
+# single algorithm or multiple. The algorithms are those
+# supported by Python standard hashlib.new(). The hashes will
+# be tried in the order given, so put the preferred one first
+# for performance. The result of the first hash will be stored
+# in the cache. This will typically be set to multiple values
+# only while migrating from a less secure algorithm to a more
+# secure one. Once all the old tokens are expired this option
+# should be set to a single value for better performance.
+# (list value)
+#hash_algorithms=md5
+
+# Prefix to prepend at the beginning of the path. Deprecated,
+# use identity_uri. (string value)
+#auth_admin_prefix=
+
+# Host providing the admin Identity API endpoint. Deprecated,
+# use identity_uri. (string value)
+#auth_host=127.0.0.1
+
+# Port of the admin Identity API endpoint. Deprecated, use
+# identity_uri. (integer value)
+#auth_port=35357
+
+# Protocol of the admin Identity API endpoint (http or https).
+# Deprecated, use identity_uri. (string value)
+#auth_protocol=https
+
+# Complete admin Identity API endpoint. This should specify
+# the unversioned root endpoint e.g. https://localhost:35357/
+# (string value)
+identity_uri=http://127.0.0.1:35357/
+
+# This option is deprecated and may be removed in a future
+# release. Single shared secret with the Keystone
+# configuration used for bootstrapping a Keystone
+# installation, or otherwise bypassing the normal
+# authentication process. This option should not be used, use
+# `admin_user` and `admin_password` instead. (string value)
+#admin_token=<None>
+
+# Service username. (string value)
+admin_user=%SERVICE_USER%
+
+# Service user password. (string value)
+admin_password=%SERVICE_PASSWORD%
+
+# Service tenant name. (string value)
+admin_tenant_name=%SERVICE_TENANT_NAME%
+
+
+[libvirt]
+
+#
+# Options defined in nova.virt.libvirt.driver
+#
+
+# Rescue ami image. This will not be used if an image id is
+# provided by the user. (string value)
+#rescue_image_id=<None>
+
+# Rescue aki image (string value)
+#rescue_kernel_id=<None>
+
+# Rescue ari image (string value)
+#rescue_ramdisk_id=<None>
+
+# Libvirt domain type (valid options are: kvm, lxc, qemu, uml,
+# xen) (string value)
+#virt_type=kvm
+
+# Override the default libvirt URI (which is dependent on
+# virt_type) (string value)
+#connection_uri=
+
+# Inject the admin password at boot time, without an agent.
+# (boolean value)
+#inject_password=false
+
+# Inject the ssh public key at boot time (boolean value)
+#inject_key=false
+
+# The partition to inject to : -2 => disable, -1 => inspect
+# (libguestfs only), 0 => not partitioned, >0 => partition
+# number (integer value)
+#inject_partition=-2
+
+# Sync virtual and real mouse cursors in Windows VMs (boolean
 # 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=<None>
-
-# 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
+#use_usb_tablet=true
+
+# Migration target URI (any included "%s" is replaced with the
+# migration target hostname) (string value)
+#live_migration_uri=qemu+tcp://%s/system
+
+# Migration flags to be set for live migration (string value)
+#live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED
+
+# Migration flags to be set for block migration (string value)
+#block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED, VIR_MIGRATE_NON_SHARED_INC
+
+# Maximum bandwidth to be used during migration, in Mbps
 # (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
+#live_migration_bandwidth=0
+
+# Snapshot image format (valid options are : raw, qcow2, vmdk,
+# vdi). Defaults to same as source image (string value)
+#snapshot_image_format=<None>
+
+# DEPRECATED. Libvirt handlers for remote volumes. This option
+# is deprecated and will be removed in the Kilo release. (list
 # value)
-#connection_trace=false
-
-# If set, use this value for pool_timeout with sqlalchemy
-# (integer value)
-#pool_timeout=<None>
-
-
-[image_file_url]
-
-#
-# Options defined in nova.image.download.file
-#
-
-# A list of filesystems that will be configured in this file
-# under the sections image_file_url:<list entry name> (list
+#volume_drivers=iscsi=nova.virt.libvirt.volume.LibvirtISCSIVolumeDriver,iser=nova.virt.libvirt.volume.LibvirtISERVolumeDriver,local=nova.virt.libvirt.volume.LibvirtVolumeDriver,fake=nova.virt.libvirt.volume.LibvirtFakeVolumeDriver,rbd=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,sheepdog=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,nfs=nova.virt.libvirt.volume.LibvirtNFSVolumeDriver,aoe=nova.virt.libvirt.volume.LibvirtAOEVolumeDriver,glusterfs=nova.virt.libvirt.volume.LibvirtGlusterfsVolumeDriver,fibre_channel=nova.virt.libvirt.volume.LibvirtFibreChannelVolumeDriver,scality=nova.virt.libvirt.volume.LibvirtScalityVolumeDriver,gpfs=nova.virt.libvirt.volume.LibvirtGPFSVolumeDriver
+
+# Override the default disk prefix for the devices attached to
+# a server, which is dependent on virt_type. (valid options
+# are: sd, xvd, uvd, vd) (string value)
+#disk_prefix=<None>
+
+# Number of seconds to wait for instance to shut down after
+# soft reboot request is made. We fall back to hard reboot if
+# instance does not shutdown within this window. (integer
+# value)
+#wait_soft_reboot_seconds=120
+
+# Set to "host-model" to clone the host CPU feature flags; to
+# "host-passthrough" to use the host CPU model exactly; to
+# "custom" to use a named CPU model; to "none" to not set any
+# CPU model. If virt_type="kvm|qemu", it will default to
+# "host-model", otherwise it will default to "none" (string
 # value)
-#filesystems=
-
-
-[baremetal]
-
-#
-# Options defined in nova.virt.baremetal.db.api
-#
-
-# The backend to use for bare-metal database (string value)
-#db_backend=sqlalchemy
-
-
-#
-# Options defined in nova.virt.baremetal.db.sqlalchemy.session
-#
-
-# The SQLAlchemy connection string used to connect to the
-# bare-metal database (string value)
-#sql_connection=sqlite:///$state_path/baremetal_$sqlite_db
-
-
-#
-# Options defined in nova.virt.baremetal.driver
-#
-
-# Baremetal VIF driver. (string value)
-#vif_driver=nova.virt.baremetal.vif_driver.BareMetalVIFDriver
-
-# Baremetal volume driver. (string value)
-#volume_driver=nova.virt.baremetal.volume_driver.LibvirtVolumeDriver
-
-# a list of additional capabilities corresponding to
-# instance_type_extra_specs for this compute host to
-# advertise. Valid entries are name=value, pairs For example,
-# "key1:val1, key2:val2" (list value)
-#instance_type_extra_specs=
-
-# Baremetal driver back-end (pxe or tilera) (string value)
-#driver=nova.virt.baremetal.pxe.PXE
-
-# Baremetal power management method (string value)
-#power_manager=nova.virt.baremetal.ipmi.IPMI
-
-# Baremetal compute node's tftp root path (string value)
-#tftp_root=/tftpboot
-
-
-#
-# Options defined in nova.virt.baremetal.ipmi
-#
-
-# path to baremetal terminal program (string value)
-#terminal=shellinaboxd
-
-# path to baremetal terminal SSL cert(PEM) (string value)
-#terminal_cert_dir=<None>
-
-# path to directory stores pidfiles of baremetal_terminal
+#cpu_mode=<None>
+
+# Set to a named libvirt CPU model (see names listed in
+# /usr/share/libvirt/cpu_map.xml). Only has effect if
+# cpu_mode="custom" and virt_type="kvm|qemu" (string value)
+#cpu_model=<None>
+
+# Location where libvirt driver will store snapshots before
+# uploading them to image service (string value)
+#snapshots_directory=$instances_path/snapshots
+
+# Location where the Xen hvmloader is kept (string value)
+#xen_hvmloader_path=/usr/lib/xen/boot/hvmloader
+
+# Specific cachemodes to use for different disk types e.g:
+# file=directsync,block=none (list value)
+#disk_cachemodes=
+
+# A path to a device that will be used as source of entropy on
+# the host. Permitted options are: /dev/random or /dev/hwrng
 # (string value)
-#terminal_pid_dir=$state_path/baremetal/console
-
-# maximal number of retries for IPMI operations (integer
+#rng_dev_path=<None>
+
+# For qemu or KVM guests, set this option to specify a default
+# machine type per host architecture. You can find a list of
+# supported machine types in your environment by checking the
+# output of the "virsh capabilities"command. The format of the
+# value for this config option is host-arch=machine-type. For
+# example: x86_64=machinetype1,armv7l=machinetype2 (list
 # value)
-#ipmi_power_retry=10
-
-
-#
-# Options defined in nova.virt.baremetal.pxe
-#
-
-# Default kernel image ID used in deployment phase (string
+#hw_machine_type=<None>
+
+# The data source used to the populate the host "serial" UUID
+# exposed to guest in the virtual BIOS. Permitted options are
+# "hardware", "os", "none" or "auto" (default). (string value)
+#sysinfo_serial=auto
+
+# A number of seconds to memory usage statistics period. Zero
+# or negative value mean to disable memory usage statistics.
+# (integer value)
+#mem_stats_period_seconds=10
+
+# List of uid targets and ranges.Syntax is guest-uid:host-
+# uid:countMaximum of 5 allowed. (list value)
+#uid_maps=
+
+# List of guid targets and ranges.Syntax is guest-gid:host-
+# gid:countMaximum of 5 allowed. (list value)
+#gid_maps=
+
+
+#
+# Options defined in nova.virt.libvirt.imagebackend
+#
+
+# VM Images format. Acceptable values are: raw, qcow2, lvm,
+# rbd, default. If default is specified, then use_cow_images
+# flag is used instead of this one. (string value)
+#images_type=default
+
+# LVM Volume Group that is used for VM images, when you
+# specify images_type=lvm. (string value)
+#images_volume_group=<None>
+
+# Create sparse logical volumes (with virtualsize) if this
+# flag is set to True. (boolean value)
+#sparse_logical_volumes=false
+
+# Method used to wipe old volumes (valid options are: none,
+# zero, shred) (string value)
+#volume_clear=zero
+
+# Size in MiB to wipe at start of old volumes. 0 => all
+# (integer value)
+#volume_clear_size=0
+
+# The RADOS pool in which rbd volumes are stored (string
 # value)
-#deploy_kernel=<None>
-
-# Default ramdisk image ID used in deployment phase (string
-# value)
-#deploy_ramdisk=<None>
-
-# Template file for injected network config (string value)
-#net_config_template=$pybasedir/nova/virt/baremetal/net-dhcp.ubuntu.template
-
-# additional append parameters for baremetal PXE boot (string
-# value)
-#pxe_append_params=nofb nomodeset vga=normal
-
-# Template file for PXE configuration (string value)
-#pxe_config_template=$pybasedir/nova/virt/baremetal/pxe_config.template
-
-# Timeout for PXE deployments. Default: 0 (unlimited) (integer
+#images_rbd_pool=rbd
+
+# Path to the ceph configuration file to use (string value)
+#images_rbd_ceph_conf=
+
+# Discard option for nova managed disks (valid options are:
+# ignore, unmap). Need Libvirt(1.0.6) Qemu1.5 (raw format)
+# Qemu1.6(qcow2 format) (string value)
+#hw_disk_discard=<None>
+
+
+#
+# Options defined in nova.virt.libvirt.imagecache
+#
+
+# Allows image information files to be stored in non-standard
+# locations (string value)
+#image_info_filename_pattern=$instances_path/$image_cache_subdirectory_name/%(image)s.info
+
+# Should unused kernel images be removed? This is only safe to
+# enable if all compute nodes have been updated to support
+# this option. This will be enabled by default in future.
+# (boolean value)
+#remove_unused_kernels=false
+
+# Unused resized base images younger than this will not be
+# removed (integer value)
+#remove_unused_resized_minimum_age_seconds=3600
+
+# Write a checksum for files in _base to disk (boolean value)
+#checksum_base_images=false
+
+# How frequently to checksum base images (integer value)
+#checksum_interval_seconds=3600
+
+
+#
+# Options defined in nova.virt.libvirt.utils
+#
+
+# Compress snapshot images when possible. This currently
+# applies exclusively to qcow2 images (boolean value)
+#snapshot_compression=false
+
+
+#
+# Options defined in nova.virt.libvirt.vif
+#
+
+# Use virtio for bridge interfaces with KVM/QEMU (boolean
 # value)
-#pxe_deploy_timeout=0
-
-# If set, pass the network configuration details to the
-# initramfs via cmdline. (boolean value)
-#pxe_network_config=false
-
-# This gets passed to Neutron as the bootfile dhcp parameter
-# when the dhcp_options_enabled is set. (string value)
-#pxe_bootfile_name=pxelinux.0
-
-
-#
-# Options defined in nova.virt.baremetal.tilera_pdu
-#
-
-# ip address of tilera pdu (string value)
-#tile_pdu_ip=10.0.100.1
-
-# management script for tilera pdu (string value)
-#tile_pdu_mgr=/tftpboot/pdu_mgr
-
-# power status of tilera PDU is OFF (integer value)
-#tile_pdu_off=2
-
-# power status of tilera PDU is ON (integer value)
-#tile_pdu_on=1
-
-# power status of tilera PDU (integer value)
-#tile_pdu_status=9
-
-# wait time in seconds until check the result after tilera
-# power operations (integer value)
-#tile_power_wait=9
-
-
-#
-# Options defined in nova.virt.baremetal.virtual_power_driver
-#
-
-# ip or name to virtual power host (string value)
-#virtual_power_ssh_host=
-
-# Port to use for ssh to virtual power host (integer value)
-#virtual_power_ssh_port=22
-
-# base command to use for virtual power(vbox,virsh) (string
+#use_virtio_for_bridges=true
+
+
+#
+# Options defined in nova.virt.libvirt.volume
+#
+
+# Number of times to rescan iSCSI target to find volume
+# (integer value)
+#num_iscsi_scan_tries=5
+
+# Number of times to rescan iSER target to find volume
+# (integer value)
+#num_iser_scan_tries=5
+
+# The RADOS client name for accessing rbd volumes (string
 # value)
-#virtual_power_type=virsh
-
-# user to execute virtual power commands as (string value)
-#virtual_power_host_user=
-
-# password for virtual power host_user (string value)
-#virtual_power_host_pass=
-
-# ssh key for virtual power host_user (string value)
-#virtual_power_host_key=<None>
-
-
-#
-# Options defined in nova.virt.baremetal.volume_driver
-#
-
-# Do not set this out of dev/test environments. If a node does
-# not have a fixed PXE IP address, volumes are exported with
-# globally opened ACL (boolean value)
-#use_unsafe_iscsi=false
-
-# iSCSI IQN prefix used in baremetal volume connections.
+#rbd_user=<None>
+
+# The libvirt UUID of the secret for the rbd_uservolumes
 # (string value)
-#iscsi_iqn_prefix=iqn.2010-10.org.openstack.baremetal
-
-
-[rpc_notifier2]
-
-#
-# Options defined in nova.openstack.common.notifier.rpc_notifier2
-#
-
-# AMQP topic(s) used for OpenStack notifications (list value)
-#topics=notifications
+#rbd_secret_uuid=<None>
+
+# Directory where the NFS volume is mounted on the compute
+# node (string value)
+#nfs_mount_point_base=$state_path/mnt
+
+# Mount options passedf to the NFS client. See section of the
+# nfs man page for details (string value)
+#nfs_mount_options=<None>
+
+# Number of times to rediscover AoE target to find volume
+# (integer value)
+#num_aoe_discover_tries=3
+
+# Directory where the glusterfs volume is mounted on the
+# compute node (string value)
+#glusterfs_mount_point_base=$state_path/mnt
+
+# Use multipath connection of the iSCSI volume (boolean value)
+#iscsi_use_multipath=false
+
+# Use multipath connection of the iSER volume (boolean value)
+#iser_use_multipath=false
+
+# Path or URL to Scality SOFS configuration file (string
+# value)
+#scality_sofs_config=<None>
+
+# Base dir where Scality SOFS shall be mounted (string value)
+#scality_sofs_mount_point=$state_path/scality
+
+# Protocols listed here will be accessed directly from QEMU.
+# Currently supported protocols: [gluster] (list value)
+#qemu_allowed_storage_drivers=
 
 
 [matchmaker_redis]
 
 #
-# Options defined in nova.openstack.common.rpc.matchmaker_redis
-#
-
-# Host to locate redis (string value)
+# Options defined in oslo.messaging
+#
+
+# Host to locate redis. (string value)
 #host=127.0.0.1
 
 # Use this port to connect to redis host. (integer value)
 #port=6379
 
-# Password for Redis server. (optional) (string value)
+# Password for Redis server (optional). (string value)
 #password=<None>
 
 
+[matchmaker_ring]
+
+#
+# Options defined in oslo.messaging
+#
+
+# Matchmaker ring file (JSON). (string value)
+# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
+#ringfile=/etc/oslo/matchmaker_ring.json
+
+
+[metrics]
+
+#
+# Options defined in nova.scheduler.weights.metrics
+#
+
+# Multiplier used for weighing metrics. (floating point value)
+#weight_multiplier=1.0
+
+# How the metrics are going to be weighed. This should be in
+# the form of "<name1>=<ratio1>, <name2>=<ratio2>, ...", where
+# <nameX> is one of the metrics to be weighed, and <ratioX> is
+# the corresponding ratio. So for "name1=1.0, name2=-1.0" The
+# final weight would be name1.value * 1.0 + name2.value *
+# -1.0. (list value)
+#weight_setting=
+
+# How to treat the unavailable metrics. When a metric is NOT
+# available for a host, if it is set to be True, it would
+# raise an exception, so it is recommended to use the
+# scheduler filter MetricFilter to filter out those hosts. If
+# it is set to be False, the unavailable metric would be
+# treated as a negative factor in weighing process, the
+# returned value would be set by the option
+# weight_of_unavailable. (boolean value)
+#required=true
+
+# The final weight value to be returned if required is set to
+# False and any one of the metrics set by weight_setting is
+# unavailable. (floating point value)
+#weight_of_unavailable=-10000.0
+
+
+[neutron]
+
+#
+# Options defined in nova.api.metadata.handler
+#
+
+# Set flag to indicate Neutron will proxy metadata requests
+# and resolve instance ids. (boolean value)
+# Deprecated group/name - [DEFAULT]/service_neutron_metadata_proxy
+service_metadata_proxy=true
+
+# Shared secret to validate proxies Neutron metadata requests
+# (string value)
+# Deprecated group/name - [DEFAULT]/neutron_metadata_proxy_shared_secret
+#metadata_proxy_shared_secret=
+
+
+#
+# Options defined in nova.network.neutronv2.api
+#
+
+# URL for connecting to neutron (string value)
+# Deprecated group/name - [DEFAULT]/neutron_url
+#url=http://127.0.0.1:9696
+
+# Timeout value for connecting to neutron in seconds (integer
+# value)
+# Deprecated group/name - [DEFAULT]/neutron_url_timeout
+#url_timeout=30
+
+# User id for connecting to neutron in admin context (string
+# value)
+#admin_user_id=<None>
+
+# Username for connecting to neutron in admin context (string
+# value)
+# Deprecated group/name - [DEFAULT]/neutron_admin_username
+#admin_username=<None>
+
+# Password for connecting to neutron in admin context (string
+# value)
+# Deprecated group/name - [DEFAULT]/neutron_admin_password
+#admin_password=<None>
+
+# Tenant id for connecting to neutron in admin context (string
+# value)
+# Deprecated group/name - [DEFAULT]/neutron_admin_tenant_id
+#admin_tenant_id=<None>
+
+# Tenant name for connecting to neutron in admin context. This
+# option will be ignored if neutron_admin_tenant_id is set.
+# Note that with Keystone V3 tenant names are only unique
+# within a domain. (string value)
+# Deprecated group/name - [DEFAULT]/neutron_admin_tenant_name
+#admin_tenant_name=<None>
+
+# Region name for connecting to neutron in admin context
+# (string value)
+# Deprecated group/name - [DEFAULT]/neutron_region_name
+#region_name=<None>
+
+# Authorization URL for connecting to neutron in admin context
+# (string value)
+# Deprecated group/name - [DEFAULT]/neutron_admin_auth_url
+#admin_auth_url=http://localhost:5000/v2.0
+
+# If set, ignore any SSL validation issues (boolean value)
+# Deprecated group/name - [DEFAULT]/neutron_api_insecure
+#api_insecure=false
+
+# Authorization strategy for connecting to neutron in admin
+# context (string value)
+# Deprecated group/name - [DEFAULT]/neutron_auth_strategy
+#auth_strategy=keystone
+
+# Name of Integration Bridge used by Open vSwitch (string
+# value)
+# Deprecated group/name - [DEFAULT]/neutron_ovs_bridge
+#ovs_bridge=br-int
+
+# Number of seconds before querying neutron for extensions
+# (integer value)
+# Deprecated group/name - [DEFAULT]/neutron_extension_sync_interval
+#extension_sync_interval=600
+
+# Location of CA certificates file to use for neutron client
+# requests. (string value)
+# Deprecated group/name - [DEFAULT]/neutron_ca_certificates_file
+#ca_certificates_file=<None>
+
+# Allow an instance to have multiple vNICs attached to the
+# same Neutron network. (boolean value)
+#allow_duplicate_networks=false
+
+
+[osapi_v3]
+
+#
+# Options defined in nova.api.openstack
+#
+
+# Whether the V3 API is enabled or not (boolean value)
+#enabled=false
+
+# A list of v3 API extensions to never load. Specify the
+# extension aliases here. (list value)
+#extensions_blacklist=
+
+# If the list is not empty then a v3 API extension will only
+# be loaded if it exists in this list. Specify the extension
+# aliases here. (list value)
+#extensions_whitelist=
+
+
+[oslo_messaging_amqp]
+
+#
+# Options defined in oslo.messaging
+#
+
+# address prefix used when sending to a specific server
+# (string value)
+#server_request_prefix=exclusive
+
+# address prefix used when broadcasting to all servers (string
+# value)
+#broadcast_prefix=broadcast
+
+# address prefix when sending to any server in group (string
+# value)
+#group_request_prefix=unicast
+
+# Name for the AMQP container (string value)
+#container_name=<None>
+
+# Timeout for inactive connections (in seconds) (integer
+# value)
+#idle_timeout=0
+
+# Debug: dump AMQP frames to stdout (boolean value)
+#trace=false
+
+# CA certificate PEM file for verifing server certificate
+# (string value)
+#ssl_ca_file=
+
+# Identifying certificate PEM file to present to clients
+# (string value)
+#ssl_cert_file=
+
+# Private key PEM file used to sign cert_file certificate
+# (string value)
+#ssl_key_file=
+
+# Password for decrypting ssl_key_file (if encrypted) (string
+# value)
+#ssl_key_password=<None>
+
+# Accept clients using either SSL or plain TCP (boolean value)
+#allow_insecure_clients=false
+
+
+[rdp]
+
+#
+# Options defined in nova.rdp
+#
+
+# Location of RDP html5 console proxy, in the form
+# "http://127.0.0.1:6083/" (string value)
+#html5_proxy_base_url=http://127.0.0.1:6083/
+
+# Enable RDP related features (boolean value)
+#enabled=false
+
+
+[serial_console]
+
+#
+# Options defined in nova.cmd.serialproxy
+#
+
+# Host on which to listen for incoming requests (string value)
+#serialproxy_host=0.0.0.0
+
+# Port on which to listen for incoming requests (integer
+# value)
+#serialproxy_port=6083
+
+
+#
+# Options defined in nova.console.serial
+#
+
+# Enable serial console related features (boolean value)
+#enabled=false
+
+# Range of TCP ports to use for serial ports on compute hosts
+# (string value)
+#port_range=10000:20000
+
+# Location of serial console proxy. (string value)
+#base_url=ws://127.0.0.1:6083/
+
+# IP address on which instance serial console should listen
+# (string value)
+#listen=127.0.0.1
+
+# The address to which proxy clients (like nova-serialproxy)
+# should connect (string value)
+#proxyclient_address=127.0.0.1
+
+
+[spice]
+
+#
+# Options defined in nova.cmd.spicehtml5proxy
+#
+
+# Host on which to listen for incoming requests (string value)
+# Deprecated group/name - [DEFAULT]/spicehtml5proxy_host
+#html5proxy_host=0.0.0.0
+
+# Port on which to listen for incoming requests (integer
+# value)
+# Deprecated group/name - [DEFAULT]/spicehtml5proxy_port
+#html5proxy_port=6082
+
+
+#
+# Options defined in nova.spice
+#
+
+# Location of spice HTML5 console proxy, in the form
+# "http://127.0.0.1:6082/spice_auto.html" (string value)
+#html5proxy_base_url=http://127.0.0.1:6082/spice_auto.html
+
+# IP address on which instance spice server should listen
+# (string value)
+#server_listen=127.0.0.1
+
+# The address to which proxy clients (like nova-
+# spicehtml5proxy) should connect (string value)
+#server_proxyclient_address=127.0.0.1
+
+# Enable spice related features (boolean value)
+#enabled=false
+
+# Enable spice guest agent support (boolean value)
+#agent_enabled=true
+
+# Keymap for spice (string value)
+#keymap=en-us
+
+
 [ssl]
 
 #
 # Options defined in nova.openstack.common.sslutils
 #
 
-# CA certificate file to use to verify connecting clients
+# CA certificate file to use to verify connecting clients.
 # (string value)
 #ca_file=<None>
 
-# Certificate file to use when starting the server securely
+# Certificate file to use when starting the server securely.
 # (string value)
 #cert_file=<None>
 
-# Private key file to use when starting the server securely
+# Private key file to use when starting the server securely.
 # (string value)
 #key_file=<None>
 
@@ -3140,25 +3528,29 @@
 # Options defined in nova.scheduler.filters.trusted_filter
 #
 
-# attestation server http (string value)
+# Attestation server HTTP (string value)
 #attestation_server=<None>
 
-# attestation server Cert file for Identity verification
+# Attestation server Cert file for Identity verification
 # (string value)
 #attestation_server_ca_file=<None>
 
-# attestation server port (string value)
+# Attestation server port (string value)
 #attestation_port=8443
 
-# attestation web API URL (string value)
+# Attestation web API URL (string value)
 #attestation_api_url=/OpenAttestationWebServices/V1.0
 
-# attestation authorization blob - must change (string value)
+# Attestation authorization blob - must change (string value)
 #attestation_auth_blob=<None>
 
 # Attestation status cache valid period length (integer value)
 #attestation_auth_timeout=60
 
+# Disable SSL cert verification for Attestation service
+# (boolean value)
+#attestation_insecure_ssl=false
+
 
 [upgrade_levels]
 
@@ -3254,54 +3646,37 @@
 #scheduler=<None>
 
 
-[matchmaker_ring]
-
-#
-# Options defined in nova.openstack.common.rpc.matchmaker_ring
-#
-
-# Matchmaker ring file (JSON) (string value)
-#ringfile=/etc/oslo/matchmaker_ring.json
-
-
 [vmware]
 
 #
 # Options defined in nova.virt.vmwareapi.driver
 #
 
-# URL for connection to VMware ESX/VC host. Required if
-# compute_driver is vmwareapi.VMwareESXDriver or
-# vmwareapi.VMwareVCDriver. (string value)
+# Hostname or IP address for connection to VMware VC host.
+# (string value)
 #host_ip=<None>
 
-# Username for connection to VMware ESX/VC host. Used only if
-# compute_driver is vmwareapi.VMwareESXDriver or
-# vmwareapi.VMwareVCDriver. (string value)
+# Port for connection to VMware VC host. (integer value)
+#host_port=443
+
+# Username for connection to VMware VC host. (string value)
 #host_username=<None>
 
-# Password for connection to VMware ESX/VC host. Used only if
-# compute_driver is vmwareapi.VMwareESXDriver or
-# vmwareapi.VMwareVCDriver. (string value)
+# Password for connection to VMware VC host. (string value)
 #host_password=<None>
 
-# Name of a VMware Cluster ComputeResource. Used only if
-# compute_driver is vmwareapi.VMwareVCDriver. (multi valued)
+# Name of a VMware Cluster ComputeResource. (multi valued)
 #cluster_name=<None>
 
-# Regex to match the name of a datastore. Used only if
-# compute_driver is vmwareapi.VMwareVCDriver. (string value)
+# Regex to match the name of a datastore. (string value)
 #datastore_regex=<None>
 
-# The interval used for polling of remote tasks. Used only if
-# compute_driver is vmwareapi.VMwareESXDriver or
-# vmwareapi.VMwareVCDriver. (floating point value)
-#task_poll_interval=5.0
+# The interval used for polling of remote tasks. (floating
+# point value)
+#task_poll_interval=0.5
 
 # The number of times we retry on failures, e.g., socket
-# error, etc. Used only if compute_driver is
-# vmwareapi.VMwareESXDriver or vmwareapi.VMwareVCDriver.
-# (integer value)
+# error, etc. (integer value)
 #api_retry_count=10
 
 # VNC starting port (integer value)
@@ -3310,15 +3685,14 @@
 # Total number of VNC ports (integer value)
 #vnc_port_total=10000
 
-# DEPRECATED. VNC password. The password-based access to VNC
-# consoles will be removed in the next release. The default
-# value will disable password protection on the VNC console.
-# (string value)
-#vnc_password=<None>
-
 # Whether to use linked clone (boolean value)
 #use_linked_clone=true
 
+# Optional VIM Service WSDL Location e.g
+# http://<server>/vimService.wsdl. Optional over-ride to
+# default location for bug work-arounds (string value)
+#wsdl_location=<None>
+
 
 #
 # Options defined in nova.virt.vmwareapi.vif
@@ -3328,15 +3702,8 @@
 # value)
 #vlan_interface=vmnic0
 
-
-#
-# Options defined in nova.virt.vmwareapi.vim
-#
-
-# Optional VIM Service WSDL Location e.g
-# http://<server>/vimService.wsdl. Optional over-ride to
-# default location for bug work-arounds (string value)
-#wsdl_location=<None>
+# Name of Integration Bridge (string value)
+#integration_bridge=br-int
 
 
 #
@@ -3353,39 +3720,265 @@
 #maximum_objects=100
 
 
-#
-# Options defined in nova.virt.vmwareapi.vmops
-#
-
-# Name of Integration Bridge (string value)
-#integration_bridge=br-int
-
-
-[spice]
-
-#
-# Options defined in nova.spice
-#
-
-# location of spice html5 console proxy, in the form
-# "http://127.0.0.1:6082/spice_auto.html" (string value)
-#html5proxy_base_url=http://127.0.0.1:6082/spice_auto.html
-
-# IP address on which instance spice server should listen
+[xenserver]
+
+#
+# Options defined in nova.virt.xenapi.agent
+#
+
+# Number of seconds to wait for agent reply (integer value)
+#agent_timeout=30
+
+# Number of seconds to wait for agent to be fully operational
+# (integer value)
+#agent_version_timeout=300
+
+# Number of seconds to wait for agent reply to resetnetwork
+# request (integer value)
+#agent_resetnetwork_timeout=60
+
+# Specifies the path in which the XenAPI guest agent should be
+# located. If the agent is present, network configuration is
+# not injected into the image. Used if
+# compute_driver=xenapi.XenAPIDriver and flat_injected=True
 # (string value)
-#server_listen=127.0.0.1
-
-# the address to which proxy clients (like nova-
-# spicehtml5proxy) should connect (string value)
-#server_proxyclient_address=127.0.0.1
-
-# enable spice related features (boolean value)
-#enabled=false
-
-# enable spice guest agent support (boolean value)
-#agent_enabled=true
-
-# keymap for spice (string value)
-#keymap=en-us
-
-
+#agent_path=usr/sbin/xe-update-networking
+
+# Disables the use of the XenAPI agent in any image regardless
+# of what image properties are present. (boolean value)
+#disable_agent=false
+
+# Determines if the XenAPI agent should be used when the image
+# used does not contain a hint to declare if the agent is
+# present or not. The hint is a glance property
+# "xenapi_use_agent" that has the value "True" or "False".
+# Note that waiting for the agent when it is not present will
+# significantly increase server boot times. (boolean value)
+#use_agent_default=false
+
+
+#
+# Options defined in nova.virt.xenapi.client.session
+#
+
+# Timeout in seconds for XenAPI login. (integer value)
+#login_timeout=10
+
+# Maximum number of concurrent XenAPI connections. Used only
+# if compute_driver=xenapi.XenAPIDriver (integer value)
+#connection_concurrent=5
+
+
+#
+# Options defined in nova.virt.xenapi.driver
+#
+
+# URL for connection to XenServer/Xen Cloud Platform. A
+# special value of unix://local can be used to connect to the
+# local unix socket.  Required if
+# compute_driver=xenapi.XenAPIDriver (string value)
+#connection_url=<None>
+
+# Username for connection to XenServer/Xen Cloud Platform.
+# Used only if compute_driver=xenapi.XenAPIDriver (string
+# value)
+#connection_username=root
+
+# Password for connection to XenServer/Xen Cloud Platform.
+# Used only if compute_driver=xenapi.XenAPIDriver (string
+# value)
+#connection_password=<None>
+
+# The interval used for polling of coalescing vhds. Used only
+# if compute_driver=xenapi.XenAPIDriver (floating point value)
+#vhd_coalesce_poll_interval=5.0
+
+# Ensure compute service is running on host XenAPI connects
+# to. (boolean value)
+#check_host=true
+
+# Max number of times to poll for VHD to coalesce. Used only
+# if compute_driver=xenapi.XenAPIDriver (integer value)
+#vhd_coalesce_max_attempts=20
+
+# Base path to the storage repository (string value)
+#sr_base_path=/var/run/sr-mount
+
+# The iSCSI Target Host (string value)
+#target_host=<None>
+
+# The iSCSI Target Port, default is port 3260 (string value)
+#target_port=3260
+
+# IQN Prefix (string value)
+#iqn_prefix=iqn.2010-10.org.openstack
+
+# Used to enable the remapping of VBD dev (Works around an
+# issue in Ubuntu Maverick) (boolean value)
+#remap_vbd_dev=false
+
+# Specify prefix to remap VBD dev to (ex. /dev/xvdb ->
+# /dev/sdb) (string value)
+#remap_vbd_dev_prefix=sd
+
+
+#
+# Options defined in nova.virt.xenapi.image.bittorrent
+#
+
+# Base URL for torrent files. (string value)
+#torrent_base_url=<None>
+
+# Probability that peer will become a seeder. (1.0 = 100%)
+# (floating point value)
+#torrent_seed_chance=1.0
+
+# Number of seconds after downloading an image via BitTorrent
+# that it should be seeded for other peers. (integer value)
+#torrent_seed_duration=3600
+
+# Cached torrent files not accessed within this number of
+# seconds can be reaped (integer value)
+#torrent_max_last_accessed=86400
+
+# Beginning of port range to listen on (integer value)
+#torrent_listen_port_start=6881
+
+# End of port range to listen on (integer value)
+#torrent_listen_port_end=6891
+
+# Number of seconds a download can remain at the same progress
+# percentage w/o being considered a stall (integer value)
+#torrent_download_stall_cutoff=600
+
+# Maximum number of seeder processes to run concurrently
+# within a given dom0. (-1 = no limit) (integer value)
+#torrent_max_seeder_processes_per_host=1
+
+
+#
+# Options defined in nova.virt.xenapi.pool
+#
+
+# To use for hosts with different CPUs (boolean value)
+#use_join_force=true
+
+
+#
+# Options defined in nova.virt.xenapi.vif
+#
+
+# Name of Integration Bridge used by Open vSwitch (string
+# value)
+#ovs_integration_bridge=xapi1
+
+
+#
+# Options defined in nova.virt.xenapi.vm_utils
+#
+
+# Cache glance images locally. `all` will cache all images,
+# `some` will only cache images that have the image_property
+# `cache_in_nova=True`, and `none` turns off caching entirely
+# (string value)
+#cache_images=all
+
+# Compression level for images, e.g., 9 for gzip -9. Range is
+# 1-9, 9 being most compressed but most CPU intensive on dom0.
+# (integer value)
+#image_compression_level=<None>
+
+# Default OS type (string value)
+#default_os_type=linux
+
+# Time to wait for a block device to be created (integer
+# value)
+#block_device_creation_timeout=10
+
+# Maximum size in bytes of kernel or ramdisk images (integer
+# value)
+#max_kernel_ramdisk_size=16777216
+
+# Filter for finding the SR to be used to install guest
+# instances on. To use the Local Storage in default
+# XenServer/XCP installations set this flag to other-config
+# :i18n-key=local-storage. To select an SR with a different
+# matching criteria, you could set it to other-
+# config:my_favorite_sr=true. On the other hand, to fall back
+# on the Default SR, as displayed by XenCenter, set this flag
+# to: default-sr:true (string value)
+#sr_matching_filter=default-sr:true
+
+# Whether to use sparse_copy for copying data on a resize down
+# (False will use standard dd). This speeds up resizes down
+# considerably since large runs of zeros won't have to be
+# rsynced (boolean value)
+#sparse_copy=true
+
+# Maximum number of retries to unplug VBD (integer value)
+#num_vbd_unplug_retries=10
+
+# Whether or not to download images via Bit Torrent
+# (all|some|none). (string value)
+#torrent_images=none
+
+# Name of network to use for booting iPXE ISOs (string value)
+#ipxe_network_name=<None>
+
+# URL to the iPXE boot menu (string value)
+#ipxe_boot_menu_url=<None>
+
+# Name and optionally path of the tool used for ISO image
+# creation (string value)
+#ipxe_mkisofs_cmd=mkisofs
+
+
+#
+# Options defined in nova.virt.xenapi.vmops
+#
+
+# Number of seconds to wait for instance to go to running
+# state (integer value)
+#running_timeout=60
+
+# The XenAPI VIF driver using XenServer Network APIs. (string
+# value)
+#vif_driver=nova.virt.xenapi.vif.XenAPIBridgeDriver
+
+# Dom0 plugin driver used to handle image uploads. (string
+# value)
+#image_upload_handler=nova.virt.xenapi.image.glance.GlanceStore
+
+
+#
+# Options defined in nova.virt.xenapi.volume_utils
+#
+
+# Number of seconds to wait for an SR to settle if the VDI
+# does not exist when first introduced (integer value)
+#introduce_vdi_retry_wait=20
+
+
+[zookeeper]
+
+#
+# Options defined in nova.servicegroup.drivers.zk
+#
+
+# The ZooKeeper addresses for servicegroup service in the
+# format of host1:port,host2:port,host3:port (string value)
+#address=<None>
+
+# The recv_timeout parameter for the zk session (integer
+# value)
+#recv_timeout=4000
+
+# The prefix used in ZooKeeper to store ephemeral nodes
+# (string value)
+#sg_prefix=/servicegroups
+
+# Number of seconds to wait until retrying to join the session
+# (integer value)
+#sg_retry_interval=5
+
+
--- a/components/openstack/nova/files/nova.exec_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova.exec_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -10,3 +10,5 @@
 nova-compute:solaris:cmd:RO::/usr/sbin/fcinfo:privs=file_dac_read,sys_devices
 
 nova-compute:solaris:cmd:RO::/usr/sbin/iscsiadm:euid=0
+
+nova-compute:solaris:cmd:RO::/usr/sbin/zlogin:uid=0
--- a/components/openstack/nova/files/nova.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,11 +1,10 @@
 OpenStack Compute Management:RO::\
 Manage OpenStack Nova:\
-auths=solaris.admin.edit/etc/nova/api-paste.ini,\
-solaris.admin.edit/etc/nova/logging.conf,\
-solaris.admin.edit/etc/nova/nova.conf,\
-solaris.admin.edit/etc/nova/policy.json,\
-solaris.smf.manage.cinder,\
-solaris.smf.value.cinder;\
+auths=solaris.admin.edit/etc/nova/*.conf,\
+solaris.admin.edit/etc/nova/*.ini,\
+solaris.admin.edit/etc/nova/*.json,\
+solaris.smf.manage.nova,\
+solaris.smf.value.nova;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
 
 OpenStack Management:RO:::profiles=OpenStack Compute Management
@@ -13,6 +12,7 @@
 nova-compute:RO::\
 Do not assign to users. \
 Commands required for application/openstack/nova/nova-compute:\
+auths=solaris.smf.manage.nova,solaris.smf.modify,solaris.smf.value.nova;\
 profiles=Unified Archive Administration,\
 Zone Management,\
 Zone Security
--- a/components/openstack/nova/files/nova.user_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/nova.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,1 +1,1 @@
-nova::RO::profiles=nova-compute
+nova::RO::profiles=OpenStack Compute Management,nova-compute
--- a/components/openstack/nova/files/release	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/release	Mon Apr 20 12:35:51 2015 -0700
@@ -1,4 +1,4 @@
 [Nova]
 vendor = Oracle Solaris
 product = OpenStack Nova
-package = Havana 2013.2.3
+package = Juno 2014.2.2
--- a/components/openstack/nova/files/solariszones/driver.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/solariszones/driver.py	Mon Apr 20 12:35:51 2015 -0700
@@ -1,9 +1,7 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
 # Copyright 2011 Justin Santa Barbara
 # All Rights Reserved.
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
@@ -45,13 +43,15 @@
 from nova.compute import power_state
 from nova.compute import task_states
 from nova.compute import vm_states
+from nova.console import type as ctype
 from nova import conductor
 from nova import context as nova_context
 from nova import exception
+from nova.i18n import _
 from nova.image import glance
 from nova.network import neutronv2
+from nova.objects import flavor as flavor_obj
 from nova.openstack.common import fileutils
-from nova.openstack.common.gettextutils import _
 from nova.openstack.common import jsonutils
 from nova.openstack.common import log as logging
 from nova.openstack.common import loopingcall
@@ -119,6 +119,10 @@
 }
 
 MAX_CONSOLE_BYTES = 102400
+VNC_CONSOLE_BASE_FMRI = 'svc:/application/openstack/nova/zone-vnc-console'
+# Required in order to create a zone VNC console SMF service instance
+VNC_SERVER_PATH = '/usr/bin/vncserver'
+XTERM_PATH = '/usr/bin/xterm'
 
 
 def lookup_resource_property(zone, resource, prop, filter=None):
@@ -278,7 +282,7 @@
     capabilities = {
         "has_imagecache": False,
         "supports_recreate": False,
-    }
+        }
 
     def __init__(self, virtapi):
         self.virtapi = virtapi
@@ -291,10 +295,24 @@
         self._initiator = None
         self._install_engine = None
         self._pagesize = os.sysconf('SC_PAGESIZE')
+        self._rad_connection = None
         self._uname = os.uname()
         self._validated_archives = list()
         self._volume_api = volume.API()
 
+    @property
+    def rad_connection(self):
+        if self._rad_connection is None:
+            self._rad_connection = rad.connect.connect_unix()
+        else:
+            # taken from rad.connect.RadConnection.__repr__ to look for a
+            # closed connection
+            if self._rad_connection._closed is not None:
+                # the RAD connection has been lost.  Reconnect to RAD
+                self._rad_connection = rad.connect.connect_unix()
+
+        return self._rad_connection
+
     def _init_rad(self):
         """Connect to RAD providers for kernel statistics and Solaris
         Zones. By connecting to the local rad(1M) service through a
@@ -303,11 +321,8 @@
         via zonemgr(3RAD).
         """
 
-        # TODO(dcomay): Arrange to call this in the event of losing the
-        # connection to RAD.
         try:
-            self._rad_instance = rad.connect.connect_unix()
-            self._kstat_control = self._rad_instance.get_object(
+            self._kstat_control = self.rad_connection.get_object(
                 kstat.Control())
         except Exception as reason:
             msg = (_('Unable to connect to svc:/system/rad:local: %s')
@@ -321,6 +336,12 @@
         # TODO(Vek): Need to pass context in for access to auth_token
         self._init_rad()
 
+    def cleanup_host(self, host):
+        """Clean up anything that is necessary for the driver gracefully stop,
+        including ending remote sessions. This is optional.
+        """
+        pass
+
     def _get_fc_hbas(self):
         """Get Fibre Channel HBA information."""
         if self._fc_hbas:
@@ -416,7 +437,7 @@
     def _get_zone_by_name(self, name):
         """Return a Solaris Zones object via RAD by name."""
         try:
-            zone = self._rad_instance.get_object(
+            zone = self.rad_connection.get_object(
                 zonemgr.Zone(), rad.client.ADRGlobPattern({'name': name}))
         except rad.client.NotFoundError:
             return None
@@ -436,7 +457,7 @@
         """Return the maximum memory in KBytes allowed."""
         max_mem = lookup_resource_property(zone, 'capped-memory', 'physical')
         if max_mem is not None:
-            return strutils.to_bytes(max_mem) / 1024
+            return strutils.string_to_bytes("%sB" % max_mem) / 1024
 
         # If physical property in capped-memory doesn't exist, this may
         # represent a non-global zone so just return the system's total
@@ -495,7 +516,7 @@
         }
         try:
             self._kstat_control.update()
-            kstat_object = self._rad_instance.get_object(
+            kstat_object = self.rad_connection.get_object(
                 kstat.Kstat(), rad.client.ADRGlobPattern(pattern))
         except Exception as reason:
             LOG.info(_("Unable to retrieve kstat object '%s:%s:%s' of class "
@@ -524,6 +545,8 @@
     def get_info(self, instance):
         """Get the current status of an instance, by name (not ID!)
 
+        :param instance: nova.objects.instance.Instance object
+
         Returns a dict containing:
 
         :state:           the running state, one of the power_state codes
@@ -562,10 +585,10 @@
         """
         return len(self.list_instances())
 
-    def instance_exists(self, instance_id):
+    def instance_exists(self, instance):
         """Checks existence of an instance on the host.
 
-        :param instance_id: The ID / name of the instance to lookup
+        :param instance: The instance to lookup
 
         Returns True if an instance with the supplied ID exists on
         the host, False otherwise.
@@ -577,7 +600,10 @@
             encouraged to override this method with something more
             efficient.
         """
-        return instance_id in self.list_instances()
+        try:
+            return instance.uuid in self.list_instance_uuids()
+        except NotImplementedError:
+            return instance.name in self.list_instances()
 
     def estimate_instance_overhead(self, instance_info):
         """Estimate the virtualization overhead required to build an instance
@@ -593,24 +619,63 @@
 
     def _get_list_zone_object(self):
         """Return a list of all Solaris Zones objects via RAD."""
-        return self._rad_instance.list_objects(zonemgr.Zone())
+        return self.rad_connection.list_objects(zonemgr.Zone())
 
     def list_instances(self):
-        """
-        Return the names of all the instances known to the virtualization
+        """Return the names of all the instances known to the virtualization
         layer, as a list.
         """
         # TODO(Vek): Need to pass context in for access to auth_token
         instances_list = []
         for zone in self._get_list_zone_object():
-            instances_list.append(self._rad_instance.get_object(zone).name)
-
+            instances_list.append(self.rad_connection.get_object(zone).name)
         return instances_list
 
     def list_instance_uuids(self):
+        """Return the UUIDS of all the instances known to the virtualization
+        layer, as a list.
         """
-        Return the UUIDS of all the instances known to the virtualization
-        layer, as a list.
+        raise NotImplementedError()
+
+    def rebuild(self, context, instance, image_meta, injected_files,
+                admin_password, bdms, detach_block_devices,
+                attach_block_devices, network_info=None,
+                recreate=False, block_device_info=None,
+                preserve_ephemeral=False):
+        """Destroy and re-make this instance.
+
+        A 'rebuild' effectively purges all existing data from the system and
+        remakes the VM with given 'metadata' and 'personalities'.
+
+        This base class method shuts down the VM, detaches all block devices,
+        then spins up the new VM afterwards. It may be overridden by
+        hypervisors that need to - e.g. for optimisations, or when the 'VM'
+        is actually proxied and needs to be held across the shutdown + spin
+        up steps.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+                         This function should use the data there to guide
+                         the creation of the new instance.
+        :param image_meta: image object returned by nova.image.glance that
+                           defines the image from which to boot this instance
+        :param injected_files: User files to inject into instance.
+        :param admin_password: Administrator password to set in instance.
+        :param bdms: block-device-mappings to use for rebuild
+        :param detach_block_devices: function to detach block devices. See
+            nova.compute.manager.ComputeManager:_rebuild_default_impl for
+            usage.
+        :param attach_block_devices: function to attach block devices. See
+            nova.compute.manager.ComputeManager:_rebuild_default_impl for
+            usage.
+        :param network_info:
+           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
+        :param recreate: True if the instance is being recreated on a new
+            hypervisor - all the cleanup of old state is skipped.
+        :param block_device_info: Information about block devices to be
+                                  attached to the instance.
+        :param preserve_ephemeral: True if the default ephemeral storage
+                                   partition must be preserved on rebuild
         """
         raise NotImplementedError()
 
@@ -831,9 +896,9 @@
                 driver_type = connection_info['driver_volume_type']
                 if driver_type == 'local':
                     LOG.warning(_("Detected 'local' zvol driver volume type "
-                                "from volume service, which should not be "
-                                "used as a boot device for 'solaris' branded "
-                                "zones."))
+                                  "from volume service, which should not be "
+                                  "used as a boot device for 'solaris' "
+                                  "branded zones."))
                     delete_boot_volume = True
                 elif driver_type == 'iscsi':
                     # Check for a potential loopback iSCSI situation
@@ -850,18 +915,18 @@
                     # iSCSI LUN is on the same host as the instance.
                     if target_host in [connector['ip'], connector['host']]:
                         LOG.warning(_("iSCSI connection info from volume "
-                                    "service indicates that the target is a "
-                                    "local volume, which should not be used "
-                                    "as a boot device for 'solaris' branded "
-                                    "zones."))
+                                      "service indicates that the target is a "
+                                      "local volume, which should not be used "
+                                      "as a boot device for 'solaris' branded "
+                                      "zones."))
                         delete_boot_volume = True
                 # Assuming that fibre_channel is non-local
                 elif driver_type != 'fibre_channel':
                     # Some other connection type that we don't understand
                     # Let zone use some local fallback instead.
                     LOG.warning(_("Unsupported volume driver type '%s' "
-                                "can not be used as a boot device for "
-                                "'solaris' branded zones."))
+                                  "can not be used as a boot device for "
+                                  "'solaris' branded zones."))
                     delete_boot_volume = True
 
             if delete_boot_volume:
@@ -958,11 +1023,14 @@
             raise exception.InstanceNotFound(instance_id=name)
 
         tenant_id = None
+        network_plugin = neutronv2.get_client(context)
         for netid, network in enumerate(network_info):
             if tenant_id is None:
                 tenant_id = network['network']['meta']['tenant_id']
-            network_uuid = network['network']['id']
             port_uuid = network['id']
+            port = network_plugin.show_port(port_uuid)['port']
+            evs_uuid = port['network_id']
+            vport_uuid = port['id']
             ip = network['network']['subnets'][0]['ips'][0]['address']
             ip_version = network['network']['subnets'][0]['version']
             route = network['network']['subnets'][0]['gateway']['address']
@@ -975,17 +1043,17 @@
             with ZoneConfig(zone) as zc:
                 if netid == 0:
                     zc.setprop('anet', 'configure-allowed-address', 'false')
-                    zc.setprop('anet', 'evs', network_uuid)
-                    zc.setprop('anet', 'vport', port_uuid)
+                    zc.setprop('anet', 'evs', evs_uuid)
+                    zc.setprop('anet', 'vport', vport_uuid)
                 else:
                     zc.addresource(
                         'anet',
                         [zonemgr.Property('configure-allowed-address',
                                           'false'),
-                         zonemgr.Property('evs', network_uuid),
-                         zonemgr.Property('vport', port_uuid)])
-
-                filter = [zonemgr.Property('vport', port_uuid)]
+                         zonemgr.Property('evs', evs_uuid),
+                         zonemgr.Property('vport', vport_uuid)])
+
+                filter = [zonemgr.Property('vport', vport_uuid)]
                 if brand == ZONE_BRAND_SOLARIS:
                     linkname = lookup_resource_property(zc.zone, 'anet',
                                                         'linkname', filter)
@@ -995,8 +1063,6 @@
                     linkname = 'net%s' % id
 
             # create the required sysconfig file
-            network_plugin = neutronv2.get_client(context)
-            port = network_plugin.show_port(port_uuid)['port']
             subnet_uuid = port['fixed_ips'][0]['subnet_id']
             subnet = network_plugin.show_subnet(subnet_uuid)['subnet']
 
@@ -1099,7 +1165,7 @@
 
         self._verify_sysconfig(sc_dir, instance)
 
-        zonemanager = self._rad_instance.get_object(zonemgr.ZoneManager())
+        zonemanager = self.rad_connection.get_object(zonemgr.ZoneManager())
         try:
             zonemanager.create(name, None, template)
             self._set_global_properties(name, extra_specs, brand)
@@ -1114,6 +1180,154 @@
                         "zonemgr(3RAD): %s") % (name, reason))
             raise
 
+    def _create_vnc_console_service(self, instance):
+        """Create a VNC console SMF service for a Solaris Zone"""
+        # Basic environment checks first: vncserver and xterm
+        if not os.path.exists(VNC_SERVER_PATH):
+            LOG.warning(_("Zone VNC console SMF service not available on this "
+                          "compute node. %s is missing. Run 'pkg install "
+                          "x11/server/xvnc'") % VNC_SERVER_PATH)
+            raise exception.ConsoleTypeUnavailable(console_type='vnc')
+
+        if not os.path.exists(XTERM_PATH):
+            LOG.warning(_("Zone VNC console SMF service not available on this "
+                          "compute node. %s is missing. Run 'pkg install "
+                          "terminal/xterm'") % XTERM_PATH)
+            raise exception.ConsoleTypeUnavailable(console_type='vnc')
+
+        name = instance['name']
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            out, err = utils.execute('/usr/sbin/svccfg', '-s',
+                                     VNC_CONSOLE_BASE_FMRI, 'add', name)
+        except processutils.ProcessExecutionError as err:
+            if self._has_vnc_console_service(instance):
+                LOG.debug(_("Ignoring attempt to create existing zone VNC "
+                            "console SMF service for instance '%s'") % name)
+                return
+            else:
+                LOG.error(_("Unable to create zone VNC console SMF service "
+                            "'{0}': {1}").format(
+                                VNC_CONSOLE_BASE_FMRI + ':' + name, err))
+                raise
+
+    def _delete_vnc_console_service(self, instance):
+        """Delete a VNC console SMF service for a Solaris Zone"""
+        name = instance['name']
+        self._disable_vnc_console_service(instance)
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            out, err = utils.execute('/usr/sbin/svccfg', '-s',
+                                     VNC_CONSOLE_BASE_FMRI, 'delete', name)
+        except processutils.ProcessExecutionError as err:
+            if not self._has_vnc_console_service(instance):
+                LOG.debug(_("Ignoring attempt to delete a non-existent zone "
+                            "VNC console SMF service for instance '%s'")
+                          % name)
+                return
+            else:
+                LOG.error(_("Unable to delete zone VNC console SMF service "
+                            "'%s': %s")
+                          % (VNC_CONSOLE_BASE_FMRI + ':' + name, err))
+                raise
+
+    def _enable_vnc_console_service(self, instance):
+        """Enable a zone VNC console SMF service"""
+        name = instance['name']
+
+        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            out, err = utils.execute('/usr/sbin/svcadm', 'enable',
+                                     console_fmri)
+        except processutils.ProcessExecutionError as err:
+            if not self._has_vnc_console_service(instance):
+                LOG.error(_("Ignoring attempt to enable a non-existent zone "
+                            "VNC console SMF service for instance '%s'")
+                          % name)
+            LOG.error(_("Unable to start zone VNC console SMF service "
+                        "'%s': %s") % (console_fmri, err))
+            raise
+
+        # Allow some time for the console service to come online.
+        greenthread.sleep(2)
+        while True:
+            try:
+                out, err = utils.execute('/usr/bin/svcs', '-H', '-o', 'state',
+                                         console_fmri)
+                state = out.strip()
+                if state == 'online':
+                    break
+                elif state in ['maintenance', 'offline']:
+                    LOG.error(_("Zone VNC console SMF service '%s' is in the "
+                                "'%s' state. Run 'svcs -x %s' for details.")
+                              % (console_fmri, state, console_fmri))
+                    raise exception.ConsoleNotFoundForInstance(
+                        instance_uuid=instance['uuid'])
+                # Wait for service state to transition to (hopefully) online
+                # state or offline/maintenance states.
+                greenthread.sleep(2)
+            except processutils.ProcessExecutionError as err:
+                LOG.error(_("Error querying state of zone VNC console SMF "
+                            "service '%s': %s") % (console_fmri, err))
+                raise
+
+    def _disable_vnc_console_service(self, instance):
+        """Disable a zone VNC console SMF service"""
+        name = instance['name']
+        if not self._has_vnc_console_service(instance):
+            LOG.debug(_("Ignoring attempt to disable a non-existent zone VNC "
+                        "console SMF service for instance '%s'") % name)
+            return
+        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            out, err = utils.execute('/usr/sbin/svcadm', 'disable',
+                                     console_fmri)
+        except processutils.ProcessExecutionError as err:
+            LOG.error(_("Unable to disable zone VNC console SMF service "
+                        "'%s': %s") % (console_fmri, err))
+        # The console service sets a SMF instance property for the port
+        # on which the VNC service is listening. The service needs to be
+        # refreshed to reset the property value
+        try:
+            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
+                                     'refresh')
+        except processutils.ProcessExecutionError as err:
+            LOG.error(_("Unable to refresh zone VNC console SMF service "
+                        "'%s': %s") % (console_fmri, err))
+
+    def _get_vnc_console_service_state(self, instance):
+        """Returns state of the instance zone VNC console SMF service"""
+        name = instance['name']
+        if not self._has_vnc_console_service(instance):
+            LOG.warning(_("Console state requested for a non-existent zone "
+                          "VNC console SMF service for instance '%s'")
+                        % name)
+            return None
+        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            state, err = utils.execute('/usr/sbin/svcs', '-H', '-o', 'state',
+                                       console_fmri)
+            return state.strip()
+        except processutils.ProcessExecutionError as err:
+            LOG.error(_("Console state request failed for zone VNC console "
+                        "SMF service for instance '%s': %s") % (name, err))
+            raise
+
+    def _has_vnc_console_service(self, instance):
+        """Returns True if the instance has a zone VNC console SMF service"""
+        name = instance['name']
+        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            utils.execute('/usr/bin/svcs', '-H', '-o', 'state',
+                          console_fmri)
+            return True
+        except processutils.ProcessExecutionError as err:
+            return False
+
     def _install(self, instance, image, extra_specs, sc_dir):
         """Install a new Solaris Zone root file system."""
         name = instance['name']
@@ -1183,7 +1397,7 @@
         if self._get_zone_by_name(name) is None:
             raise exception.InstanceNotFound(instance_id=name)
 
-        zonemanager = self._rad_instance.get_object(zonemgr.ZoneManager())
+        zonemanager = self.rad_connection.get_object(zonemgr.ZoneManager())
         try:
             zonemanager.delete(name)
         except Exception as reason:
@@ -1193,8 +1407,7 @@
 
     def spawn(self, context, instance, image_meta, injected_files,
               admin_password, network_info=None, block_device_info=None):
-        """
-        Create a new instance/VM/domain on the virtualization platform.
+        """Create a new instance/VM/domain on the virtualization platform.
 
         Once this successfully completes, the instance should be
         running (power_state.RUNNING).
@@ -1204,7 +1417,7 @@
         that it was before this call began.
 
         :param context: security context
-        :param instance: Instance object as returned by DB layer.
+        :param instance: nova.objects.instance.Instance
                          This function should use the data there to guide
                          the creation of the new instance.
         :param image_meta: image object returned by nova.image.glance that
@@ -1216,7 +1429,7 @@
         :param block_device_info: Information about block devices to be
                                   attached to the instance.
         """
-        inst_type = self.virtapi.instance_type_get(
+        inst_type = flavor_obj.Flavor.get_by_id(
             nova_context.get_admin_context(read_deleted='yes'),
             instance['instance_type_id'])
         extra_specs = inst_type['extra_specs'].copy()
@@ -1234,68 +1447,12 @@
                                                     extra_specs)
         name = instance['name']
 
-        def _ai_health_check(zone):
-            # TODO(npower) A hung kernel zone installation will not always
-            # be detected by zoneadm in the host global zone, which locks
-            # out other zoneadm commands.
-            # Workaround:
-            # Check the state of the auto-installer:default SMF service in
-            # the kernel zone. If installation failed, it should be in the
-            # 'maintenance' state. Unclog zoneadm by executing a shutdown
-            # inside the kernel zone if that's the case.
-            # Eventually we'll be able to pass a boot option to the zone
-            # to have it automatically shutdown if the installation fails.
-            if instance['vm_state'] == vm_states.BUILDING:
-                if self._get_zone_auto_install_state(name) == 'maintenance':
-                    # Poweroff the zone. This will cause the current call to
-                    # self._install() to catch an exception and tear down
-                    # the kernel zone.
-                    LOG.error(_("Automated installation of instance '%s' "
-                              "failed. Powering off the kernel zone '%s'.")
-                              % (instance['display_name'], name))
-                    try:
-                        utils.execute('/usr/sbin/zlogin', '-S', name,
-                                      '/usr/sbin/poweroff')
-                    except processutils.ProcessExecutionError as err:
-                        # poweroff pulls the rug from under zlogin, so ignore
-                        # the anticipated error.
-                        pass
-                    finally:
-                        raise loopingcall.LoopingCallDone()
-                else:
-                    # Looks like it installed OK
-                    if zone.state == ZONE_STATE_INSTALLED:
-                        LOG.debug(_("Kernel zone '%s' (%s) state: %s.")
-                                  % (name, instance['display_name'],
-                                     zone.state))
-                        raise loopingcall.LoopingCallDone()
-                    else:
-                        return
-            else:
-                # Can't imagine why we'd get here under normal circumstances
-                LOG.warning(_("Unexpected vm_state during installation of "
-                            "'%s' (%s): %s. Zone state: %s")
-                            % (name, instance['display_name'],
-                               instance['vm_state'], zone.state))
-                raise loopingcall.LoopingCallDone()
-
         LOG.debug(_("creating zone configuration for '%s' (%s)") %
                   (name, instance['display_name']))
         self._create_config(context, instance, network_info,
                             connection_info, extra_specs, sc_dir)
         try:
-            zone = self._get_zone_by_name(name)
-            is_kz = lookup_resource_property_value(zone, "global", "brand",
-                                                   ZONE_BRAND_SOLARIS_KZ)
-            # Monitor kernel zone installation explicitly
-            if is_kz:
-                monitor = loopingcall.FixedIntervalLoopingCall(
-                    _ai_health_check, zone)
-                monitor.start(interval=15, initial_delay=60)
-                self._install(instance, image, extra_specs, sc_dir)
-                monitor.wait()
-            else:
-                self._install(instance, image, extra_specs, sc_dir)
+            self._install(instance, image, extra_specs, sc_dir)
             self._power_on(instance)
         except Exception as reason:
             LOG.error(_("Unable to spawn instance '%s' via zonemgr(3RAD): %s")
@@ -1316,24 +1473,7 @@
                 zone.shutdown()
             else:
                 # 'HARD'
-                # TODO(npower) See comments for _ai_health_check() for why
-                # it is sometimes necessary to poweroff from within the zone,
-                # until zoneadm and auto-install can perform this internally.
-                zprop = lookup_resource_property_value(zone, "global", "brand",
-                                                       ZONE_BRAND_SOLARIS_KZ)
-                if zprop and self._get_zone_auto_install_state(name):
-                    # Don't really care what state the install service is in.
-                    # Just shut it down ASAP.
-                    try:
-                        utils.execute('/usr/sbin/zlogin', '-S', name,
-                                      '/usr/sbin/poweroff')
-                    except processutils.ProcessExecutionError as err:
-                        # Poweroff pulls the rug from under zlogin, so ignore
-                        # the anticipated error.
-                        return
-                else:
-                    zone.halt()
-            return
+                zone.halt()
         except rad.client.ObjectError as reason:
             result = reason.get_payload()
             if result.code == zonemgr.ErrorCode.COMMAND_ERROR:
@@ -1346,23 +1486,33 @@
                         "%s") % (name, reason))
             raise exception.InstancePowerOffFailure(reason=reason)
 
-    def destroy(self, instance, network_info, block_device_info=None,
-                destroy_disks=True, context=None):
-        """Destroy (shutdown and delete) the specified instance.
+    def destroy(self, context, instance, network_info, block_device_info=None,
+                destroy_disks=True, migrate_data=None):
+        """Destroy the specified instance from the Hypervisor.
 
         If the instance is not found (for example if networking failed), this
         function should still succeed.  It's probably a good idea to log a
         warning in that case.
 
+        :param context: security context
         :param instance: Instance object as returned by DB layer.
         :param network_info:
            :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
         :param block_device_info: Information about block devices that should
                                   be detached from the instance.
         :param destroy_disks: Indicates if disks should be destroyed
-
+        :param migrate_data: implementation specific params
         """
-        # TODO(Vek): Need to pass context in for access to auth_token
+        try:
+            # These methods log if problems occur so no need to double log
+            # here. Just catch any stray exceptions and allow destroy to
+            # proceed.
+            if self._has_vnc_console_service(instance):
+                self._disable_vnc_console_service(instance)
+                self._delete_vnc_console_service(instance)
+        except Exception:
+            pass
+
         name = instance['name']
         zone = self._get_zone_by_name(name)
         # If instance cannot be found, just return.
@@ -1382,6 +1532,24 @@
             LOG.warning(_("Unable to destroy instance '%s' via zonemgr(3RAD): "
                           "%s") % (name, reason))
 
+    def cleanup(self, context, instance, network_info, block_device_info=None,
+                destroy_disks=True, migrate_data=None, destroy_vifs=True):
+        """Cleanup the instance resources .
+
+        Instance should have been destroyed from the Hypervisor before calling
+        this method.
+
+        :param context: security context
+        :param instance: Instance object as returned by DB layer.
+        :param network_info:
+           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
+        :param block_device_info: Information about block devices that should
+                                  be detached from the instance.
+        :param destroy_disks: Indicates if disks should be destroyed
+        :param migrate_data: implementation specific params
+        """
+        raise NotImplementedError()
+
     def reboot(self, context, instance, network_info, reboot_type,
                block_device_info=None, bad_volumes_callback=None):
         """Reboot the specified instance.
@@ -1392,7 +1560,7 @@
         successfully even in cases in which the underlying domain/vm
         is paused or halted/stopped.
 
-        :param instance: Instance object as returned by DB layer.
+        :param instance: nova.objects.instance.Instance
         :param network_info:
            :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
         :param reboot_type: Either a HARD or SOFT reboot
@@ -1462,16 +1630,91 @@
                 console_str = fragment + console_str
         return console_str
 
-    def get_console_output(self, instance):
-        # TODO(Vek): Need to pass context in for access to auth_token
+    def get_console_output(self, context, instance):
+        """Get console output for an instance
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+        """
         return self._get_console_output(instance)
 
-    def get_vnc_console(self, instance):
-        # TODO(Vek): Need to pass context in for access to auth_token
+    def get_vnc_console(self, context, instance):
+        """Get connection info for a vnc console.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+
+        :returns an instance of console.type.ConsoleVNC
+        """
+        # Do not provide console access prematurely. Zone console access is
+        # exclusive and zones that are still installing require their console.
+        # Grabbing the zone console will break installation.
+        name = instance['name']
+        if instance['vm_state'] == vm_states.BUILDING:
+            LOG.info(_("VNC console not available until zone '%s' has "
+                     "completed installation. Try again later.") % name)
+            raise exception.InstanceNotReady(instance_id=instance['uuid'])
+
+        if not self._has_vnc_console_service(instance):
+            LOG.debug(_("Creating zone VNC console SMF service for "
+                      "instance '%s'") % name)
+            self._create_vnc_console_service(instance)
+
+        self._enable_vnc_console_service(instance)
+        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
+
+        # The console service sets an SMF instance property for the port
+        # on which the VNC service is listening. The service needs to be
+        # refreshed to reflect the current property value
+        # TODO(npower): investigate using RAD instead of CLI invocation
+        try:
+            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
+                                     'refresh')
+        except processutils.ProcessExecutionError as err:
+            LOG.error(_("Unable to refresh zone VNC console SMF service "
+                        "'%s': %s" % (console_fmri, err)))
+            raise
+
+        try:
+            out, err = utils.execute('/usr/bin/svcprop', '-p', 'vnc/port',
+                                     console_fmri)
+            port = int(out.strip())
+            return ctype.ConsoleVNC(host='127.0.0.1',
+                                    port=port,
+                                    internal_access_path=None)
+        except processutils.ProcessExecutionError as err:
+            LOG.error(_("Unable to read VNC console port from zone VNC "
+                        "console SMF service '%s': %s"
+                      % (console_fmri, err)))
+
+    def get_spice_console(self, context, instance):
+        """Get connection info for a spice console.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+
+        :returns an instance of console.type.ConsoleSpice
+        """
         raise NotImplementedError()
 
-    def get_spice_console(self, instance):
-        # TODO(Vek): Need to pass context in for access to auth_token
+    def get_rdp_console(self, context, instance):
+        """Get connection info for a rdp console.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+
+        :returns an instance of console.type.ConsoleRDP
+        """
+        raise NotImplementedError()
+
+    def get_serial_console(self, context, instance):
+        """Get connection info for a serial console.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+
+        :returns an instance of console.type.ConsoleSerial
+        """
         raise NotImplementedError()
 
     def _get_zone_diagnostics(self, zone):
@@ -1506,7 +1749,10 @@
         return diagnostics
 
     def get_diagnostics(self, instance):
-        """Return data about VM diagnostics."""
+        """Return data about VM diagnostics.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         name = instance['name']
         zone = self._get_zone_by_name(name)
@@ -1516,9 +1762,18 @@
             raise exception.InstanceNotFound(instance_id=name)
         return self._get_zone_diagnostics(zone)
 
+    def get_instance_diagnostics(self, instance):
+        """Return data about VM diagnostics.
+
+        :param instance: nova.objects.instance.Instance
+        """
+        raise NotImplementedError()
+
     def get_all_bw_counters(self, instances):
         """Return bandwidth usage counters for each interface on each
            running VM.
+
+        :param instances: nova.objects.instance.InstanceList
         """
         raise NotImplementedError()
 
@@ -1529,14 +1784,13 @@
         raise NotImplementedError()
 
     def get_host_ip_addr(self):
-        """
-        Retrieves the IP address of the dom0
+        """Retrieves the IP address of the dom0
         """
         # TODO(Vek): Need to pass context in for access to auth_token
         return CONF.my_ip
 
     def attach_volume(self, context, connection_info, instance, mountpoint,
-                      encryption=None):
+                      disk_bus=None, device_type=None, encryption=None):
         """Attach the disk to the instance at mountpoint using info."""
         # TODO(npower): Apply mountpoint in a meaningful way to the zone
         # (I don't think this is even possible for Solaris brand zones)
@@ -1583,44 +1837,49 @@
             zc.removeresources("device", [zonemgr.Property("storage", suri)])
 
     def swap_volume(self, old_connection_info, new_connection_info,
-                    instance, mountpoint):
-        """Replace the disk attached to the instance."""
+                    instance, mountpoint, resize_to):
+        """Replace the disk attached to the instance.
+
+        :param instance: nova.objects.instance.Instance
+        :param resize_to: This parameter is used to indicate the new volume
+                          size when the new volume lager than old volume.
+                          And the units is Gigabyte.
+        """
         raise NotImplementedError()
 
     def attach_interface(self, instance, image_meta, vif):
-        """Attach an interface to the instance."""
+        """Attach an interface to the instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def detach_interface(self, instance, vif):
-        """Detach an interface from the instance."""
+        """Detach an interface from the instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def migrate_disk_and_power_off(self, context, instance, dest,
-                                   instance_type, network_info,
-                                   block_device_info=None):
-        """
-        Transfers the disk of a running instance in multiple phases, turning
+                                   flavor, network_info,
+                                   block_device_info=None,
+                                   timeout=0, retry_interval=0):
+        """Transfers the disk of a running instance in multiple phases, turning
         off the instance before the end.
-        """
-        raise NotImplementedError()
-
-    def live_snapshot(self, context, instance, image_id, update_task_state):
-        """
-        Live-snapshots the specified instance (includes ram and proc state).
-
-        :param context: security context
-        :param instance: Instance object as returned by DB layer.
-        :param image_id: Reference to a pre-created image that will
-                         hold the snapshot.
+
+        :param instance: nova.objects.instance.Instance
+        :param timeout: time to wait for GuestOS to shutdown
+        :param retry_interval: How often to signal guest while
+                               waiting for it to shutdown
         """
         raise NotImplementedError()
 
     def snapshot(self, context, instance, image_id, update_task_state):
-        """
-        Snapshots the specified instance.
+        """Snapshots the specified instance.
 
         :param context: security context
-        :param instance: Instance object as returned by DB layer.
+        :param instance: nova.objects.instance.Instance
         :param image_id: Reference to a pre-created image that will
                          hold the snapshot.
         """
@@ -1645,6 +1904,7 @@
                 'image_location': 'snapshot',
                 'image_state': 'available',
                 'owner_id': instance['project_id'],
+                'instance_uuid': instance['uuid'],
             }
         }
         # Match architecture, hypervisor_type and vm_mode properties to base
@@ -1666,10 +1926,6 @@
 
         with utils.tempdir(dir=snapshot_directory) as tmpdir:
             out_path = os.path.join(tmpdir, snapshot_name)
-
-            # TODO(npower): archiveadm invocation needs --root-only arg
-            # passed once it is available. Assume the instance contains
-            # root pool only for now.
             zone_name = instance['name']
             utils.execute('/usr/sbin/archiveadm', 'create', '--root-only',
                           '-z', zone_name, out_path)
@@ -1678,9 +1934,9 @@
                      instance=instance)
             try:
                 # Upload the archive image to the image service
-                update_task_state(task_state=task_states.IMAGE_UPLOADING,
-                                  expected_state=
-                                  task_states.IMAGE_PENDING_UPLOAD)
+                update_task_state(
+                    task_state=task_states.IMAGE_UPLOADING,
+                    expected_state=task_states.IMAGE_PENDING_UPLOAD)
                 with open(out_path, 'r') as image_file:
                     snapshot_service.update(context,
                                             image_id,
@@ -1707,6 +1963,14 @@
                 # Delete the snapshot image file source
                 os.unlink(out_path)
 
+    def post_interrupted_snapshot_cleanup(self, context, instance):
+        """Cleans up any resources left after an interrupted snapshot.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
+        """
+        pass
+
     def finish_migration(self, context, migration, instance, disk_info,
                          network_info, image_meta, resize_instance,
                          block_device_info=None, power_on=True):
@@ -1714,7 +1978,7 @@
 
         :param context: the context for the migration/resize
         :param migration: the migrate/resize information
-        :param instance: the instance being migrated/resized
+        :param instance: nova.objects.instance.Instance being migrated/resized
         :param disk_info: the newly transferred disk information
         :param network_info:
            :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
@@ -1730,46 +1994,56 @@
         raise NotImplementedError()
 
     def confirm_migration(self, migration, instance, network_info):
-        """Confirms a resize, destroying the source VM."""
+        """Confirms a resize, destroying the source VM.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
-    def finish_revert_migration(self, instance, network_info,
+    def finish_revert_migration(self, context, instance, network_info,
                                 block_device_info=None, power_on=True):
-        """
-        Finish reverting a resize.
-
-        :param instance: the instance being migrated/resized
+        """Finish reverting a resize.
+
+        :param context: the context for the finish_revert_migration
+        :param instance: nova.objects.instance.Instance being migrated/resized
         :param network_info:
            :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
         :param block_device_info: instance volume block device info
         :param power_on: True if the instance should be powered on, False
                          otherwise
         """
-        # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
     def pause(self, instance):
-        """Pause the specified instance."""
+        """Pause the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
     def unpause(self, instance):
-        """Unpause paused VM instance."""
+        """Unpause paused VM instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
     def suspend(self, instance):
-        """suspend the specified instance."""
+        """suspend the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
     def resume(self, context, instance, network_info, block_device_info=None):
-        """
-        resume the specified instance.
+        """resume the specified instance.
 
         :param context: the context for the resume
-        :param instance: the instance being resumed
+        :param instance: nova.objects.instance.Instance being resumed
         :param network_info:
            :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
         :param block_device_info: instance volume block device info
@@ -1778,7 +2052,10 @@
 
     def resume_state_on_host_boot(self, context, instance, network_info,
                                   block_device_info=None):
-        """resume guest state when a host is booted."""
+        """resume guest state when a host is booted.
+
+        :param instance: nova.objects.instance.Instance
+        """
         name = instance['name']
         zone = self._get_zone_by_name(name)
         if zone is None:
@@ -1794,29 +2071,57 @@
 
     def rescue(self, context, instance, network_info, image_meta,
                rescue_password):
-        """Rescue the specified instance."""
+        """Rescue the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
+        raise NotImplementedError()
+
+    def set_bootable(self, instance, is_bootable):
+        """Set the ability to power on/off an instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def unrescue(self, instance, network_info):
-        """Unrescue the specified instance."""
+        """Unrescue the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
-    def power_off(self, instance):
-        """Power off the specified instance."""
+    def power_off(self, instance, timeout=0, retry_interval=0):
+        """Power off the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        :param timeout: time to wait for GuestOS to shutdown
+        :param retry_interval: How often to signal guest while
+                               waiting for it to shutdown
+        """
         self._power_off(instance, 'SOFT')
 
     def power_on(self, context, instance, network_info,
                  block_device_info=None):
-        """Power on the specified instance."""
+        """Power on the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         self._power_on(instance)
 
     def soft_delete(self, instance):
-        """Soft delete the specified instance."""
+        """Soft delete the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def restore(self, instance):
-        """Restore the specified instance."""
+        """Restore the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def _get_zpool_property(self, prop, zpool):
@@ -1928,12 +2233,12 @@
         resources['supported_instances'] = host_stats['supported_instances']
         return resources
 
-    def pre_live_migration(self, ctxt, instance_ref, block_device_info,
+    def pre_live_migration(self, context, instance, block_device_info,
                            network_info, disk_info, migrate_data=None):
         """Prepare an instance for live migration
 
-        :param ctxt: security context
-        :param instance_ref: instance object that will be migrated
+        :param context: security context
+        :param instance: nova.objects.instance.Instance object
         :param block_device_info: instance block device information
         :param network_info: instance network information
         :param disk_info: instance disk information
@@ -1941,62 +2246,92 @@
         """
         raise NotImplementedError()
 
-    def live_migration(self, ctxt, instance_ref, dest,
+    def live_migration(self, context, instance, dest,
                        post_method, recover_method, block_migration=False,
                        migrate_data=None):
         """Live migration of an instance to another host.
 
-        :params ctxt: security context
-        :params instance_ref:
+        :param context: security context
+        :param instance:
             nova.db.sqlalchemy.models.Instance object
             instance object that is migrated.
-        :params dest: destination host
-        :params post_method:
+        :param dest: destination host
+        :param post_method:
             post operation method.
-            expected nova.compute.manager.post_live_migration.
-        :params recover_method:
+            expected nova.compute.manager._post_live_migration.
+        :param recover_method:
             recovery method when any exception occurs.
-            expected nova.compute.manager.recover_live_migration.
-        :params block_migration: if true, migrate VM disk.
-        :params migrate_data: implementation specific params.
+            expected nova.compute.manager._rollback_live_migration.
+        :param block_migration: if true, migrate VM disk.
+        :param migrate_data: implementation specific params.
 
         """
         raise NotImplementedError()
 
-    def post_live_migration(self, ctxt, instance_ref, block_device_info):
+    def rollback_live_migration_at_destination(self, context, instance,
+                                               network_info,
+                                               block_device_info,
+                                               destroy_disks=True,
+                                               migrate_data=None):
+        """Clean up destination node after a failed live migration.
+
+        :param context: security context
+        :param instance: instance object that was being migrated
+        :param network_info: instance network information
+        :param block_device_info: instance block device information
+        :param destroy_disks:
+            if true, destroy disks at destination during cleanup
+        :param migrate_data: implementation specific params
+
+        """
+        raise NotImplementedError()
+
+    def post_live_migration(self, context, instance, block_device_info,
+                            migrate_data=None):
         """Post operation of live migration at source host.
 
-        :param ctxt: security contet
-        :instance_ref: instance object that was migrated
+        :param context: security context
+        :instance: instance object that was migrated
         :block_device_info: instance block device information
+        :param migrate_data: if not None, it is a dict which has data
         """
         pass
 
-    def post_live_migration_at_destination(self, ctxt, instance_ref,
+    def post_live_migration_at_source(self, context, instance, network_info):
+        """Unplug VIFs from networks at source.
+
+        :param context: security context
+        :param instance: instance object reference
+        :param network_info: instance network information
+        """
+        raise NotImplementedError(_("Hypervisor driver does not support "
+                                    "post_live_migration_at_source method"))
+
+    def post_live_migration_at_destination(self, context, instance,
                                            network_info,
                                            block_migration=False,
                                            block_device_info=None):
         """Post operation of live migration at destination host.
 
-        :param ctxt: security context
-        :param instance_ref: instance object that is migrated
+        :param context: security context
+        :param instance: instance object that is migrated
         :param network_info: instance network information
         :param block_migration: if true, post operation of block_migration.
         """
         raise NotImplementedError()
 
-    def check_instance_shared_storage_local(self, ctxt, instance):
+    def check_instance_shared_storage_local(self, context, instance):
         """Check if instance files located on shared storage.
 
         This runs check on the destination host, and then calls
         back to the source host to check the results.
 
-        :param ctxt: security context
+        :param context: security context
         :param instance: nova.db.sqlalchemy.models.Instance
         """
         raise NotImplementedError()
 
-    def check_instance_shared_storage_remote(self, ctxt, data):
+    def check_instance_shared_storage_remote(self, context, data):
         """Check if instance files located on shared storage.
 
         :param context: security context
@@ -2004,15 +2339,15 @@
         """
         raise NotImplementedError()
 
-    def check_instance_shared_storage_cleanup(self, ctxt, data):
+    def check_instance_shared_storage_cleanup(self, context, data):
         """Do cleanup on host after check_instance_shared_storage calls
 
-        :param ctxt: security context
+        :param context: security context
         :param data: result of check_instance_shared_storage_local
         """
         pass
 
-    def check_can_live_migrate_destination(self, ctxt, instance_ref,
+    def check_can_live_migrate_destination(self, context, instance,
                                            src_compute_info, dst_compute_info,
                                            block_migration=False,
                                            disk_over_commit=False):
@@ -2021,8 +2356,8 @@
         This runs checks on the destination host, and then calls
         back to the source host to check the results.
 
-        :param ctxt: security context
-        :param instance_ref: nova.db.sqlalchemy.models.Instance
+        :param context: security context
+        :param instance: nova.db.sqlalchemy.models.Instance
         :param src_compute_info: Info about the sending machine
         :param dst_compute_info: Info about the receiving machine
         :param block_migration: if true, prepare for block migration
@@ -2031,16 +2366,16 @@
         """
         raise NotImplementedError()
 
-    def check_can_live_migrate_destination_cleanup(self, ctxt,
+    def check_can_live_migrate_destination_cleanup(self, context,
                                                    dest_check_data):
         """Do required cleanup on dest host after check_can_live_migrate calls
 
-        :param ctxt: security context
+        :param context: security context
         :param dest_check_data: result of check_can_live_migrate_destination
         """
         raise NotImplementedError()
 
-    def check_can_live_migrate_source(self, ctxt, instance_ref,
+    def check_can_live_migrate_source(self, context, instance,
                                       dest_check_data):
         """Check if it is possible to execute live migration.
 
@@ -2048,12 +2383,34 @@
         results from check_can_live_migrate_destination.
 
         :param context: security context
-        :param instance_ref: nova.db.sqlalchemy.models.Instance
+        :param instance: nova.db.sqlalchemy.models.Instance
         :param dest_check_data: result of check_can_live_migrate_destination
         :returns: a dict containing migration info (hypervisor-dependent)
         """
         raise NotImplementedError()
 
+    def get_instance_disk_info(self, instance_name,
+                               block_device_info=None):
+        """Retrieve information about actual disk sizes of an instance.
+
+        :param instance_name:
+            name of a nova instance as returned by list_instances()
+        :param block_device_info:
+            Optional; Can be used to filter out devices which are
+            actually volumes.
+        :return:
+            json strings with below format::
+
+                "[{'path':'disk',
+                   'type':'raw',
+                   'virt_disk_size':'10737418240',
+                   'backing_file':'backing_file',
+                   'disk_size':'83886080'
+                   'over_committed_disk_size':'10737418240'},
+                   ...]"
+        """
+        raise NotImplementedError()
+
     def refresh_security_group_rules(self, security_group_id):
         """This method is called after a change to security groups.
 
@@ -2121,12 +2478,21 @@
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
+    def refresh_instance_security_rules(self, instance):
+        """Refresh security group rules
+
+        Gets called when an instance gets added to or removed from
+        the security group the instance is a member of or if the
+        group gains or loses a rule.
+        """
+        raise NotImplementedError()
+
     def reset_network(self, instance):
         """reset networking for specified instance."""
         # TODO(Vek): Need to pass context in for access to auth_token
         pass
 
-    def ensure_filtering_rules_for_instance(self, instance_ref, network_info):
+    def ensure_filtering_rules_for_instance(self, instance, network_info):
         """Setting up filtering rules and waiting for its completion.
 
         To migrate an instance, filtering rules to hypervisors
@@ -2146,7 +2512,7 @@
         not be started when setting-up filtering rules operations
         are not completed.
 
-        :params instance_ref: nova.db.sqlalchemy.models.Instance object
+        :param instance: nova.objects.instance.Instance object
 
         """
         # TODO(Vek): Need to pass context in for access to auth_token
@@ -2165,37 +2531,39 @@
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
-    def set_admin_password(self, context, instance_id, new_pass=None):
-        """
-        Set the root password on the specified instance.
-
-        The first parameter is an instance of nova.compute.service.Instance,
-        and so the instance is being specified as instance.name. The second
-        parameter is the value of the new password.
+    def set_admin_password(self, instance, new_pass):
+        """Set the root password on the specified instance.
+
+        :param instance: nova.objects.instance.Instance
+        :param new_password: the new password
         """
         raise NotImplementedError()
 
     def inject_file(self, instance, b64_path, b64_contents):
-        """
-        Writes a file on the specified instance.
+        """Writes a file on the specified instance.
 
         The first parameter is an instance of nova.compute.service.Instance,
         and so the instance is being specified as instance.name. The second
         parameter is the base64-encoded path to which the file is to be
         written on the instance; the third is the contents of the file, also
         base64-encoded.
+
+        NOTE(russellb) This method is deprecated and will be removed once it
+        can be removed from nova.compute.manager.
         """
         # TODO(Vek): Need to pass context in for access to auth_token
         raise NotImplementedError()
 
     def change_instance_metadata(self, context, instance, diff):
-        """
-        Applies a diff to the instance metadata.
+        """Applies a diff to the instance metadata.
 
         This is an optional driver method which is used to publish
         changes to the instance's metadata to the hypervisor.  If the
         hypervisor has no means of publishing the instance metadata to
         the instance, then this method should not be implemented.
+
+        :param context: security context
+        :param instance: nova.objects.instance.Instance
         """
         pass
 
@@ -2236,12 +2604,18 @@
         return utils.execute('/usr/bin/uptime')[0]
 
     def plug_vifs(self, instance, network_info):
-        """Plug VIFs into networks."""
+        """Plug VIFs into networks.
+
+        :param instance: nova.objects.instance.Instance
+        """
         # TODO(Vek): Need to pass context in for access to auth_token
         pass
 
     def unplug_vifs(self, instance, network_info):
-        """Unplug VIFs from networks."""
+        """Unplug VIFs from networks.
+
+        :param instance: nova.objects.instance.Instance
+        """
         raise NotImplementedError()
 
     def get_host_stats(self, refresh=False):
@@ -2261,9 +2635,30 @@
             self._update_host_stats()
         return self._host_stats
 
-    def block_stats(self, instance_name, disk_id):
+    def get_host_cpu_stats(self):
+        """Get the currently known host CPU stats.
+
+        :returns: a dict containing the CPU stat info, eg:
+
+            | {'kernel': kern,
+            |  'idle': idle,
+            |  'user': user,
+            |  'iowait': wait,
+            |   'frequency': freq},
+
+                  where kern and user indicate the cumulative CPU time
+                  (nanoseconds) spent by kernel and user processes
+                  respectively, idle indicates the cumulative idle CPU time
+                  (nanoseconds), wait indicates the cumulative I/O wait CPU
+                  time (nanoseconds), since the host is booting up; freq
+                  indicates the current CPU frequency (MHz). All values are
+                  long integers.
+
         """
-        Return performance counters associated with the given disk_id on the
+        raise NotImplementedError()
+
+    def block_stats(self, instance_name, disk_id):
+        """Return performance counters associated with the given disk_id on the
         given instance_name.  These are returned as [rd_req, rd_bytes, wr_req,
         wr_bytes, errs], where rd indicates read, wr indicates write, req is
         the total number of I/O requests made, bytes is the total number of
@@ -2282,9 +2677,8 @@
         raise NotImplementedError()
 
     def interface_stats(self, instance_name, iface_id):
-        """
-        Return performance counters associated with the given iface_id on the
-        given instance_id.  These are returned as [rx_bytes, rx_packets,
+        """Return performance counters associated with the given iface_id
+        on the given instance_id.  These are returned as [rx_bytes, rx_packets,
         rx_errs, rx_drop, tx_bytes, tx_packets, tx_errs, tx_drop], where rx
         indicates receive, tx indicates transmit, bytes and packets indicate
         the total number of bytes or packets transferred, and errs and dropped
@@ -2301,6 +2695,10 @@
         """
         raise NotImplementedError()
 
+    def deallocate_networks_on_reschedule(self, instance):
+        """Does the driver want networks deallocated on reschedule?"""
+        return False
+
     def macs_for_instance(self, instance):
         """What MAC addresses must this instance have?
 
@@ -2344,30 +2742,33 @@
         client API.
 
         :return: None, or a set of DHCP options, eg:
-                 [{'opt_name': 'bootfile-name',
-                   'opt_value': '/tftpboot/path/to/config'},
-                  {'opt_name': 'server-ip-address',
-                   'opt_value': '1.2.3.4'},
-                  {'opt_name': 'tftp-server',
-                   'opt_value': '1.2.3.4'}
-                 ]
+
+             |    [{'opt_name': 'bootfile-name',
+             |      'opt_value': '/tftpboot/path/to/config'},
+             |     {'opt_name': 'server-ip-address',
+             |      'opt_value': '1.2.3.4'},
+             |     {'opt_name': 'tftp-server',
+             |      'opt_value': '1.2.3.4'}
+             |    ]
+
         """
         pass
 
     def manage_image_cache(self, context, all_instances):
-        """
-        Manage the driver's local image cache.
+        """Manage the driver's local image cache.
 
         Some drivers chose to cache images for instances on disk. This method
         is an opportunity to do management of that cache which isn't directly
         related to other calls into the driver. The prime example is to clean
         the cache and remove images which are no longer of interest.
+
+        :param instances: nova.objects.instance.InstanceList
         """
         pass
 
     def add_to_aggregate(self, context, aggregate, host, **kwargs):
         """Add a compute host to an aggregate."""
-        #NOTE(jogo) Currently only used for XenAPI-Pool
+        # NOTE(jogo) Currently only used for XenAPI-Pool
         raise NotImplementedError()
 
     def remove_from_aggregate(self, context, aggregate, host, **kwargs):
@@ -2385,7 +2786,7 @@
         Connector information is a dictionary representing the ip of the
         machine that will be making the connection, the name of the iscsi
         initiator, the WWPN and WWNN values of the Fibre Channel initiator,
-        and the hostname of the machine as follows:
+        and the hostname of the machine as follows::
 
             {
                 'ip': ip,
@@ -2394,6 +2795,7 @@
                 'wwpns': wwpns,
                 'host': hostname
             }
+
         """
         connector = {'ip': self.get_host_ip_addr(),
                      'host': CONF.host}
@@ -2455,7 +2857,7 @@
     def instance_on_disk(self, instance):
         """Checks access of instance files on the host.
 
-        :param instance: instance to lookup
+        :param instance: nova.objects.instance.Instance to lookup
 
         Returns True if files of an instance with the supplied ID accessible on
         the host, False otherwise.
@@ -2486,7 +2888,7 @@
         """
 
         if not self._compute_event_callback:
-            LOG.debug(_("Discarding event %s") % str(event))
+            LOG.debug("Discarding event %s", str(event))
             return
 
         if not isinstance(event, virtevent.Event):
@@ -2494,7 +2896,7 @@
                 _("Event must be an instance of nova.virt.event.Event"))
 
         try:
-            LOG.debug(_("Emitting event %s") % str(event))
+            LOG.debug("Emitting event %s", str(event))
             self._compute_event_callback(event)
         except Exception as ex:
             LOG.error(_("Exception dispatching event %(event)s: %(ex)s"),
@@ -2503,6 +2905,7 @@
     def delete_instance_files(self, instance):
         """Delete any lingering instance files for an instance.
 
+        :param instance: nova.objects.instance.Instance
         :returns: True if the instance was deleted from disk, False otherwise.
         """
         return True
@@ -2511,18 +2914,18 @@
     def need_legacy_block_device_info(self):
         """Tell the caller if the driver requires legacy block device info.
 
-        Tell the caller weather we expect the legacy format of block
+        Tell the caller whether we expect the legacy format of block
         device info to be passed in to methods that expect it.
         """
         return True
 
     def volume_snapshot_create(self, context, instance, volume_id,
                                create_info):
-        """
-        Snapshots volumes attached to a specified instance.
+        """Snapshots volumes attached to a specified instance.
 
         :param context: request context
-        :param instance: Instance object that has the volume attached
+        :param instance: nova.objects.instance.Instance that has the volume
+               attached
         :param volume_id: Volume to be snapshotted
         :param create_info: The data needed for nova to be able to attach
                to the volume.  This is the same data format returned by
@@ -2536,11 +2939,11 @@
 
     def volume_snapshot_delete(self, context, instance, volume_id,
                                snapshot_id, delete_info):
-        """
-        Snapshots volumes attached to a specified instance.
+        """Snapshots volumes attached to a specified instance.
 
         :param context: request context
-        :param instance: Instance object that has the volume attached
+        :param instance: nova.objects.instance.Instance that has the volume
+               attached
         :param volume_id: Attached volume associated with the snapshot
         :param snapshot_id: The snapshot to delete.
         :param delete_info: Volume backend technology specific data needed to
@@ -2558,3 +2961,15 @@
                                           *block_device_lists):
         """Default the missing device names in the block device mapping."""
         raise NotImplementedError()
+
+    def is_supported_fs_format(self, fs_type):
+        """Check whether the file format is supported by this driver
+
+        :param fs_type: the file system type to be checked,
+                        the validate values are defined at disk API module.
+        """
+        # NOTE(jichenjc): Return False here so that every hypervisor
+        #                 need to define their supported file system
+        #                 type and implement this function at their
+        #                 virt layer.
+        return False
--- a/components/openstack/nova/files/solariszones/sysconfig.py	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/files/solariszones/sysconfig.py	Mon Apr 20 12:35:51 2015 -0700
@@ -206,6 +206,8 @@
                           name="config")
     etree.SubElement(pg, "propval", type="astring", name="nodename",
                      value=name)
+    etree.SubElement(pg, "propval", type="boolean",
+                     name="ignore_dhcp_hostname", value="true")
 
     return svcbundle
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/zone-vnc-console	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,298 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    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 errno
+import os
+import pwd
+import smf_include
+import subprocess
+import sys
+import time
+
+from subprocess import CalledProcessError, check_call, Popen
+from tempfile import mkstemp
+
+GTF = "/usr/bin/gtf"
+SVCCFG = "/usr/sbin/svccfg"
+SVCPROP = "/usr/bin/svcprop"
+VNCSERVER = "/usr/bin/vncserver"
+XRANDR = "/usr/bin/xrandr"
+XSTARTUPHDR = "# WARNING: THIS FILE GENERATED BY SMF.\n" + \
+              "#   DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.\n"
+XRESOURCES = "[[ -f ~/.Xresources ]] && /usr/bin/xrdb -merge ~/.Xresources\n"
+XTERM = "/usr/bin/xterm"
+# Borderless, Monospsce font, point size 14, white foreground on black
+# background are reasonable defaults.
+XTERMOPTS = ' -b 0 -fa Monospace -fs 14 -fg white -bg black -title ' + \
+            '"Zone Console: $ZONENAME"'
+XWININFO = "/usr/bin/xwininfo"
+# Enclose command in comments to prevent xterm consuming zlogin opts
+ZLOGINOPTS = ' -e "/usr/bin/pfexec /usr/sbin/zlogin -C -E $ZONENAME"\n'
+XSTARTUP = XSTARTUPHDR + XRESOURCES + XTERM + XTERMOPTS + ZLOGINOPTS
+
+
+def start():
+    check_vncserver()
+    homedir = os.environ.get('HOME')
+    if not homedir:
+        homedir = pwd.getpwuid(os.getuid()).pw_dir
+        os.putenv("HOME", homedir)
+    set_xstartup(homedir)
+
+    try:
+        fmri = os.environ['SMF_FMRI']
+        zonename = fmri.rsplit(':', 1)[1]
+        os.putenv("ZONENAME", zonename)
+        desktop_name = zonename + ' console'
+        # NOTE: 'geometry' below is that which matches the size of standard
+        # 80 character undecorated xterm window using font style specified in
+        # XTERMOPTS. The geometry doesn't matter too much because the display
+        # will be resized using xrandr once the xterm geometry is established.
+        cmd = [VNCSERVER, "-name", desktop_name, "-SecurityTypes=None",
+               "-geometry", "964x580", "-localhost", "-autokill"]
+        vnc = Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                    env=None)
+        out, err = vnc.communicate()
+        vncret = vnc.wait()
+        if vncret != 0:
+            print "Error starting VNC server: " + err
+            return smf_include.SMF_EXIT_ERR_FATAL
+    except Exception as e:
+        print e
+        return smf_include.SMF_EXIT_ERR_FATAL
+
+    output = err.splitlines()
+    for line in output:
+        if line.startswith("New '%s' desktop is" % desktop_name):
+            display = line.rpartition(' ')[2]
+            host, display_num = display.split(':', 1)
+            # set host prop
+            port = 5900 + int(display_num)
+            print "VNC port: %d" % port
+            # set port num prop
+            cmd = [SVCCFG, '-s', fmri, 'setprop', 'vnc/port', '=', 'integer:',
+                   str(port)]
+
+            svccfg = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                      stderr=subprocess.PIPE)
+            out, err = svccfg.communicate()
+            retcode = svccfg.wait()
+            if retcode != 0:
+                print "Error updating 'vnc/port' property: " + err
+                return smf_include.SMF_EXIT_ERR_FATAL
+    resize_xserver(display, zonename)
+
+    return smf_include.SMF_EXIT_OK
+
+
+def stop():
+    try:
+        # first kill the SMF contract
+        check_call(["/usr/bin/pkill", "-c", sys.argv[2]])
+    except CalledProcessError as cpe:
+        # 1 is returncode if no SMF contract processes were matched,
+        # meaning they have already terminated.
+        if cpe.returncode != 1:
+                print "failed to kill the SMF contract: %s" % cpe
+                return smf_include.SMF_EXIT_ERR_FATAL
+
+    try:
+        fmri = os.environ['SMF_FMRI']
+        # reset port num prop to initial zero value
+        cmd = [SVCCFG, '-s', fmri, 'setprop', 'vnc/port', '=', 'integer:',
+               '0']
+        svccfg = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                  stderr=subprocess.PIPE,)
+        out, err = svccfg.communicate()
+        retcode = svccfg.wait()
+        if retcode != 0:
+            print "Error resetting 'vnc/port' property: " + err
+            return smf_include.SMF_EXIT_ERR_FATAL
+    except Exception as e:
+        print e
+        return smf_include.SMF_EXIT_ERR_FATAL
+
+
+def check_vncserver():
+    if not os.path.exists(VNCSERVER):
+        print("VNC console service not available on this compute node. "
+              "%s is missing. Run 'pkg install x11/server/xvnc'"
+              % VNCSERVER)
+        return smf_include.SMF_EXIT_ERR_FATAL
+    if not os.path.exists(XTERM):
+        print("VNC console service not available on this compute node. "
+              "%s is missing. Run 'pkg install terminal/xterm'"
+              % XTERM)
+        return smf_include.SMF_EXIT_ERR_FATAL
+
+
+def set_xstartup(homedir):
+    vncdir = os.path.join(homedir, '.vnc')
+    xstartup_path = os.path.join(vncdir, 'xstartup')
+
+    try:
+        os.mkdir(vncdir)
+    except OSError as ose:
+        if ose.errno != errno.EEXIST:
+            raise
+
+    # Always clobber xstartup
+    # stemp tuple = [fd, path]
+    stemp = mkstemp(dir=vncdir)
+    os.write(stemp[0], XSTARTUP)
+    os.close(stemp[0])
+    os.chmod(stemp[1], 0700)
+    os.rename(stemp[1], xstartup_path)
+
+
+def resize_xserver(display, zonename):
+    """ Try to determine xterm window geometry and resize the Xvnc display
+        to match using XRANDR. Treat failure as non-fatal since an
+        incorrectly sized console is arguably better than none.
+    """
+    class UninitializedWindowError(Exception):
+        pass
+
+    class UnmappedWindowError(Exception):
+        pass
+
+    def _get_window_geometry(display, windowname):
+        """ Find the xterm xwindow by name/title and extract its geometry
+            Returns: tuple of window [width, height]
+            Raises:
+                UninitializedWindowError if window not yet initialized
+                UnmappedWindowError if window is not viewable/mapped
+        """
+        cmd = [XWININFO, '-d', display, '-name', windowname]
+        xwininfo = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                    stderr=subprocess.PIPE)
+        out, err = xwininfo.communicate()
+        retcode = xwininfo.wait()
+        if retcode != 0:
+            print "Error finding console xwindow info: " + err
+            raise UninitializedWindowError
+
+        width = None
+        height = None
+        mapped = False
+        for line in out.splitlines():
+            line = line.strip()
+            if line.startswith("Map State:"):
+                if line.split()[-1] != "IsViewable":
+                    # Window is not mapped yet.
+                    raise UnmappedWindowError
+                else:
+                    mapped = True
+            if line.startswith("Width:"):
+                width = int(line.split()[1])
+            elif line.startswith("Height:"):
+                height = int(line.split()[1])
+            if width and height and mapped:
+                return [width, height]
+        else:
+            # What, no width and height???
+            print "No window geometry info returned by " + XWINFINFO
+            raise UnmappedWindowError
+
+    retries = 10
+    sleep = 1
+    uninit_count = 0
+    unmap_count = 0
+    width = 0
+    height = 0
+    while uninit_count < retries and unmap_count < retries:
+        try:
+            width, height = _get_window_geometry(display,
+                                                 'Zone Console: ' + zonename)
+            print "Discovered xterm geometry: %d x %d" % (width, height)
+            break
+        except UninitializedWindowError:
+            if uninit_count < retries:
+                print "xterm window not initialized yet. Retrying in %ds" \
+                    % sleep
+                uninit_count += 1
+                time.sleep(sleep)
+                continue
+            else:
+                print "xterm window is taking too long to initialize"
+                break
+        except UnmappedWindowError:
+            if unmap_count < retries:
+                print "Discovered xterm not mapped yet. Retrying in %ds" \
+                    % sleep
+                unmap_count += 1
+                time.sleep(sleep)
+                continue
+            else:
+                print "Discovered xterm window is taking too long to map"
+                break
+    else:
+        print "Too many failed attempts to discover xterm window geometry"
+        return
+
+    # Generate a mode line for width and height, with a refresh of 60.0Hz
+    cmd = [GTF, str(width), str(height), '60.0', '-x']
+    gtf = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                           stderr=subprocess.PIPE)
+    out, err = gtf.communicate()
+    retcode = gtf.wait()
+    if retcode != 0:
+        print "Error creating new modeline for VNC display: " + err
+        return
+
+    for line in out.splitlines():
+        line = line.strip()
+        if line.startswith('Modeline'):
+            modeline = line.split('Modeline')[1]
+            print "New optimal modeline for Xvnc server: " + modeline
+            mode = modeline.split()
+            break
+
+    # Create a new mode for the Xvnc server using the modeline generated by gtf
+    cmd = [XRANDR, '-d', display, '--newmode']
+    cmd.extend(mode)
+    newmode = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                               stderr=subprocess.PIPE)
+    out, err = newmode.communicate()
+    retcode = newmode.wait()
+    if retcode != 0:
+        print "Error creating new xrandr modeline for VNC display: " + err
+        return
+
+    # Add the new mode to the default display output
+    modename = mode[0]
+    cmd = [XRANDR, '-d', display, '--addmode', 'default', modename]
+    addmode = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                               stderr=subprocess.PIPE)
+    out, err = addmode.communicate()
+    retcode = addmode.wait()
+    if retcode != 0:
+        print "Error adding new xrandr modeline for VNC display: " + err
+        return
+
+    # Activate the new mode on the default display output
+    cmd = [XRANDR, '-d', display, '--output', 'default', '--mode', modename]
+    addmode = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                               stderr=subprocess.PIPE)
+    out, err = addmode.communicate()
+    retcode = addmode.wait()
+    if retcode != 0:
+        print "Error setting new xrandr modeline for VNC display: " + err
+        return
+
+if __name__ == "__main__":
+    os.putenv("LC_ALL", "C")
+    smf_include.smf_main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/zone-vnc-console.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,92 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ 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.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="zone-vnc-console">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/zone-vnc-console">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <dependency name='compute' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri 
+        value='svc:/application/openstack/nova/nova-compute:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/zone-vnc-console %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </method_context>
+    </exec_method>
+
+    <exec_method timeout_seconds="10" type="method" name="stop"
+      exec="/lib/svc/method/zone-vnc-console %m %{restarter/contract}">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </method_context>
+    </exec_method>
+
+    <property_group name='startd' type='framework'>
+      <propval name='duration' type='astring'
+        value='contract' />
+    </property_group>
+
+    <!-- to start/stop/refresh the service -->
+    <property_group name='general' type='framework'>
+      <propval name='action_authorization' type='astring'
+        value='solaris.smf.manage.nova' />
+      <propval name='value_authorization' type='astring'
+        value='solaris.smf.value.nova' />
+    </property_group>
+   
+    <property_group name="vnc" type="application">
+      <propval name='host' type='astring' value='localhost'
+        override='true'/>
+      <propval name='port' type='integer' value='0'
+        override='true'/>
+      <propval name='action_authorization' type='astring'
+        value='solaris.smf.manage.nova' />
+      <propval name='value_authorization' type='astring'
+        value='solaris.smf.value.nova' />
+    </property_group>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova VNC Console Service for Solaris Zones
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          Manages VNC consoles relating to Solaris Zones as Nova instances.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/nova/nova.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/nova.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,9 +28,9 @@
 set name=pkg.summary value="OpenStack Nova (Compute Service)"
 set name=pkg.description \
     value="OpenStack Nova provides a cloud computing fabric controller, supporting a wide variety of virtualization technologies. In addition to its native API, it includes compatibility with the commonly encountered Amazon EC2 and S3 APIs."
-set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Juno $(COMPONENT_VERSION)"
 set name=com.oracle.info.description value="Nova, the OpenStack compute service"
-set name=com.oracle.info.tpno value=17715
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -39,12 +39,14 @@
 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=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/049 \
-    value=PSARC/2014/210
+    value=PSARC/2014/210 value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 dir  path=etc/nova owner=nova group=nova mode=0700
-file files/api-paste.ini path=etc/nova/api-paste.ini owner=nova group=nova \
-    mode=0644 overlay=allow preserve=renamenew
+#
+file path=etc/nova/api-paste.ini owner=nova group=nova mode=0644 overlay=allow \
+    preserve=renamenew
 file path=etc/nova/cells.json owner=nova group=nova mode=0644 overlay=allow \
     preserve=renamenew
 file etc/nova/logging_sample.conf path=etc/nova/logging.conf owner=nova \
@@ -61,26 +63,28 @@
 file files/nova.prof_attr path=etc/security/prof_attr.d/cloud:openstack:nova \
     group=sys
 file files/nova.user_attr path=etc/user_attr.d/cloud:openstack:nova group=sys
-file files/nova-api-ec2.xml \
-    path=lib/svc/manifest/application/openstack/nova-api-ec2.xml
-file files/nova-api-osapi-compute.xml \
-    path=lib/svc/manifest/application/openstack/nova-api-osapi-compute.xml
-file files/nova-cert.xml \
-    path=lib/svc/manifest/application/openstack/nova-cert.xml
-file files/nova-compute.xml \
-    path=lib/svc/manifest/application/openstack/nova-compute.xml
-file files/nova-conductor.xml \
-    path=lib/svc/manifest/application/openstack/nova-conductor.xml
-file files/nova-objectstore.xml \
-    path=lib/svc/manifest/application/openstack/nova-objectstore.xml
-file files/nova-scheduler.xml \
-    path=lib/svc/manifest/application/openstack/nova-scheduler.xml
+file path=lib/svc/manifest/application/openstack/nova-api-ec2.xml
+file path=lib/svc/manifest/application/openstack/nova-api-metadata.xml
+file path=lib/svc/manifest/application/openstack/nova-api-osapi-compute.xml
+file path=lib/svc/manifest/application/openstack/nova-cert.xml
+file path=lib/svc/manifest/application/openstack/nova-compute.xml
+file path=lib/svc/manifest/application/openstack/nova-conductor.xml
+file path=lib/svc/manifest/application/openstack/nova-consoleauth.xml
+file path=lib/svc/manifest/application/openstack/nova-novncproxy.xml
+file path=lib/svc/manifest/application/openstack/nova-objectstore.xml
+file path=lib/svc/manifest/application/openstack/nova-scheduler.xml
+file path=lib/svc/manifest/application/openstack/nova-upgrade.xml
+file path=lib/svc/manifest/application/openstack/zone-vnc-console.xml
 file files/nova-api path=lib/svc/method/nova-api
 file files/nova-cert path=lib/svc/method/nova-cert
 file files/nova-compute path=lib/svc/method/nova-compute
 file files/nova-conductor path=lib/svc/method/nova-conductor
+file files/nova-consoleauth path=lib/svc/method/nova-consoleauth
+file files/nova-novncproxy path=lib/svc/method/nova-novncproxy
 file files/nova-objectstore path=lib/svc/method/nova-objectstore
 file files/nova-scheduler path=lib/svc/method/nova-scheduler
+file files/nova-upgrade path=lib/svc/method/nova-upgrade
+file files/zone-vnc-console path=lib/svc/method/zone-vnc-console
 file path=usr/bin/nova-manage
 file usr/bin/nova-api-ec2 path=usr/lib/nova/nova-api-ec2 mode=0555
 file usr/bin/nova-api-metadata path=usr/lib/nova/nova-api-metadata mode=0555
@@ -94,6 +98,7 @@
 file usr/bin/nova-novncproxy path=usr/lib/nova/nova-novncproxy mode=0555
 file usr/bin/nova-objectstore path=usr/lib/nova/nova-objectstore mode=0555
 file usr/bin/nova-scheduler path=usr/lib/nova/nova-scheduler mode=0555
+file usr/bin/nova-serialproxy path=usr/lib/nova/nova-serialproxy mode=0555
 file usr/bin/nova-spicehtml5proxy path=usr/lib/nova/nova-spicehtml5proxy \
     mode=0555
 file usr/bin/nova-xvpvncproxy path=usr/lib/nova/nova-xvpvncproxy mode=0555
@@ -102,6 +107,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/CA/geninter.sh
@@ -110,6 +116,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/compute_req_id.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/apirequest.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/cloud.py
@@ -134,6 +141,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/assisted_volume_snapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/attach_interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/availability_zone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/baremetal_ext_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/baremetal_nodes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/block_device_mapping_v2_boot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/cell_capacities.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/cells.py
@@ -141,20 +150,25 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/cloudpipe.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/cloudpipe_update.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/config_drive.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/console_auth_tokens.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/console_output.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/consoles.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/coverage_ext.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/createserverext.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/deferred_delete.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/disk_config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/evacuate.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_availability_zone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_evacuate_find_host.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_floating_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_hypervisors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_ips.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_ips_mac.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_networks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_rescue_with_image.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_server_attributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_services_delete.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_status.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_virtual_interfaces_net.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/extended_volumes.py
@@ -173,6 +187,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/fping.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/hide_server_addresses.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/hosts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/hypervisor_status.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/hypervisors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/image_size.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/instance_actions.py
@@ -184,6 +199,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/networks_associate.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/os_networks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/os_tenant_networks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/preserve_ephemeral_rebuild.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/quota_classes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/quotas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/rescue.py
@@ -191,6 +207,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/security_group_default_rules.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/security_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_diagnostics.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_external_events.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_group_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_groups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_list_multi_status.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_password.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_start_stop.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/server_usage.py
@@ -212,6 +232,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/access_ips.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/admin_actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/admin_password.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/agents.py
@@ -219,14 +240,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/attach_interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/availability_zone.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/block_device_mapping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/block_device_mapping_v1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/cells.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/certificates.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/config_drive.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/console_auth_tokens.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/console_output.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/consoles.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/coverage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/create_backup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/deferred_delete.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/disk_config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/evacuate.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/extended_availability_zone.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/extended_server_attributes.py
@@ -241,22 +263,28 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/hide_server_addresses.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/hosts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/hypervisors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/image_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/image_size.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/images.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/instance_actions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/instance_usage_audit_log.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/ips.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/keypairs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/lock_server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/migrate_server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/migrations.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/multinic.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/multiple_create.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/personalities.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/quota_classes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/pause_server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/pci.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/quota_sets.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/remote_consoles.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/rescue.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/scheduler_hints.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/security_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_diagnostics.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_external_events.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_password.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/server_usage.py
@@ -264,9 +292,12 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/services.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/shelve.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/simple_tenant_usage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/suspend_server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/used_limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/user_data.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/plugins/v3/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/atom-link.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/atom.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/addresses.rng
@@ -285,12 +316,35 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/servers_index.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/version.rng
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/versions.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/addresses.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/flavor.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/flavors.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/server.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/servers.rng
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/servers_index.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/access_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/admin_password.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/agents.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/aggregates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/attach_interfaces.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/availability_zone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/cells.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/config_drive.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/console_output.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/create_backup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/evacuate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/extended_volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/flavor_access.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/flavor_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/flavors_extraspecs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/hosts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/keypairs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/migrate_server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/multinic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/multiple_create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/quota_sets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/remote_consoles.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/rescue.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/reset_server_state.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/security_groups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/server_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/servers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v3/user_data.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/server_metadata.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/servers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/versions.py
@@ -306,6 +360,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/xmlutil.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/sizelimit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/validation/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/validation/parameter_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/validation/validators.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/validator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/availability_zones.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/baserpc.py
@@ -349,25 +406,35 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/console.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/consoleauth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/dhcpbridge.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/idmapshift.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/network.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/novnc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/novncproxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/objectstore.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/rpc_zmq_receiver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/serialproxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/spicehtml5proxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/cmd/xvpvncproxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/arch.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/cells_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/claims.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/fakevirtinstance.xml
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/flavors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/hvtype.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/instance_actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/monitors/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/monitors/cpu_monitor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/monitors/virt/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/monitors/virt/cpu_monitor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/power_state.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/resource_tracker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/resources/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/resources/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/resources/vcpu.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/rpcapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/stats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/task_states.py
@@ -386,6 +453,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/fake.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/serial.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/type.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/vmrc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/vmrc_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/websocketproxy.py
@@ -406,107 +475,61 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/manage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/migrate.cfg
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/133_folsom.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/134_add_counters_to_bw_usage_cache.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/135_add_node_to_instances.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/136_add_index_to_instances.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/137_add_indexes_to_migrations.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/138_drop_server_name_from_instances.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/138_sqlite_downgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/138_sqlite_upgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/139_add_indexes_to_fixed_ips.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/140_drop_unused_postgresql_volume_sequences.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/141_update_migrations_instance_uuid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/142_add_migrations_instance_status_index.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/143_rename_instance_info_cache_sequence.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/144_add_node_to_migrations.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/145_add_volume_usage_cache.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/146_aggregate_zones.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/147_no_service_zones.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/148_add_instance_actions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/149_inet_datatype_for_postgres.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/150_add_host_to_instance_faults.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/151_change_task_log_column_type.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/152_change_type_of_deleted_column.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/153_instance_type_in_system_metadata.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/154_add_shadow_tables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/155_add_task_log_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/156_cidr_column_length.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/157_add_security_group_default_rules.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/158_add_networks_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/159_revert_ip_column_length.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/159_sqlite_downgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/159_sqlite_upgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/160_fix_system_metadata_deleted.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/161_fix_system_metadata_none_strings.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/162_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/163_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/164_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/165_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/166_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/167_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/168_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/169_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/170_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/171_placeholder.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/172_add_instance_type_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/173_add_unique_constraint_to_key_pairs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/174_add_instance_type_access_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/175_add_project_user_id_to_volume_usage_cache.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/176_add_availability_zone_to_volume_usage_cache.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/177_add_floating_ip_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/178_add_index_to_compute_node_stats.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/179_change_cells_deleted_to_int.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/180_fix_175_and_176_migration_sync_shadow_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/181_fix_179_migration_sync_shadow_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/182_fix_156_migration_sync_shadow_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/183_fix_157_migration_sync_shadow_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/184_fix_159_migration_sync_shadow_table.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/184_sqlite_downgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/184_sqlite_upgrade.sql
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/185_rename_unique_constraints.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/186_new_bdm_format.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/187_add_instance_groups.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/188_add_reason_column_to_service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/189_add_cells_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/190_add_security_group_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/191_add_quota_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/192_change_virtual_interface_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/193_cinder_cleanup.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/194_fix_152_migration_indexes.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/195_add_fixed_ip_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/196_add_service_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/197_add_agent_build_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/198_add_console_pools_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/199_add_aggregate_hosts_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/200_add_transport_url_to_cell.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/201_add_sqlite_indexes.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/202_add_instance_type_extra_specs_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/203_make_user_quotas_key_and_value.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/204_add_indexes_to_reservations.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/205_add_locked_by_to_instance.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/206_add_instance_cleaned.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/207_fix_uniqname_cells.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/208_expand_compute_node.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/209_add_missing_foreign_keys.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/210_fix_project_user_quotas_user_id_deleted_index.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/211_add_aggregate_metadata_uc.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/212_fix_migrations_index.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/213_add_pci_devices.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/214_complete_194_missing_index.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/215_fix_deleted_compute_node_stats.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/216_sync_quota_usages.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/217_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/218_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/219_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/220_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/221_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/222_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/223_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/224_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/225_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/226_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/227_fix_project_user_quotas_resource_length.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/228_add_metrics_in_compute_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/229_add_extra_resources_in_compute_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/230_add_details_column_to_instance_actions_events.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/231_add_ephemeral_key_uuid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/232_drop_dump_tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/233_add_stats_in_compute_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/234_add_expire_reservations_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/235_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/236_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/237_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/238_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/239_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/240_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/241_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/242_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/243_placeholder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/244_increase_user_id_length_volume_usage_cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/245_add_mtu_and_dhcp_server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/246_add_compute_node_id_fk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/246_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/246_sqlite_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/247_nullable_mismatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/248_add_expire_reservations_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/250_remove_instance_groups_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/251_add_numa_topology_to_comput_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/252_add_instance_extra_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/253_add_pci_requests_to_instance_extra_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/254_add_request_id_in_pci_devices.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/versions/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/debugger.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/hacking/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/hacking/checks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/hooks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/download/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/download/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/download/file.py
@@ -524,58 +547,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/keymgr/not_implemented_key_mgr.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/keymgr/single_key_mgr.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/loadables.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ar/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/bg_BG/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/bs/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ca/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/cs/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/da/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/de/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/en_AU/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/en_GB/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/en_US/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/es/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/es_MX/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/fi_FI/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/fil/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/fr/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/hi/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/hr/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/hu/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/id/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/it/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/it_IT/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ja/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ka_GE/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/kn/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ko/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ko_KR/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ms/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/nb/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ne/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/nl_NL/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/pl_PL/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/pt/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/pt_BR/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ro/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ru/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/ru_RU/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/sk/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/sl_SI/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/sw_KE/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/tl/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/tl_PH/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/tr/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/tr_TR/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/uk/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/vi_VN/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/zh_CN/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/zh_HK/LC_MESSAGES/nova.po
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/zh_TW/LC_MESSAGES/nova.po
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/netconf.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/base_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/dns_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/floating_ips.py
@@ -595,24 +571,39 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/security_group/neutron_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/security_group/openstack_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/security_group/security_group_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/solaris_net.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/notifications.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/agent.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/aggregate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/bandwidth_usage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/block_device.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/compute_node.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/dns_domain.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/ec2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/external_event.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/fields.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/fixed_ip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/flavor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/floating_ip.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_action.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_fault.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_info_cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_numa_topology.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/instance_pci_requests.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/keypair.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/network.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/network_request.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/pci_device.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/quotas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/security_group.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/security_group_rule.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/objects/virtual_interface.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objectstore/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/objectstore/s3server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/__init__.py
@@ -622,66 +613,69 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/config/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/config/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/context.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/exception.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/sqlalchemy/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/sqlalchemy/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/sqlalchemy/session.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/db/sqlalchemy/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/eventlet_backdoor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/excutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/logging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/mockpatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/fixture/moxstubout.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/imageutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/jsonutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/local.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/lockutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/log.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/log_handler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/loopingcall.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/memorycache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/middleware/request_id.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/network_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/log_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/no_op_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/rabbit_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/rpc_notifier.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/rpc_notifier2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/notifier/test_notifier.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/periodic_task.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/processutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rootwrap/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rootwrap/cmd.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rootwrap/filters.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rootwrap/wrapper.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/amqp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/dispatcher.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/impl_fake.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/impl_kombu.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/impl_qpid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/impl_zmq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/matchmaker.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/matchmaker_redis.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/matchmaker_ring.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/proxy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/securemessage.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/serializer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/rpc/zmq_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/generators/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/generators/conf.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/generators/threading.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/generators/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/guru_meditation_report.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/conf.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/threading.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/models/with_default_views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/report.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/jinja_view.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/json/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/json/generic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/text/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/text/generic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/text/header.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/text/threading.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/xml/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/report/views/xml/generic.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/sslutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/systemd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/threadgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/units.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/versionutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/xmlutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/paths.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_device.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_devspec.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_request.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_stats.py
@@ -689,15 +683,22 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/pci/pci_whitelist.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/quota.py
-file path=usr/lib/python$(PYVER)/vendor-packages/nova/rpcclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/rdp/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/safe_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/baremetal_host_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/base_baremetal_host_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/caching_scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/chance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/client/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/client/query.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/client/report.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filter_scheduler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/affinity_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/aggregate_image_properties_isolation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/aggregate_instance_extra_specs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/aggregate_multitenancy_isolation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/all_hosts_filter.py
@@ -706,23 +707,31 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/compute_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/core_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/disk_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/exact_core_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/exact_disk_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/exact_ram_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/extra_specs_ops.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/image_props_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/io_ops_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/isolated_hosts_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/json_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/metrics_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/num_instances_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/numa_topology_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/pci_passthrough_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/ram_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/retry_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/trusted_filter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/type_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/host_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/ironic_host_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/rpcapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/scheduler_options.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/weights/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/weights/metrics.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/weights/ram.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/service.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/__init__.py
@@ -738,8 +747,50 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/baremetal_states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/001_init.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/003_add_uuid_to_bm_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/004_add_instance_name_to_bm_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/005_drop_unused_columns_from_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/006_move_prov_mac_address.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/007_drop_prov_mac_address.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/008_remove_bm_pxe_ips_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/009_add_ephemeral_mb_to_bm_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/010_add_preserve_ephemeral.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/doc/README.rst
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/iboot_pdu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/ipmi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/net-dhcp.ubuntu.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/net-static.ubuntu.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/pxe.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/pxe_config.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/tilera.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/tilera_pdu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/vif_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/virtual_power_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/virtual_power_driver_settings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/baremetal/volume_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/block_device.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/configdrive.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/diagnostics.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/mount/__init__.py
@@ -754,16 +805,37 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/event.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/fake.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/hardware.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/imagecache.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/images.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/interfaces.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/ironic/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/ironic/client_wrapper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/ironic/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/ironic/ironic_states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/ironic/patcher.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/blockinfo.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/designer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/dmcrypt.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/imagebackend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/imagecache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/lvm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/rbd_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/vif.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/libvirt/volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/netutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/solariszones/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/solariszones/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/solariszones/sysconfig.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/storage_users.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/virtapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/volumeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/watchdog_actions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/vnc/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/vnc/xvp_proxy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/volume/__init__.py
@@ -776,18 +848,53 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/weights.py
 file path=usr/lib/python$(PYVER)/vendor-packages/nova/wsgi.py
 dir  path=var/lib/nova owner=nova group=nova mode=0700
+#
 group groupname=nova gid=85
 user username=nova ftpuser=false gcos-field="OpenStack Nova" group=nova \
     home-dir=/var/lib/nova uid=85
+#
 license nova.license license="Apache v2.0"
 
+# force a group dependency on package delivering the optional gtf(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/gtf
+
+# force a group dependency on package delivering the optional vncserver(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/vncserver
+
+# force a group dependency on package delivering the optional xrandr(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/xrandr
+
+# force a group dependency on package delivering the optional xrdb(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/xrdb
+
+# force a group dependency on package delivering the optional xterm(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/xterm
+
+# force a group dependency on package delivering the optional xwininfo(1)
+depend type=group fmri=__TBD pkg.debug.depend.file=usr/bin/xwininfo
+
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
-depend type=group fmri=library/python-2/anyjson-26
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional python-ldap; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/python-ldap-$(PYV)
+
+# force a group dependency on the optional python-memcached; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/python-memcached-$(PYV)
 
-# force a group dependency on the optional coverage; pkgdepend work is needed to
-# flush this out.
-depend type=group fmri=library/python-2/coverage-26
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a group dependency on package delivering the optional solaris(5) brand
+depend type=group fmri=system/zones/brand/brand-solaris
+
+# force a group dependency on package delivering the optional solaris-kz(5)
+# brand
+depend type=group fmri=system/zones/brand/brand-solaris-kz
 
 # force a dependency on package delivering archiveadm(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/archiveadm
@@ -807,81 +914,109 @@
 # force a dependency on package delivering zpool(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zpool
 
+# force a dependency on package delivering usr/share/novnc/vnc_auto.html
+depend type=require fmri=__TBD \
+    pkg.debug.depend.file=usr/share/novnc/vnc_auto.html
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
 # force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-26
+depend type=require fmri=library/python-2/babel-$(PYV)
 
 # force a dependency on boto; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/boto-26
+depend type=require fmri=library/python-2/boto-$(PYV)
+
+# force a dependency on cinderclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/cinderclient-$(PYV)
+
+# force a dependency on decorator; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/decorator-$(PYV)
+
+# force a dependency on glanceclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/glanceclient-$(PYV)
 
 # force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/greenlet-26
+depend type=require fmri=library/python-2/greenlet-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on jinja2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/jinja2-$(PYV)
 
 # force a dependency on jsonschema; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/jsonschema-26
+depend type=require fmri=library/python-2/jsonschema-$(PYV)
 
-# force a dependency on kombu; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/kombu-26
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
 
 # force a dependency on lxml; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/lxml-26
+depend type=require fmri=library/python-2/lxml-$(PYV)
 
 # force a dependency on netaddr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/netaddr-26
+depend type=require fmri=library/python-2/netaddr-$(PYV)
+
+# force a dependency on neutronclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/neutronclient-$(PYV)
+
+# force a dependency on oslo.db; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.db-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
 
 # force a dependency on paste; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/paste-26
+depend type=require fmri=library/python-2/paste-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
 
 # force a dependency on pyasn1; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/pyasn1-26
-
-# force a dependency on python-ldap; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/python-ldap-26
+depend type=require fmri=library/python-2/pyasn1-$(PYV)
 
 # force a dependency on requests; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/requests-26
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on rfc3986; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/rfc3986-$(PYV)
 
 # force a dependency on routes; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/routes-26
+depend type=require fmri=library/python-2/routes-$(PYV)
 
-# 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 setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
 
 # 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 cinderclient; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/cinderclient-26
-
-# force a dependency on glanceclient; pkgdepend work is needed to flush this
-# 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 jinja2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/jinja2-26
-
-# force a dependency on keystoneclient; used via a paste.deploy filter
-depend type=require fmri=library/python/keystoneclient-26
-
-# force a dependency on neutronclient; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/neutronclient-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
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # force a dependency on websockify; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/websockify-26
+depend type=require fmri=library/python/websockify-$(PYV)
+
+# force a dependency on system/install; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=system/install
+
+# force a dependency on system/library/install; pkgdepend work is needed to
+# flush this out.
+depend type=require fmri=system/library/install
 
 # force a dependency on rad-python; pkgdepend work is needed to flush this out.
 depend type=require fmri=system/management/rad/client/rad-python
--- a/components/openstack/nova/patches/01-Solaris-vm_mode.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/patches/01-Solaris-vm_mode.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -2,9 +2,9 @@
 ImagePropertiesFilter scheduling filter.  This patch has not yet been
 submitted upstream.
 
---- nova-2013.1.4/nova/compute/vm_mode.py.orig	Thu Oct 17 11:25:43 2013
-+++ nova-2013.1.4/nova/compute/vm_mode.py	Tue Mar  4 23:59:38 2014
-@@ -33,8 +33,9 @@
+--- nova-2014.2.2/nova/compute/vm_mode.py.orig	Thu Oct 17 11:25:43 2013
++++ nova-2014.2.2/nova/compute/vm_mode.py	Tue Mar  4 23:59:38 2014
+@@ -31,8 +31,9 @@
  XEN = "xen"  # Xen 3.0 paravirtualized
  UML = "uml"  # User Mode Linux paravirtualized
  EXE = "exe"  # Executables in containers
--- a/components/openstack/nova/patches/02-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/patches/02-requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,51 +1,99 @@
 In-house patch to remove unnecessary dependencies from Nova's
 requirements files. The specific reasons are as follows:
 
-amqplib		No longer applicable
-		(upstream commit 48591e83894354b57f0528ea98e6efe026acac28)
+keystoneclient	Not applicable
+
+kombu		Not applicable
+
+lockfile	Not applicable
+
+oslo.rootwrap	Not applicable to Solaris
 
-argparse	Not applicable to Solaris (nova-network specific)
+oslo.vmware	Not applicable to Solaris (VMware specific)
+
+paramiko	Not applicable to Solaris
 
-paramiko	Not applicable to Solaris (PowerVM specific)
+posix_ipc	Not applicable
+
+pycadf		Not applicable
 
 suds		Not applicable to Solaris (VMware specific)
 
---- nova-2013.2.3/nova.egg-info/requires.txt.orig	2014-04-03 11:55:51.000000000 -0700
-+++ nova-2013.2.3/nova.egg-info/requires.txt	2014-05-24 23:15:07.242887922 -0700
-@@ -1,6 +1,5 @@
- pbr>=0.5.21,<1.0
- SQLAlchemy>=0.7.8,<=0.7.99
--amqplib>=0.6.1
- anyjson>=0.3.3
- boto>=2.4.0,!=2.13.0
- eventlet>=0.13.0
-@@ -14,8 +13,6 @@
+--- nova-2014.2.2/nova.egg-info/requires.txt.~1~	2015-02-05 06:33:48.000000000 -0800
++++ nova-2014.2.2/nova.egg-info/requires.txt	2015-02-25 00:59:17.326168445 -0800
+@@ -7,7 +7,6 @@ decorator>=3.4.0
+ eventlet>=0.15.1,<0.16.0
+ Jinja2
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
+ lxml>=2.3
+ Routes>=1.12.3,!=2.0
+ WebOb>=1.2.3
+@@ -16,9 +15,6 @@ PasteDeploy>=1.5.0
  Paste
- sqlalchemy-migrate>=0.7.2
- netaddr
+ sqlalchemy-migrate==0.9.1
+ netaddr>=0.7.12
 -suds>=0.4
--paramiko>=1.8.0
+-paramiko>=1.13.0
+-posix_ipc
  pyasn1
  Babel>=1.3
- iso8601>=0.1.8
-
---- nova-2013.2.3/requirements.txt.orig	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/requirements.txt	2014-05-24 23:15:23.285062223 -0700
-@@ -1,8 +1,6 @@
- pbr>=0.5.21,<1.0
- SQLAlchemy>=0.7.8,<=0.7.99
--amqplib>=0.6.1
- anyjson>=0.3.3
--argparse
- boto>=2.4.0,!=2.13.0
- eventlet>=0.13.0
+ iso8601>=0.1.9
+@@ -26,18 +22,13 @@ jsonschema>=2.0.0,<3.0.0
+ python-cinderclient>=1.1.0
+ python-neutronclient>=2.3.6,<3
+ python-glanceclient>=0.14.0
+-python-keystoneclient>=0.10.0
+ six>=1.7.0
+ stevedore>=1.0.0  # Apache-2.0
+ websockify>=0.6.0,<0.7
+ wsgiref>=0.1.2
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+-oslo.rootwrap>=1.3.0
+-pycadf>=0.6.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.i18n>=1.0.0  # Apache-2.0
+-lockfile>=0.8
+ simplejson>=2.2.0
+ rfc3986>=0.2.0  # Apache-2.0
+-oslo.vmware>=0.6.0,<0.9.0               # Apache-2.0
+--- nova-2014.2.2/requirements.txt.~1~	2015-02-05 06:26:51.000000000 -0800
++++ nova-2014.2.2/requirements.txt	2015-02-25 00:59:59.286958886 -0800
+@@ -11,7 +11,6 @@ decorator>=3.4.0
+ eventlet>=0.15.1,<0.16.0
  Jinja2
-@@ -15,8 +13,6 @@
+ keystonemiddleware>=1.0.0
+-kombu>=2.5.0
+ lxml>=2.3
+ Routes>=1.12.3,!=2.0
+ WebOb>=1.2.3
+@@ -20,9 +19,6 @@ PasteDeploy>=1.5.0
  Paste
- sqlalchemy-migrate>=0.7.2
- netaddr
+ sqlalchemy-migrate==0.9.1
+ netaddr>=0.7.12
 -suds>=0.4
--paramiko>=1.8.0
+-paramiko>=1.13.0
+-posix_ipc
  pyasn1
  Babel>=1.3
- iso8601>=0.1.8
+ iso8601>=0.1.9
+@@ -30,18 +26,13 @@ jsonschema>=2.0.0,<3.0.0
+ python-cinderclient>=1.1.0
+ python-neutronclient>=2.3.6,<3
+ python-glanceclient>=0.14.0
+-python-keystoneclient>=0.10.0
+ six>=1.7.0
+ stevedore>=1.0.0  # Apache-2.0
+ websockify>=0.6.0,<0.7
+ wsgiref>=0.1.2
+ oslo.config>=1.4.0  # Apache-2.0
+ oslo.db>=1.0.0,<1.1  # Apache-2.0
+-oslo.rootwrap>=1.3.0
+-pycadf>=0.6.0
+ oslo.messaging>=1.4.0,!=1.5.0,<1.6.0
+ oslo.i18n>=1.0.0  # Apache-2.0
+-lockfile>=0.8
+ simplejson>=2.2.0
+ rfc3986>=0.2.0  # Apache-2.0
+-oslo.vmware>=0.6.0,<0.9.0               # Apache-2.0
--- a/components/openstack/nova/patches/03-Solaris-flavors.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/patches/03-Solaris-flavors.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,10 +1,9 @@
 In-house patch to update the default flavors for use with Solaris.
 This patch has not yet been submitted upstream.
 
---- nova-2013.2.3/nova/db/sqlalchemy/migrate_repo/versions/133_folsom.py.~1~	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/nova/db/sqlalchemy/migrate_repo/versions/133_folsom.py	2014-05-19 04:14:17.367917095 -0700
-@@ -2,6 +2,8 @@
- 
+--- nova-2014.2.2/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py.~1~	2014-10-16 04:52:25.000000000 -0700
++++ nova-2014.2.2/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py	2014-10-21 15:34:50.909529171 -0700
+@@ -1,5 +1,7 @@
  # Copyright 2012 OpenStack Foundation
  #
 +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
@@ -12,8 +11,8 @@
  #    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
-@@ -37,17 +39,45 @@
-     return Text().with_variant(dialects.mysql.MEDIUMTEXT(), 'mysql')
+@@ -85,17 +87,45 @@ def _create_shadow_tables(migrate_engine
+             raise
  
  
 -def _populate_instance_types(instance_types_table):
@@ -63,8 +62,8 @@
 +        index = 1
          for name, values in default_inst_types.iteritems():
              i.execute({'name': name, 'memory_mb': values["mem"],
-                         'vcpus': values["vcpus"], 'deleted': False,
-@@ -58,6 +88,10 @@
+                         'vcpus': values["vcpus"], 'deleted': 0,
+@@ -106,6 +136,10 @@ def _populate_instance_types(instance_ty
                          'flavorid': values["flavid"],
                          'disabled': False,
                          'is_public': True})
@@ -75,12 +74,12 @@
      except Exception:
          LOG.info(repr(instance_types_table))
          LOG.exception(_('Exception while seeding instance_types table'))
-@@ -1219,7 +1253,7 @@
-                          name='instance_info_caches_instance_id_key').create()
+@@ -1548,7 +1582,7 @@ def upgrade(migrate_engine):
+     _create_shadow_tables(migrate_engine)
  
      # populate initial instance types
 -    _populate_instance_types(instance_types)
 +    _populate_instance_types(instance_types, instance_type_extra_specs)
  
+     _create_dump_tables(migrate_engine)
  
- def downgrade(migrate_engine):
--- a/components/openstack/nova/patches/04-CVE-2014-0134-partial.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-This proposed upstream patch is a follow-up to the original fix for
-CVE-2014-0134 (Launchpad bug 1221190) but is tracked under the same CVE
-and Launchpad bug as the original fix. It is designated as such below
-('Partial-bug: #1221190').
-
-From 63064a709162ba1a8a9a19643bd3acdf57c0c0b4 Mon Sep 17 00:00:00 2001
-From: Nikola Dipanov <[email protected]>
-Date: Wed, 9 Apr 2014 15:50:20 +0200
-Subject: [PATCH] Avoid the possibility of truncating disk info file
-
-Commit dc8de42 makes nova persist image format to a file to avoid
-attacks based on changing it later. However the way it was implemented
-leaves a small window of opportunity for the file to be truncated before
-it gets written back to effectively making it possible for data to get
-lost leaving us with a potential problem next time it is attempted to be
-read.
-
-This patch changes the way file is updated to be atomic, thus closing
-the race window (and also removes the chown that we did not really
-need).
-
-It is worth noting that a better solution to this would be
-to allow the code calling the imagebackend to write the file (once!)
-and make it impossible to update after the boot process is done. This
-approach would require more refactoring of the libvirt driver code, and
-may be done in the future.
-
-Partial-bug: #1221190
-Change-Id: Ia1b073f38e096989f34d1774a12a1b4151773fc7
-(cherry picked from commit d416f4310bb946b4b127201ec3c37e530d988714)
----
- etc/nova/rootwrap.d/compute.filters          |    1 -
- nova/tests/virt/libvirt/test_imagebackend.py |   21 ---------------------
- nova/utils.py                                |   14 --------------
- nova/virt/libvirt/imagebackend.py            |   25 +++++++++++++------------
- 4 files changed, 13 insertions(+), 48 deletions(-)
-
-diff --git a/etc/nova/rootwrap.d/compute.filters b/etc/nova/rootwrap.d/compute.filters
-index e98c3f2..ac67180 100644
---- a/etc/nova/rootwrap.d/compute.filters
-+++ b/etc/nova/rootwrap.d/compute.filters
-@@ -41,7 +41,6 @@ mkdir: CommandFilter, mkdir, root
- # nova/virt/libvirt/connection.py: 'chown', os.getuid( console_log
- # nova/virt/libvirt/connection.py: 'chown', os.getuid( console_log
- # nova/virt/libvirt/connection.py: 'chown', 'root', basepath('disk')
--# nova/utils.py: 'chown', owner_uid, path
- chown: CommandFilter, chown, root
- 
- # nova/virt/disk/vfs/localfs.py: 'chmod'
-diff --git a/nova/tests/virt/libvirt/test_imagebackend.py b/nova/tests/virt/libvirt/test_imagebackend.py
-index 5424f7b..80ade57 100644
---- a/nova/tests/virt/libvirt/test_imagebackend.py
-+++ b/nova/tests/virt/libvirt/test_imagebackend.py
-@@ -29,7 +29,6 @@ from nova.openstack.common import uuidutils
- from nova import test
- from nova.tests import fake_processutils
- from nova.tests.virt.libvirt import fake_libvirt_utils
--from nova import utils
- from nova.virt.libvirt import imagebackend
- 
- CONF = cfg.CONF
-@@ -68,10 +67,6 @@ class _ImageTestCase(object):
-             'nova.virt.libvirt.imagebackend.libvirt_utils',
-             fake_libvirt_utils))
- 
--        def fake_chown(path, owner_uid=None):
--            return None
--        self.stubs.Set(utils, 'chown', fake_chown)
--
-     def tearDown(self):
-         super(_ImageTestCase, self).tearDown()
-         shutil.rmtree(self.INSTANCES_PATH)
-@@ -128,10 +123,6 @@ class RawTestCase(_ImageTestCase, test.NoDBTestCase):
-         super(RawTestCase, self).setUp()
-         self.stubs.Set(imagebackend.Raw, 'correct_format', lambda _: None)
- 
--        def fake_chown(path, owner_uid=None):
--            return None
--        self.stubs.Set(utils, 'chown', fake_chown)
--
-     def prepare_mocks(self):
-         fn = self.mox.CreateMockAnything()
-         self.mox.StubOutWithMock(imagebackend.utils.synchronized,
-@@ -246,10 +237,6 @@ class RawTestCase(_ImageTestCase, test.NoDBTestCase):
-         self.mox.StubOutWithMock(os.path, 'exists')
-         self.mox.StubOutWithMock(imagebackend.images, 'qemu_img_info')
- 
--        def fake_chown(path, owner_uid=None):
--            return None
--        self.stubs.Set(utils, 'chown', fake_chown)
--
-         os.path.exists(self.PATH).AndReturn(True)
-         os.path.exists(self.DISK_INFO_PATH).AndReturn(False)
-         info = self.mox.CreateMockAnything()
-@@ -278,10 +265,6 @@ class Qcow2TestCase(_ImageTestCase, test.NoDBTestCase):
-         self.QCOW2_BASE = (self.TEMPLATE_PATH +
-                            '_%d' % (self.SIZE / (1024 * 1024 * 1024)))
- 
--        def fake_chown(path, owner_uid=None):
--            return None
--        self.stubs.Set(utils, 'chown', fake_chown)
--
-     def prepare_mocks(self):
-         fn = self.mox.CreateMockAnything()
-         self.mox.StubOutWithMock(imagebackend.utils.synchronized,
-@@ -873,10 +856,6 @@ class BackendTestCase(test.NoDBTestCase):
-     def setUp(self):
-         super(BackendTestCase, self).setUp()
- 
--        def fake_chown(path, owner_uid=None):
--            return None
--        self.stubs.Set(utils, 'chown', fake_chown)
--
-     def get_image(self, use_cow, image_type):
-         return imagebackend.Backend(use_cow).image(self.INSTANCE,
-                                                    self.NAME,
-diff --git a/nova/utils.py b/nova/utils.py
-index 4757f3a..599cb64 100755
---- a/nova/utils.py
-+++ b/nova/utils.py
-@@ -924,20 +924,6 @@ def temporary_chown(path, owner_uid=None):
-             execute('chown', orig_uid, path, run_as_root=True)
- 
- 
--def chown(path, owner_uid=None):
--    """chown a path.
--
--    :param owner_uid: UID of owner (defaults to current user)
--    """
--    if owner_uid is None:
--        owner_uid = os.getuid()
--
--    orig_uid = os.stat(path).st_uid
--
--    if orig_uid != owner_uid:
--        execute('chown', owner_uid, path, run_as_root=True)
--
--
- @contextlib.contextmanager
- def tempdir(**kwargs):
-     argdict = kwargs.copy()
-diff --git a/nova/virt/libvirt/imagebackend.py b/nova/virt/libvirt/imagebackend.py
-index ed11c90..29131d9 100644
---- a/nova/virt/libvirt/imagebackend.py
-+++ b/nova/virt/libvirt/imagebackend.py
-@@ -264,20 +264,21 @@ class Image(object):
-                             lock_path=self.lock_path)
-         def write_to_disk_info_file():
-             # Use os.open to create it without group or world write permission.
--            fd = os.open(self.disk_info_path, os.O_RDWR | os.O_CREAT, 0o644)
--            with os.fdopen(fd, "r+") as disk_info_file:
-+            fd = os.open(self.disk_info_path, os.O_RDONLY | os.O_CREAT, 0o644)
-+            with os.fdopen(fd, "r") as disk_info_file:
-                 line = disk_info_file.read().rstrip()
-                 dct = _dict_from_line(line)
--                if self.path in dct:
--                    msg = _("Attempted overwrite of an existing value.")
--                    raise exception.InvalidDiskInfo(reason=msg)
--                dct.update({self.path: driver_format})
--                disk_info_file.seek(0)
--                disk_info_file.truncate()
--                disk_info_file.write('%s\n' % jsonutils.dumps(dct))
--            # Ensure the file is always owned by the nova user so qemu can't
--            # write it.
--            utils.chown(self.disk_info_path, owner_uid=os.getuid())
-+
-+            if self.path in dct:
-+                msg = _("Attempted overwrite of an existing value.")
-+                raise exception.InvalidDiskInfo(reason=msg)
-+            dct.update({self.path: driver_format})
-+
-+            tmp_path = self.disk_info_path + ".tmp"
-+            fd = os.open(tmp_path, os.O_WRONLY | os.O_CREAT, 0o644)
-+            with os.fdopen(fd, "w") as tmp_file:
-+                tmp_file.write('%s\n' % jsonutils.dumps(dct))
-+            os.rename(tmp_path, self.disk_info_path)
- 
-         try:
-             if (self.disk_info_path is not None and
--- 
-1.7.9.2
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/04-compute-hvtype.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,20 @@
+In-house patch to add the 'solariszones' hypervisor to Nova's list of
+known hypervisors.  This patch has not yet been submitted upstream.
+--- nova-2014.2.2/nova/compute/hvtype.py.orig	2014-11-13 11:47:50.409917449 -0700
++++ nova-2014.2.2/nova/compute/hvtype.py	2014-11-13 11:48:11.032908030 -0700
+@@ -38,6 +38,7 @@ OPENVZ = "openvz"
+ PARALLELS = "parallels"
+ PHYP = "phyp"
+ QEMU = "qemu"
++SOLARISZONES = "solariszones"
+ TEST = "test"
+ UML = "uml"
+ VBOX = "vbox"
+@@ -56,6 +57,7 @@ ALL = (
+     PARALLELS,
+     PHYP,
+     QEMU,
++    SOLARISZONES,
+     TEST,
+     UML,
+     VBOX,
--- a/components/openstack/nova/patches/05-CVE-2014-0167.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-This upstream patch addresses CVE-2014-0167 and is tracked under
-Launchpad bug 1290537. It is addressed in Icehouse 2014.1 and Havana
-2013.2.4.
-
-commit dbb7dd03fea68120ef5ac9bbb1b3f184e3f2eacc
-Author: Andrew Laski <[email protected]>
-Date:   Wed Apr 9 09:27:44 2014 -0400
-
-    Add RBAC policy for ec2 API security groups calls
-    
-    The revoke_security_group_ingress, revoke_security_group_ingress, and
-    delete_security_group calls in the ec2 API were not restricted by policy
-    checks.  This prevented a deployer from restricting their usage via
-    roles or other checks.  Checks have been added for these calls.
-    
-    Based on commit d4056f8723cc6cefb28ff6e5a7c0df5ea77f82ef but modified
-    for the backport.
-    
-    Closes-Bug: #1290537
-    Change-Id: I4bf681bedd68ed2216b429d34db735823e0a6189
-
-diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
-index 94ff160..36c2f12 100644
---- a/nova/api/ec2/cloud.py
-+++ b/nova/api/ec2/cloud.py
-@@ -30,6 +30,7 @@ from oslo.config import cfg
- from nova.api.ec2 import ec2utils
- from nova.api.ec2 import inst_state
- from nova.api.metadata import password
-+from nova.api.openstack import extensions
- from nova.api import validator
- from nova import availability_zones
- from nova import block_device
-@@ -85,6 +86,9 @@ LOG = logging.getLogger(__name__)
- 
- QUOTAS = quota.QUOTAS
- 
-+security_group_authorizer = extensions.extension_authorizer('compute',
-+                                                            'security_groups')
-+
- 
- def validate_ec2_id(val):
-     if not validator.validate_str()(val):
-@@ -631,6 +635,8 @@ class CloudController(object):
-         security_group = self.security_group_api.get(context, group_name,
-                                                      group_id)
- 
-+        security_group_authorizer(context, security_group)
-+
-         prevalues = kwargs.get('ip_permissions', [kwargs])
- 
-         rule_ids = []
-@@ -665,6 +671,8 @@ class CloudController(object):
-         security_group = self.security_group_api.get(context, group_name,
-                                                      group_id)
- 
-+        security_group_authorizer(context, security_group)
-+
-         prevalues = kwargs.get('ip_permissions', [kwargs])
-         postvalues = []
-         for values in prevalues:
-@@ -737,6 +745,8 @@ class CloudController(object):
-         security_group = self.security_group_api.get(context, group_name,
-                                                      group_id)
- 
-+        security_group_authorizer(context, security_group)
-+
-         self.security_group_api.destroy(context, security_group)
- 
-         return True
-diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
-index 269a738..b28d194 100644
---- a/nova/tests/api/ec2/test_cloud.py
-+++ b/nova/tests/api/ec2/test_cloud.py
-@@ -23,6 +23,7 @@ import copy
- import datetime
- import functools
- import iso8601
-+import mock
- import os
- import string
- import tempfile
-@@ -47,6 +48,7 @@ from nova.image import s3
- from nova.network import api as network_api
- from nova.network import neutronv2
- from nova.openstack.common import log as logging
-+from nova.openstack.common import policy as common_policy
- from nova.openstack.common import timeutils
- from nova import test
- from nova.tests.api.openstack.compute.contrib import (
-@@ -471,6 +473,34 @@ class CloudTestCase(test.TestCase):
-         delete = self.cloud.delete_security_group
-         self.assertRaises(exception.MissingParameter, delete, self.context)
- 
-+    def test_delete_security_group_policy_not_allowed(self):
-+        rules = common_policy.Rules(
-+                {'compute_extension:security_groups':
-+                    common_policy.parse_rule('project_id:%(project_id)s')})
-+        common_policy.set_rules(rules)
-+
-+        with mock.patch.object(self.cloud.security_group_api,
-+                'get') as get:
-+            get.return_value = {'project_id': 'invalid'}
-+
-+            self.assertRaises(exception.PolicyNotAuthorized,
-+                    self.cloud.delete_security_group, self.context,
-+                    'fake-name', 'fake-id')
-+
-+    def test_authorize_security_group_ingress_policy_not_allowed(self):
-+        rules = common_policy.Rules(
-+                {'compute_extension:security_groups':
-+                    common_policy.parse_rule('project_id:%(project_id)s')})
-+        common_policy.set_rules(rules)
-+
-+        with mock.patch.object(self.cloud.security_group_api,
-+                'get') as get:
-+            get.return_value = {'project_id': 'invalid'}
-+
-+            self.assertRaises(exception.PolicyNotAuthorized,
-+                    self.cloud.authorize_security_group_ingress, self.context,
-+                    'fake-name', 'fake-id')
-+
-     def test_authorize_security_group_ingress(self):
-         kwargs = {'project_id': self.context.project_id, 'name': 'test'}
-         sec = db.security_group_create(self.context, kwargs)
-@@ -575,6 +605,20 @@ class CloudTestCase(test.TestCase):
-         db.security_group_destroy(self.context, sec2['id'])
-         db.security_group_destroy(self.context, sec1['id'])
- 
-+    def test_revoke_security_group_ingress_policy_not_allowed(self):
-+        rules = common_policy.Rules(
-+                {'compute_extension:security_groups':
-+                    common_policy.parse_rule('project_id:%(project_id)s')})
-+        common_policy.set_rules(rules)
-+
-+        with mock.patch.object(self.cloud.security_group_api,
-+                'get') as get:
-+            get.return_value = {'project_id': 'invalid'}
-+
-+            self.assertRaises(exception.PolicyNotAuthorized,
-+                    self.cloud.revoke_security_group_ingress, self.context,
-+                    'fake-name', 'fake-id')
-+
-     def test_revoke_security_group_ingress(self):
-         kwargs = {'project_id': self.context.project_id, 'name': 'test'}
-         sec = db.security_group_create(self.context, kwargs)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/05-launchpad-1391782.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,23 @@
+This upstream patch addresses Launchpad bug 1391782. Although it's been
+addressed in Kilo, the patch below is still not yet released for Juno.
+
+commit 6859dd61a8472e0cf8f9f4d30f1da7312dc0385d
+Author: Joe Gordon <[email protected]>
+Date:   Fri Nov 14 12:57:35 2014 -0800
+
+    Use oslo db concurrency to generate nova.conf.sample
+    
+    Make sure we include database and concurrency options in the
+    sample config file.
+    
+    Change-Id: I66e68ec120cba2cee86e36aa26720199876c40a4
+    Closes-Bug: #1391782
+
+diff --git a/tools/config/oslo.config.generator.rc b/tools/config/oslo.config.generator.rc
+index b6ed64e..afcad61 100644
+--- a/tools/config/oslo.config.generator.rc
++++ b/tools/config/oslo.config.generator.rc
+@@ -1,2 +1,2 @@
+-NOVA_CONFIG_GENERATOR_EXTRA_LIBRARIES=oslo.messaging
++NOVA_CONFIG_GENERATOR_EXTRA_LIBRARIES="oslo.messaging oslo.db oslo.concurrency"
+ NOVA_CONFIG_GENERATOR_EXTRA_MODULES=keystonemiddleware.auth_token
--- a/components/openstack/nova/patches/06-CVE-2014-2573.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-This upstream patch addresses CVE-2014-2573 and is tracked under
-Launchpad bug 1269418. It is addressed in Icehouse 2014.1 and Havana
-2013.2.4. It has been modified to apply cleanly into our current Havana
-implementation
-
-This particulr hypervisor driver is not currently shipped with
-Solaris.
-
-commit b3cc3f62a60662e5bb82136c0cfa464592a6afe9
-Author: Gary Kotton <[email protected]>
-Date:   Thu Mar 13 06:53:58 2014 -0700
-
-    VMware: ensure rescue instance is deleted when instance is deleted
-    
-    If the user creates a rescue instance and then proceeded to delete
-    the original instance then the rescue instance would still be up
-    and running on the backend.
-    
-    This patch ensures that the rescue instance is cleaned up if
-    necessary.
-    
-    The vmops unrescue method has a new parameter indicating if
-    the original VM should be powered on.
-    
-    Closes-bug: 1269418
-    (cherry picked from commit efb66531bc37ee416778a70d46c657608ca767af)
-    
-    Conflicts:
-    
-    	nova/tests/virt/vmwareapi/test_vmwareapi.py
-    	nova/virt/vmwareapi/vmops.py
-    
-    Change-Id: I3c1d0b1d003392b306094b80ea1ac99377441fbf
-
---- nova-2013.2.3/nova/tests/virt/vmwareapi/test_vmwareapi.py.~1~	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/nova/tests/virt/vmwareapi/test_vmwareapi.py	2014-06-09 23:03:38.008877252 -0700
-@@ -34,6 +34,7 @@
- from nova.compute import api as compute_api
- from nova.compute import power_state
- from nova.compute import task_states
-+from nova.compute import vm_states
- from nova import context
- from nova import db
- from nova import exception
-@@ -793,6 +794,31 @@
-                                    'node': self.instance_node})
-         self._check_vm_info(info, power_state.RUNNING)
- 
-+    def destroy_rescued(self, fake_method):
-+        self._rescue()
-+        with (
-+            mock.patch.object(self.conn._volumeops, "detach_disk_from_vm",
-+                              fake_method)
-+        ):
-+            self.instance['vm_state'] = vm_states.RESCUED
-+            self.conn.destroy(self.instance, self.network_info)
-+            inst_path = '[%s] %s/%s.vmdk' % (self.ds, self.uuid, self.uuid)
-+            self.assertFalse(vmwareapi_fake.get_file(inst_path))
-+            rescue_file_path = '[%s] %s-rescue/%s-rescue.vmdk' % (self.ds,
-+                                                                  self.uuid,
-+                                                                  self.uuid)
-+            self.assertFalse(vmwareapi_fake.get_file(rescue_file_path))
-+
-+    def test_destroy_rescued(self):
-+        def fake_detach_disk_from_vm(*args, **kwargs):
-+            pass
-+        self.destroy_rescued(fake_detach_disk_from_vm)
-+
-+    def test_destroy_rescued_with_exception(self):
-+        def fake_detach_disk_from_vm(*args, **kwargs):
-+            raise exception.NovaException('Here is my fake exception')
-+        self.destroy_rescued(fake_detach_disk_from_vm)
-+
-     def test_destroy(self):
-         self._create_vm()
-         info = self.conn.get_info({'uuid': self.uuid,
---- nova-2013.2.3/nova/virt/vmwareapi/vmops.py.~1~	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/nova/virt/vmwareapi/vmops.py	2014-06-09 23:09:13.557941347 -0700
-@@ -35,6 +35,7 @@
- from nova import compute
- from nova.compute import power_state
- from nova.compute import task_states
-+from nova.compute import vm_states
- from nova import context as nova_context
- from nova import exception
- from nova.openstack.common import excutils
-@@ -904,13 +905,9 @@
-         except Exception as exc:
-             LOG.exception(exc, instance=instance)
- 
--    def destroy(self, instance, network_info, destroy_disks=True):
--        """
--        Destroy a VM instance. Steps followed are:
--        1. Power off the VM, if it is in poweredOn state.
--        2. Un-register a VM.
--        3. Delete the contents of the folder holding the VM related data.
--        """
-+    def _destroy_instance(self, instance, network_info, destroy_disks=True,
-+                          instance_name=None):
-+        # Destroy a VM instance
-         try:
-             vm_ref = vm_util.get_vm_ref(self._session, instance)
-             lst_properties = ["config.files.vmPathName", "runtime.powerState",
-@@ -943,8 +940,9 @@
-                                            "UnregisterVM", vm_ref)
-                 LOG.debug(_("Unregistered the VM"), instance=instance)
-             except Exception as excep:
--                LOG.warn(_("In vmwareapi:vmops:destroy, got this exception"
--                           " while un-registering the VM: %s") % str(excep))
-+                LOG.warn(_("In vmwareapi:vmops:_destroy_instance, got this "
-+                           "exception while un-registering the VM: %s"),
-+                         excep)
- 
-             if network_info:
-                 self.unplug_vifs(instance, network_info)
-@@ -976,13 +974,37 @@
-                                {'datastore_name': datastore_name},
-                               instance=instance)
-                 except Exception as excep:
--                    LOG.warn(_("In vmwareapi:vmops:destroy, "
--                                 "got this exception while deleting"
--                                 " the VM contents from the disk: %s")
--                                 % str(excep))
-+                    LOG.warn(_("In vmwareapi:vmops:_destroy_instance, "
-+                                "got this exception while deleting "
-+                                "the VM contents from the disk: %s"),
-+                             excep)
-         except Exception as exc:
-             LOG.exception(exc, instance=instance)
- 
-+    def destroy(self, instance, network_info, destroy_disks=True):
-+        """Destroy a VM instance.
-+
-+        Steps followed for each VM are:
-+        1. Power off, if it is in poweredOn state.
-+        2. Un-register.
-+        3. Delete the contents of the folder holding the VM related data.
-+        """
-+        # If there is a rescue VM then we need to destroy that one too.
-+        LOG.debug(_("Destroying instance"), instance=instance)
-+        if instance['vm_state'] == vm_states.RESCUED:
-+            LOG.debug(_("Rescue VM configured"), instance=instance)
-+            try:
-+                self.unrescue(instance, power_on=False)
-+                LOG.debug(_("Rescue VM destroyed"), instance=instance)
-+            except Exception:
-+                rescue_name = instance['uuid'] + self._rescue_suffix
-+                self._destroy_instance(instance, network_info,
-+                                       destroy_disks=destroy_disks,
-+                                       instance_name=rescue_name)
-+        self._destroy_instance(instance, network_info,
-+                               destroy_disks=destroy_disks)
-+        LOG.debug(_("Instance destroyed"), instance=instance)
-+
-     def pause(self, instance):
-         msg = _("pause not supported for vmwareapi")
-         raise NotImplementedError(msg)
-@@ -1066,7 +1088,7 @@
-                                 controller_key=controller_key,
-                                 unit_number=unit_number)
- 
--    def unrescue(self, instance):
-+    def unrescue(self, instance, power_on=True):
-         """Unrescue the specified instance."""
-         # Get the original vmdk_path
-         vm_ref = vm_util.get_vm_ref(self._session, instance)
-@@ -1079,8 +1101,9 @@
-         r_instance = copy.deepcopy(instance)
-         r_instance['name'] = r_instance['name'] + self._rescue_suffix
-         r_instance['uuid'] = r_instance['uuid'] + self._rescue_suffix
--        self.destroy(r_instance, None)
--        self._power_on(instance)
-+        self._destroy_instance(r_instance, None, instance_name=instance_name)
-+        if power_on:
-+            self._power_on(instance)
- 
-     def power_off(self, instance):
-         """Power off the specified instance."""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/06-Solaris-dev-name.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,29 @@
+The patch is to fix the issue of linuxy devices names on Solaris instance recorded
+in the bugs (19987962 and 19277019).
+
+--- nova-2014.2.2/nova/compute/utils.py.~1~	2015-02-05 06:26:50.000000000 -0800
++++ nova-2014.2.2/nova/compute/utils.py	2015-02-09 10:13:15.882810433 -0800
+@@ -148,6 +148,23 @@
+     /dev/vdc is specified but the backend uses /dev/xvdc), the device
+     name will be converted to the appropriate format.
+     """
++    if driver.compute_driver_matches('solariszones.SolarisZonesDriver'):
++        prefix = 'c1d'
++        if device_name_list == []:
++            # Return the root device (c1d0)
++            return 'c1d0'
++
++        # Remove non-Solaris devices names (like, /dev/sda, sdb, ...)
++        # if they exist in the instance.
++        device_name_list = \
++            [dev for dev in device_name_list if prefix in dev]
++        device_name_list.sort()
++
++        # find the least unused number from '0' (root device)
++        used_nums = [int(dev.rsplit('d')[-1]) for dev in device_name_list]
++        diff = [i for i in range(len(used_nums) + 1) if i not in used_nums]
++        return prefix + str(min(diff))
++
+     req_prefix = None
+     req_letter = None
+ 
--- a/components/openstack/nova/patches/07-CVE-2014-3517.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-This upstream patch addresses CVE-2014-3517 and is tracked under
-Launchpad bug 1325128. It is addressed in the Juno trunk, Icehouse
-2014.1.2, and Havana 2013.2.4. It has been modified to apply cleanly
-into our current Havana implementation
-
-commit 1dd97d1335f6ec028d0e4440250f80802a2f1d18
-Author: Grant Murphy <[email protected]>
-Date:   Tue Jul 8 03:35:40 2014 +0000
-
-    Avoid possible timing attack in metadata api
-    
-    Introduce a constant time comparison function to
-    nova utils for comparing authentication tokens.
-    
-    Conflicts:
-    	nova/tests/test_utils.py
-    	nova/utils.py
-    
-    Closes-bug: #1325128
-    Change-Id: I7374f2edc6f03c7da59cf73ae91a87147e53d0de
-    (cherry picked from commit 9f59ca751f1a392ef24d8ab73a7bf5ce9655017e)
-
-diff --git a/nova/api/metadata/handler.py b/nova/api/metadata/handler.py
-index 50387ab..74bb4f7 100644
---- a/nova/api/metadata/handler.py
-+++ b/nova/api/metadata/handler.py
-@@ -31,6 +31,7 @@ from nova import exception
- from nova.openstack.common.gettextutils import _
- from nova.openstack.common import log as logging
- from nova.openstack.common import memorycache
-+from nova import utils
- from nova import wsgi
- 
- CACHE_EXPIRATION = 15  # in seconds
-@@ -172,7 +173,7 @@ class MetadataRequestHandler(wsgi.Application):
-             instance_id,
-             hashlib.sha256).hexdigest()
- 
--        if expected_signature != signature:
-+        if not utils.constant_time_compare(expected_signature, signature):
-             if instance_id:
-                 LOG.warn(_('X-Instance-ID-Signature: %(signature)s does not '
-                            'match the expected value: %(expected_signature)s '
-diff --git a/nova/tests/test_utils.py b/nova/tests/test_utils.py
-index b38ea50..820fe09 100644
---- a/nova/tests/test_utils.py
-+++ b/nova/tests/test_utils.py
-@@ -1083,3 +1083,10 @@ class GetImageFromSystemMetadataTestCase(test.NoDBTestCase):
- 
-         # Verify that the foo1 key has not been inherited
-         self.assertTrue("foo1" not in image)
-+
-+
-+class ConstantTimeCompareTestCase(test.NoDBTestCase):
-+    def test_constant_time_compare(self):
-+        self.assertTrue(utils.constant_time_compare("abcd1234", "abcd1234"))
-+        self.assertFalse(utils.constant_time_compare("abcd1234", "a"))
-+        self.assertFalse(utils.constant_time_compare("abcd1234", "ABCD234"))
-diff --git a/nova/utils.py b/nova/utils.py
-index 4757f3a..5f10a8a 100755
---- nova-2013.2.3/nova/utils.py.~2~	2014-09-02 13:57:46.030039835 -0700
-+++ nova-2013.2.3/nova/utils.py	2014-09-02 13:57:49.391998275 -0700
-@@ -23,6 +23,7 @@ import contextlib
- import datetime
- import functools
- import hashlib
-+import hmac
- import inspect
- import os
- import pyclbr
-@@ -1288,3 +1289,20 @@ def get_boolean(value):
-         return value
-     else:
-         return strutils.bool_from_string(value)
-+
-+if hasattr(hmac, 'compare_digest'):
-+    constant_time_compare = hmac.compare_digest
-+else:
-+    def constant_time_compare(first, second):
-+        """Returns True if both string inputs are equal, otherwise False.
-+
-+        This function should take a constant amount of time regardless of
-+        how many characters in the strings match.
-+
-+        """
-+        if len(first) != len(second):
-+            return False
-+        result = 0
-+        for x, y in zip(first, second):
-+            result |= ord(x) ^ ord(y)
-+        return result == 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/07-CVE-2015-0259.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,336 @@
+Upstream patch to address CVE-2015-0259.  This fix will be included in
+the future 2014.2.3 (juno) release.
+
+From 676ba7bbc788a528b0fe4c87c1c4bf94b4bb6eb1 Mon Sep 17 00:00:00 2001
+From: Dave McCowan <[email protected]>
+Date: Tue, 24 Feb 2015 21:35:48 -0500
+Subject: [PATCH] Websocket Proxy should verify Origin header
+
+If the Origin HTTP header passed in the WebSocket handshake does
+not match the host, this could indicate an attempt at a
+cross-site attack.  This commit adds a check to verify
+the origin matches the host.
+
+Change-Id: Ica6ec23d6f69a236657d5ba0c3f51b693c633649
+Closes-Bug: 1409142
+---
+ nova/console/websocketproxy.py            |   45 +++++++
+ nova/tests/console/test_websocketproxy.py |  185 ++++++++++++++++++++++++++++-
+ 2 files changed, 226 insertions(+), 4 deletions(-)
+
+diff --git a/nova/console/websocketproxy.py b/nova/console/websocketproxy.py
+index ef684f5..7a1e056 100644
+--- a/nova/console/websocketproxy.py
++++ b/nova/console/websocketproxy.py
+@@ -22,17 +22,40 @@ import Cookie
+ import socket
+ import urlparse
+ 
++from oslo.config import cfg
+ import websockify
+ 
+ from nova.consoleauth import rpcapi as consoleauth_rpcapi
+ from nova import context
++from nova import exception
+ from nova.i18n import _
+ from nova.openstack.common import log as logging
+ 
+ LOG = logging.getLogger(__name__)
+ 
++CONF = cfg.CONF
++CONF.import_opt('novncproxy_base_url', 'nova.vnc')
++CONF.import_opt('html5proxy_base_url', 'nova.spice', group='spice')
++CONF.import_opt('base_url', 'nova.console.serial', group='serial_console')
++
+ 
+ class NovaProxyRequestHandlerBase(object):
++    def verify_origin_proto(self, console_type, origin_proto):
++        if console_type == 'novnc':
++            expected_proto = \
++                urlparse.urlparse(CONF.novncproxy_base_url).scheme
++        elif console_type == 'spice-html5':
++            expected_proto = \
++                urlparse.urlparse(CONF.spice.html5proxy_base_url).scheme
++        elif console_type == 'serial':
++            expected_proto = \
++                urlparse.urlparse(CONF.serial_console.base_url).scheme
++        else:
++            detail = _("Invalid Console Type for WebSocketProxy: '%s'") % \
++                        console_type
++            raise exception.ValidationError(detail=detail)
++        return origin_proto == expected_proto
++
+     def new_websocket_client(self):
+         """Called after a new WebSocket connection has been established."""
+         # Reopen the eventlet hub to make sure we don't share an epoll
+@@ -62,6 +85,28 @@ class NovaProxyRequestHandlerBase(object):
+         if not connect_info:
+             raise Exception(_("Invalid Token"))
+ 
++        # Verify Origin
++        expected_origin_hostname = self.headers.getheader('Host')
++        if ':' in expected_origin_hostname:
++            e = expected_origin_hostname
++            expected_origin_hostname = e.split(':')[0]
++        origin_url = self.headers.getheader('Origin')
++        # missing origin header indicates non-browser client which is OK
++        if origin_url is not None:
++            origin = urlparse.urlparse(origin_url)
++            origin_hostname = origin.hostname
++            origin_scheme = origin.scheme
++            if origin_hostname == '' or origin_scheme == '':
++                detail = _("Origin header not valid.")
++                raise exception.ValidationError(detail=detail)
++            if expected_origin_hostname != origin_hostname:
++                detail = _("Origin header does not match this host.")
++                raise exception.ValidationError(detail=detail)
++            if not self.verify_origin_proto(connect_info['console_type'],
++                                              origin.scheme):
++                detail = _("Origin header protocol does not match this host.")
++                raise exception.ValidationError(detail=detail)
++
+         self.msg(_('connect info: %s'), str(connect_info))
+         host = connect_info['host']
+         port = int(connect_info['port'])
+diff --git a/nova/tests/console/test_websocketproxy.py b/nova/tests/console/test_websocketproxy.py
+index 1e51a4d..66913c2 100644
+--- a/nova/tests/console/test_websocketproxy.py
++++ b/nova/tests/console/test_websocketproxy.py
+@@ -16,10 +16,14 @@
+ 
+ 
+ import mock
++from oslo.config import cfg
+ 
+ from nova.console import websocketproxy
++from nova import exception
+ from nova import test
+ 
++CONF = cfg.CONF
++
+ 
+ class NovaProxyRequestHandlerBaseTestCase(test.TestCase):
+ 
+@@ -31,15 +35,82 @@ class NovaProxyRequestHandlerBaseTestCase(test.TestCase):
+         self.wh.msg = mock.MagicMock()
+         self.wh.do_proxy = mock.MagicMock()
+         self.wh.headers = mock.MagicMock()
++        CONF.set_override('novncproxy_base_url',
++                          'https://example.net:6080/vnc_auto.html')
++        CONF.set_override('html5proxy_base_url',
++                          'https://example.net:6080/vnc_auto.html',
++                          'spice')
++
++    def _fake_getheader(self, header):
++        if header == 'cookie':
++            return 'token="123-456-789"'
++        elif header == 'Origin':
++            return 'https://example.net:6080'
++        elif header == 'Host':
++            return 'example.net:6080'
++        else:
++            return
++
++    def _fake_getheader_bad_token(self, header):
++        if header == 'cookie':
++            return 'token="XXX"'
++        elif header == 'Origin':
++            return 'https://example.net:6080'
++        elif header == 'Host':
++            return 'example.net:6080'
++        else:
++            return
++
++    def _fake_getheader_bad_origin(self, header):
++        if header == 'cookie':
++            return 'token="123-456-789"'
++        elif header == 'Origin':
++            return 'https://bad-origin-example.net:6080'
++        elif header == 'Host':
++            return 'example.net:6080'
++        else:
++            return
++
++    def _fake_getheader_blank_origin(self, header):
++        if header == 'cookie':
++            return 'token="123-456-789"'
++        elif header == 'Origin':
++            return ''
++        elif header == 'Host':
++            return 'example.net:6080'
++        else:
++            return
++
++    def _fake_getheader_no_origin(self, header):
++        if header == 'cookie':
++            return 'token="123-456-789"'
++        elif header == 'Origin':
++            return None
++        elif header == 'Host':
++            return 'any-example.net:6080'
++        else:
++            return
++
++    def _fake_getheader_http(self, header):
++        if header == 'cookie':
++            return 'token="123-456-789"'
++        elif header == 'Origin':
++            return 'http://example.net:6080'
++        elif header == 'Host':
++            return 'example.net:6080'
++        else:
++            return
+ 
+     @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
+     def test_new_websocket_client(self, check_token):
+         check_token.return_value = {
+             'host': 'node1',
+-            'port': '10000'
++            'port': '10000',
++            'console_type': 'novnc'
+         }
+         self.wh.socket.return_value = '<socket>'
+         self.wh.path = "ws://127.0.0.1/?token=123-456-789"
++        self.wh.headers.getheader = self._fake_getheader
+ 
+         self.wh.new_websocket_client()
+ 
+@@ -52,6 +123,7 @@ class NovaProxyRequestHandlerBaseTestCase(test.TestCase):
+         check_token.return_value = False
+ 
+         self.wh.path = "ws://127.0.0.1/?token=XXX"
++        self.wh.headers.getheader = self._fake_getheader
+ 
+         self.assertRaises(Exception, self.wh.new_websocket_client)  # noqa
+         check_token.assert_called_with(mock.ANY, token="XXX")
+@@ -60,11 +132,12 @@ class NovaProxyRequestHandlerBaseTestCase(test.TestCase):
+     def test_new_websocket_client_novnc(self, check_token):
+         check_token.return_value = {
+             'host': 'node1',
+-            'port': '10000'
++            'port': '10000',
++            'console_type': 'novnc'
+         }
+         self.wh.socket.return_value = '<socket>'
+         self.wh.path = "http://127.0.0.1/"
+-        self.wh.headers.getheader.return_value = "token=123-456-789"
++        self.wh.headers.getheader = self._fake_getheader
+ 
+         self.wh.new_websocket_client()
+ 
+@@ -77,7 +150,111 @@ class NovaProxyRequestHandlerBaseTestCase(test.TestCase):
+         check_token.return_value = False
+ 
+         self.wh.path = "http://127.0.0.1/"
+-        self.wh.headers.getheader.return_value = "token=XXX"
++        self.wh.headers.getheader = self._fake_getheader_bad_token
+ 
+         self.assertRaises(Exception, self.wh.new_websocket_client)  # noqa
+         check_token.assert_called_with(mock.ANY, token="XXX")
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_bad_origin_header(self, check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'novnc'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_bad_origin
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_blank_origin_header(self, check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'novnc'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_blank_origin
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_no_origin_header(self, check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'novnc'
++        }
++        self.wh.socket.return_value = '<socket>'
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_no_origin
++
++        self.wh.new_websocket_client()
++
++        check_token.assert_called_with(mock.ANY, token="123-456-789")
++        self.wh.socket.assert_called_with('node1', 10000, connect=True)
++        self.wh.do_proxy.assert_called_with('<socket>')
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_bad_origin_proto_vnc(self,
++                                                             check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'novnc'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_http
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_bad_origin_proto_spice(self,
++                                                               check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'spice-html5'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_http
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_bad_origin_proto_serial(self,
++                                                                check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'serial'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader_http
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
++
++    @mock.patch('nova.consoleauth.rpcapi.ConsoleAuthAPI.check_token')
++    def test_new_websocket_client_novnc_bad_console_type(self, check_token):
++        check_token.return_value = {
++            'host': 'node1',
++            'port': '10000',
++            'console_type': 'bad-console-type'
++        }
++
++        self.wh.path = "http://127.0.0.1/"
++        self.wh.headers.getheader = self._fake_getheader
++
++        self.assertRaises(exception.ValidationError,
++                          self.wh.new_websocket_client)
+-- 
+1.7.9.5
+
--- a/components/openstack/nova/patches/08-CVE-2014-3608.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-This upstream patch addresses CVE-2014-3608 and is tracked under Launchpad
-bug 1319182.  It is addressed in Juno 2014.2 and Icehouse 2014.1.3.  It has
-been modified to apply cleanly into our current Havana implementation.
-
-From 8ff170dc95bf3101fe38a2624e941bfa3b7c1138 Mon Sep 17 00:00:00 2001
-From: "Leandro I. Costantino" <[email protected]>
-Date: Mon, 19 May 2014 19:58:47 -0300
-Subject: [PATCH] VM in rescue state must have a restricted set of actions
-
-Right now it is possible to pause, suspend and stop a VM in state RESCUED,
-so after the state is changed, it's not possible to trigger unrescue anymore
-since the original state is lost.
-
-This patch remove vm_states.RESCUED as valid state from stop,
-pause and suspend actions.
-
-The vm_states devref is also updated to reflect this change including the
-current reboot flow.( vm_states.RESCUED cannot be rebooted as per
-today code)
-
-DocImpact
-Closes-Bug: #1319182
-Co-Authored-By: Cyril Roelandt <[email protected]>
-Change-Id: I531dea5a5499bf93c24bea37850d562134dee281
----
- doc/source/devref/vmstates.rst         |  7 ++++--
- nova/compute/api.py                    |  7 +++---
- nova/tests/compute/test_compute_api.py | 46 ++++++++++++++++++++++++++++++++--
- 3 files changed, 52 insertions(+), 8 deletions(-)
-
---- nova-2013.2.3/doc/source/devref/vmstates.rst	2014-04-03 11:49:38.000000000 -0700
-+++ nova-2013.2.3/doc/source/devref/vmstates.rst	2014-09-29 10:32:35.921504377 -0700
-@@ -88,6 +88,7 @@
-     rescue -> error
-     active -> rescue
-     stopped -> rescue
-+    error -> rescue
- 
-     unrescue [shape="rectangle"]
-     unrescue -> active
-@@ -139,7 +140,9 @@
-     reboot -> error
-     active -> reboot
-     stopped -> reboot
--    rescued -> reboot
-+    paused -> reboot
-+    suspended -> reboot
-+    error -> reboot
- 
-     live_migrate [shape="rectangle"]
-     live_migrate -> active
-@@ -159,4 +162,4 @@
- power states when a new VM instance is created.
- 
- 
--.. image:: /images/run_instance_walkthrough.png
-\ No newline at end of file
-+.. image:: /images/run_instance_walkthrough.png
---- nova-2013.2.3/nova/compute/api.py	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/nova/compute/api.py	2014-09-29 10:32:50.868945930 -0700
-@@ -1619,8 +1619,7 @@
-     @check_instance_lock
-     @check_instance_host
-     @check_instance_cell
--    @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED,
--                                    vm_states.ERROR],
-+    @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED],
-                           task_state=[None])
-     def stop(self, context, instance, do_cast=True):
-         """Stop an instance."""
-@@ -2429,7 +2428,7 @@
-     @wrap_check_policy
-     @check_instance_lock
-     @check_instance_cell
--    @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED])
-+    @check_instance_state(vm_state=[vm_states.ACTIVE])
-     def pause(self, context, instance):
-         """Pause the given instance."""
-         instance.task_state = task_states.PAUSING
-@@ -2456,7 +2455,7 @@
-     @wrap_check_policy
-     @check_instance_lock
-     @check_instance_cell
--    @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.RESCUED])
-+    @check_instance_state(vm_state=[vm_states.ACTIVE])
-     def suspend(self, context, instance):
-         """Suspend the given instance."""
-         instance.task_state = task_states.SUSPENDING
---- nova-2013.2.3/nova/tests/compute/test_compute_api.py	2014-04-03 11:49:46.000000000 -0700
-+++ nova-2013.2.3/nova/tests/compute/test_compute_api.py	2014-09-29 10:32:35.926521781 -0700
-@@ -56,6 +56,16 @@
-         self.context = context.RequestContext(self.user_id,
-                                               self.project_id)
- 
-+    def _get_vm_states(self, exclude_states=None):
-+        vm_state = set([vm_states.ACTIVE, vm_states.BUILDING, vm_states.PAUSED,
-+                    vm_states.SUSPENDED, vm_states.RESCUED, vm_states.STOPPED,
-+                    vm_states.RESIZED, vm_states.SOFT_DELETED,
-+                    vm_states.DELETED, vm_states.ERROR, vm_states.SHELVED,
-+                    vm_states.SHELVED_OFFLOADED])
-+        if not exclude_states:
-+            exclude_states = set()
-+        return vm_state - exclude_states
-+
-     def _create_flavor(self, params=None):
-         flavor = {'id': 1,
-                   'flavorid': 1,
-@@ -193,6 +203,19 @@
-         self.assertEqual(task_states.SUSPENDING,
-                          instance.task_state)
- 
-+    def _test_suspend_fails(self, vm_state):
-+        params = dict(vm_state=vm_state)
-+        instance = self._create_instance_obj(params=params)
-+        self.assertIsNone(instance.task_state)
-+        self.assertRaises(exception.InstanceInvalidState,
-+                          self.compute_api.suspend,
-+                          self.context, instance)
-+
-+    def test_suspend_fails_invalid_states(self):
-+        invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE]))
-+        for state in invalid_vm_states:
-+            self._test_suspend_fails(state)
-+
-     def test_resume(self):
-         # Ensure instance can be resumed (if suspended).
-         instance = self._create_instance_obj(
-@@ -298,13 +321,19 @@
-     def test_stop_stopped_instance_with_bypass(self):
-         self._test_stop(vm_states.STOPPED, force=True)
- 
--    def test_stop_invalid_state(self):
--        params = dict(vm_state=vm_states.PAUSED)
-+    def _test_stop_invalid_state(self, vm_state):
-+        params = dict(vm_state=vm_state)
-         instance = self._create_instance_obj(params=params)
-         self.assertRaises(exception.InstanceInvalidState,
-                           self.compute_api.stop,
-                           self.context, instance)
- 
-+    def test_stop_fails_invalid_states(self):
-+        invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE,
-+                                                     vm_states.ERROR]))
-+        for state in invalid_vm_states:
-+            self._test_stop_invalid_state(state)
-+
-     def test_stop_a_stopped_inst(self):
-         params = {'vm_state': vm_states.STOPPED}
-         instance = self._create_instance_obj(params=params)
-@@ -1075,6 +1104,19 @@
-         self.assertEqual(task_states.PAUSING,
-                          instance.task_state)
- 
-+    def _test_pause_fails(self, vm_state):
-+        params = dict(vm_state=vm_state)
-+        instance = self._create_instance_obj(params=params)
-+        self.assertIsNone(instance.task_state)
-+        self.assertRaises(exception.InstanceInvalidState,
-+                          self.compute_api.pause,
-+                          self.context, instance)
-+
-+    def test_pause_fails_invalid_states(self):
-+        invalid_vm_states = self._get_vm_states(set([vm_states.ACTIVE]))
-+        for state in invalid_vm_states:
-+            self._test_pause_fails(state)
-+
-     def test_unpause(self):
-         # Ensure instance can be unpaused.
-         params = dict(vm_state=vm_states.PAUSED)
--- a/components/openstack/nova/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/nova/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,13 +1,11 @@
 install/archive
 library/python-2/eventlet-26
-library/python-2/oslo.config-26
+library/python-2/python-mysql-26
 library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-migrate-26
 library/python-2/webob-26
-library/python/eventlet-26
+library/python/iniparse-26
 library/python/oslo.config-26
-library/python/sqlalchemy-migrate-26
-library/python/webob-26
 runtime/python-26
 service/network/evs
 system/core-os
@@ -15,3 +13,9 @@
 system/library/storage/suri
 system/storage/fc-utilities
 system/storage/iscsi/iscsi-initiator
+terminal/xterm
+web/novnc
+x11/diagnostic/x11-info-clients
+x11/server/xorg
+x11/server/xvnc
+x11/x11-server-utilities
--- a/components/openstack/swift/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,24 +20,28 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		swift
-COMPONENT_CODENAME=	havana
-COMPONENT_VERSION=	1.10.0
+COMPONENT_CODENAME=	kilo
+COMPONENT_VERSION=	2.2.2
+COMPONENT_BE_VERSION=	2014.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:9a841225c3a00a93a15a160102d3f7116f2f1ba98ebffedfe641747844e14889
+    sha256:d97ff8e3c1381611ca2f9cd3eb13000e3339166e06d67ec079ce9ec958d1a088
 COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUG_DB=	service/swift
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21826
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -45,12 +49,25 @@
 # only need to deliver one version.  The manifest is parameterized, though.
 PYTHON_VERSIONS=	2.6
 
+PKG_MACROS +=		COMPONENT_BE_VERSION=$(COMPONENT_BE_VERSION)
 PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
+
+#
+# All of the swift SMF manifests depend on swift-upgrade so copy it
+# into the proto directory for pkgdepend(1) to find.
+#
+COMPONENT_POST_INSTALL_ACTION += \
+        ($(MKDIR) $(PROTO_DIR)/lib/svc/manifest/application/openstack; \
+         $(CP) \
+             files/swift-*.xml \
+             $(PROTO_DIR)/lib/svc/manifest/application/openstack;)
 
 COMPONENT_TEST_DIR =	$(SOURCE_DIR)
 COMPONENT_TEST_CMD =	nosetests
 COMPONENT_TEST_ENV +=	SWIFT_TEST_CONFIG_FILE=$(SWIFT_TEST_CONFIG_FILE)
-COMPONENT_TEST_ARGS =	--with-xunit --xunit-file=$(BUILD_DIR)/nosetests-$(MACH).xml
+COMPONENT_TEST_ARGS =	--with-xunit \
+			--xunit-file=$(BUILD_DIR)/nosetests-$(MACH).xml
 COMPONENT_TEST_ARGS +=	test/unit
 
 # common targets
--- a/components/openstack/swift/files/proxy-server.conf	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/proxy-server.conf	Mon Apr 20 12:35:51 2015 -0700
@@ -1,11 +1,26 @@
 [DEFAULT]
 # bind_ip = 0.0.0.0
-# bind_port = 80
+bind_port = 8080
 # bind_timeout = 30
 # backlog = 4096
 # swift_dir = /etc/swift
 # user = swift
+
+# Enables exposing configuration settings via HTTP GET /info.
+# expose_info = true
+
+# Key to use for admin calls that are HMAC signed.  Default is empty,
+# which will disable admin calls to /info.
+# admin_key = secret_admin_key
 #
+# Allows the ability to withhold sections from showing up in the public calls
+# to /info.  You can withhold subsections by separating the dict level with a
+# ".".  The following would cause the sections 'container_quotas' and 'tempurl'
+# to not be listed, and the key max_failed_deletes would be removed from
+# bulk_delete.  Default is empty, allowing all registered fetures to be listed
+# via HTTP GET /info.
+# disallowed_sections = container_quotas, tempurl, bulk_delete.max_failed_deletes
+
 # Use an integer to override the number of pre-forked processes that will
 # accept connections.  Should default to the number of effective cpu
 # cores in the system.  It's worth noting that individual workers will
@@ -20,6 +35,7 @@
 # key_file = /etc/swift/proxy.key
 #
 # expiring_objects_container_divisor = 86400
+# expiring_objects_account_name = expiring_objects
 #
 # You can specify default log routing here if you want:
 # log_name = swift
@@ -27,6 +43,9 @@
 # log_level = INFO
 # log_headers = false
 # log_address = /dev/log
+# The following caps the length of log lines to the value given; no limit if
+# set to 0, the default.
+# log_max_line_length = 0
 #
 # This optional suffix (default is empty) that would be appended to the swift transaction
 # id allows one to easily figure out from which cluster that X-Trans-Id belongs to.
@@ -51,12 +70,13 @@
 #
 # Use a comma separated list of full url (http://foo.bar:1234,https://foo.bar)
 # cors_allow_origin =
+# strict_cors_mode = True
 #
 # client_timeout = 60
 # eventlet_debug = false
 
 [pipeline:main]
-pipeline = catch_errors healthcheck proxy-logging cache bulk slo ratelimit tempauth authtoken keystoneauth container-quotas account-quotas proxy-logging proxy-server
+pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit tempauth authtoken keystoneauth container-quotas account-quotas slo dlo proxy-logging proxy-server
 
 [app:proxy-server]
 use = egg:swift#proxy
@@ -69,11 +89,27 @@
 # log_handoffs = true
 # recheck_account_existence = 60
 # recheck_container_existence = 60
-# object_chunk_size = 8192
-# client_chunk_size = 8192
+# object_chunk_size = 65536
+# client_chunk_size = 65536
+#
+# How long the proxy server will wait on responses from the a/c/o servers.
 # node_timeout = 10
+#
+# How long the proxy server will wait for an initial response and to read a
+# chunk of data from the object servers while serving GET / HEAD requests.
+# Timeouts from these requests can be recovered from so setting this to
+# something lower than node_timeout would provide quicker error recovery
+# while allowing for a longer timeout for non-recoverable requests (PUTs).
+# Defaults to node_timeout, should be overriden if node_timeout is set to a
+# high number to prevent client timeouts from firing before the proxy server
+# has a chance to retry.
+# recoverable_node_timeout = node_timeout
+#
 # conn_timeout = 0.5
 #
+# How long to wait for requests to finish after a quorum has been established.
+# post_quorum_timeout = 0.5
+#
 # How long without an error before a node's error count is reset. This will
 # also be how long before a node is reenabled after suppression is triggered.
 # error_suppression_interval = 60
@@ -114,14 +150,6 @@
 # Depth of the proxy put queue.
 # put_queue_depth = 10
 #
-# Start rate-limiting object segment serving after the Nth segment of a
-# segmented object.
-# rate_limit_after_segment = 10
-#
-# Once segment rate-limiting kicks in for an object, limit segments served
-# to N per second.
-# rate_limit_segments_per_sec = 1
-#
 # Storage nodes can be chosen at random (shuffle), by using timing
 # measurements (timing), or by using an explicit match (affinity).
 # Using timing measurements may allow for lower overall latency, while
@@ -135,11 +163,6 @@
 # the number of seconds configured by timing_expiry.
 # timing_expiry = 300
 #
-# If set to false will treat objects with X-Static-Large-Object header set
-# as a regular object on GETs, i.e. will return that object's contents. Should
-# be set to false if slo is not used in pipeline.
-# allow_static_large_object = true
-#
 # The maximum time (seconds) that a large object connection is allowed to last.
 # max_large_object_get_time = 86400
 #
@@ -180,8 +203,7 @@
 # These are the headers whose values will only be shown to swift_owners. The
 # exact definition of a swift_owner is up to the auth system in use, but
 # usually indicates administrative responsibilities.
-# swift_owner_headers = x-container-read, x-container-write, x-container-sync-key, x-container-sync-to, x-account-meta-temp-url-key, x-account-meta-temp-url-key-2
-
+# swift_owner_headers = x-container-read, x-container-write, x-container-sync-key, x-container-sync-to, x-account-meta-temp-url-key, x-account-meta-temp-url-key-2, x-account-access-control
 
 [filter:tempauth]
 use = egg:swift#tempauth
@@ -244,9 +266,9 @@
 # there you can change it to: authtoken keystoneauth
 #
 [filter:authtoken]
-paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
+paste.filter_factory = keystonemiddleware.auth_token:filter_factory
 auth_uri = http://127.0.0.1:5000/
-identity_uri = http://127.0.0.1:35357
+identity_uri = http://127.0.0.1:35357/
 admin_tenant_name = %SERVICE_TENANT_NAME%
 admin_user = %SERVICE_USER%
 admin_password = %SERVICE_PASSWORD%
@@ -262,6 +284,16 @@
 # operator_roles = admin, swiftoperator
 # The reseller admin role has the ability to create and delete accounts
 # reseller_admin_role = ResellerAdmin
+# For backwards compatibility, keystoneauth will match names in cross-tenant
+# access control lists (ACLs) when both the requesting user and the tenant
+# are in the default domain i.e the domain to which existing tenants are
+# migrated. The default_domain_id value configured here should be the same as
+# the value used during migration of tenants to keystone domains.
+# default_domain_id = default
+# For a new installation, or an installation in which keystone projects may
+# move between domains, you should disable backwards compatible name matching
+# in ACLs by setting allow_names_in_acls to false:
+# allow_names_in_acls = true
 
 [filter:healthcheck]
 use = egg:swift#healthcheck
@@ -298,6 +330,9 @@
 # set to 2 and reload.
 # In the future, the ability to use pickle serialization will be removed.
 # memcache_serialization_support = 2
+#
+# Sets the maximum number of connections to each memcached server per worker
+# memcache_max_connections = 2
 
 [filter:ratelimit]
 use = egg:swift#ratelimit
@@ -375,18 +410,21 @@
 # set log_headers = false
 # set log_address = /dev/log
 #
+# Specify the storage_domain that match your cloud, multiple domains
+# can be specified separated by a comma
 # storage_domain = example.com
+#
 # lookup_depth = 1
 
 # Note: Put staticweb just after your auth filter(s) in the pipeline
 [filter:staticweb]
 use = egg:swift#staticweb
 
-# Note: Put tempurl just before your auth filter(s) in the pipeline
+# Note: Put tempurl before dlo, slo and your auth filter(s) in the pipeline
 [filter:tempurl]
 use = egg:swift#tempurl
 # The methods allowed with Temp URLs.
-# methods = GET HEAD PUT
+# methods = GET HEAD PUT POST DELETE
 #
 # The headers to remove from incoming requests. Simply a whitespace delimited
 # list of header names and names can optionally end with '*' to indicate a
@@ -445,6 +483,11 @@
 # access_log_statsd_metric_prefix =
 # access_log_headers = false
 #
+# If access_log_headers is True and access_log_headers_only is set only
+# these headers are logged. Multiple headers can be defined as comma separated
+# list like this: access_log_headers_only = Host, X-Object-Meta-Mtime
+# access_log_headers_only =
+#
 # By default, the X-Auth-Token is logged. To obscure the value,
 # set reveal_sensitive_prefix to the number of characters to log.
 # For example, if set to 12, only the first 12 characters of the
@@ -455,7 +498,7 @@
 # by '...' in the log).
 # Note: reveal_sensitive_prefix will not affect the value
 # logged with access_log_headers=True.
-# reveal_sensitive_prefix = 8192
+# reveal_sensitive_prefix = 16
 #
 # What HTTP methods are allowed for StatsD logging (comma-sep); request methods
 # not in this list will have "BAD_METHOD" for the <verb> portion of the metric.
@@ -473,18 +516,109 @@
 # max_containers_per_extraction = 10000
 # max_failed_extractions = 1000
 # max_deletes_per_request = 10000
-# yield_frequency = 60
+# max_failed_deletes = 1000
+
+# In order to keep a connection active during a potentially long bulk request,
+# Swift may return whitespace prepended to the actual response body. This
+# whitespace will be yielded no more than every yield_frequency seconds.
+# yield_frequency = 10
+
+# Note: The following parameter is used during a bulk delete of objects and
+# their container. This would frequently fail because it is very likely
+# that all replicated objects have not been deleted by the time the middleware got a
+# successful response. It can be configured the number of retries. And the
+# number of seconds to wait between each retry will be 1.5**retry
+
+# delete_container_retry_count = 0
 
 # Note: Put after auth in the pipeline.
 [filter:container-quotas]
 use = egg:swift#container_quotas
 
-# Note: Put before both ratelimit and auth in the pipeline.
+# Note: Put after auth and staticweb in the pipeline.
 [filter:slo]
 use = egg:swift#slo
 # max_manifest_segments = 1000
 # max_manifest_size = 2097152
 # min_segment_size = 1048576
+# Start rate-limiting SLO segment serving after the Nth segment of a
+# segmented object.
+# rate_limit_after_segment = 10
+#
+# Once segment rate-limiting kicks in for an object, limit segments served
+# to N per second. 0 means no rate-limiting.
+# rate_limit_segments_per_sec = 0
+#
+# Time limit on GET requests (seconds)
+# max_get_time = 86400
+
+# Note: Put after auth and staticweb in the pipeline.
+# If you don't put it in the pipeline, it will be inserted for you.
+[filter:dlo]
+use = egg:swift#dlo
+# Start rate-limiting DLO segment serving after the Nth segment of a
+# segmented object.
+# rate_limit_after_segment = 10
+#
+# Once segment rate-limiting kicks in for an object, limit segments served
+# to N per second. 0 means no rate-limiting.
+# rate_limit_segments_per_sec = 1
+#
+# Time limit on GET requests (seconds)
+# max_get_time = 86400
 
 [filter:account-quotas]
 use = egg:swift#account_quotas
+
+[filter:gatekeeper]
+use = egg:swift#gatekeeper
+# You can override the default log routing for this filter here:
+# set log_name = gatekeeper
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = false
+# set log_address = /dev/log
+
+[filter:container_sync]
+use = egg:swift#container_sync
+# Set this to false if you want to disallow any full url values to be set for
+# any new X-Container-Sync-To headers. This will keep any new full urls from
+# coming in, but won't change any existing values already in the cluster.
+# Updating those will have to be done manually, as knowing what the true realm
+# endpoint should be cannot always be guessed.
+# allow_full_urls = true
+# Set this to specify this clusters //realm/cluster as "current" in /info
+# current = //REALM/CLUSTER
+
+# Note: Put it at the beginning of the pipleline to profile all middleware. But
+# it is safer to put this after catch_errors, gatekeeper and healthcheck.
+[filter:xprofile]
+use = egg:swift#xprofile
+# This option enable you to switch profilers which should inherit from python
+# standard profiler. Currently the supported value can be 'cProfile',
+# 'eventlet.green.profile' etc.
+# profile_module = eventlet.green.profile
+#
+# This prefix will be used to combine process ID and timestamp to name the
+# profile data file.  Make sure the executing user has permission to write
+# into this path (missing path segments will be created, if necessary).
+# If you enable profiling in more than one type of daemon, you must override
+# it with an unique value like: /var/log/swift/profile/proxy.profile
+# log_filename_prefix = /tmp/log/swift/profile/default.profile
+#
+# the profile data will be dumped to local disk based on above naming rule
+# in this interval.
+# dump_interval = 5.0
+#
+# Be careful, this option will enable profiler to dump data into the file with
+# time stamp which means there will be lots of files piled up in the directory.
+# dump_timestamp = false
+#
+# This is the path of the URL to access the mini web UI.
+# path = /__profile__
+#
+# Clear the data when the wsgi server shutdown.
+# flush_at_shutdown = false
+#
+# unwind the iterator of applications
+# unwind = false
--- a/components/openstack/swift/files/swift-account-auditor.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-account-auditor.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-account-reaper.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-account-reaper.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-account-replicator.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-account-replicator.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-account-server.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-account-server.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/application/database/memcached:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='multiuser' grouping='require_all' restart_on='error'
       type='service'>
       <service_fmri value='svc:/milestone/multi-user:default' />
--- a/components/openstack/swift/files/swift-container-auditor.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-container-auditor.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-reconciler.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+
+ 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.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-reconciler">
+
+  <service version="1" type="service"
+    name="application/openstack/swift/swift-container-reconciler">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </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/swift-container-reconciler %m">
+      <method_context>
+        <method_credential user='swift' group='swift'
+          privileges='basic,{zone}:/system/volatile/swift' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":kill"/>
+
+    <instance name='default' enabled='false'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.swift' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.swift' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Swift Container Reconciler Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+	  The Swift container reconciler ensures that identically-named
+	  containers share the same storage policy.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/swift/files/swift-container-replicator.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-container-replicator.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-container-server.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-container-server.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -35,6 +35,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-container-sync.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-container-sync.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-container-updater.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-container-updater.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-object-auditor.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-object-auditor.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-object-expirer.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-object-expirer.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-object-replicator.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-object-replicator.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-object-server.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-object-server.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -35,6 +35,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-object-updater.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-object-updater.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-proxy-server.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-proxy-server.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -35,6 +35,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-replicator-rsync.xml	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-replicator-rsync.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
 <!--
- Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 
  Licensed under the Apache License, Version 2.0 (the "License"); you may
  not use this file except in compliance with the License. You may obtain
@@ -30,6 +30,11 @@
       <service_fmri value='svc:/milestone/multi-user:default' />
     </dependency>
 
+    <dependency name='upgrade' grouping='require_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/swift/swift-upgrade' />
+    </dependency>
+
     <dependency name='ntp' grouping='optional_all' restart_on='none'
       type='service'>
       <service_fmri value='svc:/network/ntp'/>
--- a/components/openstack/swift/files/swift-smf-method	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift-smf-method	Mon Apr 20 12:35:51 2015 -0700
@@ -23,6 +23,7 @@
 rings = {
     "account-reaper": ["account", "container", "object"],
     "account-replicator": ["account"],
+    "container-reconciler": ["container"],
     "container-replicator": ["container"],
     "container-sync": ["container", "object"],
     "container-updater": ["account"],
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-upgrade	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,149 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from ConfigParser import NoOptionError
+from datetime import datetime
+import errno
+import glob
+import os
+import shutil
+from subprocess import check_call, Popen, PIPE
+import sys
+import traceback
+
+import iniparse
+import smf_include
+
+
+def modify_conf(old_file):
+    """ Copy over all uncommented options from the old configuration file.
+    """
+
+    new_file = old_file + '.new'
+
+    # open the previous version
+    old = iniparse.ConfigParser()
+    old.readfp(open(old_file))
+
+    # open the new version
+    new = iniparse.ConfigParser()
+    try:
+        new.readfp(open(new_file))
+    except IOError as err:
+        if err.errno == errno.ENOENT:
+            # The upgrade did not deliver a .new file so, return
+            print "%s not found - continuing with %s" % (new_file, old_file)
+            return
+        else:
+            raise
+    print "\nupdating %s" % old_file
+
+    # walk every single section for uncommented options
+    default_items = set(old.items('DEFAULT'))
+    for section in old.sections() + ['DEFAULT']:
+
+        # DEFAULT items show up in every section so remove them
+        if section != 'DEFAULT':
+            section_items = set(old.items(section)) - default_items
+        else:
+            section_items = default_items
+
+        for key, value in section_items:
+            # keep a copy of the old value
+            oldvalue = value
+
+            if not new.has_section(section):
+                if section != 'DEFAULT':
+                    new.add_section(section)
+
+            # print to the log when a value for the same section.key is
+            # changing to a new value
+            try:
+                new_value = new.get(section, key)
+                if new_value != value and '%SERVICE' not in new_value:
+                    print "Changing [%s] %s:\n- %s\n+ %s" % \
+                        (section, key, oldvalue, new_value)
+                    print
+            except NoOptionError:
+                # the new configuration file does not have this option set so
+                # just continue
+                pass
+
+            # Only copy the old value to the new conf file if the entry doesn't
+            # exist or if it contains '%SERVICE'
+            if not new.has_option(section, key) or \
+               '%SERVICE' in new.get(section, key):
+                new.set(section, key, value)
+
+    # copy the old conf file to a backup
+    today = datetime.now().strftime("%Y%m%d%H%M%S")
+    shutil.copy2(old_file, old_file + '.' + today)
+
+    # copy the new conf file in place
+    with open(old_file, 'wb+') as fh:
+        new.write(fh)
+
+
+def start():
+    # pull out the current version of config/upgrade-id
+    p = Popen(['/usr/bin/svcprop', '-p', 'config/upgrade-id',
+               os.environ['SMF_FMRI']], stdout=PIPE, stderr=PIPE)
+    curr_ver, _err = p.communicate()
+    curr_ver = curr_ver.strip()
+
+    # extract the openstack-upgrade-id from the pkg
+    p = Popen(['/usr/bin/pkg', 'contents', '-H', '-t', 'set', '-o', 'value',
+               '-a', 'name=openstack.upgrade-id',
+               'pkg:/cloud/openstack/swift'], stdout=PIPE, stderr=PIPE)
+    pkg_ver, _err = p.communicate()
+    pkg_ver = pkg_ver.strip()
+
+    if curr_ver == pkg_ver:
+        # No need to upgrade
+        sys.exit(smf_include.SMF_EXIT_OK)
+
+    # look for any .new files
+    if glob.glob('/etc/swift/*.new'):
+        # the versions are different, so perform an upgrade
+        # modify the configuration files
+        modify_conf('/etc/swift/account-server.conf')
+        modify_conf('/etc/swift/container-reconciler.conf')
+        modify_conf('/etc/swift/container-server.conf')
+        modify_conf('/etc/swift/container-sync-realms.conf')
+        modify_conf('/etc/swift/dispersion.conf')
+        modify_conf('/etc/swift/memcache.conf')
+        modify_conf('/etc/swift/object-expirer.conf')
+        modify_conf('/etc/swift/object-server.conf')
+        modify_conf('/etc/swift/proxy-server.conf')
+        modify_conf('/etc/swift/swift.conf')
+
+    # update the current version
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'setprop',
+               'config/upgrade-id', '=', pkg_ver])
+    check_call(['/usr/sbin/svccfg', '-s', os.environ['SMF_FMRI'], 'refresh'])
+
+    sys.exit(smf_include.SMF_EXIT_OK)
+
+
+if __name__ == '__main__':
+    os.putenv('LC_ALL', 'C')
+    try:
+        smf_include.smf_main()
+    except Exception as err:
+        print 'Unknown error:  %s' % err
+        print
+        traceback.print_exc(file=sys.stdout)
+        sys.exit(smf_include.SMF_EXIT_ERR_FATAL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-upgrade.xml	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift">
+
+  <service version="1" type="service"
+    name="application/openstack/swift/swift-upgrade">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="300" type="method" name="start"
+      exec="/lib/svc/method/swift-upgrade %m">
+      <method_context>
+        <method_credential user='swift' group='swift' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.swift' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.swift' />
+      </property_group>
+
+      <property_group name="config" type="application">
+        <propval type="astring" name="upgrade-id" value="" />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.swift' />
+      </property_group>
+
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Swift Upgrade Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          swift-upgrade is a transient service to upgrade the Swift
+          configuration across major release version changes.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- a/components/openstack/swift/files/swift.exec_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift.exec_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -2,10 +2,13 @@
 /usr/bin/swift-account-audit:uid=swift;gid=swift
 
 OpenStack Object Storage Management:solaris:cmd:RO::\
-/usr/bin/swift-bench-client:uid=swift;gid=swift
+/usr/bin/swift-account-info:uid=swift;gid=swift
 
 OpenStack Object Storage Management:solaris:cmd:RO::\
-/usr/bin/swift-bench:uid=swift;gid=swift
+/usr/bin/swift-config:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-container-info:uid=swift;gid=swift
 
 OpenStack Object Storage Management:solaris:cmd:RO::\
 /usr/bin/swift-dispersion-populate:uid=swift;gid=swift
@@ -26,6 +29,9 @@
 /usr/bin/swift-recon:uid=swift;gid=swift
 
 OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-reconciler-enqueue:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
 /usr/bin/swift-ring-builder:uid=swift;gid=swift
 
 OpenStack Object Storage Management:solaris:cmd:RO::\
--- a/components/openstack/swift/files/swift.prof_attr	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/files/swift.prof_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -1,16 +1,7 @@
 OpenStack Object Storage Management:RO::\
 Manage OpenStack Swift:\
-auths=solaris.admin.edit/etc/swift/account-server.conf,\
-solaris.admin.edit/etc/swift/container-server.conf,\
-solaris.admin.edit/etc/swift/dispersion.conf,\
-solaris.admin.edit/etc/swift/memcache.conf,\
+auths=solaris.admin.edit/etc/swift/*.conf,\
 solaris.admin.edit/etc/swift/mime.types,\
-solaris.admin.edit/etc/swift/object-expirer.conf,\
-solaris.admin.edit/etc/swift/object-server.conf,\
-solaris.admin.edit/etc/swift/proxy-server.conf,\
-solaris.admin.edit/etc/swift/rsyncd.conf,\
-solaris.admin.edit/etc/swift/swift-bench.conf,\
-solaris.admin.edit/etc/swift/swift.conf,\
 solaris.smf.manage.swift,\
 solaris.smf.value.swift;\
 defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift.user_attr	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,1 @@
+swift::RO::profiles=OpenStack Object Storage Management
--- a/components/openstack/swift/patches/01-CVE-2014-0006.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-This proposed upstream patch addresses CVE-2014-0006 and is tracked
-under Launchpad bug 1265665. Although it's been addressed in 1.12.0,
-the patch below is still not yet released for 1.10.0.
-
-commit b2c61375b3255486adb2900922a894dc7dad3c6d
-Author: Samuel Merritt <[email protected]>
-Date:   Thu Jan 16 13:44:23 2014 +0100
-
-    Use constant time comparison in tempURL
-    
-    Use constant time comparison when evaluating tempURL to avoid timing
-    attacks (CVE-2014-0006). This is the havana backport of the master
-    patch.
-    
-    Fixes bug 1265665
-    
-    Change-Id: I11e4ad83cc4077e52adf54a0bd0f9749294b2a48
-
-diff --git a/swift/common/middleware/tempurl.py b/swift/common/middleware/tempurl.py
-index ffc1431..ae2f4a1 100644
---- a/swift/common/middleware/tempurl.py
-+++ b/swift/common/middleware/tempurl.py
-@@ -98,7 +98,7 @@ from urlparse import parse_qs
- 
- from swift.proxy.controllers.base import get_account_info
- from swift.common.swob import HeaderKeyDict
--from swift.common.utils import split_path
-+from swift.common.utils import split_path, streq_const_time
- 
- 
- #: Default headers to remove from incoming requests. Simply a whitespace
-@@ -267,17 +267,20 @@ class TempURL(object):
-         if not keys:
-             return self._invalid(env, start_response)
-         if env['REQUEST_METHOD'] == 'HEAD':
--            hmac_vals = self._get_hmacs(env, temp_url_expires, keys,
--                                        request_method='GET')
--            if temp_url_sig not in hmac_vals:
--                hmac_vals = self._get_hmacs(env, temp_url_expires, keys,
--                                            request_method='PUT')
--                if temp_url_sig not in hmac_vals:
--                    return self._invalid(env, start_response)
-+            hmac_vals = (self._get_hmacs(env, temp_url_expires, keys,
-+                                         request_method='GET') +
-+                         self._get_hmacs(env, temp_url_expires, keys,
-+                                         request_method='PUT'))
-         else:
-             hmac_vals = self._get_hmacs(env, temp_url_expires, keys)
--            if temp_url_sig not in hmac_vals:
--                return self._invalid(env, start_response)
-+
-+        # While it's true that any() will short-circuit, this doesn't affect
-+        # the timing-attack resistance since the only way this will
-+        # short-circuit is when a valid signature is passed in.
-+        is_valid_hmac = any(streq_const_time(temp_url_sig, h)
-+                            for h in hmac_vals)
-+        if not is_valid_hmac:
-+            return self._invalid(env, start_response)
-         self._clean_incoming_headers(env)
-         env['swift.authorize'] = lambda req: None
-         env['swift.authorize_override'] = True
--- a/components/openstack/swift/patches/02-requirements.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-In-house patch to remove unnecessary dependencies from Swift's
-requirements files. The specific reasons are as follows:
-
-greenlet	No longer applicable
-
---- swift-1.10.0/requirements.txt.orig	2013-10-17 07:07:33.000000000 -0700
-+++ swift-1.10.0/requirements.txt	2014-05-24 23:17:47.564223065 -0700
-@@ -1,7 +1,6 @@
- pbr>=0.5.21,<1.0
- dnspython>=1.9.4
- eventlet>=0.9.15
--greenlet>=0.3.1
- netifaces>=0.5
- pastedeploy>=1.3.3
- simplejson>=2.0.9
-
---- swift-1.10.0/swift.egg-info/requires.txt.orig	2013-10-17 07:08:06.000000000 -0700
-+++ swift-1.10.0/swift.egg-info/requires.txt	2014-05-24 23:17:53.923411767 -0700
-@@ -1,9 +1,8 @@
- pbr>=0.5.21,<1.0
- dnspython>=1.9.4
- eventlet>=0.9.15
--greenlet>=0.3.1
- netifaces>=0.5
- pastedeploy>=1.3.3
- simplejson>=2.0.9
- xattr>=0.4
--python-swiftclient
-\ No newline at end of file
-+python-swiftclient
--- a/components/openstack/swift/patches/CVE-2014-7960.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,971 +0,0 @@
-This is a backport to Havana of the Icehouse backport of the fix to bug 1365350,
-plus a fix to the testsuite to actually test the problem (bug 1381159).  Because
-Havana is out of support, it is not a candidate for upstream submission,
-though a re-work of the testsuite changes to trunk Swift is.
-
-================================================================================
-
-From 2c4622a28ea04e1c6b2382189b0a1f6cccdc9c0f Mon Sep 17 00:00:00 2001
-From: "Richard (Rick) Hawkins" <[email protected]>
-Date: Wed, 1 Oct 2014 09:37:47 -0400
-Subject: [PATCH] Fix metadata overall limits bug
-
-Currently metadata limits are checked on a per request basis. If
-multiple requests are sent within the per request limits, it is
-possible to exceed the overall limits.  This patch adds an overall
-metadata check to ensure that multiple requests to add metadata to
-an account/container will check overall limits before adding
-the additional metadata.
-
-This is a backport to the stable/icehouse branch for commit SHA
-5b2c27a5874c2b5b0a333e4955b03544f6a8119f.
-
-Closes-Bug: 1365350
-
-Conflicts:
-	swift/common/db.py
-	swift/container/server.py
-
-Change-Id: Id9fca209c9c1216f1949de7108bbe332808f1045
----
- swift/account/server.py           |    4 +-
- swift/common/constraints.py       |    5 ++-
- swift/common/db.py                |   34 +++++++++++++-
- swift/container/server.py         |    4 +-
- test/functional/test_account.py   |   66 +++++++++++++++++++++++++++
- test/functional/test_container.py |   20 +++++++++
- test/unit/common/test_db.py       |   90 ++++++++++++++++++++++++++++++++++++-
- 7 files changed, 216 insertions(+), 7 deletions(-)
-
---- a/swift/account/server.py
-+++ b/swift/account/server.py
-@@ -156,7 +156,7 @@ class AccountController(object):
-                             for key, value in req.headers.iteritems()
-                             if key.lower().startswith('x-account-meta-'))
-             if metadata:
--                broker.update_metadata(metadata)
-+                broker.update_metadata(metadata, validate_metadata=True)
-             if created:
-                 return HTTPCreated(request=req)
-             else:
-@@ -262,7 +262,7 @@ class AccountController(object):
-                         for key, value in req.headers.iteritems()
-                         if key.lower().startswith('x-account-meta-'))
-         if metadata:
--            broker.update_metadata(metadata)
-+            broker.update_metadata(metadata, validate_metadata=True)
-         return HTTPNoContent(request=req)
- 
-     def __call__(self, env, start_response):
---- a/swift/common/constraints.py
-+++ b/swift/common/constraints.py
-@@ -68,7 +68,10 @@ FORMAT2CONTENT_TYPE = {'plain': 'text/pl
- 
- def check_metadata(req, target_type):
-     """
--    Check metadata sent in the request headers.
-+    Check metadata sent in the request headers.  This should only check
-+    that the metadata in the request given is valid.  Checks against
-+    account/container overall metadata should be forwarded on to its
-+    respective server to be checked.
- 
-     :param req: request object
-     :param target_type: str: one of: object, container, or account: indicates
---- a/swift/common/db.py
-+++ b/swift/common/db.py
-@@ -32,7 +32,9 @@ import sqlite3
- 
- from swift.common.utils import json, normalize_timestamp, renamer, \
-     mkdirs, lock_parent_directory, fallocate
-+from swift.common.constraints import MAX_META_COUNT, MAX_META_OVERALL_SIZE
- from swift.common.exceptions import LockTimeout
-+from swift.common.swob import HTTPBadRequest
- 
- 
- #: Whether calls will be made to preallocate disk space for database files.
-@@ -615,7 +617,35 @@ class DatabaseBroker(object):
-             metadata = {}
-         return metadata
- 
--    def update_metadata(self, metadata_updates):
-+    @staticmethod
-+    def validate_metadata(metadata):
-+        """
-+        Validates that metadata_falls within acceptable limits.
-+
-+        :param metadata: to be validated
-+        :raises: HTTPBadRequest if MAX_META_COUNT or MAX_META_OVERALL_SIZE
-+                 is exceeded
-+        """
-+        meta_count = 0
-+        meta_size = 0
-+        for key, (value, timestamp) in metadata.iteritems():
-+            key = key.lower()
-+            if value != '' and (key.startswith('x-account-meta') or
-+                                key.startswith('x-container-meta')):
-+                prefix = 'x-account-meta-'
-+                if key.startswith('x-container-meta-'):
-+                    prefix = 'x-container-meta-'
-+                key = key[len(prefix):]
-+                meta_count = meta_count + 1
-+                meta_size = meta_size + len(key) + len(value)
-+        if meta_count > MAX_META_COUNT:
-+            raise HTTPBadRequest('Too many metadata items; max %d'
-+                                 % MAX_META_COUNT)
-+        if meta_size > MAX_META_OVERALL_SIZE:
-+            raise HTTPBadRequest('Total metadata too large; max %d'
-+                                 % MAX_META_OVERALL_SIZE)
-+
-+    def update_metadata(self, metadata_updates, validate_metadata=False):
-         """
-         Updates the metadata dict for the database. The metadata dict values
-         are tuples of (value, timestamp) where the timestamp indicates when
-@@ -648,6 +678,8 @@ class DatabaseBroker(object):
-                 value, timestamp = value_timestamp
-                 if key not in md or timestamp > md[key][1]:
-                     md[key] = value_timestamp
-+            if validate_metadata:
-+                DatabaseBroker.validate_metadata(md)
-             conn.execute('UPDATE %s_stat SET metadata = ?' % self.db_type,
-                          (json.dumps(md),))
-             conn.commit()
---- a/swift/container/server.py
-+++ b/swift/container/server.py
-@@ -275,7 +275,7 @@ class ContainerController(object):
-                             metadata['X-Container-Sync-To'][0] != \
-                             broker.metadata['X-Container-Sync-To'][0]:
-                         broker.set_x_container_sync_points(-1, -1)
--                broker.update_metadata(metadata)
-+                broker.update_metadata(metadata, validate_metadata=True)
-             resp = self.account_update(req, account, container, broker)
-             if resp:
-                 return resp
-@@ -461,7 +461,7 @@ class ContainerController(object):
-                         metadata['X-Container-Sync-To'][0] != \
-                         broker.metadata['X-Container-Sync-To'][0]:
-                     broker.set_x_container_sync_points(-1, -1)
--            broker.update_metadata(metadata)
-+            broker.update_metadata(metadata, validate_metadata=True)
-         return HTTPNoContent(request=req)
- 
-     def __call__(self, env, start_response):
---- a/test/functional/swift_testing.py
-+++ b/test/functional/swift_testing.py
-@@ -0,0 +1,231 @@
-+# Copyright (c) 2010-2012 OpenStack Foundation
-+#
-+# 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.
-+
-+from httplib import HTTPException
-+import os
-+import socket
-+import sys
-+from time import sleep
-+from urlparse import urlparse
-+import functools
-+from nose import SkipTest
-+
-+from test import get_config
-+
-+from swiftclient import get_auth, http_connection
-+from test.functional.swift_test_client import Connection
-+
-+conf = get_config('func_test')
-+web_front_end = conf.get('web_front_end', 'integral')
-+normalized_urls = conf.get('normalized_urls', False)
-+
-+# If no conf was read, we will fall back to old school env vars
-+swift_test_auth = os.environ.get('SWIFT_TEST_AUTH')
-+swift_test_user = [os.environ.get('SWIFT_TEST_USER'), None, None]
-+swift_test_key = [os.environ.get('SWIFT_TEST_KEY'), None, None]
-+swift_test_tenant = ['', '', '']
-+swift_test_perm = ['', '', '']
-+
-+if conf:
-+    swift_test_auth_version = str(conf.get('auth_version', '1'))
-+
-+    swift_test_auth = 'http'
-+    if conf.get('auth_ssl', 'no').lower() in ('yes', 'true', 'on', '1'):
-+        swift_test_auth = 'https'
-+    if 'auth_prefix' not in conf:
-+        conf['auth_prefix'] = '/'
-+    try:
-+        suffix = '://%(auth_host)s:%(auth_port)s%(auth_prefix)s' % conf
-+        swift_test_auth += suffix
-+    except KeyError:
-+        pass  # skip
-+
-+    if swift_test_auth_version == "1":
-+        swift_test_auth += 'v1.0'
-+
-+        if 'account' in conf:
-+            swift_test_user[0] = '%(account)s:%(username)s' % conf
-+        else:
-+            swift_test_user[0] = '%(username)s' % conf
-+        swift_test_key[0] = conf['password']
-+        try:
-+            swift_test_user[1] = '%s%s' % (
-+                '%s:' % conf['account2'] if 'account2' in conf else '',
-+                conf['username2'])
-+            swift_test_key[1] = conf['password2']
-+        except KeyError as err:
-+            pass  # old conf, no second account tests can be run
-+        try:
-+            swift_test_user[2] = '%s%s' % ('%s:' % conf['account'] if 'account'
-+                                           in conf else '', conf['username3'])
-+            swift_test_key[2] = conf['password3']
-+        except KeyError as err:
-+            pass  # old conf, no third account tests can be run
-+
-+        for _ in range(3):
-+            swift_test_perm[_] = swift_test_user[_]
-+
-+    else:
-+        swift_test_user[0] = conf['username']
-+        swift_test_tenant[0] = conf['account']
-+        swift_test_key[0] = conf['password']
-+        swift_test_user[1] = conf['username2']
-+        swift_test_tenant[1] = conf['account2']
-+        swift_test_key[1] = conf['password2']
-+        swift_test_user[2] = conf['username3']
-+        swift_test_tenant[2] = conf['account']
-+        swift_test_key[2] = conf['password3']
-+
-+        for _ in range(3):
-+            swift_test_perm[_] = swift_test_tenant[_] + ':' \
-+                + swift_test_user[_]
-+
-+skip = not all([swift_test_auth, swift_test_user[0], swift_test_key[0]])
-+if skip:
-+    print >>sys.stderr, 'SKIPPING FUNCTIONAL TESTS DUE TO NO CONFIG'
-+
-+skip2 = not all([not skip, swift_test_user[1], swift_test_key[1]])
-+if not skip and skip2:
-+    print >>sys.stderr, \
-+        'SKIPPING SECOND ACCOUNT FUNCTIONAL TESTS DUE TO NO CONFIG FOR THEM'
-+
-+skip3 = not all([not skip, swift_test_user[2], swift_test_key[2]])
-+if not skip and skip3:
-+    print >>sys.stderr, \
-+        'SKIPPING THIRD ACCOUNT FUNCTIONAL TESTS DUE TO NO CONFIG FOR THEM'
-+
-+
-+class AuthError(Exception):
-+    pass
-+
-+
-+class InternalServerError(Exception):
-+    pass
-+
-+
-+url = [None, None, None]
-+token = [None, None, None]
-+parsed = [None, None, None]
-+conn = [None, None, None]
-+
-+
-+def retry(func, *args, **kwargs):
-+    """
-+    You can use the kwargs to override:
-+      'retries' (default: 5)
-+      'use_account' (default: 1) - which user's token to pass
-+      'url_account' (default: matches 'use_account') - which user's storage URL
-+      'resource' (default: url[url_account] - URL to connect to; retry()
-+          will interpolate the variable :storage_url: if present
-+    """
-+    global url, token, parsed, conn
-+    retries = kwargs.get('retries', 5)
-+    attempts, backoff = 0, 1
-+
-+    # use account #1 by default; turn user's 1-indexed account into 0-indexed
-+    use_account = kwargs.pop('use_account', 1) - 1
-+
-+    # access our own account by default
-+    url_account = kwargs.pop('url_account', use_account + 1) - 1
-+
-+    while attempts <= retries:
-+        attempts += 1
-+        try:
-+            if not url[use_account] or not token[use_account]:
-+                url[use_account], token[use_account] = \
-+                    get_auth(swift_test_auth, swift_test_user[use_account],
-+                             swift_test_key[use_account],
-+                             snet=False,
-+                             tenant_name=swift_test_tenant[use_account],
-+                             auth_version=swift_test_auth_version,
-+                             os_options={})
-+                parsed[use_account] = conn[use_account] = None
-+            if not parsed[use_account] or not conn[use_account]:
-+                parsed[use_account], conn[use_account] = \
-+                    http_connection(url[use_account])
-+
-+            # default resource is the account url[url_account]
-+            resource = kwargs.pop('resource', '%(storage_url)s')
-+            template_vars = {'storage_url': url[url_account]}
-+            parsed_result = urlparse(resource % template_vars)
-+            return func(url[url_account], token[use_account],
-+                        parsed_result, conn[url_account],
-+                        *args, **kwargs)
-+        except (socket.error, HTTPException):
-+            if attempts > retries:
-+                raise
-+            parsed[use_account] = conn[use_account] = None
-+        except AuthError:
-+            url[use_account] = token[use_account] = None
-+            continue
-+        except InternalServerError:
-+            pass
-+        if attempts <= retries:
-+            sleep(backoff)
-+            backoff *= 2
-+    raise Exception('No result after %s retries.' % retries)
-+
-+
-+def check_response(conn):
-+    resp = conn.getresponse()
-+    if resp.status == 401:
-+        resp.read()
-+        raise AuthError()
-+    elif resp.status // 100 == 5:
-+        resp.read()
-+        raise InternalServerError()
-+    return resp
-+
-+cluster_info = {}
-+
-+
-+def get_cluster_info():
-+    conn = Connection(conf)
-+    conn.authenticate()
-+    global cluster_info
-+    cluster_info = conn.cluster_info()
-+
-+
-+def reset_acl():
-+    def post(url, token, parsed, conn):
-+        conn.request('POST', parsed.path, '', {
-+            'X-Auth-Token': token,
-+            'X-Account-Access-Control': '{}'
-+        })
-+        return check_response(conn)
-+    resp = retry(post, use_account=1)
-+    resp.read()
-+
-+
-+def requires_acls(f):
-+    @functools.wraps(f)
-+    def wrapper(*args, **kwargs):
-+        if skip:
-+            raise SkipTest
-+        if not cluster_info:
-+            get_cluster_info()
-+        # Determine whether this cluster has account ACLs; if not, skip test
-+        if not cluster_info.get('tempauth', {}).get('account_acls'):
-+            raise SkipTest
-+        if 'keystoneauth' in cluster_info:
-+            # remove when keystoneauth supports account acls
-+            raise SkipTest
-+        reset_acl()
-+        try:
-+            rv = f(*args, **kwargs)
-+        finally:
-+            reset_acl()
-+        return rv
-+    return wrapper
---- a/test/functional/tests.py
-+++ b/test/functional/tests.py
-@@ -1624,5 +1624,466 @@ class TestFileComparison(Base):
- class TestFileComparisonUTF8(Base2, TestFileComparison):
-     set_up = False
- 
-+import json
-+from uuid import uuid4
-+from swift_testing import (check_response, retry, skip,
-+                           web_front_end, requires_acls)
-+import swift_testing
-+
-+class TestCVE20147960Container(unittest.TestCase):
-+
-+    def setUp(self):
-+        if skip:
-+            raise SkipTest
-+        self.name = uuid4().hex
-+        # this container isn't created by default, but will be cleaned up
-+        self.container = uuid4().hex
-+
-+        def put(url, token, parsed, conn):
-+            conn.request('PUT', parsed.path + '/' + self.name, '',
-+                         {'X-Auth-Token': token})
-+            return check_response(conn)
-+
-+        resp = retry(put)
-+        resp.read()
-+        self.assertEqual(resp.status, 201)
-+
-+        self.max_meta_count = load_constraint('max_meta_count')
-+        self.max_meta_name_length = load_constraint('max_meta_name_length')
-+        self.max_meta_overall_size = load_constraint('max_meta_overall_size')
-+        self.max_meta_value_length = load_constraint('max_meta_value_length')
-+
-+    def tearDown(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def get(url, token, parsed, conn, container):
-+            conn.request(
-+                'GET', parsed.path + '/' + container + '?format=json', '',
-+                {'X-Auth-Token': token})
-+            return check_response(conn)
-+
-+        def delete(url, token, parsed, conn, container, obj):
-+            conn.request(
-+                'DELETE', '/'.join([parsed.path, container, obj['name']]), '',
-+                {'X-Auth-Token': token})
-+            return check_response(conn)
-+
-+        for container in (self.name, self.container):
-+            while True:
-+                resp = retry(get, container)
-+                body = resp.read()
-+                if resp.status == 404:
-+                    break
-+                self.assert_(resp.status // 100 == 2, resp.status)
-+                objs = json.loads(body)
-+                if not objs:
-+                    break
-+                for obj in objs:
-+                    resp = retry(delete, container, obj)
-+                    resp.read()
-+                    self.assertEqual(resp.status, 204)
-+
-+        def delete(url, token, parsed, conn, container):
-+            conn.request('DELETE', parsed.path + '/' + container, '',
-+                         {'X-Auth-Token': token})
-+            return check_response(conn)
-+
-+        resp = retry(delete, self.name)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+        # container may have not been created
-+        resp = retry(delete, self.container)
-+        resp.read()
-+        self.assert_(resp.status in (204, 404))
-+
-+    def test_POST_bad_metadata(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        resp = retry(
-+            post,
-+            {'X-Container-Meta-' + ('k' * self.max_meta_name_length): 'v'})
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+        resp = retry(
-+            post,
-+            {'X-Container-Meta-' + (
-+                'k' * (self.max_meta_name_length + 1)): 'v'})
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+        resp = retry(
-+            post,
-+            {'X-Container-Meta-Too-Long': 'k' * self.max_meta_value_length})
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+        resp = retry(
-+            post,
-+            {'X-Container-Meta-Too-Long': 'k' * (
-+                self.max_meta_value_length + 1)})
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_POST_maxcount_metadata(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        for x in xrange(self.max_meta_count):
-+            headers['X-Container-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+    def test_POST_maxcount_metadata_over_one(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        for x in xrange(self.max_meta_count + 1):
-+            headers['X-Container-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_POST_maxcount_metadata_over_two(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        for x in xrange(self.max_meta_count - 1):
-+            headers['X-Container-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+        headers = {}
-+        for x in xrange(self.max_meta_count - 1, self.max_meta_count + 1):
-+            headers['X-Container-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_POST_maxsize_metadata(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        header_value = 'k' * self.max_meta_value_length
-+        size = 0
-+        x = 0
-+        while size < (self.max_meta_overall_size - 4
-+                      - self.max_meta_value_length):
-+            size += 4 + self.max_meta_value_length
-+            headers['X-Container-Meta-%04d' % x] = header_value
-+            x += 1
-+        if self.max_meta_overall_size - size > 1:
-+            headers['X-Container-Meta-k'] = \
-+                'v' * (self.max_meta_overall_size - size - 1)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+    def test_POST_maxsize_metadata_over_one(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        header_value = 'k' * self.max_meta_value_length
-+        size = 0
-+        x = 0
-+        while size < (self.max_meta_overall_size - 4
-+                      - self.max_meta_value_length):
-+            size += 4 + self.max_meta_value_length
-+            headers['X-Container-Meta-%04d' % x] = header_value
-+            x += 1
-+        if self.max_meta_overall_size >= size:
-+            headers['X-Container-Meta-k'] = \
-+                'v' * (self.max_meta_overall_size - size)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_POST_maxsize_metadata_over_two(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path + '/' + self.name, '', headers)
-+            return check_response(conn)
-+
-+        headers = {}
-+        header_value = 'k' * self.max_meta_value_length
-+        size = 0
-+        x = 0
-+        while size < (self.max_meta_overall_size - 4
-+                      - self.max_meta_value_length):
-+            size += 4 + self.max_meta_value_length
-+            headers['X-Container-Meta-%04d' % x] = header_value
-+            x += 1
-+        if self.max_meta_overall_size - size > 1:
-+            headers['X-Container-Meta-k'] = \
-+                'v' * (self.max_meta_overall_size - size - 1)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+        headers = {}
-+        headers['X-Container-Meta-k2'] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+
-+class TestCVE20147960Account(unittest.TestCase):
-+
-+    def setUp(self):
-+        self.max_meta_count = load_constraint('max_meta_count')
-+        self.max_meta_name_length = load_constraint('max_meta_name_length')
-+        self.max_meta_overall_size = load_constraint('max_meta_overall_size')
-+        self.max_meta_value_length = load_constraint('max_meta_value_length')
-+
-+        def head(url, token, parsed, conn):
-+            conn.request('HEAD', parsed.path, '', {'X-Auth-Token': token})
-+            return check_response(conn)
-+        resp = retry(head)
-+        self.existing_metadata = set([
-+            k for k, v in resp.getheaders() if
-+            k.lower().startswith('x-account-meta')])
-+
-+    def tearDown(self):
-+        def head(url, token, parsed, conn):
-+            conn.request('HEAD', parsed.path, '', {'X-Auth-Token': token})
-+            return check_response(conn)
-+        resp = retry(head)
-+        resp.read()
-+        new_metadata = set(
-+            [k for k, v in resp.getheaders() if
-+             k.lower().startswith('x-account-meta')])
-+
-+        def clear_meta(url, token, parsed, conn, remove_metadata_keys):
-+            headers = {'X-Auth-Token': token}
-+            headers.update((k, '') for k in remove_metadata_keys)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+        extra_metadata = list(self.existing_metadata ^ new_metadata)
-+        for i in range(0, len(extra_metadata), 90):
-+            batch = extra_metadata[i:i + 90]
-+            resp = retry(clear_meta, batch)
-+            resp.read()
-+            self.assertEqual(resp.status // 100, 2)
-+
-+    def test_maxcount_metadata(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        for x in xrange(MAX_META_COUNT):
-+            headers['X-Account-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+    def test_maxcount_metadata_over_one(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        for x in xrange(MAX_META_COUNT + 1):
-+            headers['X-Account-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_maxcount_metadata_over_two(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        for x in xrange(MAX_META_COUNT - 1):
-+            headers['X-Account-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+
-+        headers = {}
-+        for x in xrange(MAX_META_COUNT - 1, MAX_META_COUNT + 1):
-+            headers['X-Account-Meta-%d' % x] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_maxsize_metadata(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        header_value = 'k' * MAX_META_VALUE_LENGTH
-+        size = 0
-+        x = 0
-+        while size < MAX_META_OVERALL_SIZE - 4 - MAX_META_VALUE_LENGTH:
-+            size += 4 + MAX_META_VALUE_LENGTH
-+            headers['X-Account-Meta-%04d' % x] = header_value
-+            x += 1
-+        if MAX_META_OVERALL_SIZE - size > 1:
-+            headers['X-Account-Meta-k'] = \
-+                'v' * (MAX_META_OVERALL_SIZE - size - 1)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+        headers['X-Account-Meta-k'] = \
-+            'v' * (MAX_META_OVERALL_SIZE - size)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_maxsize_metadata_over_one(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        header_value = 'k' * MAX_META_VALUE_LENGTH
-+        size = 0
-+        x = 0
-+        while size < MAX_META_OVERALL_SIZE - 4 - MAX_META_VALUE_LENGTH:
-+            size += 4 + MAX_META_VALUE_LENGTH
-+            headers['X-Account-Meta-%04d' % x] = header_value
-+            x += 1
-+        if MAX_META_OVERALL_SIZE >= size:
-+            headers['X-Account-Meta-k'] = \
-+                'v' * (MAX_META_OVERALL_SIZE - size)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
-+    def test_maxsize_metadata_over_two(self):
-+        if skip:
-+            raise SkipTest
-+
-+        def post(url, token, parsed, conn, extra_headers):
-+            headers = {'X-Auth-Token': token}
-+            headers.update(extra_headers)
-+            conn.request('POST', parsed.path, '', headers)
-+            return check_response(conn)
-+
-+        # TODO: Find the test that adds these and remove them.
-+        headers = {'x-remove-account-meta-temp-url-key': 'remove',
-+                   'x-remove-account-meta-temp-url-key-2': 'remove'}
-+        resp = retry(post, headers)
-+
-+        headers = {}
-+        header_value = 'k' * MAX_META_VALUE_LENGTH
-+        size = 0
-+        x = 0
-+        while size < MAX_META_OVERALL_SIZE - 4 - MAX_META_VALUE_LENGTH:
-+            size += 4 + MAX_META_VALUE_LENGTH
-+            headers['X-Account-Meta-%04d' % x] = header_value
-+            x += 1
-+        if MAX_META_OVERALL_SIZE - size > 1:
-+            headers['X-Account-Meta-k'] = \
-+                'v' * (MAX_META_OVERALL_SIZE - size - 1)
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 204)
-+        headers = {}
-+        headers['X-Account-Meta-k2'] = 'v'
-+        resp = retry(post, headers)
-+        resp.read()
-+        self.assertEqual(resp.status, 400)
-+
- if __name__ == '__main__':
-     unittest.main()
---- a/test/unit/common/test_db.py
-+++ b/test/unit/common/test_db.py
-@@ -26,10 +26,13 @@ import sqlite3
- from mock import patch
- 
- import swift.common.db
-+from swift.common.constraints import \
-+    MAX_META_VALUE_LENGTH, MAX_META_COUNT, MAX_META_OVERALL_SIZE
- from swift.common.db import chexor, dict_factory, get_db_connection, \
-     DatabaseBroker, DatabaseConnectionError, DatabaseAlreadyExists
- from swift.common.utils import normalize_timestamp
- from swift.common.exceptions import LockTimeout
-+from swift.common.swob import HTTPException
- 
- 
- class TestDatabaseConnectionError(unittest.TestCase):
-@@ -181,7 +184,7 @@ class TestDatabaseBroker(unittest.TestCa
-             conn.execute('CREATE TABLE test (one TEXT)')
-             conn.execute('CREATE TABLE test_stat (id TEXT)')
-             conn.execute('INSERT INTO test_stat (id) VALUES (?)',
--                        (str(uuid4),))
-+                         (str(uuid4),))
-             conn.execute('INSERT INTO test (one) VALUES ("1")')
-             conn.commit()
-         stub_called = [False]
-@@ -632,6 +635,91 @@ class TestDatabaseBroker(unittest.TestCa
-                           [first_value, first_timestamp])
-         self.assert_('Second' not in broker.metadata)
- 
-+    @patch.object(DatabaseBroker, 'validate_metadata')
-+    def test_validate_metadata_is_called_from_update_metadata(self, mock):
-+        broker = self.get_replication_info_tester(metadata=True)
-+        first_timestamp = normalize_timestamp(1)
-+        first_value = '1'
-+        metadata = {'First': [first_value, first_timestamp]}
-+        broker.update_metadata(metadata, validate_metadata=True)
-+        self.assertTrue(mock.called)
-+
-+    @patch.object(DatabaseBroker, 'validate_metadata')
-+    def test_validate_metadata_is_not_called_from_update_metadata(self, mock):
-+        broker = self.get_replication_info_tester(metadata=True)
-+        first_timestamp = normalize_timestamp(1)
-+        first_value = '1'
-+        metadata = {'First': [first_value, first_timestamp]}
-+        broker.update_metadata(metadata)
-+        self.assertFalse(mock.called)
-+
-+    def test_metadata_with_max_count(self):
-+        metadata = {}
-+        for c in xrange(MAX_META_COUNT):
-+            key = 'X-Account-Meta-F{0}'.format(c)
-+            metadata[key] = ('B', normalize_timestamp(1))
-+        key = 'X-Account-Meta-Foo'.format(c)
-+        metadata[key] = ('', normalize_timestamp(1))
-+        try:
-+            DatabaseBroker.validate_metadata(metadata)
-+        except HTTPException:
-+            self.fail('Unexpected HTTPException')
-+
-+    def test_metadata_raises_exception_over_max_count(self):
-+        metadata = {}
-+        for c in xrange(MAX_META_COUNT + 1):
-+            key = 'X-Account-Meta-F{0}'.format(c)
-+            metadata[key] = ('B', normalize_timestamp(1))
-+        message = ''
-+        try:
-+            DatabaseBroker.validate_metadata(metadata)
-+        except HTTPException as e:
-+            message = str(e)
-+        self.assertEqual(message, '400 Bad Request')
-+
-+    def test_metadata_with_max_overall_size(self):
-+        metadata = {}
-+        metadata_value = 'v' * MAX_META_VALUE_LENGTH
-+        size = 0
-+        x = 0
-+        while size < (MAX_META_OVERALL_SIZE - 4
-+                      - MAX_META_VALUE_LENGTH):
-+            size += 4 + MAX_META_VALUE_LENGTH
-+            metadata['X-Account-Meta-%04d' % x] = (metadata_value,
-+                                                   normalize_timestamp(1))
-+            x += 1
-+        if MAX_META_OVERALL_SIZE - size > 1:
-+            metadata['X-Account-Meta-k'] = (
-+                'v' * (MAX_META_OVERALL_SIZE - size - 1),
-+                normalize_timestamp(1))
-+        try:
-+            DatabaseBroker.validate_metadata(metadata)
-+        except HTTPException:
-+            self.fail('Unexpected HTTPException')
-+
-+    def test_metadata_raises_exception_over_max_overall_size(self):
-+        metadata = {}
-+        metadata_value = 'k' * MAX_META_VALUE_LENGTH
-+        size = 0
-+        x = 0
-+        while size < (MAX_META_OVERALL_SIZE - 4
-+                      - MAX_META_VALUE_LENGTH):
-+            size += 4 + MAX_META_VALUE_LENGTH
-+            metadata['X-Account-Meta-%04d' % x] = (metadata_value,
-+                                                   normalize_timestamp(1))
-+            x += 1
-+        if MAX_META_OVERALL_SIZE - size > 1:
-+            metadata['X-Account-Meta-k'] = (
-+                'v' * (MAX_META_OVERALL_SIZE - size - 1),
-+                normalize_timestamp(1))
-+        metadata['X-Account-Meta-k2'] = ('v', normalize_timestamp(1))
-+        message = ''
-+        try:
-+            DatabaseBroker.validate_metadata(metadata)
-+        except HTTPException as e:
-+            message = str(e)
-+        self.assertEqual(message, '400 Bad Request')
-+
- 
- if __name__ == '__main__':
-     unittest.main()
--- a/components/openstack/swift/patches/manager.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/patches/manager.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -5,10 +5,9 @@
 
 This patch is not suitable for pushing upstream.
 
-diff --git a/swift/common/manager.py b/swift/common/manager.py
---- a/swift/common/manager.py
-+++ b/swift/common/manager.py
-@@ -534,7 +534,8 @@ class Server():
+--- swift-2.2.0/swift/common/manager.py.~1~	2014-10-16 05:05:21.000000000 -0700
++++ swift-2.2.0/swift/common/manager.py	2014-12-13 21:29:46.790264480 -0800
+@@ -576,7 +576,8 @@ class Server(object):
                  re_out = subprocess.PIPE
              else:
                  re_out = open(os.devnull, 'w+b')
@@ -18,11 +17,10 @@
          pid_file = self.get_pid_file_name(conf_file)
          write_file(pid_file, proc.pid)
          self.procs.append(proc)
-diff --git a/test/unit/common/test_manager.py b/test/unit/common/test_manager.py
---- a/test/unit/common/test_manager.py
-+++ b/test/unit/common/test_manager.py
-@@ -858,7 +858,7 @@ class TestServer(unittest.TestCase):
-         class MockProc():
+--- swift-2.2.0/test/unit/common/test_manager.py.~1~	2014-10-16 05:05:21.000000000 -0700
++++ swift-2.2.0/test/unit/common/test_manager.py	2014-12-13 21:30:06.746265266 -0800
+@@ -955,7 +955,7 @@ class TestServer(unittest.TestCase):
+         class MockProc(object):
  
              def __init__(self, pid, args, stdout=MockProcess.NOTHING,
 -                         stderr=MockProcess.NOTHING):
--- a/components/openstack/swift/patches/manpages.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/patches/manpages.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -2,9 +2,8 @@
 describing use of SMF.  Fix a few small errors.  Some of this is obviously
 Solaris-specific, but the rest could be submitted upstream.
 
-diff --git a/doc/manpages/account-server.conf.5 b/doc/manpages/account-server.conf.5
---- a/doc/manpages/account-server.conf.5
-+++ b/doc/manpages/account-server.conf.5
+--- swift-2.2.2/doc/manpages/account-server.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/account-server.conf.5	2015-02-26 16:13:29.119848756 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -34,9 +33,8 @@
  .SH "SEE ALSO"
 -.BR swift-account-server(1),
 +.BR swift-account-server (1)
-diff --git a/doc/manpages/container-server.conf.5 b/doc/manpages/container-server.conf.5
---- a/doc/manpages/container-server.conf.5
-+++ b/doc/manpages/container-server.conf.5
+--- swift-2.2.2/doc/manpages/container-server.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/container-server.conf.5	2015-02-26 16:13:29.120133142 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -52,7 +50,7 @@
  
  
  
-@@ -279,11 +279,11 @@ Maximum amount of time to spend syncing 
+@@ -279,11 +279,11 @@ Maximum amount of time to spend syncing
  .SH DOCUMENTATION
  .LP
  More in depth documentation about the swift-container-server and
@@ -66,9 +64,8 @@
  .SH "SEE ALSO"
 -.BR swift-container-server(1)
 +.BR swift-container-server (1)
-diff --git a/doc/manpages/dispersion.conf.5 b/doc/manpages/dispersion.conf.5
---- a/doc/manpages/dispersion.conf.5
-+++ b/doc/manpages/dispersion.conf.5
+--- swift-2.2.2/doc/manpages/dispersion.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/dispersion.conf.5	2015-02-26 16:13:29.120357358 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -110,9 +107,8 @@
 +.BR swift-dispersion-report (1),
 +.BR swift-dispersion-populate (1)
  
-diff --git a/doc/manpages/object-expirer.conf.5 b/doc/manpages/object-expirer.conf.5
---- a/doc/manpages/object-expirer.conf.5
-+++ b/doc/manpages/object-expirer.conf.5
+--- swift-2.2.2/doc/manpages/object-expirer.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/object-expirer.conf.5	2015-02-26 16:13:29.120567301 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -143,9 +139,8 @@
 -.BR swift-proxy-server.conf(5),
 +.BR proxy-server.conf (4)
  
-diff --git a/doc/manpages/object-server.conf.5 b/doc/manpages/object-server.conf.5
---- a/doc/manpages/object-server.conf.5
-+++ b/doc/manpages/object-server.conf.5
+--- swift-2.2.2/doc/manpages/object-server.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/object-server.conf.5	2015-02-26 16:13:29.120792824 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -175,9 +170,8 @@
  .SH "SEE ALSO"
 -.BR swift-object-server(1),
 +.BR swift-object-server (1)
-diff --git a/doc/manpages/proxy-server.conf.5 b/doc/manpages/proxy-server.conf.5
---- a/doc/manpages/proxy-server.conf.5
-+++ b/doc/manpages/proxy-server.conf.5
+--- swift-2.2.2/doc/manpages/proxy-server.conf.5.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/proxy-server.conf.5	2015-02-26 16:13:29.121104217 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -193,7 +187,7 @@
  
  
  
-@@ -552,10 +552,10 @@ per second.  The default is 1.
+@@ -547,10 +547,10 @@ per second.  The default is 1.
  .SH DOCUMENTATION
  .LP
  More in depth documentation about the swift-proxy-server and
@@ -206,9 +200,8 @@
  .SH "SEE ALSO"
 -.BR swift-proxy-server(1)
 +.BR swift-proxy-server (1)
-diff --git a/doc/manpages/swift-account-auditor.1 b/doc/manpages/swift-account-auditor.1
---- a/doc/manpages/swift-account-auditor.1
-+++ b/doc/manpages/swift-account-auditor.1
+--- swift-2.2.2/doc/manpages/swift-account-auditor.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-account-auditor.1	2015-02-26 16:13:29.121313974 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -257,9 +250,41 @@
 -.BR account-server.conf(5)
 +.BR account-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-account-reaper.1 b/doc/manpages/swift-account-reaper.1
---- a/doc/manpages/swift-account-reaper.1
-+++ b/doc/manpages/swift-account-reaper.1
+--- swift-2.2.2/doc/manpages/swift-account-info.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-account-info.1	2015-02-26 16:13:29.121513953 -0800
+@@ -14,12 +14,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"  
+-.TH swift-account-info 1 "3/22/2014" "Linux" "OpenStack Swift"
++.TH swift-account-info 1 "3/22/2014" "OpenStack" "OpenStack Swift"
+ 
+ .SH NAME 
+ .LP
+ .B swift-account-info
+-\- Openstack-swift account-info tool
++\- Openstack Swift account-info tool
+ 
+ .SH SYNOPSIS
+ .LP
+@@ -50,11 +50,11 @@ It will then return several information
+     
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at 
++More documentation about Openstack Swift can be found at 
+ .BI http://swift.openstack.org/index.html
+ 
+ .SH "SEE ALSO"
+ 
+-.BR swift-container-info(1),
+-.BR swift-get-nodes(1),
+-.BR swift-object-info(1)
++.BR swift-container-info (1),
++.BR swift-get-nodes (1),
++.BR swift-object-info (1)
+--- swift-2.2.2/doc/manpages/swift-account-reaper.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-account-reaper.1	2015-02-26 16:13:29.121726101 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -310,9 +335,8 @@
 -.BR account-server.conf(5)
 +.BR account-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-account-replicator.1 b/doc/manpages/swift-account-replicator.1
---- a/doc/manpages/swift-account-replicator.1
-+++ b/doc/manpages/swift-account-replicator.1
+--- swift-2.2.2/doc/manpages/swift-account-replicator.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-account-replicator.1	2015-02-26 16:13:29.121955499 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -362,9 +386,8 @@
 -.BR account-server.conf(5)
 +.BR account-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-account-server.1 b/doc/manpages/swift-account-server.1
---- a/doc/manpages/swift-account-server.1
-+++ b/doc/manpages/swift-account-server.1
+--- swift-2.2.2/doc/manpages/swift-account-server.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-account-server.1	2015-02-26 16:13:29.122165290 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -415,9 +438,8 @@
 -.BR account-server.conf(5)
 +.BR account-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-container-auditor.1 b/doc/manpages/swift-container-auditor.1
---- a/doc/manpages/swift-container-auditor.1
-+++ b/doc/manpages/swift-container-auditor.1
+--- swift-2.2.2/doc/manpages/swift-container-auditor.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-auditor.1	2015-02-26 16:13:29.141897463 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -469,9 +491,38 @@
 -.BR container-server.conf(5)
 +.BR container-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-container-replicator.1 b/doc/manpages/swift-container-replicator.1
---- a/doc/manpages/swift-container-replicator.1
-+++ b/doc/manpages/swift-container-replicator.1
+--- swift-2.2.2/doc/manpages/swift-container-info.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-info.1	2015-02-26 16:13:29.142103981 -0800
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"  
+-.TH swift-container-info 1 "3/20/2013" "Linux" "OpenStack Swift"
++.TH swift-container-info 1 "3/20/2013" "OpenStack" "OpenStack Swift"
+ 
+ .SH NAME 
+ .LP
+ .B swift-container-info
+-\- Openstack-swift container-info tool
++\- Openstack Swift container-info tool
+ 
+ .SH SYNOPSIS
+ .LP
+@@ -57,9 +57,9 @@ It will then return several information
+     
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at 
++More documentation about Openstack Swift can be found at 
+ .BI http://swift.openstack.org/index.html
+ 
+ .SH "SEE ALSO"
+-.BR swift-get-nodes(1),
+-.BR swift-object-info(1)
++.BR swift-get-nodes (1),
++.BR swift-object-info (1)
+--- swift-2.2.2/doc/manpages/swift-container-replicator.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-replicator.1	2015-02-26 16:13:29.142311525 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -522,9 +573,8 @@
 -.BR container-server.conf(5)
 +.BR container-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-container-server.1 b/doc/manpages/swift-container-server.1
---- a/doc/manpages/swift-container-server.1
-+++ b/doc/manpages/swift-container-server.1
+--- swift-2.2.2/doc/manpages/swift-container-server.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-server.1	2015-02-26 16:13:29.142536566 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -576,9 +626,8 @@
 -.BR container-server.conf(5)
 +.BR container-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-container-sync.1 b/doc/manpages/swift-container-sync.1
---- a/doc/manpages/swift-container-sync.1
-+++ b/doc/manpages/swift-container-sync.1
+--- swift-2.2.2/doc/manpages/swift-container-sync.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-sync.1	2015-02-26 16:13:29.142760939 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -609,9 +658,8 @@
  .SH "SEE ALSO"
 -.BR container-server.conf(5)
 +.BR container-server.conf (4)
-diff --git a/doc/manpages/swift-container-updater.1 b/doc/manpages/swift-container-updater.1
---- a/doc/manpages/swift-container-updater.1
-+++ b/doc/manpages/swift-container-updater.1
+--- swift-2.2.2/doc/manpages/swift-container-updater.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-container-updater.1	2015-02-26 16:13:29.142985262 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -662,9 +710,8 @@
 -.BR container-server.conf(5)
 +.BR container-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-dispersion-populate.1 b/doc/manpages/swift-dispersion-populate.1
---- a/doc/manpages/swift-dispersion-populate.1
-+++ b/doc/manpages/swift-dispersion-populate.1
+--- swift-2.2.2/doc/manpages/swift-dispersion-populate.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-dispersion-populate.1	2015-02-26 16:13:29.143196250 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -680,7 +727,7 @@
  
  .SH SYNOPSIS
  .LP
-@@ -95,12 +95,12 @@ Example \fI/etc/swift/dispersion.conf\fR
+@@ -107,12 +107,12 @@ $ swift-dispersion-populate
  .SH DOCUMENTATION
  .LP
  More in depth documentation about the swift-dispersion utilities and
@@ -696,9 +743,8 @@
 -.BR dispersion.conf (5)
 +.BR swift-dispersion-report (1),
 +.BR dispersion.conf (4)
-diff --git a/doc/manpages/swift-dispersion-report.1 b/doc/manpages/swift-dispersion-report.1
---- a/doc/manpages/swift-dispersion-report.1
-+++ b/doc/manpages/swift-dispersion-report.1
+--- swift-2.2.2/doc/manpages/swift-dispersion-report.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-dispersion-report.1	2015-02-26 16:13:29.143403911 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -714,7 +760,7 @@
  
  .SH SYNOPSIS
  .LP
-@@ -131,12 +131,12 @@ Example \fI/etc/swift/dispersion.conf\fR
+@@ -131,12 +131,12 @@ $ swift-dispersion-report
  .SH DOCUMENTATION
  .LP
  More in depth documentation about the swift-dispersion utilities and
@@ -730,9 +776,8 @@
 -.BR dispersion.conf (5)
 +.BR swift-dispersion-populate (1),
 +.BR dispersion.conf (4)
-diff --git a/doc/manpages/swift-get-nodes.1 b/doc/manpages/swift-get-nodes.1
---- a/doc/manpages/swift-get-nodes.1
-+++ b/doc/manpages/swift-get-nodes.1
+--- swift-2.2.2/doc/manpages/swift-get-nodes.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-get-nodes.1	2015-02-26 16:13:29.143614157 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -748,24 +793,28 @@
  
  .SH SYNOPSIS
  .LP
-@@ -72,11 +72,11 @@ where the container resides by using the
+@@ -72,14 +72,14 @@ where the container resides by using the
  
  .SH DOCUMENTATION
  .LP
 -More documentation about Openstack-Swift can be found at 
-+More documentation about OpenStack Swift can be found at 
++More documentation about Openstack Swift can be found at 
  .BI http://swift.openstack.org/index.html
  
  
  
  .SH "SEE ALSO"
+ 
+-.BR swift-account-info(1),
+-.BR swift-container-info(1),
 -.BR swift-object-info(1),
 -.BR swift-ring-builder(1)
++.BR swift-account-info (1),
++.BR swift-container-info (1),
 +.BR swift-object-info (1),
 +.BR swift-ring-builder (1)
-diff --git a/doc/manpages/swift-init.1 b/doc/manpages/swift-init.1
---- a/doc/manpages/swift-init.1
-+++ b/doc/manpages/swift-init.1
+--- swift-2.2.2/doc/manpages/swift-init.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-init.1	2015-02-26 16:13:29.143864952 -0800
 @@ -15,22 +15,54 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -854,9 +903,8 @@
 +.BR swift-proxy-server (1),
 +.BR swift-replicator-rsync (1),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-object-auditor.1 b/doc/manpages/swift-object-auditor.1
---- a/doc/manpages/swift-object-auditor.1
-+++ b/doc/manpages/swift-object-auditor.1
+--- swift-2.2.2/doc/manpages/swift-object-auditor.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-auditor.1	2015-02-26 16:13:29.144069821 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -908,9 +956,8 @@
 -.BR object-server.conf(5)
 +.BR object-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-object-expirer.1 b/doc/manpages/swift-object-expirer.1
---- a/doc/manpages/swift-object-expirer.1
-+++ b/doc/manpages/swift-object-expirer.1
+--- swift-2.2.2/doc/manpages/swift-object-expirer.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-expirer.1	2015-02-26 16:13:29.144285407 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -965,9 +1012,8 @@
 -
 +.BR object-expirer.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-object-info.1 b/doc/manpages/swift-object-info.1
---- a/doc/manpages/swift-object-info.1
-+++ b/doc/manpages/swift-object-info.1
+--- swift-2.2.2/doc/manpages/swift-object-info.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-info.1	2015-02-26 16:13:29.160574201 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -983,20 +1029,24 @@
  
  .SH SYNOPSIS
  .LP
-@@ -48,8 +48,8 @@ It will then return several information 
+@@ -48,11 +48,11 @@ It will then return several information
      
  .SH DOCUMENTATION
  .LP
 -More documentation about Openstack-Swift can be found at 
-+More documentation about OpenStack Swift can be found at 
++More documentation about Openstack Swift can be found at 
  .BI http://swift.openstack.org/index.html
  
  .SH "SEE ALSO"
--.BR swift-get-nodes(1),
+ 
+-.BR swift-account-info(1),
+-.BR swift-container-info(1),
+-.BR swift-get-nodes(1)
++.BR swift-account-info (1),
++.BR swift-container-info (1),
 +.BR swift-get-nodes (1)
-diff --git a/doc/manpages/swift-object-replicator.1 b/doc/manpages/swift-object-replicator.1
---- a/doc/manpages/swift-object-replicator.1
-+++ b/doc/manpages/swift-object-replicator.1
+--- swift-2.2.2/doc/manpages/swift-object-replicator.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-replicator.1	2015-02-26 16:13:29.160790039 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1048,9 +1098,8 @@
 -.BR object-server.conf(5)
 +.BR object-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-object-server.1 b/doc/manpages/swift-object-server.1
---- a/doc/manpages/swift-object-server.1
-+++ b/doc/manpages/swift-object-server.1
+--- swift-2.2.2/doc/manpages/swift-object-server.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-server.1	2015-02-26 16:13:29.160992717 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1071,7 +1120,7 @@
  [CONFIG] [-h|--help] [-v|--verbose]
  
  .SH DESCRIPTION 
-@@ -40,15 +40,27 @@ served. A deletion is also treated as a 
+@@ -40,15 +40,27 @@ served. A deletion is also treated as a
  ".ts", which stands for tombstone). This ensures that deleted files are replicated 
  correctly and older versions don't magically reappear due to failure scenarios.
  
@@ -1101,9 +1150,8 @@
 -.BR object-server.conf(5)
 +.BR object-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-object-updater.1 b/doc/manpages/swift-object-updater.1
---- a/doc/manpages/swift-object-updater.1
-+++ b/doc/manpages/swift-object-updater.1
+--- swift-2.2.2/doc/manpages/swift-object-updater.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-object-updater.1	2015-02-26 16:13:29.161205584 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1155,9 +1203,8 @@
 -.BR object-server.conf(5)
 +.BR object-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-orphans.1 b/doc/manpages/swift-orphans.1
---- a/doc/manpages/swift-orphans.1
-+++ b/doc/manpages/swift-orphans.1
+--- swift-2.2.2/doc/manpages/swift-orphans.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-orphans.1	2015-02-26 16:13:29.161459175 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1181,9 +1228,8 @@
 +More documentation about OpenStack Swift can be found at
  .BI http://swift.openstack.org/index.html
  
-diff --git a/doc/manpages/swift-proxy-server.1 b/doc/manpages/swift-proxy-server.1
---- a/doc/manpages/swift-proxy-server.1
-+++ b/doc/manpages/swift-proxy-server.1
+--- swift-2.2.2/doc/manpages/swift-proxy-server.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-proxy-server.1	2015-02-26 16:13:29.161663139 -0800
 @@ -15,16 +15,16 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1232,9 +1278,8 @@
 -.BR proxy-server.conf(5)
 +.BR proxy-server.conf (4),
 +.BR smf (5)
-diff --git a/doc/manpages/swift-recon.1 b/doc/manpages/swift-recon.1
---- a/doc/manpages/swift-recon.1
-+++ b/doc/manpages/swift-recon.1
+--- swift-2.2.2/doc/manpages/swift-recon.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-recon.1	2015-02-26 16:13:29.161870934 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
@@ -1267,9 +1312,8 @@
 +.BR object-server.conf (4)
  
  
-diff --git a/doc/manpages/swift-ring-builder.1 b/doc/manpages/swift-ring-builder.1
---- a/doc/manpages/swift-ring-builder.1
-+++ b/doc/manpages/swift-ring-builder.1
+--- swift-2.2.2/doc/manpages/swift-ring-builder.1.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/doc/manpages/swift-ring-builder.1	2015-02-26 16:13:29.162099171 -0800
 @@ -15,12 +15,12 @@
  .\" See the License for the specific language governing permissions and
  .\" limitations under the License.
--- a/components/openstack/swift/patches/recon.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/patches/recon.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -2,10 +2,9 @@
 Change some of the ways we gather information, since those are normally
 Linux-specific.  Make the tests acknowledge these changes.
 
-diff --git a/bin/swift-recon-cron b/bin/swift-recon-cron
---- a/bin/swift-recon-cron
-+++ b/bin/swift-recon-cron
-@@ -49,8 +49,8 @@ def main():
+--- swift-2.2.2/bin/swift-recon-cron.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/bin/swift-recon-cron	2015-02-26 16:49:51.937806748 -0800
+@@ -57,8 +57,8 @@ def main():
          sys.exit(1)
      conf = dict(c.items('filter:recon'))
      device_dir = conf.get('devices', '/srv/node')
@@ -16,10 +15,9 @@
      cache_file = os.path.join(recon_cache_path, "object.recon")
      lock_dir = os.path.join(recon_lock_path, "swift-recon-object-cron")
      conf['log_name'] = conf.get('log_name', 'recon-cron')
-diff --git a/etc/account-server.conf-sample b/etc/account-server.conf-sample
---- a/etc/account-server.conf-sample
-+++ b/etc/account-server.conf-sample
-@@ -78,7 +78,7 @@ use = egg:swift#healthcheck
+--- swift-2.2.2/etc/account-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/etc/account-server.conf-sample	2015-02-26 16:49:51.938107313 -0800
+@@ -81,7 +81,7 @@ use = egg:swift#healthcheck
  
  [filter:recon]
  use = egg:swift#recon
@@ -28,8 +26,8 @@
  
  [account-replicator]
  # You can override the default log routing for this app here (don't use set!):
-@@ -109,7 +109,7 @@ use = egg:swift#recon
- # Time in seconds to wait between replication passes
+@@ -114,7 +114,7 @@ use = egg:swift#recon
+ # of run_pause.
  # run_pause = 30
  #
 -# recon_cache_path = /var/cache/swift
@@ -37,7 +35,7 @@
  
  [account-auditor]
  # You can override the default log routing for this app here (don't use set!):
-@@ -124,7 +124,7 @@ use = egg:swift#recon
+@@ -129,7 +129,7 @@ use = egg:swift#recon
  # log_facility = LOG_LOCAL0
  # log_level = INFO
  # accounts_per_second = 200
@@ -46,10 +44,9 @@
  
  [account-reaper]
  # You can override the default log routing for this app here (don't use set!):
-diff --git a/etc/container-server.conf-sample b/etc/container-server.conf-sample
---- a/etc/container-server.conf-sample
-+++ b/etc/container-server.conf-sample
-@@ -85,7 +85,7 @@ use = egg:swift#healthcheck
+--- swift-2.2.2/etc/container-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/etc/container-server.conf-sample	2015-02-26 16:49:51.938374963 -0800
+@@ -90,7 +90,7 @@ use = egg:swift#healthcheck
  
  [filter:recon]
  use = egg:swift#recon
@@ -58,8 +55,8 @@
  
  [container-replicator]
  # You can override the default log routing for this app here (don't use set!):
-@@ -108,7 +108,7 @@ use = egg:swift#recon
- # Time in seconds to wait between replication passes
+@@ -115,7 +115,7 @@ use = egg:swift#recon
+ # of run_pause.
  # run_pause = 30
  #
 -# recon_cache_path = /var/cache/swift
@@ -67,7 +64,7 @@
  
  [container-updater]
  # You can override the default log routing for this app here (don't use set!):
-@@ -128,7 +128,7 @@ use = egg:swift#recon
+@@ -135,7 +135,7 @@ use = egg:swift#recon
  # Seconds to suppress updating an account that has generated an error
  # account_suppression_time = 60
  #
@@ -76,7 +73,7 @@
  
  [container-auditor]
  # You can override the default log routing for this app here (don't use set!):
-@@ -141,7 +141,7 @@ use = egg:swift#recon
+@@ -148,7 +148,7 @@ use = egg:swift#recon
  # interval = 1800
  #
  # containers_per_second = 200
@@ -85,10 +82,31 @@
  
  [container-sync]
  # You can override the default log routing for this app here (don't use set!):
-diff --git a/etc/object-server.conf-sample b/etc/object-server.conf-sample
---- a/etc/object-server.conf-sample
-+++ b/etc/object-server.conf-sample
-@@ -99,8 +99,8 @@ use = egg:swift#healthcheck
+--- swift-2.2.2/etc/drive-audit.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/etc/drive-audit.conf-sample	2015-02-26 17:03:18.476812691 -0800
+@@ -8,7 +8,7 @@
+ # log_max_line_length = 0
+ # minutes = 60
+ # error_limit = 1
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+ # unmount_failed_device = True
+ #
+ # By default, drive-audit logs only to syslog. Setting this option True
+--- swift-2.2.2/etc/object-expirer.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/etc/object-expirer.conf-sample	2015-02-26 17:03:28.102759740 -0800
+@@ -50,7 +50,7 @@
+ # up to reclaim_age seconds before it gives up and deletes the entry in the
+ # queue.
+ # reclaim_age = 604800
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+ 
+ [pipeline:main]
+ pipeline = catch_errors proxy-logging cache proxy-server
+--- swift-2.2.2/etc/object-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/etc/object-server.conf-sample	2015-02-26 16:49:51.938657130 -0800
+@@ -143,8 +143,8 @@ use = egg:swift#healthcheck
  
  [filter:recon]
  use = egg:swift#recon
@@ -99,7 +117,7 @@
  
  [object-replicator]
  # You can override the default log routing for this app here (don't use set!):
-@@ -134,7 +134,7 @@ use = egg:swift#recon
+@@ -186,7 +186,7 @@ use = egg:swift#recon
  # reclaim_age = 604800
  #
  # ring_check_interval = 15
@@ -108,7 +126,7 @@
  #
  # limits how long rsync error log lines are
  # 0 means to log the entire line
-@@ -155,7 +155,7 @@ use = egg:swift#recon
+@@ -224,7 +224,7 @@ use = egg:swift#recon
  # slowdown will sleep that amount between objects
  # slowdown = 0.01
  #
@@ -117,7 +135,7 @@
  
  [object-auditor]
  # You can override the default log routing for this app here (don't use set!):
-@@ -168,7 +168,7 @@ use = egg:swift#recon
+@@ -241,7 +241,7 @@ use = egg:swift#recon
  # bytes_per_second = 10000000
  # log_time = 3600
  # zero_byte_files_per_second = 50
@@ -126,10 +144,9 @@
  
  # Takes a comma separated list of ints. If set, the object auditor will
  # increment a counter for every object whose size is <= to the given break
-diff --git a/swift/account/auditor.py b/swift/account/auditor.py
---- a/swift/account/auditor.py
-+++ b/swift/account/auditor.py
-@@ -45,7 +45,7 @@ class AccountAuditor(Daemon):
+--- swift-2.2.2/swift/account/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/account/auditor.py	2015-02-26 16:49:51.938879416 -0800
+@@ -46,7 +46,7 @@ class AccountAuditor(Daemon):
          swift.common.db.DB_PREALLOCATION = \
              config_true_value(conf.get('db_preallocation', 'f'))
          self.recon_cache_path = conf.get('recon_cache_path',
@@ -138,10 +155,9 @@
          self.rcache = os.path.join(self.recon_cache_path, "account.recon")
  
      def _one_audit_pass(self, reported):
-diff --git a/swift/common/db_replicator.py b/swift/common/db_replicator.py
---- a/swift/common/db_replicator.py
-+++ b/swift/common/db_replicator.py
-@@ -169,7 +169,7 @@ class Replicator(Daemon):
+--- swift-2.2.2/swift/common/db_replicator.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/common/db_replicator.py	2015-02-26 16:49:51.939223420 -0800
+@@ -171,7 +171,7 @@ class Replicator(Daemon):
              config_true_value(conf.get('db_preallocation', 'f'))
          self._zero_stats()
          self.recon_cache_path = conf.get('recon_cache_path',
@@ -150,9 +166,8 @@
          self.recon_replicator = '%s.recon' % self.server_type
          self.rcache = os.path.join(self.recon_cache_path,
                                     self.recon_replicator)
-diff --git a/swift/common/middleware/recon.py b/swift/common/middleware/recon.py
---- a/swift/common/middleware/recon.py
-+++ b/swift/common/middleware/recon.py
+--- swift-2.2.2/swift/common/middleware/recon.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/common/middleware/recon.py	2015-02-26 16:49:51.939514933 -0800
 @@ -15,6 +15,7 @@
  
  import errno
@@ -161,7 +176,7 @@
  from swift import gettext_ as _
  
  from swift import __version__ as swiftver
-@@ -45,7 +46,7 @@ class ReconMiddleware(object):
+@@ -46,7 +47,7 @@ class ReconMiddleware(object):
          swift_dir = conf.get('swift_dir', '/etc/swift')
          self.logger = get_logger(conf, log_route='recon')
          self.recon_cache_path = conf.get('recon_cache_path',
@@ -170,7 +185,7 @@
          self.object_recon_cache = os.path.join(self.recon_cache_path,
                                                 'object.recon')
          self.container_recon_cache = os.path.join(self.recon_cache_path,
-@@ -87,28 +88,43 @@ class ReconMiddleware(object):
+@@ -90,28 +91,43 @@ class ReconMiddleware(object):
      def get_mounted(self, openr=open):
          """get ALL mounted fs from /proc/mounts"""
          mounts = []
@@ -221,10 +236,9 @@
          meminfo = {}
          with openr('/proc/meminfo', 'r') as memlines:
              for i in memlines:
-diff --git a/swift/container/auditor.py b/swift/container/auditor.py
---- a/swift/container/auditor.py
-+++ b/swift/container/auditor.py
-@@ -45,7 +45,7 @@ class ContainerAuditor(Daemon):
+--- swift-2.2.2/swift/container/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/container/auditor.py	2015-02-26 16:49:51.939751504 -0800
+@@ -44,7 +44,7 @@ class ContainerAuditor(Daemon):
          swift.common.db.DB_PREALLOCATION = \
              config_true_value(conf.get('db_preallocation', 'f'))
          self.recon_cache_path = conf.get('recon_cache_path',
@@ -233,9 +247,8 @@
          self.rcache = os.path.join(self.recon_cache_path, "container.recon")
  
      def _one_audit_pass(self, reported):
-diff --git a/swift/container/updater.py b/swift/container/updater.py
---- a/swift/container/updater.py
-+++ b/swift/container/updater.py
+--- swift-2.2.2/swift/container/updater.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/container/updater.py	2015-02-26 16:49:51.939968905 -0800
 @@ -60,7 +60,7 @@ class ContainerUpdater(Daemon):
          swift.common.db.DB_PREALLOCATION = \
              config_true_value(conf.get('db_preallocation', 'f'))
@@ -245,22 +258,20 @@
          self.rcache = os.path.join(self.recon_cache_path, "container.recon")
          self.user_agent = 'container-updater %s' % os.getpid()
  
-diff --git a/swift/obj/auditor.py b/swift/obj/auditor.py
---- a/swift/obj/auditor.py
-+++ b/swift/obj/auditor.py
-@@ -56,7 +56,7 @@ class AuditorWorker(object):
-         self.quarantines = 0
-         self.errors = 0
+--- swift-2.2.2/swift/obj/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/obj/auditor.py	2015-02-26 16:49:51.940188415 -0800
+@@ -227,7 +227,7 @@ class ObjectAuditor(Daemon):
+         self.conf_zero_byte_fps = int(
+             conf.get('zero_byte_files_per_second', 50))
          self.recon_cache_path = conf.get('recon_cache_path',
 -                                         '/var/cache/swift')
 +                                         '/var/lib/swift/recon-cache')
          self.rcache = os.path.join(self.recon_cache_path, "object.recon")
-         self.stats_sizes = sorted(
-             [int(s) for s in list_from_csv(conf.get('object_size_stats'))])
-diff --git a/swift/obj/expirer.py b/swift/obj/expirer.py
---- a/swift/obj/expirer.py
-+++ b/swift/obj/expirer.py
-@@ -54,7 +54,7 @@ class ObjectExpirer(Daemon):
+ 
+     def _sleep(self):
+--- swift-2.2.2/swift/obj/expirer.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/obj/expirer.py	2015-02-26 16:49:51.940400670 -0800
+@@ -57,7 +57,7 @@ class ObjectExpirer(Daemon):
          self.report_first_time = self.report_last_time = time()
          self.report_objects = 0
          self.recon_cache_path = conf.get('recon_cache_path',
@@ -269,21 +280,19 @@
          self.rcache = join(self.recon_cache_path, 'object.recon')
          self.concurrency = int(conf.get('concurrency', 1))
          if self.concurrency < 1:
-diff --git a/swift/obj/replicator.py b/swift/obj/replicator.py
---- a/swift/obj/replicator.py
-+++ b/swift/obj/replicator.py
-@@ -76,7 +76,7 @@ class ObjectReplicator(Daemon):
+--- swift-2.2.2/swift/obj/replicator.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/obj/replicator.py	2015-02-26 16:49:51.940644907 -0800
+@@ -77,7 +77,7 @@ class ObjectReplicator(Daemon):
          self.http_timeout = int(conf.get('http_timeout', 60))
          self.lockup_timeout = int(conf.get('lockup_timeout', 1800))
          self.recon_cache_path = conf.get('recon_cache_path',
 -                                         '/var/cache/swift')
 +                                         '/var/lib/swift/recon-cache')
          self.rcache = os.path.join(self.recon_cache_path, "object.recon")
-         self.headers = {
-             'Content-Length': '0',
-diff --git a/swift/obj/updater.py b/swift/obj/updater.py
---- a/swift/obj/updater.py
-+++ b/swift/obj/updater.py
+         self.conn_timeout = float(conf.get('conn_timeout', 0.5))
+         self.node_timeout = float(conf.get('node_timeout', 10))
+--- swift-2.2.2/swift/obj/updater.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/swift/obj/updater.py	2015-02-26 16:49:51.940853387 -0800
 @@ -52,7 +52,7 @@ class ObjectUpdater(Daemon):
          self.successes = 0
          self.failures = 0
@@ -292,21 +301,20 @@
 +                                         '/var/lib/swift/recon-cache')
          self.rcache = os.path.join(self.recon_cache_path, 'object.recon')
  
-     def get_container_ring(self):
-diff --git a/test/unit/common/middleware/test_recon.py b/test/unit/common/middleware/test_recon.py
---- a/test/unit/common/middleware/test_recon.py
-+++ b/test/unit/common/middleware/test_recon.py
-@@ -18,7 +18,9 @@ from unittest import TestCase
- from contextlib import contextmanager
- from posix import stat_result, statvfs_result
+     def _listdir(self, path):
+--- swift-2.2.2/test/unit/common/middleware/test_recon.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/test/unit/common/middleware/test_recon.py	2015-02-26 16:49:51.941363136 -0800
+@@ -21,7 +21,9 @@ import array
+ from swift.common import ring, utils
+ from shutil import rmtree
  import os
 +import sys
  import mock
 +from nose import SkipTest
  
- import swift.common.constraints
  from swift import __version__ as swiftver
-@@ -277,10 +279,12 @@ class TestReconSuccess(TestCase):
+ from swift.common.swob import Request
+@@ -384,10 +386,12 @@ class TestReconSuccess(TestCase):
              {'device': 'none', 'path': '/proc/fs/vmblock/mountPoint'}]
          oart = OpenAndReadTester(mounts_content)
          rv = self.app.get_mounted(openr=oart.open)
@@ -320,7 +328,7 @@
          oart = OpenAndReadTester(['0.03 0.03 0.00 1/220 16306'])
          rv = self.app.get_load(openr=oart.open)
          self.assertEquals(oart.read_calls, [((), {})])
-@@ -290,6 +294,8 @@ class TestReconSuccess(TestCase):
+@@ -397,6 +401,8 @@ class TestReconSuccess(TestCase):
                                 '1m': 0.029999999999999999})
  
      def test_get_mem(self):
@@ -329,7 +337,7 @@
          meminfo_content = ['MemTotal:         505840 kB',
                             'MemFree:           26588 kB',
                             'Buffers:           44948 kB',
-@@ -401,7 +407,7 @@ class TestReconSuccess(TestCase):
+@@ -508,7 +514,7 @@ class TestReconSuccess(TestCase):
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['replication_time', 'replication_stats',
                                'replication_last'],
@@ -338,7 +346,7 @@
          self.assertEquals(rv, {
              "replication_stats": {
                  "attempted": 1, "diff": 0,
-@@ -432,7 +438,7 @@ class TestReconSuccess(TestCase):
+@@ -539,7 +545,7 @@ class TestReconSuccess(TestCase):
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['replication_time', 'replication_stats',
                                'replication_last'],
@@ -347,7 +355,7 @@
          self.assertEquals(rv, {
              "replication_time": 200.0,
              "replication_stats": {
-@@ -454,7 +460,7 @@ class TestReconSuccess(TestCase):
+@@ -561,7 +567,7 @@ class TestReconSuccess(TestCase):
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['object_replication_time',
                                'object_replication_last'],
@@ -356,7 +364,7 @@
          self.assertEquals(rv, {'object_replication_time': 200.0,
                                 'object_replication_last': 1357962809.15})
  
-@@ -465,7 +471,7 @@ class TestReconSuccess(TestCase):
+@@ -572,7 +578,7 @@ class TestReconSuccess(TestCase):
          rv = self.app.get_updater_info('container')
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['container_updater_sweep'],
@@ -365,7 +373,7 @@
          self.assertEquals(rv, {"container_updater_sweep": 18.476239919662476})
  
      def test_get_updater_info_object(self):
-@@ -475,7 +481,7 @@ class TestReconSuccess(TestCase):
+@@ -582,7 +588,7 @@ class TestReconSuccess(TestCase):
          rv = self.app.get_updater_info('object')
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['object_updater_sweep'],
@@ -374,7 +382,7 @@
          self.assertEquals(rv, {"object_updater_sweep": 0.79848217964172363})
  
      def test_get_auditor_info_account(self):
-@@ -491,7 +497,7 @@ class TestReconSuccess(TestCase):
+@@ -598,7 +604,7 @@ class TestReconSuccess(TestCase):
                                'account_auditor_pass_completed',
                                'account_audits_since',
                                'account_audits_failed'],
@@ -383,7 +391,7 @@
          self.assertEquals(rv, {"account_auditor_pass_completed": 0.24,
                                 "account_audits_failed": 0,
                                 "account_audits_passed": 6,
-@@ -510,7 +516,7 @@ class TestReconSuccess(TestCase):
+@@ -617,7 +623,7 @@ class TestReconSuccess(TestCase):
                                'container_auditor_pass_completed',
                                'container_audits_since',
                                'container_audits_failed'],
@@ -392,7 +400,7 @@
          self.assertEquals(rv, {"container_auditor_pass_completed": 0.24,
                                 "container_audits_failed": 0,
                                 "container_audits_passed": 6,
-@@ -538,7 +544,7 @@ class TestReconSuccess(TestCase):
+@@ -645,7 +651,7 @@ class TestReconSuccess(TestCase):
          self.assertEquals(self.fakecache.fakeout_calls,
                            [((['object_auditor_stats_ALL',
                                'object_auditor_stats_ZBF'],
@@ -401,3 +409,12 @@
          self.assertEquals(rv, {
              "object_auditor_stats_ALL": {
                  "audit_time": 115.14418768882751,
+@@ -692,7 +698,7 @@ class TestReconSuccess(TestCase):
+         self.assertEquals(self.fakecache.fakeout_calls,
+                           [((['object_auditor_stats_ALL',
+                               'object_auditor_stats_ZBF'],
+-                              '/var/cache/swift/object.recon'), {})])
++                              '/var/lib/swift/recon-cache/object.recon'), {})])
+         self.assertEquals(rv, {
+             "object_auditor_stats_ALL": {
+                 'disk1': {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/requirements.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,24 @@
+In-house patch to remove unnecessary dependencies from Swift's
+requirements files. The specific reasons are as follows:
+
+greenlet	Not applicable
+
+--- swift-2.2.0/requirements.txt
++++ swift-2.2.0/requirements.txt
+@@ -4,7 +4,6 @@
+ 
+ dnspython>=1.9.4
+ eventlet>=0.9.15
+-greenlet>=0.3.1
+ netifaces>=0.5,!=0.10.0,!=0.10.1
+ pastedeploy>=1.3.3
+ simplejson>=2.0.9
+--- swift-2.2.0/swift.egg-info/requires.txt
++++ swift-2.2.0/swift.egg-info/requires.txt
+@@ -1,6 +1,5 @@
+ dnspython>=1.9.4
+ eventlet>=0.9.15
+-greenlet>=0.3.1
+ netifaces>=0.5,!=0.10.0,!=0.10.1
+ pastedeploy>=1.3.3
+ simplejson>=2.0.9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/rlimit_nproc.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,35 @@
+RLIMIT_NPROC isn't implemented on Solaris, and it's not even clear what it
+would mean, given the differences between the Solaris and Linux thread
+models.  Solaris has some resource controls that are similar: per-task and
+per-project max-lwps and max-processes.
+
+For the time being, just ignore the use of RLIMIT_NPROC.  This might be
+appropriate for upstream (but has not been submitted), depending on whether
+RLIMIT_NPROC is unavailable on any platforms other than Solaris.
+
+--- swift-2.2.0/swift/common/manager.py
++++ swift-2.2.0/swift/common/manager.py
+@@ -75,6 +75,8 @@
+     except ValueError:
+         print _("WARNING: Unable to modify max process limit.  "
+                 "Running as non-root?")
++    except AttributeError:
++        pass
+ 
+     # Set PYTHON_EGG_CACHE if it isn't already set
+     os.environ.setdefault('PYTHON_EGG_CACHE', '/tmp')
+--- swift-2.2.0/test/unit/common/test_manager.py
++++ swift-2.2.0/test/unit/common/test_manager.py
+@@ -105,9 +105,10 @@
+                                           manager.MAX_DESCRIPTORS)),
+                 (resource.RLIMIT_DATA, (manager.MAX_MEMORY,
+                                         manager.MAX_MEMORY)),
+-                (resource.RLIMIT_NPROC, (manager.MAX_PROCS,
+-                                         manager.MAX_PROCS)),
+             ]
++            if getattr(resource, "RLIMIT_NPROC", None):
++                expected.append((resource.RLIMIT_NPROC, (manager.MAX_PROCS,
++                                         manager.MAX_PROCS)))
+             self.assertEquals(manager.resource.called_with_args, expected)
+             self.assertTrue(
+                 manager.os.environ['PYTHON_EGG_CACHE'].startswith('/tmp'))
--- a/components/openstack/swift/patches/test.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/patches/test.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -21,86 +21,18 @@
 the test should fork a separate process to test the lock, which should work
 regardless of the OS.
 
-diff --git a/test/unit/__init__.py b/test/unit/__init__.py
---- a/test/unit/__init__.py
-+++ b/test/unit/__init__.py
-@@ -450,7 +450,7 @@ def fake_http_connect(*code_iter, **kwar
-                 else:
-                     etag = '"68b329da9893e34099c7d8ad5cb9c940"'
- 
--            headers = {'content-length': len(self.body),
-+            headers = {'content-length': self.body.__len__(),
-                        'content-type': 'x-application/test',
-                        'x-timestamp': self.timestamp,
-                        'last-modified': self.timestamp,
-diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py
---- a/test/unit/proxy/test_server.py
-+++ b/test/unit/proxy/test_server.py
-@@ -2876,6 +2876,9 @@ class TestObjectController(unittest.Test
- 
-             class LargeResponseBody(object):
- 
-+                def __nonzero__(self):
-+                    return True
-+
-                 def __len__(self):
-                     return MAX_FILE_SIZE + 1
- 
-@@ -3006,6 +3009,9 @@ class TestObjectController(unittest.Test
- 
-             class LargeResponseBody(object):
- 
-+                def __nonzero__(self):
-+                    return True
-+
-                 def __len__(self):
-                     return MAX_FILE_SIZE + 1
- 
-diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py
---- a/test/unit/common/test_utils.py
-+++ b/test/unit/common/test_utils.py
-@@ -437,7 +437,8 @@ class TestUtils(unittest.TestCase):
-             }, 'server', log_route='server')
-             expected_args = [((), {'address': '/dev/log',
-                                    'facility': orig_sysloghandler.LOG_LOCAL3})]
--            if not os.path.exists('/dev/log') or \
-+            if sys.platform == 'sunos5' or \
-+                    not os.path.exists('/dev/log') or \
-                     os.path.isfile('/dev/log') or \
-                     os.path.isdir('/dev/log'):
-                 # Since socket on OSX is in /var/run/syslog, there will be
-diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py
---- a/test/unit/common/test_utils.py
-+++ b/test/unit/common/test_utils.py
-@@ -46,6 +46,7 @@
- from tempfile import TemporaryFile, NamedTemporaryFile, mkdtemp
- from netifaces import AF_INET6
- from mock import MagicMock, patch
-+from nose import SkipTest
- 
- from swift.common.exceptions import (Timeout, MessageTimeout,
-                                      ConnectionTimeout, LockTimeout)
-@@ -1406,6 +1407,8 @@
-                 MagicMock(side_effect=BaseException('test3')))
- 
-     def test_lock_file(self):
-+        if sys.platform == 'sunos5':
-+            raise SkipTest
-         flags = os.O_CREAT | os.O_RDWR
-         with NamedTemporaryFile(delete=False) as nt:
-             nt.write("test string")
-diff --git a/test/sample.conf b/test/unit/sample.conf
---- a/test/sample.conf
-+++ b/test/sample.conf
-@@ -29,16 +29,16 @@ password3 = testing3
- # to set them from /etc/swift/swift.conf. If that file isn't found,
- # the test runner will skip tests that depend on these values.
- # Note that the cluster must have "sane" values for the test suite to pass.
+--- swift-2.2.2/test/sample.conf.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/test/sample.conf	2015-02-26 16:36:42.753470819 -0800
+@@ -62,17 +62,17 @@ fake_syslog = False
+ # Note that the cluster must have "sane" values for the test suite to pass
+ # (for some definition of sane).
+ #
 -#max_file_size = 5368709122
 -#max_meta_name_length = 128
 -#max_meta_value_length = 256
 -#max_meta_count = 90
 -#max_meta_overall_size = 4096
+-#max_header_size = 8192
 -#max_object_name_length = 1024
 -#container_listing_limit = 10000
 -#account_listing_limit = 10000
@@ -111,11 +43,148 @@
 +max_meta_value_length = 256
 +max_meta_count = 90
 +max_meta_overall_size = 4096
++max_header_size = 8192
 +max_object_name_length = 1024
 +container_listing_limit = 10000
 +account_listing_limit = 10000
 +max_account_name_length = 256
 +max_container_name_length = 256
  
- collate = C
+ # Newer swift versions default to strict cors mode, but older ones were the
+ # opposite.
+--- swift-2.2.2/test/unit/__init__.py.~1~	2015-02-26 16:36:42.754399372 -0800
++++ swift-2.2.2/test/unit/__init__.py	2015-02-26 16:41:30.006380635 -0800
+@@ -670,7 +670,7 @@ def fake_http_connect(*code_iter, **kwar
+                     etag = '"68b329da9893e34099c7d8ad5cb9c940"'
+ 
+             headers = swob.HeaderKeyDict({
+-                'content-length': len(self.body),
++                'content-length': self.body.__len__(),
+                 'content-type': 'x-application/test',
+                 'x-timestamp': self.timestamp,
+                 'x-backend-timestamp': self.timestamp,
+--- swift-2.2.2/test/unit/common/test_utils.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/test/unit/common/test_utils.py	2015-02-26 16:36:42.756657286 -0800
+@@ -52,6 +52,7 @@ from functools import partial
+ from tempfile import TemporaryFile, NamedTemporaryFile, mkdtemp
+ from netifaces import AF_INET6
+ from mock import MagicMock, patch
++from nose import SkipTest
+ 
+ from swift.common.exceptions import (Timeout, MessageTimeout,
+                                      ConnectionTimeout, LockTimeout,
+@@ -733,6 +734,8 @@ class TestUtils(unittest.TestCase):
+         utils.HASH_PATH_PREFIX = 'startcap'
+ 
+     def test_lock_path(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         tmpdir = mkdtemp()
+         try:
+             with utils.lock_path(tmpdir, 0.1):
+@@ -749,6 +752,8 @@ class TestUtils(unittest.TestCase):
+             shutil.rmtree(tmpdir)
+ 
+     def test_lock_path_num_sleeps(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         tmpdir = mkdtemp()
+         num_short_calls = [0]
+         exception_raised = [False]
+@@ -773,6 +778,8 @@ class TestUtils(unittest.TestCase):
+         self.assertTrue(exception_raised[0])
+ 
+     def test_lock_path_class(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         tmpdir = mkdtemp()
+         try:
+             with utils.lock_path(tmpdir, 0.1, ReplicationLockTimeout):
+@@ -1195,7 +1202,8 @@ class TestUtils(unittest.TestCase):
+             }, 'server', log_route='server')
+             expected_args = [((), {'address': '/dev/log',
+                                    'facility': orig_sysloghandler.LOG_LOCAL3})]
+-            if not os.path.exists('/dev/log') or \
++            if sys.platform == 'sunos5' or \
++                    not os.path.exists('/dev/log') or \
+                     os.path.isfile('/dev/log') or \
+                     os.path.isdir('/dev/log'):
+                 # Since socket on OSX is in /var/run/syslog, there will be
+@@ -2374,6 +2382,8 @@ cluster_dfw1 = http://dfw1.host/v1/
+                 MagicMock(side_effect=BaseException('test3')))
  
+     def test_lock_file(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         flags = os.O_CREAT | os.O_RDWR
+         with NamedTemporaryFile(delete=False) as nt:
+             nt.write("test string")
+@@ -2452,6 +2462,8 @@ cluster_dfw1 = http://dfw1.host/v1/
+                                         os.fstat(f.fileno()).st_ino)
+ 
+     def test_lock_file_held_on_unlink(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         os_unlink = os.unlink
+ 
+         def flocking_unlink(filename):
+@@ -2468,6 +2480,8 @@ cluster_dfw1 = http://dfw1.host/v1/
+                     pass
+ 
+     def test_lock_file_no_unlink_if_fail(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         os_open = os.open
+         with NamedTemporaryFile(delete=True) as nt:
+ 
+--- swift-2.2.2/test/unit/obj/test_diskfile.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/test/unit/obj/test_diskfile.py	2015-02-26 16:36:42.757582696 -0800
+@@ -18,6 +18,7 @@
+ 
+ import cPickle as pickle
+ import os
++import sys
+ import errno
+ import mock
+ import unittest
+@@ -902,6 +903,8 @@ class TestDiskFileManager(unittest.TestC
+         self.assertEqual(hashes, {})
+ 
+     def test_replication_lock_on(self):
++        if sys.platform == 'sunos5':
++            raise SkipTest
+         # Double check settings
+         self.df_mgr.replication_one_per_device = True
+         self.df_mgr.replication_lock_timeout = 0.1
+--- swift-2.2.2/test/unit/proxy/test_server.py.~1~	2015-02-01 23:44:11.000000000 -0800
++++ swift-2.2.2/test/unit/proxy/test_server.py	2015-02-26 16:36:42.760354922 -0800
+@@ -3376,6 +3376,9 @@ class TestObjectController(unittest.Test
+ 
+         class LargeResponseBody(object):
+ 
++            def __nonzero__(self):
++                return True
++
+             def __len__(self):
+                 return constraints.MAX_FILE_SIZE + 1
+ 
+@@ -3620,6 +3623,9 @@ class TestObjectController(unittest.Test
+ 
+         class LargeResponseBody(object):
+ 
++            def __nonzero__(self):
++                return True
++
+             def __len__(self):
+                 return constraints.MAX_FILE_SIZE + 1
+ 
+@@ -3644,6 +3650,9 @@ class TestObjectController(unittest.Test
+ 
+         class LargeResponseBody(object):
+ 
++            def __nonzero__(self):
++                return True
++
+             def __len__(self):
+                 return constraints.MAX_FILE_SIZE + 1
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/workers.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,62 @@
+This patch sets the default value of the number of "workers" in the
+Swift configuration files for a single CPU system. The default based on
+the number of CPUs (cores) found may not be efficient on a system with
+a large number of cores. This patch is not suitable for the upstream.
+
+--- swift-2.2.2/etc/account-server.conf-sample.~2~	2015-03-03 13:32:49.269716798 -0800
++++ swift-2.2.2/etc/account-server.conf-sample	2015-03-03 13:32:49.300905746 -0800
+@@ -10,8 +10,9 @@ bind_port = 6002
+ # disable_fallocate = false
+ #
+ # Use an integer to override the number of pre-forked processes that will
+-# accept connections.
+-# workers = auto
++# accept connections.  Use "auto" or default for the number of effective cpu
++# cores in the system.
++workers = 1
+ #
+ # Maximum concurrent requests per worker
+ # max_clients = 1024
+--- swift-2.2.2/etc/container-server.conf-sample.~2~	2015-03-03 13:32:49.269950594 -0800
++++ swift-2.2.2/etc/container-server.conf-sample	2015-03-03 13:32:49.301151407 -0800
+@@ -10,8 +10,9 @@ bind_port = 6001
+ # disable_fallocate = false
+ #
+ # Use an integer to override the number of pre-forked processes that will
+-# accept connections.
+-# workers = auto
++# accept connections.  Use "auto" or default for the number of effective cpu
++# cores in the system.
++workers = 1
+ #
+ # Maximum concurrent requests per worker
+ # max_clients = 1024
+--- swift-2.2.2/etc/object-server.conf-sample.~2~	2015-03-03 13:32:49.270540923 -0800
++++ swift-2.2.2/etc/object-server.conf-sample	2015-03-03 13:32:49.301367390 -0800
+@@ -12,8 +12,9 @@ bind_port = 6000
+ # expiring_objects_account_name = expiring_objects
+ #
+ # Use an integer to override the number of pre-forked processes that will
+-# accept connections.
+-# workers = auto
++# accept connections.  Use "auto" or default for the number of effective cpu
++# cores in the system.
++workers = 1
+ #
+ # Maximum concurrent requests per worker
+ # max_clients = 1024
+--- swift-2.2.2/etc/proxy-server.conf-sample.~1~	2015-02-01 23:44:14.000000000 -0800
++++ swift-2.2.2/etc/proxy-server.conf-sample	2015-03-03 13:32:49.301633168 -0800
+@@ -22,10 +22,10 @@ bind_port = 8080
+ # disallowed_sections = container_quotas, tempurl, bulk_delete.max_failed_deletes
+ 
+ # Use an integer to override the number of pre-forked processes that will
+-# accept connections.  Should default to the number of effective cpu
++# accept connections.  Use "auto" or default for the number of effective cpu
+ # cores in the system.  It's worth noting that individual workers will
+ # use many eventlet co-routines to service multiple concurrent requests.
+-# workers = auto
++workers = 1
+ #
+ # Maximum concurrent requests per worker
+ # max_clients = 1024
--- a/components/openstack/swift/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,8 +1,6 @@
 library/python-2/eventlet-26
 library/python-2/simplejson-26
-library/python-2/swiftclient-26
-library/python/eventlet-26
-library/python/simplejson-26
+library/python/iniparse-26
 library/python/swiftclient-26
 runtime/python-26
 service/memcached
--- a/components/openstack/swift/swift.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/openstack/swift/swift.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,19 +20,36 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 <transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
+#
+<transform file path=.*/(.*_attr)\.d -> set action.hash files/swift.%<1>>
+<transform file path=.*/(.*_attr)\.d -> default group sys>
+<transform file path=etc/swift/(.*) -> set action.hash etc/%<1>-sample>
+<transform file path=etc/swift/proxy-server.conf -> set action.hash files/proxy-server.conf>
+<transform file path=etc/swift/rsyncd.conf -> set action.hash files/rsyncd.conf>
+<transform dir file path=etc/swift/? -> default owner swift>
+<transform dir file path=etc/swift/? -> default group swift>
+<transform file path=etc/swift/ -> default mode 0644>
+<transform file path=etc/swift/ -> default overlay allow>
+<transform file path=etc/swift/ -> default preserve renamenew>
+<transform file path=lib/svc/method/([^/]*) -> set action.hash files/%<1>>
+<transform hardlink path=lib/svc/method -> default target swift-proxy-server>
+<transform file path=lib/svc/method/swift-proxy-server -> set action.hash files/swift-smf-method>
+<transform file path=usr/lib/swift/(.*) -> set action.hash usr/bin/%<1>>
+<transform file path=usr/lib/swift/(.*) -> default mode 0555>
+<transform file path=usr/share/man/man1/(.+) -> set action.hash doc/manpages/%<1>>
+<transform file path=usr/share/man/man4/(.+)\.4 -> set action.hash doc/manpages/%<1>.5>
 set name=pkg.fmri \
     value=pkg:/cloud/openstack/swift@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="OpenStack Swift (Object Storage Service)"
 set name=pkg.description \
     value="The OpenStack Object Store project, known as Swift, offers cloud storage software so that you can store and retrieve data in virtual containers"
-set name=pkg.human-version value="Havana 2013.2.3"
 set name=com.oracle.info.description \
     value="Swift, the OpenStack object storage service"
-set name=com.oracle.info.tpno value=17868
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
     value="org.opensolaris.category.2008:System/Enterprise Management" \
@@ -41,25 +58,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/050
+set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/050 \
+    value=PSARC/2015/110
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-#
-<transform file path=.*/(.*_attr)\.d -> set action.hash files/swift.%<1>>
-<transform file path=.*/(.*_attr)\.d -> default group sys>
 file path=etc/security/auth_attr.d/cloud:openstack:swift
 file path=etc/security/exec_attr.d/cloud:openstack:swift
 file path=etc/security/prof_attr.d/cloud:openstack:swift
-<transform file path=etc/swift/(.*) -> set action.hash etc/%<1>-sample>
-<transform file path=etc/swift/rsyncd.conf -> set action.hash files/rsyncd.conf>
-<transform file path=etc/swift/proxy-server.conf -> set action.hash files/proxy-server.conf>
-<transform dir file path=etc/swift/? -> default owner swift>
-<transform dir file path=etc/swift/? -> default group swift>
-<transform file path=etc/swift/ -> default mode 0644>
-<transform file path=etc/swift/ -> default overlay allow>
-<transform file path=etc/swift/ -> default preserve renamenew>
 dir  path=etc/swift mode=0700
 file path=etc/swift/account-server.conf
+file path=etc/swift/container-reconciler.conf
 file path=etc/swift/container-server.conf
+file path=etc/swift/container-sync-realms.conf
 file path=etc/swift/dispersion.conf
 file path=etc/swift/memcache.conf
 file path=etc/swift/mime.types
@@ -67,14 +77,14 @@
 file path=etc/swift/object-server.conf
 file path=etc/swift/proxy-server.conf
 file path=etc/swift/rsyncd.conf
-file path=etc/swift/swift-bench.conf
 file path=etc/swift/swift.conf
-<transform file path=lib/svc/.*/([^/]*) -> set action.hash files/%<1>>
+file path=etc/user_attr.d/cloud:openstack:swift
 file path=lib/svc/manifest/application/openstack/swift-account-auditor.xml
 file path=lib/svc/manifest/application/openstack/swift-account-reaper.xml
 file path=lib/svc/manifest/application/openstack/swift-account-replicator.xml
 file path=lib/svc/manifest/application/openstack/swift-account-server.xml
 file path=lib/svc/manifest/application/openstack/swift-container-auditor.xml
+file path=lib/svc/manifest/application/openstack/swift-container-reconciler.xml
 file path=lib/svc/manifest/application/openstack/swift-container-replicator.xml
 file path=lib/svc/manifest/application/openstack/swift-container-server.xml
 file path=lib/svc/manifest/application/openstack/swift-container-sync.xml
@@ -86,13 +96,13 @@
 file path=lib/svc/manifest/application/openstack/swift-object-updater.xml
 file path=lib/svc/manifest/application/openstack/swift-proxy-server.xml
 file path=lib/svc/manifest/application/openstack/swift-replicator-rsync.xml
-<transform hardlink path=lib/svc/method -> default target swift-proxy-server>
-<transform file path=lib/svc/method/swift-proxy-server -> set action.hash files/swift-smf-method>
+file path=lib/svc/manifest/application/openstack/swift-upgrade.xml
 hardlink path=lib/svc/method/swift-account-auditor
 hardlink path=lib/svc/method/swift-account-reaper
 hardlink path=lib/svc/method/swift-account-replicator
 hardlink path=lib/svc/method/swift-account-server
 hardlink path=lib/svc/method/swift-container-auditor
+hardlink path=lib/svc/method/swift-container-reconciler
 hardlink path=lib/svc/method/swift-container-replicator
 hardlink path=lib/svc/method/swift-container-server
 hardlink path=lib/svc/method/swift-container-sync
@@ -104,16 +114,18 @@
 hardlink path=lib/svc/method/swift-object-updater
 file path=lib/svc/method/swift-proxy-server
 file path=lib/svc/method/swift-replicator-rsync
+file path=lib/svc/method/swift-upgrade
 file path=usr/bin/swift-account-audit
-file path=usr/bin/swift-bench
-file path=usr/bin/swift-bench-client
+file path=usr/bin/swift-account-info
 file path=usr/bin/swift-config
+file path=usr/bin/swift-container-info
 file path=usr/bin/swift-dispersion-populate
 file path=usr/bin/swift-dispersion-report
 file path=usr/bin/swift-form-signature
 file path=usr/bin/swift-get-nodes
 file path=usr/bin/swift-object-info
 file path=usr/bin/swift-recon
+file path=usr/bin/swift-reconciler-enqueue
 file path=usr/bin/swift-ring-builder
 file path=usr/bin/swift-temp-url
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
@@ -121,6 +133,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/__init__.py
@@ -131,10 +144,16 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/replicator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/cli/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/cli/form_signature.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/cli/info.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/cli/recon.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/cli/ringbuilder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/bench.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/base_storage_server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/bufferedhttp.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/constraints.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/container_sync_realms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/daemon.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/db_replicator.py
@@ -151,9 +170,12 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/catch_errors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/cname_lookup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/container_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/container_sync.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/crossdomain.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/dlo.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/domain_remap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/formpost.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/gatekeeper.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/healthcheck.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/keystoneauth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/list_endpoints.py
@@ -166,17 +188,25 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/staticweb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/tempauth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/tempurl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/x_profile/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/x_profile/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/x_profile/html_viewer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/x_profile/profile_model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/xprofile.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/request_helpers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/builder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/ring.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/splice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/storage_policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/swob.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/wsgi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/auditor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/reconciler.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/replicator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/sync.py
@@ -185,23 +215,27 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/auditor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/diskfile.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/expirer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/mem_diskfile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/mem_server.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/replicator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/ssync_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/ssync_sender.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/updater.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/account.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/container.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/info.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/obj.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/server.py
-<transform file path=usr/lib/swift/(.*) -> set action.hash usr/bin/%<1>>
-<transform file path=usr/lib/swift/(.*) -> default mode 0555>
 file path=usr/lib/swift/swift-account-auditor
 file path=usr/lib/swift/swift-account-reaper
 file path=usr/lib/swift/swift-account-replicator
 file path=usr/lib/swift/swift-account-server
 file path=usr/lib/swift/swift-container-auditor
+file path=usr/lib/swift/swift-container-reconciler
 file path=usr/lib/swift/swift-container-replicator
 file path=usr/lib/swift/swift-container-server
 file path=usr/lib/swift/swift-container-sync
@@ -214,13 +248,13 @@
 file path=usr/lib/swift/swift-object-updater
 file path=usr/lib/swift/swift-proxy-server
 file path=usr/lib/swift/swift-recon-cron
-<transform file path=usr/share/man/man1/(.+) -> set action.hash doc/manpages/%<1>>
-<transform file path=usr/share/man/man4/(.+)\.4 -> set action.hash doc/manpages/%<1>.5>
 file path=usr/share/man/man1/swift-account-auditor.1
+file path=usr/share/man/man1/swift-account-info.1
 file path=usr/share/man/man1/swift-account-reaper.1
 file path=usr/share/man/man1/swift-account-replicator.1
 file path=usr/share/man/man1/swift-account-server.1
 file path=usr/share/man/man1/swift-container-auditor.1
+file path=usr/share/man/man1/swift-container-info.1
 file path=usr/share/man/man1/swift-container-replicator.1
 file path=usr/share/man/man1/swift-container-server.1
 file path=usr/share/man/man1/swift-container-sync.1
@@ -254,21 +288,21 @@
 #
 license LICENSE license="Apache v2.0"
 
+# force a dependency on dnspython; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/dnspython-$(PYV)
+
+# force a dependency on keystonemiddleware; used via a paste.deploy filter
+depend type=require fmri=library/python/keystonemiddleware-$(PYV)
+
 # force a dependency on netifaces; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/netifaces-26
+depend type=require fmri=library/python-2/netifaces-$(PYV)
 
 # force a dependency on paste.deploy; pkgdepend work is needed to flush this
 # out.
-depend type=require fmri=library/python-2/paste.deploy-26
-
-# force a dependency on dnspython; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/dnspython-26
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
 
-# 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 setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
 
 # force a dependency on xattr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/xattr-26
+depend type=require fmri=library/python/xattr-$(PYV)
--- a/components/python/alembic/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/alembic/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,39 +18,44 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		alembic
-COMPONENT_VERSION=	0.6.0
+COMPONENT_VERSION=	0.7.4
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:ad28e2e4f8bb712d1e67abc709b0735525541e0ebc509dbf00bcd383b5c602ca
+    sha256:550f10b2266f689778eced2fed899bfd05755737478454b97fb99385f2e780e5
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/alembic/
 COMPONENT_BUGDB=	python-mod/alembic
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21714
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-COMPONENT_TEST_DIR=	$(COMPONENT_SRC)
-COMPONENT_TEST_ARGS=	setup.py test
+COMPONENT_POST_INSTALL_ACTION += \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f alembic alembic-$(PYTHON_VERSION))
+
+COMPONENT_PRE_TEST_ACTION=	echo "[db]" > $(SOURCE_DIR)/test.cfg
+COMPONENT_TEST_DIR=		$(SOURCE_DIR)
+COMPONENT_TEST_ARGS=		setup.py test
 
 # common targets
 build:		$(BUILD_NO_ARCH)
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests should work, but the test suite will attempt to run a subset of
-# tests against various database backends, including Postgresql and MySQL,
-# so will take a bit of hooking up. Just marking as "no tests" for now,
-# to allow the OpenStack Neutron developers to get on with their work.
-test:		$(NO_TESTS)
+test:		$(TEST_NO_ARCH)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
 
--- a/components/python/alembic/alembic-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/alembic/alembic-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,23 +29,33 @@
 set name=pkg.description \
     value="The Python alembic module is a new database migrations tool, offering the following functionality: 1) Can emit ALTER statements to a database in order to change the structure of tables and other constructs. 2) Provides a system whereby 'migration scripts' may be constructed; each script indicates a particular series of steps that can 'upgrade' a target database to a new version, and optionally a series of steps that can 'downgrade' similarly, doing the same steps in reverse. 3) Allows the scripts to execute in some sequential manner."
 set name=com.oracle.info.description value="the Python alembic module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Python
+    value=org.opensolaris.category.2008:Development/Python \
+    value=org.opensolaris.category.2008:System/Databases
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream value="Mike Bayer <[email protected]>"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/254
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/alembic target=alembic-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/alembic-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/alembic/autogenerate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/autogenerate/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/autogenerate/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/autogenerate/compare.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/autogenerate/render.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/batch.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/command.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/compat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/config.py
@@ -60,6 +72,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/op.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/operations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/alembic/revision.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/script.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/templates/generic/README
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/templates/generic/alembic.ini.mako
@@ -74,15 +87,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/templates/pylons/env.py
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/templates/pylons/script.py.mako
 file path=usr/lib/python$(PYVER)/vendor-packages/alembic/util.py
+#
 license alembic.license license=MIT
 
-# force a dependency on the Python runtime
-depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
-    pkg.debug.depend.path=usr/bin
-
 # force a dependency on the alembic package
 depend type=require \
     fmri=library/python-2/alembic@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
 # force a dependency on mako; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/mako-$(PYV)
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/sqlalchemy-$(PYV)
--- a/components/python/alembic/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/alembic/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,2 +1,4 @@
+library/python-2/setuptools-26
+library/python-2/setuptools-27
 runtime/python-26
 runtime/python-27
--- a/components/python/amqp/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/amqp/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,35 +18,41 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		amqp
-COMPONENT_VERSION=	1.0.12
+COMPONENT_VERSION=	1.4.6
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:c2c09d0310009efd9b19fc12efff7a085b789b841341a533451b85750be6518d
+    sha256:ebcfc867de5a68f9f5ba14d11dbad88e6aff8435a8d39339d5ceb0e5b06de640
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://github.com/celery/py-amqp/
-COMPONENT_BUGDB=	python-mod/amqp
+COMPONENT_BUGDB=	python-mod/py-amqp
+
+TPNO=			21715
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
+COMPONENT_TEST_ARGS=	funtests/run_all.py --host=localhost
+COMPONENT_TEST_DIR=	$(SOURCE_DIR)
+
 # common targets
 build:		$(BUILD_NO_ARCH)
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests require:
-# unittest2>=0.4.0, nose, nose-cover3, coverage>=3.0, mock
-# some of which haven't been integrated yet.
-test:		$(NO_TESTS)
+# svc:/application/rabbitmq:default needs to be online for tests to run
+test:		$(TEST_NO_ARCH)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
 
--- a/components/python/amqp/amqp-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/amqp/amqp-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,16 +18,19 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/amqp-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-set name=pkg.summary value="AMQP client library for Python"
+set name=pkg.summary value="Low-level AMQP client for Python"
 set name=pkg.description \
-    value="Amqp implements a simple non-threaded Python client library for the Advanced Message Queuing Protocol (AMQP) version 0-8."
-set name=com.oracle.info.description value="the Python amqp module"
-set name=com.oracle.info.tpno value=14503
+    value="The 'amqp' module implements a simple non-threaded Python client library for the Advanced Message Queuing Protocol (AMQP) version 0-9-1. It provides support for draining events from multiple channels, timeouts, channel restoration after a channel error, heartbeats, and a number of RabbitMQ extensions."
+set name=com.oracle.info.description \
+    value="amqp, a low-level AMQP client for Python"
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -35,6 +38,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/168
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -46,9 +50,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/channel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/amqp/five.py
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/method_framing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/amqp/protocol.py
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/serialization.py
 file path=usr/lib/python$(PYVER)/vendor-packages/amqp/transport.py
+file path=usr/lib/python$(PYVER)/vendor-packages/amqp/utils.py
+#
 license LICENSE license=LGPL2.1
 
 # force a dependency on the Python runtime
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/amqp/patches/auto_delete-ok.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,28 @@
+This patch removes a deprecation about using auto_delete with exchanges
+as RabbitMQ intends to support it going forward as an extension to AMQP
+0-9-1. It is not suitable for the upstream.
+
+--- amqp-1.4.6/amqp/channel.py.orig	2014-08-11 09:56:50.000000000 -0700
++++ amqp-1.4.6/amqp/channel.py	2015-02-03 17:28:07.424050361 -0800
+@@ -31,11 +31,6 @@ __all__ = ['Channel']
+ 
+ AMQP_LOGGER = logging.getLogger('amqp')
+ 
+-EXCHANGE_AUTODELETE_DEPRECATED = """\
+-The auto_delete flag for exchanges has been deprecated and will be removed
+-from py-amqp v1.5.0.\
+-"""
+-
+ 
+ class VDeprecationWarning(DeprecationWarning):
+     pass
+@@ -612,9 +607,6 @@ class Channel(AbstractChannel):
+         args.write_table(arguments)
+         self._send_method((40, 10), args)
+ 
+-        if auto_delete:
+-            warn(VDeprecationWarning(EXCHANGE_AUTODELETE_DEPRECATED))
+-
+         if not nowait:
+             return self.wait(allowed_methods=[
+                 (40, 11),  # Channel.exchange_declare_ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/barbicanclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-barbicanclient
+COMPONENT_VERSION=	3.0.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:d298ee0fc9e785d44148d4590ac0d9eef05d560e379e98f75a7cb35ed6bfc7c8
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/python-barbicanclient
+COMPONENT_BUGDB=	service/barbican
+
+TPNO=			21635
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f barbican barbican-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/barbicanclient/barbicanclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,101 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/barbicanclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="Python and command-line clients for the OpenStack Key Management API"
+set name=pkg.description \
+    value="A client for the Key Management API. There is a Python library for accessing the API (barbicanclient module), and a command-line script (barbican)."
+set name=com.oracle.info.description \
+    value="barbicanclient, the Python bindings to the OpenStack Key Management API"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    value=org.opensolaris.category.2008:System/Security
+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/2015/073
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/barbican target=barbican-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/barbican-$(PYVER)
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/barbican.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/barbican_cli/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/barbican_cli/containers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/barbican_cli/orders.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/barbican_cli/secrets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/containers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/formatter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/orders.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/secrets.py
+file path=usr/lib/python$(PYVER)/vendor-packages/barbicanclient/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_barbicanclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the barbicanclient package
+depend type=require \
+    fmri=library/python/barbicanclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on cliff; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/cliff-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on prettytable; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/prettytable-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/barbicanclient/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/boto/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/boto/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,37 +18,63 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		boto
-COMPONENT_VERSION=	2.9.9
+COMPONENT_VERSION=	2.34.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:6ce016eed6605381d67f39bc62763ee3b862aed3d403ea70b16b9d63738c002a
+    sha256:33baab022ecb803414ad0d6cf4041d010cfc2755ff8acc3bea7b32e77ba98be0
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://github.com/boto/boto/
 COMPONENT_BUGDB=	python-mod/boto
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21716
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-COMPONENT_TEST_DIR =    $(SOURCE_DIR)/tests
-COMPONENT_TEST_ARGS =   test.py
+COMPONENT_POST_INSTALL_ACTION= \
+	(cd $(PROTO_DIR)/usr/demo/$(COMPONENT_NAME) ; \
+	 $(MV) -f asadmin asadmin-$(PYTHON_VERSION) ; \
+	 $(MV) -f bundle_image bundle_image-$(PYTHON_VERSION) ; \
+	 $(MV) -f cfadmin cfadmin-$(PYTHON_VERSION) ; \
+	 $(MV) -f cq cq-$(PYTHON_VERSION) ; \
+	 $(MV) -f cwutil cwutil-$(PYTHON_VERSION) ; \
+	 $(MV) -f dynamodb_dump dynamodb_dump-$(PYTHON_VERSION) ; \
+	 $(MV) -f dynamodb_load dynamodb_load-$(PYTHON_VERSION) ; \
+	 $(MV) -f elbadmin elbadmin-$(PYTHON_VERSION) ; \
+	 $(MV) -f fetch_file fetch_file-$(PYTHON_VERSION) ; \
+	 $(MV) -f glacier glacier-$(PYTHON_VERSION) ; \
+	 $(MV) -f instance_events instance_events-$(PYTHON_VERSION) ; \
+	 $(MV) -f kill_instance kill_instance-$(PYTHON_VERSION) ; \
+	 $(MV) -f launch_instance launch_instance-$(PYTHON_VERSION) ; \
+	 $(MV) -f list_instances list_instances-$(PYTHON_VERSION) ; \
+	 $(MV) -f lss3 lss3-$(PYTHON_VERSION) ; \
+	 $(MV) -f mturk mturk-$(PYTHON_VERSION) ; \
+	 $(MV) -f pyami_sendmail pyami_sendmail-$(PYTHON_VERSION) ; \
+	 $(MV) -f route53 route53-$(PYTHON_VERSION) ; \
+	 $(MV) -f s3put s3put-$(PYTHON_VERSION) ; \
+	 $(MV) -f sdbadmin sdbadmin-$(PYTHON_VERSION) ; \
+	 $(MV) -f taskadmin taskadmin-$(PYTHON_VERSION))
+
+COMPONENT_INSTALL_ARGS +=	--install-script=/usr/demo/$(COMPONENT_NAME)
 
 # common targets
-build:		$(BUILD_32)
-
-install:	$(INSTALL_32)
+build:		$(BUILD_NO_ARCH)
 
-# Tests require:
-# mock, OrderedDict, unittest2
-# which haven't been integrated yet.
+install:	$(INSTALL_NO_ARCH)
+
+# Tests require access to AWS/OpenStack metadata service & the Internet
 test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
--- a/components/python/boto/boto-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/boto/boto-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,18 +18,23 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
+# pyyaml is only delivered for python 2.6
+<transform depend type=group fmri=library/python-2/pyyaml-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python-2/boto-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="An Amazon Web Services library for Python"
 set name=pkg.description \
-    value="Boto is a Python package that provides interfaces to Amazon Web Services (AWS).  In addition, boto provides support for other public services such as Google Storage in, as well as private cloud systems like Eucalyptus, OpenStack and Nebula."
+    value="Boto is a Python package that provides interfaces to Amazon Web Services (AWS). In addition, boto provides support for other public services such as Google Storage as well as private cloud systems like Eucalyptus, OpenStack and OpenNebula."
 set name=com.oracle.info.description value="the Python boto module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Python
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream value="Mitch Garnaat <[email protected]>"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
@@ -38,88 +43,67 @@
 #
 link path=usr/demo/boto/asadmin target=asadmin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/asadmin \
-    path=usr/demo/boto/asadmin-$(PYVER)
+file path=usr/demo/boto/asadmin-$(PYVER) mode=0555
 link path=usr/demo/boto/bundle_image target=bundle_image-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/bundle_image \
-    path=usr/demo/boto/bundle_image-$(PYVER)
+file path=usr/demo/boto/bundle_image-$(PYVER) mode=0555
 link path=usr/demo/boto/cfadmin target=cfadmin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/cfadmin \
-    path=usr/demo/boto/cfadmin-$(PYVER)
+file path=usr/demo/boto/cfadmin-$(PYVER) mode=0555
 link path=usr/demo/boto/cq target=cq-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/cq path=usr/demo/boto/cq-$(PYVER)
+file path=usr/demo/boto/cq-$(PYVER) mode=0555
 link path=usr/demo/boto/cwutil target=cwutil-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/cwutil \
-    path=usr/demo/boto/cwutil-$(PYVER)
+file path=usr/demo/boto/cwutil-$(PYVER) mode=0555
 link path=usr/demo/boto/dynamodb_dump target=dynamodb_dump-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/dynamodb_dump \
-    path=usr/demo/boto/dynamodb_dump-$(PYVER)
+file path=usr/demo/boto/dynamodb_dump-$(PYVER) mode=0555
 link path=usr/demo/boto/dynamodb_load target=dynamodb_load-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/dynamodb_load \
-    path=usr/demo/boto/dynamodb_load-$(PYVER)
+file path=usr/demo/boto/dynamodb_load-$(PYVER) mode=0555
 link path=usr/demo/boto/elbadmin target=elbadmin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/elbadmin \
-    path=usr/demo/boto/elbadmin-$(PYVER)
+file path=usr/demo/boto/elbadmin-$(PYVER) mode=0555
 link path=usr/demo/boto/fetch_file target=fetch_file-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/fetch_file \
-    path=usr/demo/boto/fetch_file-$(PYVER)
+file path=usr/demo/boto/fetch_file-$(PYVER) mode=0555
 link path=usr/demo/boto/glacier target=glacier-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/glacier \
-    path=usr/demo/boto/glacier-$(PYVER)
+file path=usr/demo/boto/glacier-$(PYVER) mode=0555
 link path=usr/demo/boto/instance_events target=instance_events-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/instance_events \
-    path=usr/demo/boto/instance_events-$(PYVER)
+file path=usr/demo/boto/instance_events-$(PYVER) mode=0555
 link path=usr/demo/boto/kill_instance target=kill_instance-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/kill_instance \
-    path=usr/demo/boto/kill_instance-$(PYVER)
+file path=usr/demo/boto/kill_instance-$(PYVER) mode=0555
 link path=usr/demo/boto/launch_instance target=launch_instance-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/launch_instance \
-    path=usr/demo/boto/launch_instance-$(PYVER)
+file path=usr/demo/boto/launch_instance-$(PYVER) mode=0555
 link path=usr/demo/boto/list_instances target=list_instances-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/list_instances \
-    path=usr/demo/boto/list_instances-$(PYVER)
+file path=usr/demo/boto/list_instances-$(PYVER) mode=0555
 link path=usr/demo/boto/lss3 target=lss3-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/lss3 \
-    path=usr/demo/boto/lss3-$(PYVER)
+file path=usr/demo/boto/lss3-$(PYVER) mode=0555
 link path=usr/demo/boto/mturk target=mturk-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/mturk \
-    path=usr/demo/boto/mturk-$(PYVER)
+file path=usr/demo/boto/mturk-$(PYVER) mode=0555
 link path=usr/demo/boto/pyami_sendmail target=pyami_sendmail-$(PYVER) \
     mediator=python mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/pyami_sendmail \
-    path=usr/demo/boto/pyami_sendmail-$(PYVER)
+file path=usr/demo/boto/pyami_sendmail-$(PYVER) mode=0555
 link path=usr/demo/boto/route53 target=route53-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/route53 \
-    path=usr/demo/boto/route53-$(PYVER)
+file path=usr/demo/boto/route53-$(PYVER) mode=0555
 link path=usr/demo/boto/s3put target=s3put-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/s3put \
-    path=usr/demo/boto/s3put-$(PYVER)
+file path=usr/demo/boto/s3put-$(PYVER) mode=0555
 link path=usr/demo/boto/sdbadmin target=sdbadmin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/sdbadmin \
-    path=usr/demo/boto/sdbadmin-$(PYVER)
+file path=usr/demo/boto/sdbadmin-$(PYVER) mode=0555
 link path=usr/demo/boto/taskadmin target=taskadmin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file build/$(MACH32)-$(PYVER)/scripts-$(PYVER)/taskadmin \
-    path=usr/demo/boto/taskadmin-$(PYVER)
-#
+file path=usr/demo/boto/taskadmin-$(PYVER) mode=0555
 file path=usr/lib/python$(PYVER)/vendor-packages/boto-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/boto-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/boto-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -155,6 +139,24 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch/optionstatus.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch/search.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch/sourceattribute.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/document.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/domain.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/layer1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/layer2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/optionstatus.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudsearch2/search.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudtrail/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudtrail/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cloudtrail/layer1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/identity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/identity/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/identity/layer1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/sync/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/sync/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/cognito/sync/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/compat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/contrib/__init__.py
@@ -162,6 +164,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/datapipeline/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/datapipeline/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/datapipeline/layer1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/directconnect/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/directconnect/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/directconnect/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/dynamodb/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/dynamodb/batch.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/dynamodb/condition.py
@@ -188,6 +193,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/launchconfig.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/request.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/autoscale/scheduled.py
@@ -204,6 +210,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/ec2object.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/elb/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/elb/attributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/elb/healthcheck.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/elb/instancestate.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/elb/listelement.py
@@ -216,6 +223,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/instance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/instanceinfo.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/instancestatus.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/instancetype.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/keypair.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/launchspecification.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/networkinterface.py
@@ -228,7 +236,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/spotinstancerequest.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/spotpricehistory.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/tag.py
-file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/vmtype.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/volume.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/volumestatus.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/ec2/zone.py
@@ -245,6 +252,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/emr/emrobject.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/emr/instance_group.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/emr/step.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/endpoints.json
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/file/README
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/file/__init__.py
@@ -282,6 +290,12 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/iam/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/iam/summarymap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/jsonresponse.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/kinesis/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/kinesis/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/kinesis/layer1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/logs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/logs/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/logs/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/manage/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/manage/cmdshell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/manage/propget.py
@@ -332,14 +346,20 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/dbsnapshot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/dbsubnetgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/event.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/logfile.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/optiongroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/parametergroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/regioninfo.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/statusinfo.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds/vpcsecuritygroupmembership.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds2/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/rds2/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/redshift/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/redshift/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/redshift/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/regioninfo.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/requestlog.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/resultset.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/roboto/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/roboto/awsqueryrequest.py
@@ -347,7 +367,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/roboto/param.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/connection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/domains/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/domains/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/domains/layer1.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/healthcheck.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/hostedzone.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/record.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/route53/status.py
@@ -404,9 +428,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/attributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/batchresults.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/bigmessage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/jsonmessage.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/message.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/messageattributes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/queue.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/sqs/regioninfo.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/storage_uri.py
@@ -422,17 +448,37 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/swf/layer1_decisions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/swf/layer2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/vendored/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/vendored/six.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/customergateway.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/dhcpoptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/internetgateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/networkacl.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/routetable.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/subnet.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/vpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/vpc_peering_connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/vpnconnection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/boto/vpc/vpngateway.py
+#
 license boto.license license="MIT, Apache v2.0, LGPLv2.1"
 
+# force a group dependency on the optional lxml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/lxml-$(PYV)
+
+# force a group dependency on the optional pyyaml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pyyaml-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
 # force a dependency on the boto package
 depend type=require \
     fmri=library/python-2/boto@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
--- a/components/python/boto/patches/mturk.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/boto/patches/mturk.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,8 +1,8 @@
 Adjust the Python code to work with Python 2.6 as well as Python 2.7.
 
---- boto-2.9.2/bin/mturk.orig	2013-05-02 11:07:33.957693616 -0700
-+++ boto-2.9.2/bin/mturk	2013-05-02 12:27:47.929525927 -0700
-@@ -56,11 +56,11 @@
+--- boto-2.29.1/bin/mturk.~1~	2014-05-08 13:21:32.000000000 -0700
++++ boto-2.29.1/bin/mturk	2014-12-13 13:41:08.785528992 -0800
+@@ -58,11 +58,11 @@ qual_requirements = dict(
      PercentAssignmentsApproved = '000000000000000000L0',
      PercentAssignmentsRejected = '000000000000000000S0')
  
@@ -16,7 +16,7 @@
  
  example_config_file = '''Example configuration file:
  
-@@ -212,11 +212,11 @@
+@@ -214,11 +214,11 @@ def display_hit(hit, verbose = False):
  
  def digest_assignment(a):
      return dict(
@@ -31,7 +31,7 @@
  
  # --------------------------------------------------
  # Commands
-@@ -278,7 +278,7 @@
+@@ -280,7 +280,7 @@ The API docs say DisableHIT doesn't work
  but apparently, it does.'''
      con.disable_hit(hit)
      global nicknames
@@ -39,4 +39,4 @@
 +    nicknames = dict((k, v) for k, v in nicknames.items() if v != hit)
  
  def list_assignments(hit, only_reviewable = False):
-     assignments = map(digest_assignment, con.get_assignments(
+     # Accumulate all relevant assignments, one page of results at
--- a/components/python/ceilometerclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/ceilometerclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,23 +20,29 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-ceilometerclient
-COMPONENT_VERSION=	1.0.10
+COMPONENT_VERSION=	1.0.12
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:bbe29a6c85af3ec0bcbb7df1863bb3c3c620fa0423c67f25bd089e0ab7b33059
+    sha256:6a90d1f057ab35584c319f19ef31f49ea8c1bb25278dafdf4b6d64aa37604a8e
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-cinderclient
 COMPONENT_BUGDB=	service/ceilometer
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21727
+
+# Depends on keystoneclient which is not Python 3 ready.
+PYTHON_VERSIONS=	2.7 2.6
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/ceilometerclient/ceilometerclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/ceilometerclient/ceilometerclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,20 +20,18 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/ceilometerclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Ceilomter API"
+    value="Python and command-line clients for the OpenStack Telemetry API"
 set name=pkg.description \
     value="A client for the OpenStack Telemetry API. There's a Python API (the 'ceilometerclient' module), and a command-line script ('ceilometer'). Each implements 100% of the OpenStack Telemetry API."
 set name=com.oracle.info.description \
     value="ceilometerclient, the Python bindings to the OpenStack Telemetry API"
-set name=com.oracle.info.tpno value=17306
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -41,8 +39,9 @@
 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/2014/XXX
+set name=org.opensolaris.arc-caseid value=PSARC/2014/187
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/ceilometer target=ceilometer-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/ceilometer-$(PYVER)
@@ -50,7 +49,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/common/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/common/http.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/common/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/exc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/openstack/__init__.py
@@ -65,6 +63,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/openstack/common/uuidutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/v1/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ceilometerclient/v1/client.py
@@ -91,6 +90,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_ceilometerclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_ceilometerclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_ceilometerclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license LICENSE license="Apache v2.0"
 
 # force a group dependency on the optional simplejson; pkgdepend work is needed
@@ -116,9 +116,13 @@
 depend type=require \
     fmri=library/python/ceilometerclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
-# force a dependency on keystoneclient; pkgdepend work is needed to flush this out.
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
 depend type=require fmri=library/python/keystoneclient-$(PYV)
 
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pbr-$(PYV)
 
--- a/components/python/cffi/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/cffi/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -41,16 +41,9 @@
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-# We need to go look at pycparser in the workspace until it's available in the
-# build environment.
-PYCPARSER = $(WS_COMPONENTS)/python/pycparser/build/prototype/$(MACH)/$(PYTHON_LIB)
-
-$(PYCPARSER):
-	(cd ../pycparser; $(MAKE) install)
-
 COMPONENT_TEST_DIR =	$(@D)/tests
 COMPONENT_TEST_ENV =	$(PYTHON_ENV)
-COMPONENT_TEST_ENV +=	PYTHONPATH=$(PROTO_DIR)/$(PYTHON_LIB):$(PYCPARSER)
+COMPONENT_TEST_ENV +=	PYTHONPATH=$(PROTO_DIR)/$(PYTHON_LIB)
 COMPONENT_TEST_ENV +=	TESTOWNLIB_CC="$(CC) %s $(CC_BITS) -G -KPIC -o %s"
 COMPONENT_TEST_CMD =	$(PYTHON.$(BITS)) /usr/bin/py.test-$(PYTHON_VERSION)
 COMPONENT_TEST_ARGS =	--resultlog $(@D)/testresults
@@ -70,9 +63,10 @@
 	$(MKDIR) $(@D)/tests/doc/source; \
 	$(CP) -r $(SOURCE_DIR)/c $(SOURCE_DIR)/testing $(@D)/tests; \
 	$(CP) $(SOURCE_DIR)/setup.py $(@D)/tests; \
-	$(CP) $(SOURCE_DIR)/doc/source/conf.py $(SOURCE_DIR)/doc/source/index.rst $(@D)/tests/doc/source
-
-$(BUILD_32_and_64): $(PYCPARSER)
+	$(CP) \
+	    $(SOURCE_DIR)/doc/source/conf.py \
+	    $(SOURCE_DIR)/doc/source/index.rst \
+	    $(@D)/tests/doc/source
 
 # common targets
 build:		$(BUILD_32_and_64)
--- a/components/python/cinderclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/cinderclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,22 +20,22 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-cinderclient
-COMPONENT_VERSION=	1.0.9
+COMPONENT_VERSION=	1.1.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:e146e370c9a6e4aa44e8f0662fd33aec532f3965bae9fd564360c279bee03f97
+    sha256:107ff53c9bb9403c4e751b9a949cb84eff483d3378007415066d0c7727a6e37e
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-cinderclient
 COMPONENT_BUGDB=	service/cinder
 
-# depends on keystoneclient which is not Python 3 ready
-PYTHON_VERSIONS=	2.7 2.6
+TPNO=			21728
 
 include $(WS_TOP)/make-rules/prep.mk
 include $(WS_TOP)/make-rules/setup.py.mk
--- a/components/python/cinderclient/cinderclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/cinderclient/cinderclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,20 +20,18 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/cinderclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Cinder API"
+    value="Python and command-line clients for the OpenStack Block Storage API"
 set name=pkg.description \
     value="A client for the OpenStack Block Storage API. There's a Python API (the 'cinderclient' module), and a command-line script ('cinder'). Each implements 100% of the OpenStack Block Storage API."
 set name=com.oracle.info.description \
     value="cinderclient, the Python bindings to the OpenStack Block Storage API"
-set name=com.oracle.info.tpno value=17869
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -43,6 +41,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/007
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/cinder target=cinder-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/cinder-$(PYVER)
@@ -62,8 +61,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/fake_client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/importutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/py3kcompat/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/py3kcompat/urlutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/strutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/service_catalog.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/shell.py
@@ -88,7 +85,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volumes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/availability_zones.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/cgsnapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/consistencygroups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/contrib/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/contrib/list_extensions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/limits.py
@@ -111,6 +110,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license cinderclient.license license="Apache v2.0"
 
 # force a group dependency on the optional eventlet; pkgdepend work is needed to
@@ -147,5 +147,8 @@
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pbr-$(PYV)
 
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
 # force a dependency on six; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/six-$(PYV)
--- a/components/python/cliff/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/cliff/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cliff
-COMPONENT_VERSION=	1.4.5
+COMPONENT_VERSION=	1.9.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:0ec2c40e899cbb4d478aa946e1430600bf596ca2a3f12162a9514e9d580935ec
+    sha256:38f731fd585975f4a3aa8025d3be564bb8439fc1e0f96b6b1e442a9e0dc4d1ce
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/cliff
 COMPONENT_BUGDB=	python-mod/cliff
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21717
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -44,7 +49,7 @@
 install:	$(INSTALL_NO_ARCH)
 
 # Tests require:
-# nose, mock, coverage, pep8, cmd2, distribute and PrettyTable
+# coverage >= 3.6, sphinx, oslosphinx
 # some of which haven't been integrated yet.
 test:		$(NO_TESTS)
 
--- a/components/python/cliff/cliff-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/cliff/cliff-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,19 +18,18 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
-#
 set name=pkg.fmri \
     value=pkg:/library/python-2/cliff-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Command Line Interface Formulation Framework"
 set name=pkg.description \
     value="The Python cliff module is a framework for building command line programs. It uses setuptools entry points to provide subcommands, output formatters, and other extensions."
 set name=com.oracle.info.description value="the Python cliff module"
-set name=com.oracle.info.tpno value=15998
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -42,7 +41,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
@@ -50,18 +48,24 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/app.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/command.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/commandmanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cliff/complete.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/display.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/commaseparated.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cliff/formatters/value.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/help.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/interactive.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/lister.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cliff/show.py
 license cliff.license license="Apache v2.0, MIT"
 
+# force a group dependency on the optional prettytable; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/prettytable-$(PYV)
+
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
@@ -76,5 +80,17 @@
 # force a dependency on cmd2; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/cmd2-$(PYV)
 
-# force a dependency on prettytable; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/prettytable-$(PYV)
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on pyparsing; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pyparsing-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/django-pyscss/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,54 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		django-pyscss
+COMPONENT_VERSION=	1.0.6
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:4575e65fa1a28529211ba22d7009e62d4f25a4ab2e7d7de14abea2e5b1c9f8f6
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/fusionbox/django-pyscss
+COMPONENT_BUGDB=	python-mod/django-pyscss
+
+TPNO=			20370
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# The tarball for this version does not ship unittests.  See
+# https://github.com/fusionbox/django-pyscss/issues/30 for more
+# information.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/django-pyscss/django-pyscss-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,69 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/django-pyscss-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Django PySCSS helper class"
+set name=pkg.description \
+    value="A collection of tools for making it easier to use pyScss within Django."
+set name=com.oracle.info.description value="the PySCSS helper class for Django"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Fusionbox, Inc. <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/069
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss/compressor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss/scss.py
+file path=usr/lib/python$(PYVER)/vendor-packages/django_pyscss/utils.py
+license LICENSE license=BSD
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on django; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/django-$(PYV)
+
+# force a dependency on the django-pyscss package
+depend type=require \
+    fmri=library/python/django-pyscss@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on django_compressor; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python-2/django_compressor-$(PYV)
+
+# force a dependency on pyscss; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pyscss-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/django-pyscss/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/django/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		Django
-COMPONENT_VERSION=	1.4.11
+COMPONENT_VERSION=	1.4.20
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:4819d8b37405b33f4f0d156f60918094d566249f52137c5e6e0dbaa12995c201
+    sha256:58ac719464c4c8b13d664ded6770450602528bf4c36f9fd5daabdae8d410ebb1
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://www.djangoproject.com/
 COMPONENT_BUGDB=	python-mod/django
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			22010
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 # Replace "#!/usr/bin/env ..." shebang lines with properly versioned ones.
 COMPONENT_POST_BUILD_ACTION = \
--- a/components/python/django/django-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django/django-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,18 +18,20 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# The functionality of unittest2 is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/unittest2-27 -> drop>
+# pyyaml is only delivered for python 2.6
+<transform depend type=group fmri=library/python-2/pyyaml-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/django-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Django Python web framework"
 set name=pkg.description \
     value="Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design."
 set name=com.oracle.info.description value="the Django Python web framework"
-set name=com.oracle.info.tpno value=17445
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
@@ -38,6 +40,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/002
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/django-admin target=django-admin-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/django-admin-$(PYVER)
@@ -267,6 +270,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/filters.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/helpers.py
@@ -2382,35 +2386,40 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/views/generic/simple.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/views/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/views/static.py
+#
 license django.license license="BSD, Apache 2.0, MIT, PSFv2"
 
-# force the rename with an optional dependency on the old name
-depend type=optional \
-    fmri=library/python-2/django-$(PYV)@1.4.10,5.11-0.175.2.0.0.40.0
+# force a group dependency on the optional python-imaging; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python-2/python-imaging-$(PYV)
+
+# force a group dependency on the optional python-memcached; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/python-memcached-$(PYV)
+
+# force a group dependency on the optional pytz; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pytz-$(PYV)
+
+# force a group dependency on the optional pyyaml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pyyaml-$(PYV)
+
+# force a group dependency on the optional setuptools; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/setuptools-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a group dependency on the optional unittest2; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/unittest2-$(PYV)
+
+# force a dependency on package delivering GNU msgfmt(1)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/gnu/bin/msgfmt
 
 # force a dependency on the django package
 depend type=require \
     fmri=library/python/django@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-
-# force a dependency on ipython; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/ipython-$(PYV)
-
-# force a dependency on markdown; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/markdown-$(PYV)
-
-# force a dependency on python-imaging; pkgdepend work is needed to
-# flush this out.
-depend type=require fmri=library/python-2/python-imaging-$(PYV)
-
-# force a dependency on python-mysql; pkgdepend work is needed to
-# flush this out.
-depend type=require fmri=library/python-2/python-mysql-$(PYV)
-
-# force a dependency on pytz; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/pytz-$(PYV)
-
-# force a dependency on simplejson; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/simplejson-$(PYV)
-
-# force a dependency on unittest2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/unittest2-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/django/patches/use-gnu-msgfmt.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,14 @@
+Patch to address 20638369.  This patch is Solaris specific and not
+suitable for upstream contribution.
+
+--- Django-1.4.19/django/core/management/commands/compilemessages.py.orig	2015-03-03 12:41:29.911259727 -0700
++++ Django-1.4.19/django/core/management/commands/compilemessages.py	2015-03-03 12:42:00.821142374 -0700
+@@ -44,7 +44,7 @@ def compile_messages(stderr, locale=None
+                     if sys.platform == 'win32': # Different shell-variable syntax
+                         cmd = 'msgfmt --check-format -o "%djangocompilemo%" "%djangocompilepo%"'
+                     else:
+-                        cmd = 'msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"'
++                        cmd = '/usr/gnu/bin/msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"'
+                     os.system(cmd)
+ 
+ 
--- a/components/python/django/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,2 +1,3 @@
 runtime/python-26
 runtime/python-27
+text/gnu-gettext
--- a/components/python/django_compressor/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django_compressor/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		django_compressor
-COMPONENT_VERSION=	1.3
+COMPONENT_VERSION=	1.4
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:66ff1a845a6c1b16c4cf552ee3d746033979e46cd9bd5d999d4b5dae93327a52
+    sha256:b26034230efcef7d60e5267890eda656dfc49c567f27125d907eee4fe7f9a6ec
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://django-compressor.readthedocs.org
-COMPONENT_BUGDB=	python-mod/django_compressor
+COMPONENT_BUGDB=	python-mod/django-cmpress
+
+TPNO=			21719
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/django_compressor/django_compressor-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django_compressor/django_compressor-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -26,8 +28,8 @@
 set name=pkg.summary value="JavaScript / CSS compressor"
 set name=pkg.description \
     value="Django Compressor combines and compresses linked and inline Javascript or CSS in a Django templates into cacheable static files."
-set name=com.oracle.info.description value="the django_compressor Python module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.description value="the Python django_compressor module"
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
@@ -36,6 +38,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/004
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/cache.py
@@ -51,6 +54,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/css_default.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/cssmin/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/cssmin/cssmin.py
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/cssmin/rcssmin.py \
+    pkg.depend.bypass-generate=.*/_rcssmin.*
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/csstidy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/datauri.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/jsmin/__init__.py
@@ -59,6 +65,7 @@
     pkg.depend.bypass-generate=.*/_rjsmin.*
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/jsmin/slimit.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/template.py
+file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/yuglify.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/filters/yui.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/finders.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/js.py
@@ -67,6 +74,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/management/commands/compress.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/management/commands/mtime_cache.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/compressor/offline/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/compressor/offline/django.py
+file path=usr/lib/python$(PYVER)/vendor-packages/compressor/offline/jinja2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/parser/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/parser/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/compressor/parser/beautifulsoup.py
@@ -91,16 +101,17 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django_compressor-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/django_compressor-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/django_compressor-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license django_compressor.license license="BSD, MIT, Apache 2.0"
 
+# force a group dependency on the optional lxml; pkgdepend work is needed to
+# flush this out
+depend type=group fmri=library/python-2/lxml-$(PYV)
+
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
 
-# force a dependency on beautifulsoup4; pkgdepend work is needed to
-# flush this out
-depend type=require fmri=library/python-2/beautifulsoup4-$(PYV)
-
 # force a dependency on django; pkgdepend work is needed to flush this out
 depend type=require fmri=library/python/django-$(PYV)
 
@@ -112,5 +123,5 @@
 depend type=require \
     fmri=library/python-2/django_compressor@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
-# force a dependency on lxml; pkgdepend work is needed to flush this out
-depend type=require fmri=library/python-2/lxml-$(PYV)
+# force a dependency on jinja2; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/jinja2-$(PYV)
--- a/components/python/django_openstack_auth/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django_openstack_auth/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		django_openstack_auth
-COMPONENT_VERSION=	1.1.3
+COMPONENT_VERSION=	1.1.9
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:565a4b322e1eb2d0cf8df59ae58b49b2e324c414a6dd0ba4a6aa3459600314da
+    sha256:650b3fd528d179a36cf629aa7dad53e03aed6cf9300ea4a337260887e71e9b53
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
-COMPONENT_BUGDB=	python-mod/django_openstack_auth
+COMPONENT_BUGDB=	python-mod/openstack-auth
+
+TPNO=			21746
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/django_openstack_auth/django_openstack_auth-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/django_openstack_auth/django_openstack_auth-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -29,7 +31,7 @@
     value="Django OpenStack Auth is a pluggable Django authentication backend that works with Django's contrib.auth framework to authenticate a user against OpenStack's Keystone Identity API."
 set name=com.oracle.info.description \
     value="the django_openstack_auth Django authentication backend"
-set name=com.oracle.info.tpno value=16306
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
@@ -38,57 +40,31 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/005
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/django_openstack_auth-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/backend.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/forms.py
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ar/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/de/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/en_AU/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/en_AU/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/en_GB/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/es/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/es_MX/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/fr/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/hi/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ja/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ko_KR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ko_KR/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/nl_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/nl_NL/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/openstack_auth.pot
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pl_PL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pl_PL/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pt/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/pt_BR/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/ru/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/uk/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/zh_CN/LC_MESSAGES/django.po
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/locale/zh_TW/LC_MESSAGES/django.po
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/openstack/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/urls.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/user.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/openstack_auth/views.py
+#
 license django_openstack_auth.license license="Apache v2.0"
 
 # force a dependency on the Python runtime
@@ -101,3 +77,26 @@
 # force a dependency on the django_openstack_auth package
 depend type=require \
     fmri=library/python-2/django_openstack_auth@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- a/components/python/django_openstack_auth/patches/CVE-2014-8124.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-django_openstack_auth patch for CVE-2014-8124.  This will be fixed in
-a future version of django_openstack_auth
-
-From e676c88a329af57d6c4f13df54f6e1e06c1f8360 Mon Sep 17 00:00:00 2001
-From: eric <[email protected]>
-Date: Mon, 8 Dec 2014 16:38:26 -0700
-Subject: [PATCH] Horizon login page contains DOS attack mechanism
-
-the horizon login page (and middleware) accesses the session
-too early in the login process, which will create session records
-in the session backend.  This is especially problematic when non-cookie
-backends are used.
-
-Co-Authored-By: Tihomir Trifonov <[email protected]>
-Co-Authored-By: Eric Peterson <[email protected]>
-
-Change-Id: I9a4999eb5f053515575ef09b8ba9d3bb3f114e5c
-Closes-Bug: 1394370
-
---- django_openstack_auth-1.1.3/openstack_auth/forms.py.orig
-+++ django_openstack_auth-1.1.3/openstack_auth/forms.py
-@@ -96,7 +96,6 @@ class Login(AuthenticationForm):
-             msg = 'Login failed for user "%(username)s".' % \
-                 {'username': username}
-             LOG.warning(msg)
--            self.request.session.flush()
-             raise forms.ValidationError(exc)
-         if hasattr(self, 'check_for_test_cookie'):  # Dropped in django 1.7
-             self.check_for_test_cookie()
--- a/components/python/eventlet/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/eventlet/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		eventlet
-COMPONENT_VERSION=	0.13.0
+COMPONENT_VERSION=	0.15.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:d98118f01c064a6d256a264d4b939b2c6ad0814875c3b37859306c6ed1b4982c
+    sha256:eaec368ce7b819f8615dcb51f63dcb5c910538cdedc99e4bba4c90ed0bf70fdc
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://eventlet.net/
 COMPONENT_BUGDB=	python-mod/eventlet
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21720
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/eventlet/eventlet-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/eventlet/eventlet-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="Eventlet is a concurrent networking library for Python that allows you to change how you run your code, not how you write it. It uses libevent for highly scalable non-blocking I/O. Coroutines or green threads ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O. The event dispatch is implicit, which means you can easily use Eventlet from the Python interpreter, or as a small part of a larger application."
 set name=com.oracle.info.description value="the Python eventlet module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -66,6 +68,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/_socket_nodns.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/asynchat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/asyncore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/builtin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/ftplib.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/httplib.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/green/os.py
@@ -98,13 +101,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/proc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/processes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/queue.py
-file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/saranwrap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/semaphore.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/greendns.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/greenlets.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/psycopg2_patcher.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/pylib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/six.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/stacklesspypys.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/support/stacklesss.py
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/timeout.py
@@ -119,6 +122,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/eventlet/wsgi.py
 license eventlet.license license="MIT, Apache 2.0, BSD"
 
+# force a group dependency on the optional pyopenssl; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/pyopenssl-$(PYV)
+
+# force a group dependency on the optional setuptools; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/setuptools-$(PYV)
+
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/futures/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,54 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		futures
+COMPONENT_VERSION=	2.2.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:151c057173474a3a40f897165951c0e33ad04f37de65b6de547ddef107fd0ed3
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://code.google.com/p/pythonfutures/
+COMPONENT_BUGDB=	python-mod/futures
+
+TPNO=			21622
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR =	$(SOURCE_DIR)
+COMPONENT_TEST_ARGS =	test_futures.py
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/futures/futures-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,65 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/futures-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="A Java-style futures package for Python"
+set name=pkg.description \
+    value="This package implements PEP-3148 which provides for the evaluation of callables using threads and processes. It provides two core classes: Executor and Future. An Executor receives asynchronous work requests (in terms of a callable and its arguments) and returns a Future to represent the execution of that work request."
+set name=com.oracle.info.description \
+    value="the Python Futures module for launching parallel tasks"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Alex Gronholm <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/303
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/futures/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/futures/_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/futures/_compat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/futures/process.py
+file path=usr/lib/python$(PYVER)/vendor-packages/concurrent/futures/thread.py
+file path=usr/lib/python$(PYVER)/vendor-packages/futures-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/futures-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/futures-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/futures-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/futures-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/futures/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/futures/process.py
+file path=usr/lib/python$(PYVER)/vendor-packages/futures/thread.py
+#
+license LICENSE license=BSD
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the futures package
+depend type=require \
+    fmri=library/python/futures@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/futures/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glance_store/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		glance_store
+COMPONENT_VERSION=	0.1.10
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:b390fea864f1398f79ab66ce99c3b868b86ac1bf97dbe89ba4498506e2af7d02
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/openstack/glance_store
+COMPONENT_BUGDB=	python-mod/glance_store
+
+TPNO=			21623
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glance_store/glance_store-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,135 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/glance_store-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Image Service Store Library"
+set name=pkg.description \
+    value="The glance_store library supports the creation, deletion, and gather of data assets from/to a set of several, different, storage technologies."
+set name=com.oracle.info.description \
+    value="glance_store, the OpenStack Image Service Store Library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management"
+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/2015/059
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/cinder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/filesystem.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/gridfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/http.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/rbd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/s3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/sheepdog.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/swift/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/swift/store.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/swift/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/_drivers/vmware_datastore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/common/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/location.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/openstack/common/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance_store/openstack/common/processutils.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional boto; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/boto-$(PYV)
+
+# force a group dependency on the optional cinderclient; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/cinderclient-$(PYV)
+
+# force a group dependency on the optional oslo.vmware; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/oslo.vmware-$(PYV)
+
+# force a group dependency on the optional swiftclient; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/swiftclient-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on eventlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/eventlet-$(PYV)
+
+# force a dependency on the glance_store package
+depend type=require \
+    fmri=library/python/glance_store@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on httplib2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/httplib2-$(PYV)
+
+# force a dependency on ordereddict; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/ordereddict-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glance_store/glance_store.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,211 @@
+The following applies to all products licensed under the Apache 2.0 License:
+
+You may not use the identified files except in compliance with the Apache License, Version 2.0 (the "License.")
+ 
+You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.  A copy of the license is also reproduced below.
+
+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.
+
+		                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glance_store/patches/no-tests.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,16 @@
+In-house patch to remove the reference to glance_store's tests in the
+Python package's entry_points.txt file. Without this change, a warning
+is printed in some of the Glance service logs. Not suitable for the
+upstream.
+
+--- glance_store-0.1.10/setup.cfg.orig	2014-11-17 12:15:39.000000000 -0800
++++ glance_store-0.1.10/setup.cfg	2015-01-27 09:38:35.386243430 -0800
+@@ -33,8 +33,6 @@ glance_store.drivers =
+ 	cinder = glance_store._drivers.cinder:Store
+ 	gridfs = glance_store._drivers.gridfs:Store
+ 	vmware = glance_store._drivers.vmware_datastore:Store
+-	# TESTS ONLY
+-	no_conf = glance_store.tests.fakes:UnconfigurableStore
+ 	# Backwards compatibility
+ 	glance.store.filesystem.Store = glance_store._drivers.filesystem:Store
+ 	glance.store.http.Store = glance_store._drivers.http:Store
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glance_store/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/glanceclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/glanceclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,23 +20,26 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-glanceclient
-COMPONENT_VERSION=	0.12.0
+COMPONENT_VERSION=	0.15.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:d7de76f8ccdd889c9c0cd7d035fc20247fcafb8405295bc6aa1505d5692b2fa3
+    sha256:491805e7ef2f35aaafd124af6f49347a440c4e8fa5f4fb0dd61f0666eee360d0
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-glanceclient
 COMPONENT_BUGDB=	service/glance
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21731
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/glanceclient/glanceclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/glanceclient/glanceclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -23,17 +23,15 @@
 # Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/glanceclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Glance API"
+    value="Python and command-line clients for the OpenStack Images API"
 set name=pkg.description \
     value="A client library for Glance built on the OpenStack Images API. It provides a Python API (the 'glanceclient' module) and a command-line tool ('glance'). This library fully supports the v1 Images API, while support for the v2 API is in progress."
 set name=com.oracle.info.description \
     value="glanceclient, the Python bindings to the OpenStack Images API"
-set name=com.oracle.info.tpno value=16348
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -45,6 +43,7 @@
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 link path=usr/bin/glance target=glance-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
+#
 file path=usr/bin/glance-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/client.py
@@ -52,11 +51,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/http.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/https.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/progressbar.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/exc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/apiclient/fake_client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/openstack/common/strutils.py
@@ -65,15 +71,16 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/image_members.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/images.py
-file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/legacy_shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/image_members.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/image_tags.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/metadefs.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/schemas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/tasks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -81,23 +88,36 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license glanceclient.license license="Apache v2.0"
 
 # force a group dependency on the optional eventlet; pkgdepend work is needed to
 # flush this out.
 depend type=group fmri=library/python-2/eventlet-$(PYV)
 
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/argparse-$(PYV)
 
+# force a dependency on the glanceclient package
+depend type=require \
+    fmri=library/python/glanceclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
 # force a dependency on jsonpatch; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/jsonpatch-$(PYV)
 
-# force a dependency on netaddr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/netaddr-$(PYV)
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
 
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/pbr-$(PYV)
+depend type=require fmri=library/python/pbr-$(PYV)
 
 # force a dependency on prettytable; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/prettytable-$(PYV)
@@ -105,16 +125,17 @@
 # force a dependency on pyopenssl; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/pyopenssl-$(PYV)
 
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
 # force a dependency on six; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/six-$(PYV)
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # force a dependency on warlock; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/warlock-$(PYV)
 
-# force a dependency on the glanceclient package
-depend type=require \
-    fmri=library/python/glanceclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-
-# force a dependency on keystoneclient; pkgdepend work is needed to flush this
-# out.
-depend type=require fmri=library/python/keystoneclient-$(PYV)
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
--- a/components/python/greenlet/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/greenlet/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		greenlet
-COMPONENT_VERSION=	0.4.1
+COMPONENT_VERSION=	0.4.5
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).zip
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:ea671592f8460541286b133ed46a6cf5311a6b75051cc31b53e2bc38992b775a
+    sha256:b990f00f120c4cfb6672eec2acd32210990a2c7b70b815c034d1d8cbf08e2dbe
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://github.com/python-greenlet/greenlet
 COMPONENT_BUGDB=	python-mod/greenlet
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21721
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -54,7 +59,7 @@
 PYTHON_ENV += CFLAGS="$(CFLAGS)"
 COMPONENT_INSTALL_ENV += $(PYTHON_ENV)
 
-# One of the tests, test_exception_switch (tests.test_cpp.CPPTests), 
+# One of the tests, test_exception_switch (tests.test_cpp.CPPTests),
 # failed in 64-bit. Skip it for now.
 COMPONENT_TEST_ENV +=	GREENLET_TEST_CPP=no
 COMPONENT_TEST_ENV +=	PYTHONPATH=$(PROTO_DIR)$(PYTHON_VENDOR_PACKAGES.32)
--- a/components/python/greenlet/greenlet-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/greenlet/greenlet-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,17 +18,19 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/greenlet-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-set name=pkg.summary value="Coroutine module for Python"
+set name=pkg.summary value="Lightweight in-process concurrent programming"
 set name=pkg.description \
-    value="Greenlet is a Python module providing lightweight coroutines for in-process concurrent programming."
+    value="The greenlet package supports micro-threads called 'tasklets'. Tasklets run pseudo-concurrently (typically in a single or a few OS-level threads) and are synchronized with data exchanges on 'channels'. A 'greenlet', on the other hand, is a still more primitive notion of micro-thread with no implicit scheduling; coroutines, in other words. This is useful when one want to control exactly when one's code runs. One can build custom scheduled micro-threads on top of greenlet; However, greenlets are useful on their own as a way to make advanced control flow structures. For example, one can recreate generators; the difference with Python's own generators is that greenlet's generators can call nested functions and the nested functions can yield values too."
 set name=com.oracle.info.description \
     value="the Python greenlet coroutine module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -36,10 +38,13 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/140
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-file path=usr/include/python$(PYVER)/greenlet/greenlet.h
+#
+$(PYTHON_2.6_ONLY)file path=usr/include/python$(PYVER)/greenlet/greenlet.h
+$(PYTHON_2.7_ONLY)file path=usr/include/python$(PYVER)/greenlet/greenlet.h
 file path=usr/lib/python$(PYVER)/vendor-packages/64/greenlet.so
 file path=usr/lib/python$(PYVER)/vendor-packages/greenlet-$(COMPONENT_VERSION)-py$(PYVER).egg-info
 file path=usr/lib/python$(PYVER)/vendor-packages/greenlet.so
+#
 license greenlet.license license="MIT, PSFv2"
 
 # force a dependency on the Python runtime
--- a/components/python/greenlet/patches/01-slp_switch-sparc-multi-thread.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-The following patch comes from the upstream 0.4.2 distribution and
-addresses the stated problem. It will be removed here once we update to
-a later version of greenlet.
-
-commit 3b03825089384f86842032ec1476ad3031908d43
-Author: Floris Bruynooghe <[email protected]>
-Date:   Mon Sep 2 10:25:14 2013 +0100
-
-    Fix slp_switch on SPARC for multi-threaded environments
-    
-    The CLEAN_WINDOWS trap was wrongly removed previously.  It is not
-    required in a single-threaded environment but does need to be present
-    for the switching code to not mess up the register windows in a multi-
-    threaded environment.
-
-diff --git a/platform/switch_sparc_sun_gcc.h b/platform/switch_sparc_sun_gcc.h
-index 1f701a2..5c67205 100644
---- a/platform/switch_sparc_sun_gcc.h
-+++ b/platform/switch_sparc_sun_gcc.h
-@@ -2,6 +2,11 @@
-  * this is the internal transfer function.
-  *
-  * HISTORY
-+ * 30-Aug-13  Floris Bruynooghe <[email protected]>
-+        Clean the register windows again before returning.
-+        This does not clobber the PIC register as it leaves
-+        the current window intact and is required for multi-
-+        threaded code to work correctly.
-  * 08-Mar-11  Floris Bruynooghe <[email protected]>
-  *      No need to set return value register explicitly
-  *      before the stack and framepointer are adjusted
-@@ -28,7 +33,8 @@
- 
- 
- #define STACK_MAGIC 0
--#define ST_FLUSH_WINDOWS 3
-+#define ST_FLUSH_WINDOWS 0x03
-+#define ST_CLEAN_WINDOWS 0x04
- 
- static int
- slp_switch(void)
-@@ -37,7 +43,17 @@ slp_switch(void)
- 
-     /* Flush SPARC register windows onto the stack, so they can be used to
-      * restore the registers after the stack has been switched out and
--     * restored.  Then put the stack pointer into stackref. */
-+     * restored.  This also ensures the current window (pointed at by
-+     * the CWP register) is the only window left in the registers
-+     * (CANSAVE=0, CANRESTORE=0), that means the registers of our
-+     * caller are no longer there and when we return they will always
-+     * be loaded from the stack by a window underflow/fill trap.
-+     *
-+     * On SPARC v9 and above it might be more efficient to use the
-+     * FLUSHW instruction instead of TA ST_FLUSH_WINDOWS.  But that
-+     * requires the correct -mcpu flag to gcc.
-+     *
-+     * Then put the stack pointer into stackref. */
-     __asm__ volatile (
-         "ta %1\n\t"
-         "mov %%sp, %0"
-@@ -57,11 +73,13 @@ slp_switch(void)
-         /* Copy new stack from it's save store on the heap */
-         SLP_RESTORE_STATE();
- 
--        /* No need to restore any registers from the stack nor clear them: the
--         * frame pointer has just been set and the return value register is
--         * also being set by the return statement below.  After returning a
--         * restore instruction is given and the frame below us will load all
--         * it's registers using a fill_trap if required. */
-+        /* No need to set the return value register, the return
-+         * statement below does this just fine.  After returning a restore
-+         * instruction is given and a fill-trap will load all the registers
-+         * from the stack if needed.  However in a multi-threaded environment
-+         * we can't guarantee the other register windows are fine to use by
-+         * their threads anymore, so tell the CPU to clean them. */
-+        __asm__ volatile ("ta %0" : : "i" (ST_CLEAN_WINDOWS));
- 
-         return 0;
-     }
-
--- a/components/python/heatclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/heatclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,23 +20,26 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-heatclient
-COMPONENT_VERSION=	0.2.9
+COMPONENT_VERSION=	0.2.12
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:8cc6d99f86529633b8b5d99417358fd7c023223572f190ae3e1da09ff435420f
+    sha256:e9d5b74206b322ce30184a1b132a78b8be1806be85c77361fb72a966c4c48afe
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-heatclient
 COMPONENT_BUGDB=	service/heat
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21733
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/heatclient/heatclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/heatclient/heatclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,22 +20,20 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 # pyyaml is only delivered for python 2.6
 <transform depend type=require fmri=library/python-2/pyyaml-27 -> drop>
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/heatclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Heat API"
+    value="Python and command-line clients for the OpenStack Orchestration API"
 set name=pkg.description \
     value="A client for the OpenStack Orchestration API. There's a Python API (the 'heatclient' module), and a command-line script ('heat'). Each implements 100% of the OpenStack Orchestration API."
 set name=com.oracle.info.description \
     value="heatclient, the Python bindings to the OpenStack Orchestration API"
-set name=com.oracle.info.tpno value=17303
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -45,6 +43,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/163
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/heat target=heat-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/heat-$(PYVER)
@@ -60,8 +59,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/auth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/apiclient/fake_client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/cliutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/heatclient/openstack/common/importutils.py
@@ -88,18 +90,37 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_heatclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_heatclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_heatclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license LICENSE license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
 # flush this out.
 depend type=group fmri=library/python-2/anyjson-$(PYV)
 
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/argparse-$(PYV)
 
 # force a dependency on babel; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/babel-$(PYV)
 
+# force a dependency on the heatclient package
+depend type=require \
+    fmri=library/python/heatclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
 # force a dependency on prettytable; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/prettytable-$(PYV)
 
@@ -109,18 +130,8 @@
 # force a dependency on requests; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/requests-$(PYV)
 
-# force a dependency on the heatclient package
-depend type=require \
-    fmri=library/python/heatclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
-
-# force a dependency on keystoneclient; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/keystoneclient-$(PYV)
-
-# force a dependency on pbr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/pbr-$(PYV)
-
 # force a dependency on six; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/iniparse/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		iniparse
+COMPONENT_VERSION=	0.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:abc1ee12d2cfb2506109072d6c21e40b6c75a3fe90a9c924327d80bc0d99c054
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://code.google.com/p/iniparse/
+COMPONENT_BUGDB=	python-mod/iniparse
+
+TPNO=			21564
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+# to make sure that the docs get installed in the right place.
+PYTHON_DATA = /usr
+
+COMPONENT_TEST_DIR =	$(COMPONENT_SRC)
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/iniparse/iniparse-GENFRAG.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,31 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+#
+file path=usr/share/doc/iniparse-$(COMPONENT_VERSION)/README
+file path=usr/share/doc/iniparse-$(COMPONENT_VERSION)/index.html
+file path=usr/share/doc/iniparse-$(COMPONENT_VERSION)/style.css
+#
+license LICENSE license=MIT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/iniparse/iniparse-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/iniparse-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Accessing and Modifying INI files"
+set name=pkg.description \
+    value="iniparse is an INI parser for Python which is API compatible with the standard library's ConfigParser, preserves structure of INI files (order of sections & options, indentation, comments, and blank lines are preserved when data is updated), and is more convenient to use."
+set name=com.oracle.info.description value="the Python iniparse module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Paramjit Oberoi <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/102
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse-$(COMPONENT_VERSION)-py$(PYVER).egg-info
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse/compat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse/ini.py
+file path=usr/lib/python$(PYVER)/vendor-packages/iniparse/utils.py
+#
+license LICENSE license=MIT
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the iniparse package
+depend type=require \
+    fmri=library/python/iniparse@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/iniparse/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddr/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,54 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		ipaddr
+COMPONENT_VERSION=	2.1.11
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:1b555b8a8800134fdafe32b7d0cb52f5bdbfdd093707c3dd484c5ea59f1d98b7
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://code.google.com/p/ipaddr-py/
+COMPONENT_BUGDB=	python-mod/ipaddr
+
+TPNO=			20373
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR =    $(SOURCE_DIR)
+COMPONENT_TEST_ARGS =   ipaddr_test.py
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddr/ipaddr-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,52 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/ipaddr-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Google's IP address manipulation library"
+set name=pkg.description \
+    value="A fast, lightweight IPv4/IPv6 manipulation library in Python. The ipaddr library can be used to create/poke/manipulate IPv4 and IPv6 addresses and network numbers."
+set name=com.oracle.info.description value="the IP Address Manipulation Library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="ipaddr <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/060
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddr-$(COMPONENT_VERSION)-py$(PYVER).egg-info
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddr.py
+#
+license COPYING license="Apache 2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the ipaddr package
+depend type=require \
+    fmri=library/python/ipaddr@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddr/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/jinja2/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/jinja2/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
@@ -34,9 +34,11 @@
 COMPONENT_PROJECT_URL=	http://jinja.pocoo.org/
 COMPONENT_BUGDB=	python-mod/jinja2
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			19350
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/jinja2/jinja2-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/jinja2/jinja2-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -30,7 +30,7 @@
     value="Jinja2 is one of the most used template engines for Python. It is inspired by Django's templating system but extends it with an expressive language that gives template authors a more powerful set of tools. On top of that it adds sandboxed execution and optional automatic escaping for applications where security is important. It is internally based on Unicode and runs on a wide range of Python versions."
 set name=com.oracle.info.description \
     value="Jinja2, the template engine for Python"
-set name=com.oracle.info.tpno value=19350
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -72,10 +72,6 @@
 #
 license LICENSE license=BSD
 
-# force a group dependency on the optional babel; pkgdepend work is needed to
-# flush this out.
-depend type=group fmri=library/python-2/babel-$(PYV)
-
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
--- a/components/python/keystoneclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/keystoneclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,26 +20,26 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-keystoneclient
-COMPONENT_VERSION=	0.8.0
+COMPONENT_VERSION=	1.0.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:6a34e10e67f375c82fefbb787072767da976520b302021b5d7237bd78e93f8cf
+    sha256:6d960d2196efc7a181519a77f757a27ceeeac71f41f624318ae7f1088d2e6db4
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-keystoneclient
 COMPONENT_BUGDB=	service/keystone
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21732
 
-# Depends on netaddr, which depends on ipython, which is not Python 3 ready.
-PYTHON_VERSIONS=	2.7 2.6
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/keystoneclient/keystoneclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/keystoneclient/keystoneclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,20 +20,18 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/keystoneclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Keystone API"
+    value="Python and command-line clients for the OpenStack Identity API"
 set name=pkg.description \
     value="A client for the OpenStack Identity API, implemented by Keystone. There's a Python API (the 'keystoneclient' module), and a command-line script ('keystone')."
 set name=com.oracle.info.description \
     value="keystoneclient, the Python bindings to the OpenStack Identity API"
-set name=com.oracle.info.tpno value=17870
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -43,17 +41,26 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/007
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/keystone target=keystone-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/keystone-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/_discover.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/access.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/adapter.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/apiclient/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/apiclient/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/conf.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/generic/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/generic/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/generic/password.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/generic/token.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/v2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/identity/v3.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/auth/token_endpoint.py
@@ -63,39 +70,43 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/common/cms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/auth/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/auth/v3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/auth/v3/saml2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/bootstrap/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/bootstrap/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/ec2/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/ec2/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/revoke/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/contrib/revoke/model.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/discover.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/fixture/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/fixture/discovery.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/fixture/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/fixture/v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/fixture/v3.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/generic/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/generic/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/generic/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/httpclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/middleware/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/middleware/auth_token.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/middleware/memcache_crypt.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/middleware/s3_token.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/_i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/auth.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/fake_client.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/fixture/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/fixture/config.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/gettextutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/importutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/apiclient/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/memorycache.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/strutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/uuidutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/service_catalog.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/session.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/shell.py
@@ -104,6 +115,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/ec2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/endpoints.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/extensions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/roles.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/services.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/shell.py
@@ -114,10 +126,22 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/endpoint_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/endpoint_policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/domains.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/identity_providers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/mappings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/projects.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/federation/protocols.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/access_tokens.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/consumers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/request_tokens.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/oauth1/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/contrib/trusts.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/credentials.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/domains.py
@@ -125,26 +149,39 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/policies.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/projects.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/regions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/role_assignments.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/roles.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/tokens.py
 file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/users.py
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_keystoneclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license keystoneclient.license license="Apache v2.0"
 
-# force a group dependency on the optional anyjson; pkgdepend work is needed to
-# flush this out.
-depend type=group fmri=library/python-2/anyjson-$(PYV)
-
 # force a group dependency on the optional eventlet; pkgdepend work is needed to
 # flush this out.
 depend type=group fmri=library/python-2/eventlet-$(PYV)
 
+# force a group dependency on the optional m2crypto; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/m2crypto-$(PYV)
+
+# force a group dependency on the optional oauthlib; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/oauthlib-$(PYV)
+
+# force a group dependency on the optional python-memcache; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/python-memcached-$(PYV)
+
 # force a group dependency on the optional simplejson; pkgdepend work is needed
 # to flush this out.
 depend type=group fmri=library/python-2/simplejson-$(PYV)
@@ -152,36 +189,46 @@
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/argparse-$(PYV)
 
-# force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-$(PYV)
+# force a dependency on the keystoneclient package
+depend type=require \
+    fmri=library/python/keystoneclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on lxml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/lxml-$(PYV)
 
 # force a dependency on netaddr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/netaddr-$(PYV)
 
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
 # force a dependency on prettytable; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/prettytable-$(PYV)
 
 # force a dependency on requests; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/requests-$(PYV)
 
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
 # force a dependency on stevedore; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # force a dependency on webob; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/webob-$(PYV)
-
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
-
-# force a dependency on the keystoneclient package
-depend type=require \
-    fmri=library/python/keystoneclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-
-# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/oslo.config-$(PYV)
-
-# force a dependency on pbr; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/pbr-$(PYV)
-
-# force a dependency on six; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/six-$(PYV)
--- a/components/python/keystoneclient/patches/01-CVE-2014-7144.patch	Thu Apr 16 01:36:32 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-This upstream patch addresses CVE-2014-7144 and is tracked under
-Launchpad bug 1353315. It is addressed in keystonemiddleware 1.2.0 and
-python-keystoneclient 0.11.0. It has been modified to apply cleanly
-into our current python-keystoneclient 0.8.0 implementation.
-
-commit 5c9c97f1a5dffe5964e945bf68d009fd68e616fc
-Author: Qin Zhao <[email protected]>
-Date:   Wed Aug 6 15:47:58 2014 +0800
-
-    Fix the condition expression for ssl_insecure
-    
-    In the existing code, self.ssl_insecure is a string. If insecure
-    option is set in nova api-paste.ini, whatever it is 'true' or
-    'false', kwargs['verify'] will become False. This commit corrects
-    the condition expression. This patch is backported from
-    https://review.openstack.org/#/c/113191/
-    
-    Change-Id: I91db8e1cb39c017167a4160079846ac7c0663b03
-    Closes-Bug: 1353315
-
-diff --git a/keystoneclient/middleware/auth_token.py b/keystoneclient/middleware/auth_token.py
-index d2eb29b..b0316dd 100644
---- python-keystoneclient-0.8.0/keystoneclient/middleware/auth_token.py.~1~	2014-04-16 20:01:14.000000000 -0700
-+++ python-keystoneclient-0.8.0/keystoneclient/middleware/auth_token.py	2014-09-25 15:54:35.018360494 -0700
-@@ -369,6 +369,27 @@ def safe_quote(s):
-     return urllib.parse.quote(s) if s == urllib.parse.unquote(s) else s
- 
- 
-+def _conf_values_type_convert(conf):
-+    """Convert conf values into correct type."""
-+    if not conf:
-+        return {}
-+    _opts = {}
-+    opt_types = dict((o.dest, o.type) for o in opts)
-+    for k, v in six.iteritems(conf):
-+        try:
-+            if v is None:
-+                _opts[k] = v
-+            else:
-+                _opts[k] = opt_types[k](v)
-+        except KeyError:
-+            _opts[k] = v
-+        except ValueError as e:
-+            raise ConfigurationError(
-+                'Unable to convert the value of %s option into correct '
-+                'type: %s' % (k, e))
-+    return _opts
-+
-+
- class InvalidUserToken(Exception):
-     pass
- 
-@@ -404,7 +425,10 @@ class AuthProtocol(object):
-     def __init__(self, app, conf):
-         self.LOG = logging.getLogger(conf.get('log_name', __name__))
-         self.LOG.info('Starting keystone auth_token middleware')
--        self.conf = conf
-+        # NOTE(wanghong): If options are set in paste file, all the option
-+        # values passed into conf are string type. So, we should convert the
-+        # conf value into correct type.
-+        self.conf = _conf_values_type_convert(conf)
-         self.app = app
- 
-         # delay_auth_decision means we still allow unauthenticated requests
-diff --git a/keystoneclient/tests/test_auth_token_middleware.py b/keystoneclient/tests/test_auth_token_middleware.py
-index 5e1a71f..d794ae3 100644
---- python-keystoneclient-0.8.0/keystoneclient/tests/test_auth_token_middleware.py.~1~	2014-04-16 20:01:14.000000000 -0700
-+++ python-keystoneclient-0.8.0/keystoneclient/tests/test_auth_token_middleware.py	2014-09-25 15:52:13.791997920 -0700
-@@ -484,6 +484,29 @@ class NoMemcacheAuthToken(BaseAuthTokenM
-         self.assertEqual(
-             set([inner_cache, outer_cache]), set(self.middleware._cache_pool))
- 
-+    def test_conf_values_type_convert(self):
-+        conf = {
-+            'revocation_cache_time': '24',
-+            'identity_uri': 'https://keystone.example.com:1234',
-+            'include_service_catalog': '0',
-+            'nonexsit_option': '0',
-+        }
-+
-+        middleware = auth_token.AuthProtocol(self.fake_app, conf)
-+        self.assertEqual(datetime.timedelta(seconds=24),
-+                         middleware.token_revocation_list_cache_timeout)
-+        self.assertEqual(False, middleware.include_service_catalog)
-+        self.assertEqual('https://keystone.example.com:1234',
-+                         middleware.identity_uri)
-+        self.assertEqual('0', middleware.conf['nonexsit_option'])
-+
-+    def test_conf_values_type_convert_with_wrong_value(self):
-+        conf = {
-+            'include_service_catalog': '123',
-+        }
-+        self.assertRaises(auth_token.ConfigurationError,
-+                          auth_token.AuthProtocol, self.fake_app, conf)
-+
- 
- class CommonAuthTokenMiddlewareTest(object):
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystoneclient/patches/nopycrypto.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,95 @@
+In-house removal of PyCrypto dependency in keystoneclient. This patch
+is Solaris-specific and not suitable for upstream.
+
+--- python-keystoneclient-1.0.0/keystoneclient/middleware/memcache_crypt.py.~1~	2014-12-18 09:37:35.000000000 -0800
++++ python-keystoneclient-1.0.0/keystoneclient/middleware/memcache_crypt.py	2015-01-31 23:38:16.649757111 -0800
+@@ -17,7 +17,7 @@
+ Utilities for memcache encryption and integrity check.
+ 
+ Data should be serialized before entering these functions. Encryption
+-has a dependency on the pycrypto. If pycrypto is not available,
++has a dependency on M2Crypto. If M2Crypto is not available,
+ CryptoUnavailableError will be raised.
+ 
+ This module will not be called unless signing or encryption is enabled
+@@ -37,9 +37,10 @@ import sys
+ 
+ import six
+ 
+-# make sure pycrypto is available
++# make sure M2Crypto is available
+ try:
+-    from Crypto.Cipher import AES
++    from M2Crypto.EVP import Cipher
++    AES = Cipher
+ except ImportError:
+     AES = None
+ 
+@@ -72,6 +73,13 @@ class CryptoUnavailableError(Exception):
+     pass
+ 
+ 
++class InvalidKeyLength(Exception):
++    """raise when AES key length is an invalid value.
++
++    """
++    pass
++
++
+ def assert_crypto_availability(f):
+     """Ensure Crypto module is available."""
+ 
+@@ -131,31 +139,44 @@ def sign_data(key, data):
+     return base64.b64encode(mac)
+ 
+ 
++def _key_to_alg(key):
++    """Return a M2Crypto-compatible AES-CBC algorithm name given a key."""
++    aes_algs = {
++        128: 'aes_128_cbc',
++        192: 'aes_192_cbc',
++        256: 'aes_256_cbc'
++    }
++
++    keylen = 8 * len(key)
++    if keylen not in aes_algs:
++        msg = ('Invalid AES key length, %d bits') % keylen
++        raise InvalidKeyLength(msg)
++    return aes_algs[keylen]
++
++
+ @assert_crypto_availability
+ def encrypt_data(key, data):
+     """Encrypt the data with the given secret key.
+ 
+-    Padding is n bytes of the value n, where 1 <= n <= blocksize.
+     """
+     iv = os.urandom(16)
+-    cipher = AES.new(key, AES.MODE_CBC, iv)
+-    padding = 16 - len(data) % 16
+-    return iv + cipher.encrypt(data + six.int2byte(padding) * padding)
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=iv, op=1)
++    result = cipher.update(data)
++    return iv + result + cipher.final()
+ 
+ 
+ @assert_crypto_availability
+ def decrypt_data(key, data):
+     """Decrypt the data with the given secret key."""
+     iv = data[:16]
+-    cipher = AES.new(key, AES.MODE_CBC, iv)
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=iv, op=0)
+     try:
+-        result = cipher.decrypt(data[16:])
++        result = cipher.update(data[16:])
++        result = result + cipher.final()
+     except Exception:
+         raise DecryptError('Encrypted data appears to be corrupted.')
+ 
+-    # Strip the last n padding bytes where n is the last value in
+-    # the plaintext
+-    return result[:-1 * six.byte2int([result[-1]])]
++    return result
+ 
+ 
+ def protect_data(keys, data):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystonemiddleware/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		keystonemiddleware
+COMPONENT_VERSION=	1.3.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:0daaa16673bd664c8deeb58b3885ed8ae43dec07464c08f4e886c724cbd5c075
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/keystonemiddleware
+COMPONENT_BUGDB=	python-mod/keystonemiddle
+
+TPNO=			21624
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystonemiddleware/keystonemiddleware-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,115 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/keystonemiddleware-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Middleware for OpenStack Identity"
+set name=pkg.description \
+    value="The Keystone middleware architecture supports a common authentication protocol in use between the OpenStack projects. By using Keystone as a common authentication and authorization mechanism, the OpenStack project can plug in to existing authentication and authorization systems in use by existing environments."
+set name=com.oracle.info.description \
+    value="keystonemiddleware, the Python middleware for OpenStack Identity"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management"
+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/2015/067
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/_memcache_crypt.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/_memcache_pool.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/audit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/auth_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/ec2_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/openstack/common/memorycache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystonemiddleware/s3_token.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional m2crypto; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/m2crypto-$(PYV)
+
+# force a group dependency on the optional oslo.messaging; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/oslo.messaging-$(PYV)
+
+# force a group dependency on the optional python-memcached; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/python-memcached-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on the keystonemiddleware package
+depend type=require \
+    fmri=library/python/keystonemiddleware@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on pycadf; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pycadf-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystonemiddleware/patches/nopycrypto.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,95 @@
+In-house removal of PyCrypto dependency in keystonemiddleware. This
+patch is Solaris-specific and not suitable for upstream.
+
+--- keystonemiddleware-1.3.1/keystonemiddleware/_memcache_crypt.py.~1~	2014-12-22 12:40:35.000000000 -0800
++++ keystonemiddleware-1.3.1/keystonemiddleware/_memcache_crypt.py	2015-01-31 23:52:53.543098553 -0800
+@@ -17,7 +17,7 @@
+ Utilities for memcache encryption and integrity check.
+ 
+ Data should be serialized before entering these functions. Encryption
+-has a dependency on the pycrypto. If pycrypto is not available,
++has a dependency on M2Crypto. If M2Crypto is not available,
+ CryptoUnavailableError will be raised.
+ 
+ This module will not be called unless signing or encryption is enabled
+@@ -38,9 +38,10 @@ import sys
+ 
+ from keystonemiddleware.i18n import _
+ 
+-# make sure pycrypto is available
++# make sure M2Crypto is available
+ try:
+-    from Crypto.Cipher import AES
++    from M2Crypto.EVP import Cipher
++    AES = Cipher
+ except ImportError:
+     AES = None
+ 
+@@ -73,6 +74,13 @@ class CryptoUnavailableError(Exception):
+     pass
+ 
+ 
++class InvalidKeyLength(Exception):
++    """raise when AES key length is an invalid value.
++
++    """
++    pass
++
++
+ def assert_crypto_availability(f):
+     """Ensure Crypto module is available."""
+ 
+@@ -132,31 +140,44 @@ def sign_data(key, data):
+     return base64.b64encode(mac)
+ 
+ 
++def _key_to_alg(key):
++    """Return a M2Crypto-compatible AES-CBC algorithm name given a key."""
++    aes_algs = {
++        128: 'aes_128_cbc',
++        192: 'aes_192_cbc',
++        256: 'aes_256_cbc'
++    }
++
++    keylen = 8 * len(key)
++    if keylen not in aes_algs:
++        msg = ('Invalid AES key length, %d bits') % keylen
++        raise InvalidKeyLength(msg)
++    return aes_algs[keylen]
++
++
+ @assert_crypto_availability
+ def encrypt_data(key, data):
+     """Encrypt the data with the given secret key.
+ 
+-    Padding is n bytes of the value n, where 1 <= n <= blocksize.
+     """
+     iv = os.urandom(16)
+-    cipher = AES.new(key, AES.MODE_CBC, iv)
+-    padding = 16 - len(data) % 16
+-    return iv + cipher.encrypt(data + six.int2byte(padding) * padding)
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=iv, op=1)
++    result = cipher.update(data)
++    return iv + result + cipher.final()
+ 
+ 
+ @assert_crypto_availability
+ def decrypt_data(key, data):
+     """Decrypt the data with the given secret key."""
+     iv = data[:16]
+-    cipher = AES.new(key, AES.MODE_CBC, iv)
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=iv, op=0)
+     try:
+-        result = cipher.decrypt(data[16:])
++        result = cipher.update(data[16:])
++        result = result + cipher.final()
+     except Exception:
+         raise DecryptError(_('Encrypted data appears to be corrupted.'))
+ 
+-    # Strip the last n padding bytes where n is the last value in
+-    # the plaintext
+-    return result[:-1 * six.byte2int([result[-1]])]
++    return result
+ 
+ 
+ def protect_data(keys, data):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystonemiddleware/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/kombu/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/kombu/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		kombu
-COMPONENT_VERSION=	2.5.12
+COMPONENT_VERSION=	3.0.7
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:cc5b33eb96fd2d3846bd0b2fec34cfacf8205b69a1669a17c97af77bc6f1aa09
+    sha256:1aed91b4e58c5114069b9432d229a6b8564f63000f50b03de1c514f2bdd42f1b
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://kombu.readthedocs.org/
 COMPONENT_BUGDB=	python-mod/kombu
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21722
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/kombu/kombu-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/kombu/kombu-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,20 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# importlib is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/importlib-27 -> drop>
-# ordereddict is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/ordereddict-27 -> drop>
-# The test related file actions have not been included because they will fail
-# in dependency generation until the various test related modules that they
-# need are also provided.
+# pyyaml is only delivered for python 2.6
+<transform depend type=group fmri=library/python-2/pyyaml-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python-2/kombu-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Messaging framework for Python"
 set name=pkg.description \
     value="The aim of Kombu is to make messaging in Python as easy as possible by providing an idiomatic high-level interface for the AMQ protocol (AMQP), and also provide proven and tested solutions to common messaging problems."
 set name=com.oracle.info.description value="the Python kombu module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -42,6 +39,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/187
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -50,6 +48,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/abstract.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/async/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/async/hub.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/async/semaphore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/async/timer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/clocks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/common.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/compat.py
@@ -57,7 +59,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/entity.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/five.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/message.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/messaging.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/mixins.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/pidbox.py
@@ -65,6 +69,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/serialization.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/simple.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/syn.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/SLMQ.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/SQS.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/amqplib.py
@@ -84,6 +89,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/memory.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/mongodb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/pyamqp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/pyro.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/redis.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/sqlalchemy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/transport/sqlalchemy/models.py
@@ -98,13 +104,45 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/debug.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/encoding.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/eventio.py
-file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/finalize.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/functional.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/limits.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/text.py
 file path=usr/lib/python$(PYVER)/vendor-packages/kombu/utils/url.py
+#
 license kombu.license license=BSD
 
+# force a group dependency on the optional anyjson; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional boto; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/boto-$(PYV)
+
+# force a group dependency on the optional django; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/django-$(PYV)
+
+# force a group dependency on the optional librabbitmq; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/librabbitmq-$(PYV)
+
+# force a group dependency on the optional pytz; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pytz-$(PYV)
+
+# force a group dependency on the optional pyyaml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pyyaml-$(PYV)
+
+# force a group dependency on the optional setuptools; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/setuptools-$(PYV)
+
+# force a group dependency on the optional sqlalchemy; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/sqlalchemy-$(PYV)
+
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
@@ -112,15 +150,6 @@
 # force a dependency on amqp; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/amqp-$(PYV)
 
-# force a dependency on anyjson; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/anyjson-$(PYV)
-
-# force a dependency on boto; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/boto-$(PYV)
-
-# force a dependency on eventlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/eventlet-$(PYV)
-
 # force a dependency on importlib; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/importlib-$(PYV)
 
@@ -128,9 +157,6 @@
 depend type=require \
     fmri=library/python-2/kombu@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
-# force a dependency on librabbitmq; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/librabbitmq-$(PYV)
-
 # force a dependency on ordereddict; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/ordereddict-$(PYV)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ldappool/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		ldappool
+COMPONENT_VERSION=	1.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:1fc36c617ffa6195a738ca99ae7f2178271ebe30a5ee6d41abdb49168afb75aa
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/mozilla-services/ldappool
+COMPONENT_BUGDB=	python-mod/ldappool
+
+TPNO=			21665
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ldappool/ldappool-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/ldappool-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="A connection pool for python-ldap"
+set name=pkg.description \
+    value="A simple connector pool for python-ldap. The pool keeps LDAP connectors alive and allows the reuse of them, drastically reducing the time spent to initiate a ldap connection. The pool has useful features like: transparent reconnection on failures or server restarts; configurable pool size and connectors timeouts; configurable max lifetime for connectors; a context manager to simplify acquiring and releasing a connector."
+set name=com.oracle.info.description value="the Python ldappool module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Mozilla Services <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/097
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/ldappool-$(COMPONENT_VERSION)-py$(PYVER).egg-info
+file path=usr/lib/python$(PYVER)/vendor-packages/ldappool/__init__.py
+#
+license ldappool.license license=MPL
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the ldappool package
+depend type=require \
+    fmri=library/python/ldappool@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on python-ldap; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/python-ldap-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ldappool/ldappool.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,35 @@
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (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.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is Sync Server
+#
+# The Initial Developer of the Original Code is the Mozilla Foundation.
+# Portions created by the Initial Developer are Copyright (C) 2010
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#   Tarek Ziade ([email protected])
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ldappool/patches/python-3-exception.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,14 @@
+This in-house patch addresses a Python 3 compatibility issue. An
+upstream bug will be raised and the patch submitted there.
+
+--- ldappool-1.0/ldappool/__init__.py.orig	2012-02-27 13:58:47.000000000 -0800
++++ ldappool-1.0/ldappool/__init__.py	2015-02-23 20:49:04.353136753 -0800
+@@ -211,7 +211,7 @@ class ConnectionManager(object):
+                 conn.timeout = self.timeout
+                 self._bind(conn, bind, passwd)
+                 connected = True
+-            except ldap.LDAPError, exc:
++            except ldap.LDAPError as exc:
+                 time.sleep(self.retry_delay)
+                 tries += 1
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ldappool/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/markupsafe/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/markupsafe/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
@@ -32,9 +32,11 @@
 COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/markupsafe/
 COMPONENT_BUGDB=	python-mod/markupsafe
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			14503
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/markupsafe/markupsafe-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/markupsafe/markupsafe-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="The Python markupsafe module implements an XML/HTML/XHTML Markup safe string for Python."
 set name=com.oracle.info.description value="the Python markupsafe module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -35,6 +37,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/256
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/MarkupSafe-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/MarkupSafe-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/MarkupSafe-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -46,7 +49,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/markupsafe/_constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/markupsafe/_native.py
 file path=usr/lib/python$(PYVER)/vendor-packages/markupsafe/_speedups.so
-file path=usr/lib/python$(PYVER)/vendor-packages/markupsafe/tests.py
+#
 license markupsafe.license license=BSD
 
 # force a dependency on the Python runtime
--- a/components/python/mysql/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/mysql/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../../make-rules/shared-macros.mk
@@ -28,27 +28,42 @@
 PATH=/usr/mysql/5.1/bin:/usr/bin:/usr/gnu/bin
 
 COMPONENT_NAME=		MySQL-python
-COMPONENT_VERSION=	1.2.2
-COMPONENT_PROJECT_URL=	http://sourceforge.net/projects/mysql-python
+COMPONENT_VERSION=	1.2.5
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
-COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).zip
 COMPONENT_ARCHIVE_HASH= \
-    sha256:f4133b81e65c7b94a5921ff6a0e7bdbfb622f2a70473673103cb17d5a5be807a
-COMPONENT_ARCHIVE_URL=	http://downloads.sourceforge.net/mysql-python/$(COMPONENT_ARCHIVE)
+    sha256:811040b647e5d5686f84db415efd697e6250008b112b6909ba77ac059e140c74
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/farcepest/MySQLdb1
 COMPONENT_BUGDB=	python-mod/mysql
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21723
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+# Remove trailing carriage returns, if present, in the files.
+COMPONENT_POST_UNPACK_ACTION = \
+    /usr/bin/find $(SOURCE_DIR) -type f -exec $(GSED) -i 's/\r//' '{}' \; ;
 
-CFLAGS +=	-L/usr/mysql/5.1/lib/mysql -R/usr/mysql/5.1/lib/mysql
+PATH_32=		/usr/mysql/5.5/bin/$(MACH32):/usr/bin:$(SPRO_VROOT)/bin
+PATH_64=		/usr/mysql/5.5/bin:/usr/bin:$(SPRO_VROOT)/bin
+COMPONENT_BUILD_ENV +=		PATH=$(PATH_$(BITS)):$(PATH)
+COMPONENT_INSTALL_ENV +=	PATH=$(PATH_$(BITS)):$(PATH)
+
+CFLAGS_32=	-L/usr/mysql/5.5/lib -R/usr/mysql/5.5/lib
+CFLAGS_64=	-L/usr/mysql/5.5/lib/$(MACH64) -R/usr/mysql/5.5/lib/$(MACH64)
+CFLAGS +=	$(CFLAGS_$(BITS))
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
 # common targets
-build:          $(BUILD_32)
+build:		$(BUILD_32_and_64)
 
-install:        $(INSTALL_32)
+install:	$(INSTALL_32_and_64)
 
-test:           $(NO_TESTS)
+test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =        $(BUILD_TOOLS)
 
--- a/components/python/mysql/mysql-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/mysql/mysql-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,34 +20,30 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/python-mysql-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-set name=pkg.summary \
-    value="A MySQL database adapter for the Python programming language"
-set name=com.oracle.info.description value="the MySQL database adapter for Python"
-set name=com.oracle.info.tpno value=9533
+set name=pkg.summary value="MySQL database connector for Python"
+set name=pkg.description \
+    value="The MySQLdb Python module provides a thread-compatible interface to the popular MySQL database server. One interface included, _mysql, mostly implements the MySQL C API, although wrapped in an object-oriented way. However, for applications intending to be portable across databases, the MySQLdb interface itself should be used as it provides a thin Python wrapper around the lower-level inteface. The MySQLdb interface is compatible with the Python Database API Specification v2.0, as specified by PEP 249."
+set name=com.oracle.info.description \
+    value="the MySQL database adapter for Python"
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Databases
+    value=org.opensolaris.category.2008:Development/Databases \
+    value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2008/081
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-
-# force a dependency on the Python runtime
-depend fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
-       pkg.debug.depend.path=usr/bin type=require
-
-# force a dependency on the python-mysql package
-depend fmri=library/python-2/python-mysql@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) \
-    type=require
-
-file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-1.2.2-py$(PYVER).egg-info/PKG-INFO
-file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-1.2.2-py$(PYVER).egg-info/SOURCES.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-1.2.2-py$(PYVER).egg-info/dependency_links.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-1.2.2-py$(PYVER).egg-info/top_level.txt
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/64/_mysql.so
+file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/MySQL_python-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/MySQLdb/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/MySQLdb/connections.py
 file path=usr/lib/python$(PYVER)/vendor-packages/MySQLdb/constants/CLIENT.py
@@ -63,9 +59,19 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/MySQLdb/times.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_mysql.so
 file path=usr/lib/python$(PYVER)/vendor-packages/_mysql_exceptions.py
+#
 license mysql.license license=GPLv2
 
 # python-mysql was previously in the 'desktop' consolidation. This optional
 # dependency is here to facilitate the safe transfer of the package
 # to the 'userland' consolidation.
-depend type=optional fmri=consolidation/desktop/[email protected],5.11-0.175.2.0.0.20.0
+depend type=optional \
+    fmri=consolidation/desktop/[email protected],5.11-0.175.2.0.0.20.0
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the python-mysql package
+depend type=require \
+    fmri=library/python-2/python-mysql@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/mysql/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/mysql/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,5 +1,4 @@
-database/mysql-51/library
-library/zlib
+database/mysql-55/library
 runtime/python-26
 runtime/python-27
 system/library
--- a/components/python/netaddr/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/netaddr/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,26 +18,33 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		netaddr
-COMPONENT_VERSION=	0.7.10
+COMPONENT_VERSION=	0.7.13
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:9b79763141a855079b0589717696a4ccb5c56c0b807b6e584bfe12333399e0b7
-COMPONENT_PROJECT_URL=  http://github.com/drkjam/netaddr/
-COMPONENT_ARCHIVE_URL=	http://github.com/downloads/drkjam/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
+    sha256:ca42c260b49e5fd74ba9104efa6a4fca6b55316ca42714d20d2b9b8e751e0412
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://github.com/drkjam/netaddr/
 COMPONENT_BUGDB=	python-mod/netaddr
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21724
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_POST_INSTALL_ACTION = \
-	(cd $(PROTOUSRBINDIR) ; $(MV) netaddr netaddr-$(PYTHON_VERSION))
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) netaddr netaddr-$(PYTHON_VERSION))
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
@@ -47,9 +54,9 @@
 COMPONENT_TEST_DIR=	$(@D)/lib/netaddr
 COMPONENT_TEST_ARGS=	tests/__init__.py
 COMPONENT_PRE_TEST_ACTION= \
-	( cd $(COMPONENT_TEST_DIR)/tests ; \
-	  ln -s $(SOURCE_DIR)/netaddr/tests/2.x ; \
-	  ln -s $(SOURCE_DIR)/netaddr/tests/3.x )
+	(cd $(COMPONENT_TEST_DIR)/tests ; \
+	 ln -s $(SOURCE_DIR)/netaddr/tests/2.x ; \
+	 ln -s $(SOURCE_DIR)/netaddr/tests/3.x )
 
 test:		$(TEST_NO_ARCH)
 
--- a/components/python/netaddr/netaddr-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/netaddr/netaddr-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -30,7 +30,7 @@
     value="The netaddr Python library represents and manipulates network addresses. It supports the ability to work and interact with the following: IPv4 and IPv6 addresses and subnets; MAC addresses, OUI and IAB identifiers, IEEE EUI-64 identifiers; arbitrary (non-aligned) IP address ranges and IP address sets; various non-CIDR IP range formats such as nmap and glob-style formats."
 set name=com.oracle.info.description \
     value="the Python network address manipulation library"
-set name=com.oracle.info.tpno value=13141
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -43,9 +43,9 @@
 #
 # since we have IPython < 0.11, skip dependencies for
 # IPython.frontend.terminal.embed
-file path=usr/bin/netaddr-$(PYVER) \
-    pkg.depend.bypass-generate=.*(frontend|terminal|embed).*
-file path=usr/lib/python$(PYVER)/vendor-packages/netaddr-$(IPS_COMPONENT_VERSION)-py$(PYVER).egg-info
+#
+file path=usr/bin/netaddr-$(PYVER) pkg.depend.bypass-generate=.*/terminal.*
+file path=usr/lib/python$(PYVER)/vendor-packages/netaddr-$(COMPONENT_VERSION)-py$(PYVER).egg-info
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/compat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/core.py
@@ -58,10 +58,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/fbsocket.py
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/glob.py
-# urllib.request is not available in python 2.X
+# urllib.request is not available in Python 2.X
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/iana.py \
-    pkg.depend.bypass-generate=.*(urllib|request).*
-file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/intset.py
+    pkg.depend.bypass-generate=.*/urllib.*
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/ipv4-address-space.xml
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/ipv6-address-space.xml
 file path=usr/lib/python$(PYVER)/vendor-packages/netaddr/ip/multicast-addresses.xml
--- a/components/python/netifaces/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/netifaces/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		netifaces
-COMPONENT_VERSION=	0.8
-COMPONENT_PROJECT_URL=	http://alastairs-place.net/projects/netifaces/
+COMPONENT_VERSION=	0.10.4
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-	sha256:53a711038db3d6e5cf7129d6f751185fd052f830f12f271fbfe17bd2671ab1ec
-COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/$(COMPONENT_ARCHIVE)
+    sha256:9656a169cb83da34d732b0eb72b39373d48774aee009a3d1272b7ea2ce109cde
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://bitbucket.org/al45tair/netifaces
 COMPONENT_BUGDB=	python-mod/netifaces
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21725
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/netifaces/netifaces-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/netifaces/netifaces-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="netifaces provides a way for Python programmers to get access to a list of the network interfaces on the local machine, and to obtain the addresses of those network interfaces."
 set name=com.oracle.info.description value="the Python netifaces module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -35,12 +37,15 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/013
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/64/netifaces.so
 file path=usr/lib/python$(PYVER)/vendor-packages/netifaces-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/netifaces-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/netifaces-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/netifaces-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/netifaces-$(COMPONENT_VERSION)-py$(PYVER).egg-info/zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/netifaces.so
+#
 license netifaces.license license=MIT
 
 # force a dependency on the Python runtime
--- a/components/python/netifaces/patches/00-64bit.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/netifaces/patches/00-64bit.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,8 +1,9 @@
 # pass $CC_BITS to link_executable to make sure the linker is called
 # correctly
---- netifaces-0.8/setup.py.orig   2014-01-03 16:12:47.195304001 -0700
-+++ netifaces-0.8/setup.py    2014-01-03 16:13:35.577255946 -0700
-@@ -69,7 +69,8 @@
+
+--- netifaces-0.10.4/setup.py.~1~	2014-05-19 04:39:39.000000000 -0700
++++ netifaces-0.10.4/setup.py	2015-02-25 11:00:31.638387652 -0800
+@@ -78,7 +78,8 @@ class my_build_ext(build_ext):
                                                    output_dir=self.build_temp,
                                                    library_dirs=library_dirs,
                                                    libraries=libraries,
@@ -12,12 +13,3 @@
                      if execute:
                          abspath = os.path.abspath(os.path.join(self.build_temp,
                                                                 'conftest'))
-@@ -132,7 +132,7 @@
-               return 0;
-             }
-             """
--            if self.test_build(testrig):
-+            if self.test_build(testrig, libraries=libraries):
-                 result = True
-             else:
-                 result = False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/networkx/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,57 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		networkx
+COMPONENT_VERSION=	1.9.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:6380eb38d0b5770d7e50813c8a48ff7c373b2187b4220339c1adce803df01c59
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://networkx.github.io/
+COMPONENT_BUGDB=	python-mod/networkx
+
+TPNO=			21625
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+# to make sure that the docs get installed in the right place.
+PYTHON_DATA = /usr
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR =	$(SOURCE_DIR)
+COMPONENT_TEST_ARGS =	setup_egg.py nosetests
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/networkx/networkx-GENFRAG.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,88 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+# we have to reverse the autopyc transform for stuff in /usr/share/doc
+# since there are only py files there
+<transform file path=usr/share/doc/.+\.pyc$ -> drop>
+#
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/README.txt
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/3d_drawing/mayavi2_spring.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/advanced/eigenvalues.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/advanced/heavy_metal_umlaut.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/advanced/iterated_dynamical_systems.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/advanced/parallel_betweenness.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/algorithms/blockmodel.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/algorithms/davis_club.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/algorithms/hartford_drug.edgelist
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/algorithms/krackhardt_centrality.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/algorithms/rcm.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/basic/properties.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/basic/read_write.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/atlas.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/chess_masters.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/chess_masters_WCC.pgn.bz2
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/circular_tree.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/degree_histogram.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/edge_colormap.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/ego_graph.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/four_grids.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/giant_component.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/house_with_colors.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/knuth_miles.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/knuth_miles.txt.gz
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/labels_and_colors.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/lanl_routes.edgelist
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/lanl_routes.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/node_colormap.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/random_geometric_graph.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/sampson.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/simple_path.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/unix_email.mbox
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/unix_email.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/drawing/weighted_graph.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/atlas.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/atlas2.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/degree_sequence.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/erdos_renyi.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/expected_degree_sequence.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/football.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/karate_club.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/knuth_miles.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/knuth_miles.txt.gz
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/napoleon_russian_campaign.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/roget.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/roget_dat.txt.gz
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/unix_email.mbox
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/unix_email.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/words.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/graph/words_dat.txt.gz
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/multigraph/chess_masters.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/multigraph/chess_masters_WCC.pgn.bz2
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/pygraphviz/pygraphviz_attributes.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/pygraphviz/pygraphviz_draw.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/pygraphviz/pygraphviz_simple.py
+file path=usr/share/doc/networkx-$(COMPONENT_VERSION)/examples/pygraphviz/write_dotfile.py
+#
+license LICENSE.txt license=BSD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/networkx/networkx-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,253 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+# pyyaml and python-extra are only delivered for python 2.6
+<transform depend type=group fmri=library/python-2/pyyaml-27 -> drop>
+<transform depend type=require fmri=library/python-2/python-extra-27 -> drop>
+set name=pkg.fmri \
+    value=pkg:/library/python/networkx-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="Python language data structures for graphs, digraphs, and multigraphs"
+set name=pkg.description \
+    value="NetworkX is a Python language software package for the creation, manipulation, and study of the structure, dynamics, and function of complex networks. With NetworkX you can load and store networks in standard and nonstandard data formats, generate many types of random and classic networks, analyze network structure, build network models, design new network algorithms, draw networks, and much more."
+set name=com.oracle.info.description value="the Python NetworkX module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="NetworkX <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/304
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/clique.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/clustering_coefficient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/dominating_set.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/independent_set.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/matching.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/ramsey.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/approximation/vertex_cover.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/connectivity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/correlation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/mixing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/neighbor_degree.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/assortativity/pairs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/basic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/centrality.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/cluster.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/projection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/redundancy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/bipartite/spectral.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/block.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/boundary.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/betweenness.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/betweenness_subset.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/closeness.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/communicability_alg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/current_flow_betweenness.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/current_flow_betweenness_subset.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/current_flow_closeness.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/degree_alg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/dispersion.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/eigenvector.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/flow_matrix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/katz.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/centrality/load.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/chordal/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/chordal/chordal_alg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/clique.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/cluster.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/community/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/community/kclique.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/attracting.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/biconnected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/connected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/semiconnected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/strongly_connected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/components/weakly_connected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/connectivity/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/connectivity/connectivity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/connectivity/cuts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/connectivity/stoerwagner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/connectivity/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/cycles.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/dag.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/distance_measures.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/distance_regular.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/dominating.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/euler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/capacityscaling.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/edmondskarp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/fordfulkerson.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/maxflow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/mincost.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/networksimplex.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/preflowpush.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/shortestaugmentingpath.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/flow/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/graphical.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/hierarchy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isolate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isomorphism/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isomorphism/isomorph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isomorphism/isomorphvf2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isomorphism/matchhelpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/isomorphism/vf2userfunc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/link_analysis/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/link_analysis/hits_alg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/link_analysis/pagerank_alg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/link_prediction.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/matching.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/mis.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/mst.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/operators/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/operators/all.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/operators/binary.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/operators/product.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/operators/unary.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/richclub.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/astar.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/dense.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/generic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/unweighted.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/shortest_paths/weighted.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/simple_paths.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/smetric.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/swap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/traversal/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/traversal/breadth_first_search.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/traversal/depth_first_search.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/tree/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/tree/recognition.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/algorithms/vitality.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/digraph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/function.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/graph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/multidigraph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/classes/multigraph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/convert.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/convert_matrix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/drawing/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/drawing/layout.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/drawing/nx_agraph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/drawing/nx_pydot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/drawing/nx_pylab.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/external/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/atlas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/bipartite.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/classic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/community.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/degree_seq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/directed.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/ego.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/geometric.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/hybrid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/intersection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/line.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/random_clustered.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/random_graphs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/small.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/social.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/stochastic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/generators/threshold.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/algebraicconnectivity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/attrmatrix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/graphmatrix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/laplacianmatrix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/linalg/spectrum.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/adjlist.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/edgelist.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/gexf.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/gml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/gpickle.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/graph6.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/graphml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/json_graph/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/json_graph/adjacency.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/json_graph/node_link.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/json_graph/tree.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/leda.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/multiline_adjlist.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/nx_shp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/nx_yaml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/p2g.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/pajek.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/readwrite/sparse6.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/relabel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/release.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/contextmanagers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/decorators.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/heaps.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/misc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/random_sequence.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/rcm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/utils/union_find.py
+file path=usr/lib/python$(PYVER)/vendor-packages/networkx/version.py
+#
+license LICENSE.txt license=BSD
+
+# force a group dependency on the optional pyyaml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pyyaml-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on python-extra; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/python-extra-$(PYV)
+
+# force a dependency on decorator; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/decorator-$(PYV)
+
+# force a dependency on the networkx package
+depend type=require \
+    fmri=library/python/networkx@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on pyparsing; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pyparsing-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/networkx/patches/01-no-tests.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,14 @@
+Patch to remove import of networkx/tests/test.py as part of general
+networkx import. This patch may be relevant upstream after discussion
+with the author.
+
+--- networkx-1.9/networkx/__init__.py.orig	2014-06-25 11:02:09.000000000 -0700
++++ networkx-1.9/networkx/__init__.py	2014-12-01 12:26:26.896445274 -0800
+@@ -82,7 +82,6 @@ from networkx.algorithms import *
+ import networkx.linalg
+ 
+ from networkx.linalg import *
+-from networkx.tests.test import run as test
+ 
+ import networkx.drawing
+ from networkx.drawing import *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/networkx/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/neutronclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/neutronclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -22,24 +22,24 @@
 #
 # Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-neutronclient
-COMPONENT_VERSION=	2.3.4
+COMPONENT_VERSION=	2.3.10
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:41c8fc9dcd947fcd0250175ace419228fc9ac3820442826ba9858ab6f99066c5
+    sha256:f2e0abd6511f0372849f132c74e839fcbfd88d508ccd69459e388ee0d6059ed0
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-neutronclient
 COMPONENT_BUGDB=	service/neutron
 
-# Syntax issues: not Python 3 ready.
-PYTHON_VERSIONS=	2.7 2.6
+TPNO=			21734
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/neutronclient/neutronclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/neutronclient/neutronclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,20 +20,18 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/neutronclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Neutron API"
+    value="Python and command-line clients for the OpenStack Virtual Network API"
 set name=pkg.description \
     value="A client library for Neutron built on the OpenStack Virtual Network API. It provides a Python API (the 'neutronclient' module) and a command-line tool ('neutron')."
 set name=com.oracle.info.description \
     value="neutronclient, the Python bindings to the OpenStack Virtual Network API"
-set name=com.oracle.info.tpno value=17871
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -43,6 +41,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/007
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/neutron target=neutron-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/neutron-$(PYVER)
@@ -55,6 +54,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/serializer.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/validators.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/i18n.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/__init__.py
@@ -73,6 +74,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/lb/pool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/lb/vip.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/metering.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/nec/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/nec/packetfilter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/netpartition.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/network.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/networkprofile.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/nsx/__init__.py
@@ -91,13 +95,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/ipsecpolicy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/vpnservice.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/gettextutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/importutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/jsonutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/strutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/openstack/common/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/v2_0/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/v2_0/client.py
@@ -109,33 +106,41 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license neutronclient.license license="Apache v2.0"
 
-# force a group dependency on the optional anyjson; pkgdepend work is needed to
-# flush this out.
-depend type=group fmri=library/python-2/anyjson-$(PYV)
-
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/argparse-$(PYV)
 
-# force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/babel-$(PYV)
-
 # force a dependency on cliff; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/cliff-$(PYV)
 
-# force a dependency on httplib2; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/httplib2-$(PYV)
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
 
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
 
 # force a dependency on the neutronclient package
 depend type=require \
     fmri=library/python/neutronclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pbr-$(PYV)
 
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
 # force a dependency on six; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/six-$(PYV)
--- a/components/python/novaclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/novaclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,23 +20,26 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-novaclient
-COMPONENT_VERSION=	2.17.0
+COMPONENT_VERSION=	2.20.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:af6f46890715eb5f4e0d25a714effbbac8da020715f81b1572a301c5e9887197
+    sha256:73fc8169d58e910340aae1ac5370c3b63a9943f748e2a20e4a1dfd7277525c86
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-novaclient
 COMPONENT_BUGDB=	service/nova
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21735
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/novaclient/novaclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/novaclient/novaclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -19,20 +19,18 @@
 # CDDL HEADER END
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/novaclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Nova API"
+    value="Python and command-line clients for the OpenStack Compute API"
 set name=pkg.description \
     value="A client for the OpenStack Compute API. There's a Python API (the 'novaclient' module) and a command-line script ('nova'). Each implements 100% of the OpenStack Compute API."
 set name=com.oracle.info.description \
     value="novaclient, the Python bindings to the OpenStack Compute API"
-set name=com.oracle.info.tpno value=17872
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -42,6 +40,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/007
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/nova target=nova-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/nova-$(PYVER)
@@ -64,8 +63,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/gettextutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/importutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/jsonutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/py3kcompat/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/py3kcompat/urlutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/strutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/timeutils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/uuidutils.py
@@ -108,12 +105,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/networks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/quota_classes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/security_group_default_rules.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/security_group_rules.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/security_groups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/server_groups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/servers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/services.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/usage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/virtual_interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/volume_snapshots.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/volume_types.py
@@ -130,7 +130,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/hypervisors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/images.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/keypairs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/quota_classes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/list_extensions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/quotas.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/servers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/services.py
@@ -144,6 +144,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+#
 license novaclient.license license="Apache v2.0"
 
 # force a group dependency on the optional anyjson; pkgdepend work is needed to
@@ -175,10 +176,17 @@
 # force a dependency on iso8601; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/iso8601-$(PYV)
 
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
 # force a dependency on the novaclient package
 depend type=require \
     fmri=library/python/novaclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
 # force a dependency on pbr; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pbr-$(PYV)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/novaclient/patches/01-novaclient-migration-list.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,14 @@
+# Patch to prevent nova migration-list from generating an error.
+# This patch has not yet been submitted upstream. 
+
+--- python-novaclient-2.20.0/novaclient/base.py.~1~	2014-09-20 15:12:42.000000000 -0700
++++ python-novaclient-2.20.0/novaclient/base.py	2014-12-13 14:26:17.459463436 -0800
+@@ -76,7 +76,7 @@ class Manager(utils.HookableMixin):
+             try:
+                 data = data['values']
+             except KeyError:
+-                pass
++                data = []
+ 
+         self._clear_completion_cache_for_class(obj_class)
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oauthlib/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oauthlib
+COMPONENT_VERSION=	0.7.2
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:a051f04ee8ec3305055ab34d87b36c9a449375e07c7d6a05bcafa48329cac7c3
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/idan/oauthlib
+COMPONENT_BUGDB=	python-mod/oauthlib
+
+TPNO=			21626
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# tests require pycrypto, pyjwt, and blinker.  If/When these modules
+# become available, tests can be enabled.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oauthlib/oauthlib-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,103 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oauthlib-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Manage OAuth request-signing"
+set name=pkg.description \
+    value="OAuthLib is a generic library which implements the logic of OAuth without assuming a specific HTTP request object or web framework. It can be used to graft OAuth client support onto a HTTP library, or introduce OAuth provider support into a web framework."
+set name=com.oracle.info.description value="the Python oauthlib module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Ib Lundgren <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/331
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/access_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/authorization.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/pre_configured.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/request_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/endpoints/signature_only.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/parameters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/request_validator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/signature.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth1/rfc5849/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/backend_application.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/legacy_application.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/mobile_application.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/service_application.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/clients/web_application.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/authorization.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/pre_configured.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/revocation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/endpoints/token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/authorization_code.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/client_credentials.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/implicit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/refresh_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/grant_types/resource_owner_password_credentials.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/parameters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/request_validator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/tokens.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/oauth2/rfc6749/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/signals.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oauthlib/uri_validate.py
+#
+license LICENSE license=BSD
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the oauthlib package
+depend type=require \
+    fmri=library/python/oauthlib@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oauthlib/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/oslo.config/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/oslo.config/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,27 +20,32 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		oslo.config
-COMPONENT_VERSION=	1.3.0
+COMPONENT_VERSION=	1.6.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:1fa44f663f7109ccc3ddd393fbc5a7a077208e116f94e41ada7fbd977f27cbab
-COMPONENT_ARCHIVE_URL=	http://tarballs.openstack.org/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
-COMPONENT_PROJECT_URL=	http://www.openstack.org/
+    sha256:a88cf1af696b4d9cae783a4c8c6898e6fb4abd176f9c9906ba388e7eac5eab17
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.config
 COMPONENT_BUGDB=	python-mod/oslo.config
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21726
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_POST_INSTALL_ACTION += \
-        ($(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/oslo/__init__.py; \
-         $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES))
+	($(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/oslo/__init__.py; \
+	 $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES); \
+	 cd $(PROTO_DIR)/usr/bin ; \
+	 $(MV) -f oslo-config-generator oslo-config-generator-$(PYTHON_VERSION))
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -49,9 +54,8 @@
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests require:
-# fixtures, mox, nose, nose-exclude, testtools, coverage, sphinx
-# some of which haven't been integrated yet
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
 test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
--- a/components/python/oslo.config/oslo.config-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/oslo.config/oslo.config-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,55 +18,76 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
-# argparse is part of python 2.7, but separate in 2.6
-<transform depend type=require fmri=library/python-2/argparse-27 -> drop>
 set name=pkg.fmri \
     value=pkg:/library/python/oslo.config-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-set name=pkg.summary value="Oslo Configuration Library"
+set name=pkg.summary value="Oslo configuration library"
 set name=pkg.description \
     value="The Oslo configuration API supports parsing command line arguments and .ini style configuration files."
-set name=com.oracle.info.description value="the Oslo Configuration Library"
-set name=com.oracle.info.tpno value=17861
+set name=com.oracle.info.description value="the Oslo configuration library"
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Python \
-    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+    value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
-set name=info.upstream value="OpenStack <[email protected]>"
+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/403
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/oslo-config-generator target=oslo-config-generator-$(PYVER) \
+    mediator=python mediator-version=$(PYVER)
+file path=usr/bin/oslo-config-generator-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo.config-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/cfg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/cfgfilter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/fixture.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/iniparser.py
 file path=usr/lib/python$(PYVER)/vendor-packages/oslo/config/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/cfg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/cfgfilter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/fixture.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/generator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/iniparser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_config/types.py
+#
 license LICENSE license="Apache v2.0"
 
 # force the rename with an optional dependency on the old name
 depend type=optional \
     fmri=library/python-2/oslo.config-$(PYV)@1.2.1,5.11-0.175.2.0.0.41.0
 
-# force a dependency on the correct Python runtime package
-depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
-    pkg.debug.depend.path=usr/bin
-
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/argparse-$(PYV)
 
-# force a dependency on six; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/six-$(PYV)
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
 
-# force a dependency on oslo.config
+# force a dependency on the oslo.config package
 depend type=require \
     fmri=library/python/oslo.config@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.config/patches/disable-oslo-deprecation.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,15 @@
+This patch removes the legacy oslo namespace deprecation check from the
+oslo.config library. The deprecated() function is left to satisfy the
+unit tests. It is not suitable for the upstream and should be removed
+once all of the relevant consumers have switched over to the new
+namespace.
+
+--- oslo.config-1.6.0/oslo/config/__init__.py.~1~	2015-01-05 10:32:34.000000000 -0800
++++ oslo.config-1.6.0/oslo/config/__init__.py	2015-03-02 12:24:59.359891746 -0800
+@@ -23,6 +23,3 @@ def deprecated():
+         DeprecationWarning,
+         stacklevel=3,
+     )
+-
+-
+-deprecated()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.context/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.context
+COMPONENT_VERSION=	0.1.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:0340e533033607c18ce6a305d92f38a71fd89aaf439bf45074fd4ba9ee086971
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.context
+COMPONENT_BUGDB=	python-mod/oslo.context
+
+TPNO=			21359
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.context/oslo.context-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,59 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.context-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo context library"
+set name=pkg.description \
+    value="The Oslo context library has helpers to maintain useful information about a request context. The request context is usually populated in the WSGI pipeline and used by various modules such as logging."
+set name=com.oracle.info.description value="the Python oslo.context module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.context-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_context/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_context/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_context/fixture.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the oslo.context package
+depend type=require \
+    fmri=library/python/oslo.context@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.context/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.db/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.db
+COMPONENT_VERSION=	1.0.3
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:b75c9e496329ff20f20e70f076718b71878f6802a24f4ff684fd7de12a509331
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.db
+COMPONENT_BUGDB=	python-mod/oslo.db
+
+TPNO=			21627
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.db/oslo.db-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,121 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.db-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="The Oslo database handling library"
+set name=pkg.description \
+    value="The Oslo database handling library provides database connectivity to the different backends and helper utilities."
+set name=com.oracle.info.description value="the Oslo database handling library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Databases \
+    value=org.opensolaris.category.2008:Development/Python
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.db-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/concurrency.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/openstack/common/fixture/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/openstack/common/fixture/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/options.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/compat/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/compat/engine_connect.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/compat/handle_error.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/compat/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/exc_filters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/README.rst
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/ext_alembic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/ext_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/ext_migrate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/migration_cli/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/provision.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/test_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/test_migrations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/db/sqlalchemy/utils.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional eventlet; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/eventlet-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on alembic; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/alembic-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on the oslo.db package
+depend type=require \
+    fmri=library/python/oslo.db@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/sqlalchemy-$(PYV)
+
+# force a dependency on sqlalchemy-migrate; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python-2/sqlalchemy-migrate-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.db/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.i18n/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.i18n
+COMPONENT_VERSION=	1.3.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:8e1b9b3f87cea9e43a2414bb02d8c79b0a688c916afa1f1453f6a0a65ffd85f6
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.i18n
+COMPONENT_BUGDB=	python-mod/oslo.i18n
+
+TPNO=			21628
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.i18n/oslo.i18n-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,80 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.i18n-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo internationalization utilities"
+set name=pkg.description \
+    value="The oslo.i18n library contains utilities for working with internationalization (i18n) features, especially translation for text strings in an application or library."
+set name=com.oracle.info.description \
+    value="the Oslo internationalization utilities"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value=org.opensolaris.category.2008:System/Internationalization
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.i18n-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/i18n/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/i18n/fixture.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/i18n/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_lazy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_locale.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_message.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/_translate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/fixture.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_i18n/log.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on the oslo.i18n package
+depend type=require \
+    fmri=library/python/oslo.i18n@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.i18n/patches/disable-oslo-deprecation.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,15 @@
+This patch removes the legacy oslo namespace deprecation check from the
+oslo.i18n library. The deprecated() function is left to satisfy the
+unit tests. It is not suitable for the upstream and should be removed
+once all of the relevant consumers have switched over to the new
+namespace.
+
+--- oslo.i18n-1.3.1/oslo/i18n/__init__.py.~1~	2015-01-27 05:34:49.000000000 -0800
++++ oslo.i18n-1.3.1/oslo/i18n/__init__.py	2015-03-02 22:45:07.303224309 -0800
+@@ -26,6 +26,3 @@ def deprecated():
+         DeprecationWarning,
+         stacklevel=3,
+     )
+-
+-
+-deprecated()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.i18n/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.messaging/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,58 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.messaging
+COMPONENT_VERSION=	1.4.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:28243db5fb84287016d6f58fa485a71496c825bcfca3ae806035017700a11945
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.messaging
+COMPONENT_BUGDB=	python-mod/oslo.messaging
+
+TPNO=			20378
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; \
+	 $(MV) -f oslo-messaging-zmq-receiver \
+	 oslo-messaging-zmq-receiver-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.messaging/oslo.messaging-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,155 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+# pyyaml is only delivered for python 2.6
+<transform depend type=require fmri=library/python-2/pyyaml-27 -> drop>
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.messaging-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo messaging library"
+set name=pkg.description \
+    value="The Oslo messaging API supports RPC and notifications over a number of different messaging transports."
+set name=com.oracle.info.description value="the Oslo messaging library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2014/302
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.messaging-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_cmd/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_cmd/zmq_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/amqp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/amqpdriver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/impl_fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/impl_qpid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/impl_rabbit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/impl_zmq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/matchmaker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/matchmaker_redis.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/matchmaker_ring.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/pool.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/protocols/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/protocols/amqp/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/protocols/amqp/controller.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/protocols/amqp/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_drivers/protocols/amqp/eventloop.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_executors/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_executors/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_executors/impl_blocking.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_executors/impl_eventlet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/conffixture.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/localcontext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/_impl_log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/_impl_messaging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/_impl_noop.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/_impl_routing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/_impl_test.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/listener.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/log_handler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/logger.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/notify/notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/rpc/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/rpc/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/rpc/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/serializer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/target.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/messaging/transport.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional anyjson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/greenlet-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/kombu-$(PYV)
+
+# force a dependency on the oslo.messaging package
+depend type=require \
+    fmri=library/python/oslo.messaging@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on pyyaml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pyyaml-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.messaging/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,6 @@
+library/python-2/eventlet-26
+library/python-2/eventlet-27
+library/python/oslo.config-26
+library/python/oslo.config-27
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.middleware/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.middleware
+COMPONENT_VERSION=	0.4.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:d300f8342b5faaf712890d58da111789740aebb4b46874e41b45110b704719cb
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.middleware
+COMPONENT_BUGDB=	python-mod/oslo.middlewar
+
+TPNO=			21629
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.middleware/oslo.middleware-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,99 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.middleware-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo Middleware library"
+set name=pkg.description \
+    value="The Oslo middleware library includes components that can be injected into WSGI pipelines to intercept request/response flows. The base class can be enhanced with functionality like add/delete/modification of HTTP headers and support for limiting size/connection etc."
+set name=com.oracle.info.description value="the Oslo middleware library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.middleware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/catch_errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/correlation_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/debug.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/request_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/middleware/sizelimit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/catch_errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/correlation_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/debug.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/healthcheck/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/healthcheck/disable_by_file.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/healthcheck/pluginbase.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/request_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_middleware/sizelimit.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.context; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.context-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on the oslo.middleware package
+depend type=require \
+    fmri=library/python/oslo.middleware@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.middleware/patches/disable-oslo-deprecation.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,15 @@
+This patch removes the legacy oslo namespace deprecation check from the
+oslo.middleware library. The deprecated() function is left to satisfy
+the unit tests. It is not suitable for the upstream and should be
+removed once all of the relevant consumers have switched over to the
+new namespace.
+
+--- oslo.middleware-0.4.0/oslo/middleware/__init__.py.~1~	2015-01-29 08:34:30.000000000 -0800
++++ oslo.middleware-0.4.0/oslo/middleware/__init__.py	2015-03-02 23:04:40.549834298 -0800
+@@ -23,6 +23,3 @@ def deprecated():
+         DeprecationWarning,
+         stacklevel=3,
+     )
+-
+-
+-deprecated()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.middleware/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.serialization/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.serialization
+COMPONENT_VERSION=	1.2.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:073f25ef4b7138e28ecb75bab413582c4dc1a54ab63b540a1702edee7c0a0557
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.serialization
+COMPONENT_BUGDB=	python-mod/oslo.serial
+
+TPNO=			21630
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.serialization/oslo.serialization-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,77 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.serialization-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo JSON serialization library"
+set name=pkg.description \
+    value="An OpenStack library for representing objects in transmittable and storable formats. In particular, it can be used to convert complex objects into primitives suitable for JSON serialization."
+set name=com.oracle.info.description value="the Oslo JSON serialization library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.serialization-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/serialization/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/serialization/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_serialization/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_serialization/jsonutils.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional anyjson; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the oslo.serialization package
+depend type=require \
+    fmri=library/python/oslo.serialization@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.serialization/patches/disable-oslo-deprecation.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,15 @@
+This patch removes the legacy oslo namespace deprecation check from the
+oslo.serialization library. The deprecated() function is left to
+satisfy the unit tests. It is not suitable for the upstream and should
+be removed once all of the relevant consumers have switched over to the
+new namespace.
+
+--- oslo.serialization-1.2.0/oslo/serialization/__init__.py.~1~	2015-01-08 13:32:40.000000000 -0800
++++ oslo.serialization-1.2.0/oslo/serialization/__init__.py	2015-03-02 23:09:07.429941098 -0800
+@@ -21,6 +21,3 @@ def deprecated():
+         DeprecationWarning,
+         stacklevel=3,
+     )
+-
+-
+-deprecated()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.serialization/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.utils/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.utils
+COMPONENT_VERSION=	1.2.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:9cd8bcde345554582fd12c6daab81a7327a90c72861aa644e8b7b3fbfed5deba
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.utils
+COMPONENT_BUGDB=	python-mod/oslo.utils
+
+TPNO=			21631
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.utils/oslo.utils-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,95 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.utils-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo utility library"
+set name=pkg.description \
+    value="The oslo.utils library provides various low-level utility modules out of the OpenStack Oslo project."
+set name=com.oracle.info.description value="the Oslo utility library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2015/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.utils-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/encodeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/netutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/reflection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/units.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/utils/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/encodeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/netutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/reflection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/units.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo_utils/uuidutils.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
+
+# force a dependency on netifaces; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netifaces-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on the oslo.utils package
+depend type=require \
+    fmri=library/python/oslo.utils@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.utils/patches/disable-oslo-deprecation.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,15 @@
+This patch removes the legacy oslo namespace deprecation check from the
+oslo.utils library. The deprecated() function is left to satisfy the
+unit tests. It is not suitable for the upstream and should be removed
+once all of the relevant consumers have switched over to the new
+namespace.
+
+--- oslo.utils-1.2.1/oslo/utils/__init__.py.~1~	2015-01-08 13:42:18.000000000 -0800
++++ oslo.utils-1.2.1/oslo/utils/__init__.py	2015-03-02 23:10:23.349348280 -0800
+@@ -21,6 +21,3 @@ def deprecated():
+         DeprecationWarning,
+         stacklevel=3,
+     )
+-
+-
+-deprecated()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.utils/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.vmware/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		oslo.vmware
+COMPONENT_VERSION=	0.8.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:b216eda661a95b185028c4e6316c3f9fa44c4785751cc93b6dcaac8ed22ffc86
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/oslo.vmware
+COMPONENT_BUGDB=	python-mod/oslo.vmware
+
+TPNO=			21632
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.vmware/oslo.vmware-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,102 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/oslo.vmware-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Oslo VMware library"
+set name=pkg.description \
+    value="The oslo.vmware Python library provides VMware API support specifically for OpenStack components. It uses SOAP calls to communicate with vCenter servers and ESX/ESXi system."
+set name=com.oracle.info.description value="the Oslo VMware library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value=org.opensolaris.category.2008:System/Virtualization \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+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/2014/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo.vmware-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/_i18n.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/image_transfer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/objects/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/objects/datacenter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/objects/datastore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/pbm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/rw_handles.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/vim.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/vim_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/wsdl/5.5/core-types.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/wsdl/5.5/pbm-messagetypes.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/wsdl/5.5/pbm-types.xsd
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/wsdl/5.5/pbm.wsdl
+file path=usr/lib/python$(PYVER)/vendor-packages/oslo/vmware/wsdl/5.5/pbmService.wsdl
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on eventlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/eventlet-$(PYV)
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
+
+# force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.i18n-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on the oslo.vmware package
+depend type=require \
+    fmri=library/python/oslo.vmware@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on suds; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/suds-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.vmware/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/osprofiler/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,57 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		osprofiler
+COMPONENT_VERSION=	0.3.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:7d7e1d0b93ce96901f7a307a712196273818a8f20e59916ff099589b48f53207
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/stackforge/osprofiler
+COMPONENT_BUGDB=	python-mod/osprofiler
+
+TPNO=			20382
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; \
+	 $(MV) -f osprofiler osprofiler-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/osprofiler/osprofiler-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,85 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/osprofiler-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Profiler Library"
+set name=pkg.description \
+    value="OSProfiler is an OpenStack cross-project profiling library.  It can be used by OpenStack projects and their Python client libraries to generate a trace per request that goes through all relevant services and then builds a tree of calls."
+set name=com.oracle.info.description value="the Python OSProfiler module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2015/065
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/osprofiler target=osprofiler-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/osprofiler-$(PYVER)
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/_notifiers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/_notifiers/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/_notifiers/messaging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/cliutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/commands.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/exc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/cmd/template.html
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/parsers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/parsers/ceilometer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/profiler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/sqlalchemy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/osprofiler/web.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
+# force a dependency on ceilometerclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/ceilometerclient-$(PYV)
+
+# force a dependency on the osprofiler package
+depend type=require \
+    fmri=library/python/osprofiler@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/osprofiler/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/posix_ipc/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		posix_ipc
+COMPONENT_VERSION=	0.9.9
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:b3b7e464ebfb524bfe50861067d7fadaa801a76c1975014c1955cc32b3f9f41e
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://semanchuk.com/philip/posix_ipc/
+COMPONENT_BUGDB=	python-mod/posix_ipc
+
+TPNO=			21633
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR =	$(SOURCE_DIR)
+COMPONENT_TEST_CMD =	nosetests-$(PYTHON_VERSION)
+COMPONENT_TEST_ARGS =	
+
+# common targets
+build:		$(BUILD_32_and_64)
+
+install:	$(INSTALL_32_and_64)
+
+test:		$(TEST_32_and_64)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/posix_ipc/posix_ipc-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/posix_ipc-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="POSIX IPC primitives (semaphores, shared memory and message queues) for Python"
+set name=pkg.description \
+    value="posix_ipc is a Python module that permits creation and manipulation of POSIX inter-process semaphores, shared memory and message queues on platforms supporting the POSIX Realtime Extensions a.k.a. POSIX 1003.1b-1993."
+set name=com.oracle.info.description value="the Python posix_ipc Library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value=org.opensolaris.category.2008:System/Libraries
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Philip Semanchuk <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/330
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/64/posix_ipc.so
+file path=usr/lib/python$(PYVER)/vendor-packages/posix_ipc-$(COMPONENT_VERSION)-py$(PYVER).egg-info
+file path=usr/lib/python$(PYVER)/vendor-packages/posix_ipc.so
+#
+license LICENSE license=BSD
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the posix_ipc package
+depend type=require \
+    fmri=library/python/posix_ipc@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/posix_ipc/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,3 @@
+runtime/python-26
+runtime/python-27
+system/library
--- a/components/python/py/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/py/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,27 +18,32 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		py
-COMPONENT_VERSION=	1.4.15
+COMPONENT_VERSION=	1.4.26
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:656634e1846d568ed22c872b5e158a4d5eef174dd5b245186e78b94a0258c042
+    sha256:28dd0b90d29b386afb552efc4e355c889f4639ce93658a7872a2150ece28bb89
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/py/1.4.15
+COMPONENT_PROJECT_URL=	https://bitbucket.org/hpk42/py
 COMPONENT_BUGDB=	python-mod/py
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21729
 
-COMPONENT_TEST_DIR =    $(COMPONENT_SRC)/testing
-COMPONENT_TEST_CMD =    /usr/bin/py.test
-COMPONENT_TEST_ARGS =   test_iniconfig.py
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+COMPONENT_TEST_DIR =	$(COMPONENT_SRC)/testing
+COMPONENT_TEST_CMD =	/usr/bin/py.test
+COMPONENT_TEST_ARGS =	test_iniconfig.py
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/py/py-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/py/py-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,13 +30,14 @@
 set name=pkg.description \
     value="The py lib is a Python development support library featuring the following tools and modules: py.path: uniform local and svn path objects; py.apipkg: explicit API control and lazy-importing; py.iniconfig: easy parsing of .ini files; py.code: dynamic code generation and introspection; py.path: uniform local and svn path objects."
 set name=com.oracle.info.description value="the Python py module"
-set name=com.oracle.info.tpno value=15677
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/354
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/py-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/py-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/py-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -47,6 +50,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/_assertionnew.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/_assertionold.py
+file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/_py2traceback.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/assertion.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/code.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_code/source.py
@@ -72,6 +76,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_std.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/_xmlgen.py
 file path=usr/lib/python$(PYVER)/vendor-packages/py/test.py
+#
 license py.license license=MIT
 
 # force a dependency on the Python runtime
@@ -81,3 +86,6 @@
 # force a dependency on the py package
 depend type=require \
     fmri=library/python-2/py@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on pytest; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pytest-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pycadf/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		pycadf
+COMPONENT_VERSION=	0.6.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:9ba1e9ac52ee2a2d6d9cc89847323559cc2ffe7b4d80b703944a0a1f75c7093f
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/pycadf
+COMPONENT_BUGDB=	python-mod/pycadf
+
+TPNO=			19271
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pycadf/pycadf-GENFRAG.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,35 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+file path=etc/pycadf/cinder_api_audit_map.conf mode=0644 overlay=allow \
+    preserve=true
+file path=etc/pycadf/glance_api_audit_map.conf mode=0644 overlay=allow \
+    preserve=true
+file path=etc/pycadf/neutron_api_audit_map.conf mode=0644 overlay=allow \
+    preserve=true
+file path=etc/pycadf/nova_api_audit_map.conf mode=0644 overlay=allow \
+    preserve=true
+#
+license LICENSE license="Apache v2.0"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pycadf/pycadf-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,133 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/pycadf-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python implementation of CADF data model"
+set name=pkg.description \
+    value="pyCADF is the Python implementation of the Cloud Audit Data Federation (CADF) Working Group specification. The CADF specification for audit event data, interface models, and a compatible interaction model describes interactions between IT resources for cloud deployment models."
+set name=com.oracle.info.description value="the Python pyCADF module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2014/329
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/attachment.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/audit/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/audit/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/cadftaxonomy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/cadftype.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/credential.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/endpoint.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/event.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/eventfactory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/geolocation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/host.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/identifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/measurement.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/metric.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/middleware/audit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/middleware/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/middleware/notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/logging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/mockpatch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/fixture/moxstubout.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/path.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/reason.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/reporterstep.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/tag.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/timestamp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/pycadf/utils.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional anyjson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.messaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.messaging-$(PYV)
+
+# force a dependency on posix_ipc; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/posix_ipc-$(PYV)
+
+# force a dependency on the pycadf package
+depend type=require \
+    fmri=library/python/pycadf@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on pytz; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pytz-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pycadf/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/pyflakes/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pyflakes/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,35 +18,44 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		pyflakes
-COMPONENT_VERSION=	0.7.2
+COMPONENT_VERSION=	0.8.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:e971804569e26a120ded70ca94882cbbf360390538fc3b5861f8ccecaf291178
+    sha256:3fa80a10b36d51686bf7744f5dc99622cd5c98ce8ed64022e629868aafc17769
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/pyflakes
+COMPONENT_PROJECT_URL=	https://launchpad.net/pyflakes
 COMPONENT_BUGDB=	python-mod/pyflakes
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21747
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_POST_INSTALL_ACTION += (cd $(PROTO_DIR)/usr/bin ; \
 	$(MV) -f pyflakes pyflakes-$(PYTHON_VERSION))
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
+COMPONENT_TEST_CMD=	$(PYTHON)
+COMPONENT_TEST_ARGS=	setup.py test
+COMPONENT_TEST_DIR=	$(SOURCE_DIR)
+
 # common targets
 build:		$(BUILD_NO_ARCH)
 
 install:	$(INSTALL_NO_ARCH)
 
-test:		$(NO_TESTS)
+test:		$(TEST_NO_ARCH)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
 
--- a/components/python/pyflakes/pyflakes-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pyflakes/pyflakes-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +27,7 @@
 set name=pkg.description \
     value="Pyflakes analyzes programs and detects various errors. It works by parsing the source file, not importing it, so it is safe to use on modules with side effects. It's also much faster."
 set name=com.oracle.info.description value="the Python pyflakes module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pylxml/pylxml-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,100 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/lxml-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="Pythonic bindings for the libxml2 and libxslt libraries"
+set name=pkg.description \
+    value="The lxml XML toolkit is a Pythonic binding for the C libraries libxml2 and libxslt. It is unique in that it combines the speed and XML feature completeness of these libraries with the simplicity of a native Python API, mostly compatible but superior to the well-known ElementTree API."
+set name=com.oracle.info.description \
+    value="Python bindings for the libxml2 and libxslt libraries"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2009/579
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/64/etree.so
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/64/objectify.so
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/ElementInclude.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/_elementpath.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/builder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/cssselect.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/doctestcompare.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/etree.so
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/etree_defs.h
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/etreepublic.pxd
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/ElementSoup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/_dictmixin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/_diffcommand.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/_html5builder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/_setmixin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/builder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/clean.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/defs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/diff.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/formfill.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/html5parser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/soupparser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/html/usedoctest.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/rng/iso-schematron.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/objectify.so
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/pyclasslookup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/sax.py
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/tree.pxd
+file path=usr/lib/python$(PYVER)/vendor-packages/lxml/usedoctest.py
+#
+license pylxml.copyright license="BSD, PSF, GPL"
+
+# force the rename with an optional dependency on the old name
+depend type=optional \
+    fmri=library/python-2/lxml-$(PYV)@2.3.3,5.11-0.175.3.0.0.16.0
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the lxml package
+depend type=require \
+    fmri=library/python/lxml@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/pyopenssl/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pyopenssl/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
@@ -34,9 +34,11 @@
 COMPONENT_PROJECT_URL=  https://launchpad.net/pyopenssl
 COMPONENT_BUGDB=	python-mod/pyopenssl
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			9207
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_TEST_DIR = $(COMPONENT_SRC)/OpenSSL/test
 # The .so files are under ./OpenSSL/64 not ./64/OpenSSL so the
--- a/components/python/pyopenssl/pyopenssl-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pyopenssl/pyopenssl-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,20 +18,26 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/pyopenssl-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Python interface to the OpenSSL library"
+set name=pkg.description \
+    value="The pyOpenSSL package provides a high-level, Python interface to the functions in the OpenSSL library. It includes a generic cryptographic module, an interface to the OpenSSL pseudo random number generator, and an interface to the SSL-specific parts of OpenSSL. The latter defines SSL Context objects and SSL Connection objects, using Python sockets as a transport layer. The Connection object wraps all the socket methods and can therefore be used interchangeably."
 set name=com.oracle.info.description value="Python bindings for OpenSSL"
-set name=com.oracle.info.tpno value=9207
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Python
+    value=org.opensolaris.category.2008:Development/Python \
+    value=org.opensolaris.category.2008:System/Security
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2009/176
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/OpenSSL/64/SSL.so
 file path=usr/lib/python$(PYVER)/vendor-packages/OpenSSL/64/crypto.so
 file path=usr/lib/python$(PYVER)/vendor-packages/OpenSSL/64/rand.so
@@ -47,6 +53,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/OpenSSL/tsafe.py
 file path=usr/lib/python$(PYVER)/vendor-packages/OpenSSL/version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/pyOpenSSL-$(COMPONENT_VERSION)-py$(PYVER).egg-info
+#
 license LICENSE license=Apache2
 
 # force a dependency on the Python runtime
@@ -56,5 +63,3 @@
 # force a dependency on the pyopenssl package
 depend type=require \
     fmri=library/python-2/pyopenssl@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyscss/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		pyScss
+COMPONENT_VERSION=	1.2.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:6f486363f5fac20d218dc5d11b8af4e5b52242a59e5067f42ca227152a7df3cc
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/Kronuz/pyScss
+COMPONENT_BUGDB=	python-mod/pyscss
+
+TPNO=			20384
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f pyscss pyscss-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_32_and_64)
+
+install:	$(INSTALL_32_and_64)
+
+# The tarball for this version does not ship unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyscss/patches/pcre.include.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,16 @@
+In-house patch to add the location of PCRE header files for building the
+C extension.  This patch is specific to Solaris and will not be
+submitted upstream.
+
+--- pyScss-1.2.1/setup.py.orig  2014-10-16 15:24:31.617255812 -0600
++++ pyScss-1.2.1/setup.py    2014-10-16 15:24:48.100507110 -0600
+@@ -27,7 +27,8 @@ speedups = Feature(
+         Extension(
+             'scss._speedups',
+             sources=['scss/src/_speedups.c', 'scss/src/block_locator.c', 'scss/src/scanner.c'],
+-            libraries=['pcre']
++            libraries=['pcre'],
++            include_dirs = ['/usr/include/pcre']
+         ),
+     ],
+ )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyscss/pyscss-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,93 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/pyscss-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="pyScss, a Scss compiler for Python"
+set name=pkg.description \
+    value="pyScss is a Python implementation of Sass, a CSS preprocessing language that adds variables, expressions, nested rules, mixins, inheritance, and other features that help ease the maintenance of large stylesheets.  pyScss also includes support for Compass, and has an extension mechanism for adding custom behavior."
+set name=com.oracle.info.description value="the Python pyscss module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="German M. Bravo (Kronuz) <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/068
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/pyscss target=pyscss-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/pyscss-$(PYVER)
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pyScss-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/64/_speedups.so \
+    pkg.depend.runpath=/lib:/usr/lib
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/__main__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/_native.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/_speedups.so
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/cssdefs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/expression.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/gradients.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/layouts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/compass/sprites.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/extra.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/functions/library.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/rule.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/scss_meta.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/selector.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/setup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/sourcemap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/tool.py \
+    pkg.depend.bypass-generate=.*/watchdog.*
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/scss/util.py
+#
+license LICENSE license=MIT
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the pyscss package
+depend type=require \
+    fmri=library/python/pyscss@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on python-imaging; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/python-imaging-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyscss/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,10 @@
+library/pcre
+library/python-2/pytest-26
+library/python-2/pytest-27
+library/python-2/setuptools-26
+library/python-2/setuptools-27
+library/python/six-26
+library/python/six-27
+runtime/python-26
+runtime/python-27
+system/library
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysendfile/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,57 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		pysendfile
+COMPONENT_VERSION=	2.0.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:510a414b270986fba3c79cb76d90a4c910c701bfb43ff983a5d4e92846050e17
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/giampaolo/pysendfile
+COMPONENT_BUGDB=	python-mod/pysendfile
+
+TPNO=			20385
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_ARGS=	test/test_sendfile.py
+COMPONENT_TEST_DIR=	$(SOURCE_DIR)
+COMPONENT_TEST_ENV=	PATH=$(PROTO_DIR)/usr/bin
+COMPONENT_TEST_ENV +=	PYTHONPATH=$(PROTO_DIR)$(PYTHON_VENDOR_PACKAGES.32)
+COMPONENT_TEST_ENV +=	PYTHON_VERSION=$(PYTHON_VERSION)
+
+# common targets
+build:		$(BUILD_32_and_64)
+
+install:	$(INSTALL_32_and_64)
+
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysendfile/pysendfile-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/pysendfile-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python interface to sendfile(3EXT) library"
+set name=pkg.description \
+    value="pysendfile provides a Python interface to sendfile(3EXT) which provides a 'zero-copy' way of copying data from one file descriptor to another (a socket). The phrase 'zero-copy' refers to the fact that all of the copying of data between the two descriptors is done entirely by the kernel, with no copying of data into userspace buffers. This is particularly useful when sending a file over a socket (e.g. FTP)."
+set name=com.oracle.info.description value="the Python pysendfile module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Giampaolo Rodola <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2014/XXX
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/64/sendfile.so
+file path=usr/lib/python$(PYVER)/vendor-packages/pysendfile-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/pysendfile-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysendfile-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/pysendfile-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/sendfile.so
+#
+license LICENSE license=MIT
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the pysendfile package
+depend type=require \
+    fmri=library/python/pysendfile@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pysendfile/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,3 @@
+runtime/python-26
+runtime/python-27
+system/library
--- a/components/python/pytest/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytest/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		pytest
-COMPONENT_VERSION=	2.3.5
+COMPONENT_VERSION=	2.6.4
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:804c28bef415fc6a54de7934f05b2d67a9cc8a230de98685fca274d9fcbe8b1c
+    sha256:550883b98184cef6cbb980d4d90051330aeae41075092f98ef0215719af8ef33
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/pytest
+COMPONENT_PROJECT_URL=	http://pytest.org/latest/
 COMPONENT_BUGDB=	python-mod/pytest
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21730
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_TEST_DIR =	$(COMPONENT_SRC)/testing
 COMPONENT_TEST_CMD =	$(PROTOUSRBINDIR)/py.test
--- a/components/python/pytest/pytest-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytest/pytest-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="The Python py.test testing tool makes it easy to write small tests, yet scales to support complex functional testing."
 set name=com.oracle.info.description value="the Python pytest module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -36,8 +38,10 @@
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 link path=usr/bin/py.test target=py.test-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
+#
 file path=usr/bin/py.test-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/_argcomplete.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/assertion/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/assertion/newinterpret.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/assertion/oldinterpret.py
@@ -76,8 +80,15 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/pytest-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/pytest-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/pytest.py
+#
 license pytest.license license=MIT
 
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
+# force a dependency on py; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/py-$(PYV)
+
 # force a dependency on the pytest package
 depend type=require \
     fmri=library/python-2/pytest@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/pytz/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytz/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,25 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		pytz
-COMPONENT_VERSION=	2013d
-HUMAN_VERSION=		$(COMPONENT_VERSION)
-IPS_COMPONENT_VERSION=	2013.4
+COMPONENT_VERSION=	2014.10
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:4eee447b2102141dfc7d92b0536608616f152811a8adee2f120460f368ecc4c6
+    sha256:a94138b638907491f473c875e8c95203a6a02efef52b6562be302e435016f4f3
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://pytz.sourceforge.net/
 COMPONENT_BUGDB=	python-mod/pytz
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21748
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/pytz/patches/zoneinfopath.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytz/patches/zoneinfopath.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -3,9 +3,9 @@
 point at that copy.  The extra table files are in different places between
 the two, so we adjust those paths as well.
 
---- pytz-2013d/pytz/__init__.py	Thu Sep  5 06:42:03 2013
-+++ pytz-2013d/pytz/__init__.py	Tue Oct 22 15:10:47 2013
-@@ -88,8 +88,7 @@
+--- pytz-2014.10/pytz/__init__.py.~1~	2014-11-27 01:00:22.000000000 -0800
++++ pytz-2014.10/pytz/__init__.py	2015-02-25 11:05:04.867482331 -0800
+@@ -86,8 +86,7 @@ def open_resource(name):
      for part in name_parts:
          if part == os.path.pardir or os.path.sep in part:
              raise ValueError('Bad path segment: %r' % part)
@@ -15,7 +15,7 @@
      if not os.path.exists(filename) and resource_stream is not None:
          # http://bugs.launchpad.net/bugs/383171 - we avoid using this
          # unless absolutely necessary to help when a broken version of
-@@ -328,7 +327,7 @@
+@@ -326,13 +325,15 @@ class _CountryTimezoneDict(LazyDict):
  
      def _fill(self):
          data = {}
@@ -24,7 +24,6 @@
          try:
              for line in zone_tab:
                  line = line.decode('US-ASCII')
-@@ -335,6 +334,8 @@
                  if line.startswith('#'):
                      continue
                  code, coordinates, zone = line.split(None, 4)[:3]
@@ -33,7 +32,7 @@
                  if zone not in all_timezones_set:
                      continue
                  try:
-@@ -356,7 +357,7 @@
+@@ -354,13 +355,15 @@ class _CountryNameDict(LazyDict):
      '''
      def _fill(self):
          data = {}
@@ -42,7 +41,6 @@
          try:
              for line in zone_tab.readlines():
                  line = line.decode('US-ASCII')
-@@ -363,6 +364,8 @@
                  if line.startswith('#'):
                      continue
                  code, name = line.split(None, 1)
--- a/components/python/pytz/patches/zones.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytz/patches/zones.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,35 +1,9 @@
-At the time of the integration of pytz 2013d, Solaris ships version 2012j
-of the Olson database.  While there are other changes in the database, a
-few zoneinfo files have been introduced since the version we ship, so we
-remove those from the hard-coded list in pytz.
+Remove 'ROC' from all_timezones.  See
+https://mm.icann.org/pipermail/tz/2001-March/011492.html for details
 
---- pytz-2013d/pytz/__init__.py	Tue Oct 22 14:37:28 2013
-+++ pytz-2013d/pytz/__init__.py	Tue Oct 22 14:39:58 2013
-@@ -762,7 +762,6 @@
-  'Asia/Kashgar',
-  'Asia/Kathmandu',
-  'Asia/Katmandu',
-- 'Asia/Khandyga',
-  'Asia/Kolkata',
-  'Asia/Krasnoyarsk',
-  'Asia/Kuala_Lumpur',
-@@ -804,7 +803,6 @@
-  'Asia/Ulaanbaatar',
-  'Asia/Ulan_Bator',
-  'Asia/Urumqi',
-- 'Asia/Ust-Nera',
-  'Asia/Vientiane',
-  'Asia/Vladivostok',
-  'Asia/Yakutsk',
-@@ -913,7 +911,6 @@
-  'Europe/Brussels',
-  'Europe/Bucharest',
-  'Europe/Budapest',
-- 'Europe/Busingen',
-  'Europe/Chisinau',
-  'Europe/Copenhagen',
-  'Europe/Dublin',
-@@ -1044,7 +1041,6 @@
+--- pytz-2014.10/pytz/__init__.py.~2~	2015-02-25 11:06:24.380394269 -0800
++++ pytz-2014.10/pytz/__init__.py	2015-02-25 11:06:24.386963566 -0800
+@@ -1050,7 +1050,6 @@ all_timezones = \
   'Pacific/Yap',
   'Poland',
   'Portugal',
@@ -37,27 +11,3 @@
   'ROK',
   'Singapore',
   'Turkey',
-@@ -1321,7 +1317,6 @@
-  'Asia/Karachi',
-  'Asia/Kashgar',
-  'Asia/Kathmandu',
-- 'Asia/Khandyga',
-  'Asia/Kolkata',
-  'Asia/Krasnoyarsk',
-  'Asia/Kuala_Lumpur',
-@@ -1357,7 +1352,6 @@
-  'Asia/Tokyo',
-  'Asia/Ulaanbaatar',
-  'Asia/Urumqi',
-- 'Asia/Ust-Nera',
-  'Asia/Vientiane',
-  'Asia/Vladivostok',
-  'Asia/Yakutsk',
-@@ -1400,7 +1394,6 @@
-  'Europe/Brussels',
-  'Europe/Bucharest',
-  'Europe/Budapest',
-- 'Europe/Busingen',
-  'Europe/Chisinau',
-  'Europe/Copenhagen',
-  'Europe/Dublin',
--- a/components/python/pytz/pytz-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/pytz/pytz-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -26,9 +28,8 @@
 set name=pkg.summary value="Python time zone library"
 set name=pkg.description \
     value="This library allows accurate and cross-platform timezone calculations using Python 2.4 or higher and provides access to the Olson timezone database.  It also solves the issue of ambiguous times at the end of daylight savings."
-set name=pkg.human-version value=$(HUMAN_VERSION)
 set name=com.oracle.info.description value="the Python time zone library"
-set name=com.oracle.info.tpno value=15417
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/components/python/requests/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/requests/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		requests
-COMPONENT_VERSION=	1.2.3
+COMPONENT_VERSION=	2.6.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:156bf3ec27ba9ec7e0cf8fbe02808718099d218de403eb64a714d73ba1a29ab1
+    sha256:1cdbed1f0e236f35ef54e919982c7a338e4fea3786310933d3a7887a04b74d75
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/requests/
+COMPONENT_PROJECT_URL=	http://python-requests.org/
 COMPONENT_BUGDB=	python-mod/requests
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21947
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -43,8 +48,7 @@
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests require the py, pytest and invoke Python modules which haven't
-# been integrated yet.
+# Tests require access to AWS services & the Internet
 test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
--- a/components/python/requests/patches/solaris-changes.patch	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/requests/patches/solaris-changes.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -1,39 +1,24 @@
-This patch file makes two changes:
+This patch file adjusts the where() routine in certs.py to return the
+location of the standard certs bundle on Solaris.
 
-1/ Corrects the definition of is_solaris in compat.py.
-2/ Adjusts the where() routine in certs.py to return the location
-   of the standard certs bundle on Solaris.
-
-These changes have been sent upstream.
+This change is only suitable for Solaris, and will not be sent upstream.
 
---- requests-1.2.3/requests/compat.py.orig	2013-07-31 07:31:19.545770096 -0700
-+++ requests-1.2.3/requests/compat.py	2013-07-31 07:31:53.534460102 -0700
-@@ -71,7 +71,7 @@
- is_linux = ('linux' in str(sys.platform).lower())
- is_osx = ('darwin' in str(sys.platform).lower())
- is_hpux = ('hpux' in str(sys.platform).lower())   # Complete guess.
--is_solaris = ('solar==' in str(sys.platform).lower())   # Complete guess.
-+is_solaris = ('sunos' in str(sys.platform).lower())
+--- requests-2.6.0/requests/certs.py	Sun Aug  3 06:15:57 2014
++++ requests-2.6.0/requests/certs.py	Mon Mar 16 11:54:13 2015
+@@ -13,13 +13,9 @@
+ """
+ import os.path
  
- try:
-     import simplejson as json
---- requests-1.2.3/requests/certs.py.orig	2013-07-31 07:34:29.859095710 -0700
-+++ requests-1.2.3/requests/certs.py	2013-07-31 09:31:36.868103751 -0700
-@@ -13,12 +13,15 @@
- """
- 
- import os.path
--
-+import compat
- 
- def where():
-     """Return the preferred certificate bundle."""
-     # vendored bundle inside Requests
--    return os.path.join(os.path.dirname(__file__), 'cacert.pem')
-+    if compat.is_solaris:
-+        return "/etc/certs/ca-certificates.crt"
-+    else:
-+        return os.path.join(os.path.dirname(__file__), 'cacert.pem')
+-try:
+-    from certifi import where
+-except ImportError:
+-    def where():
+-        """Return the preferred certificate bundle."""
+-        # vendored bundle inside Requests
+-        return os.path.join(os.path.dirname(__file__), 'cacert.pem')
++def where():
++    """Return the preferred certificate bundle."""
++    return "/etc/certs/ca-certificates.crt"
  
  if __name__ == '__main__':
      print(where())
--- a/components/python/requests/requests-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/requests/requests-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,27 +18,32 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/requests-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
-set name=pkg.summary value="Python HTTP for Humans."
+set name=pkg.summary value="Python HTTP for Humans"
 set name=pkg.description \
-    value="The Python requests module is an HTTP library, for human beings. It allow you to send HTTP/1.1 requests. You can add headers, form data, multipart files, and parameters with simple Python dictionaries, and access the response data in the same way. It's powered by httplib and urllib3."
-set name=com.oracle.info.description value="the Python urllib3 module"
-set name=com.oracle.info.tpno value=14503
+    value="Requests is a HTTP library, written in Python, for human beings.  Requests takes all of the work out of Python HTTP/1.1 - making integration with web services seamless. There's no need to manually add query strings to URLs, or to form-encode POST data. Headers, form data, multipart files, and parameters can be added using simple Python dictionaries, and the response data can be accessed in the same way.  Keep-alive and HTTP connection pooling are 100% automatic."
+set name=com.oracle.info.description value="the Python requests module"
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
-    value=org.opensolaris.category.2008:Development/Python
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream value="Kenneth Reitz <[email protected]>"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/255
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/requests-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/adapters.py
@@ -51,72 +56,87 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/hooks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/big5freq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/big5prober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/chardistribution.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/charsetgroupprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/charsetprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/codingstatemachine.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/compat.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/constants.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/cp949prober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/escprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/escsm.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/eucjpprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/euckrfreq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/euckrprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/euctwfreq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/euctwprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/gb2312freq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/gb2312prober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/hebrewprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/jisfreq.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/jpcntx.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langbulgarianmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langcyrillicmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langgreekmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langhebrewmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langhungarianmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/langthaimodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/latin1prober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/mbcharsetprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/mbcsgroupprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/mbcssm.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/sbcharsetprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/sbcsgroupprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/sjisprober.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/universaldetector.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/charade/utf8prober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/big5freq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/big5prober.py
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/chardetect.py \
+    pkg.depend.bypass-generate=.*/chardet.*
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/chardistribution.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/charsetgroupprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/charsetprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/codingstatemachine.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/compat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/cp949prober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/escprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/escsm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/eucjpprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/euckrfreq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/euckrprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/euctwfreq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/euctwprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/gb2312freq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/gb2312prober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/hebrewprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/jisfreq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/jpcntx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langbulgarianmodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langcyrillicmodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langgreekmodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langhebrewmodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langhungarianmodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/langthaimodel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/latin1prober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/mbcharsetprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/mbcsgroupprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/mbcssm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/sbcharsetprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/sbcsgroupprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/sjisprober.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/universaldetector.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/chardet/utf8prober.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/_collections.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/connection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/connectionpool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/contrib/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/contrib/ntlmpool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/contrib/pyopenssl.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/fields.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/filepost.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/packages/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/packages/ordered_dict.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/packages/six.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/poolmanager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/request.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/response.py
-file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/connection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/request.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/response.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/retry.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/ssl_.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/timeout.py
+file path=usr/lib/python$(PYVER)/vendor-packages/requests/packages/urllib3/util/url.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/sessions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/status_codes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/structures.py
 file path=usr/lib/python$(PYVER)/vendor-packages/requests/utils.py
-license requests.license license="Apache v2.0, MIT, LGPLv2.1"
+#
+license requests.license license="Apache v2.0, MIT, LGPLv2.1, PSF"
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
 
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
 
-# force a dependency on pyopenssl; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/pyopenssl-$(PYV)
-
 # force a dependency on the requests package
 depend type=require \
     fmri=library/python-2/requests@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/requests/requests.license	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/requests/requests.license	Mon Apr 20 12:35:51 2015 -0700
@@ -1,3 +1,17 @@
+Copyright 2014 Kenneth Reitz
+
+   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.
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -202,7 +216,33 @@
 
 --------------------------------------------------------------------------
 
-Urllib3 License
+Vendorization code from pip
+===========================
+
+Copyright (c) Donald Stufft, pip, and individual contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------------------------
+
+Urllib3 License (from top-level NOTICE)
 ===============
 
 This is the MIT license: http://www.opensource.org/licenses/mit-license.php
@@ -228,78 +268,26 @@
 
 --------------------------------------------------------------------------
 
-Copyright (c) 2011 Idan Gazit and contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    1. Redistributions of source code must retain the above copyright notice,
-       this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
+Chardet License (from top-level NOTICE)
+===============
 
-    3. Neither the name of this project nor the names of its contributors may
-       be used to endorse or promote products derived from this software without
-       specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
 
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is the Netscape security libraries.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1994-2000
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
 
-Oracle chooses the LGPLv2.1
-
---------------------------------------------------------------------------
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301  USA
 
                 GNU LESSER GENERAL PUBLIC LICENSE
-                   Version 2.1, February 1999 
+                   Version 2.1, February 1999
 
 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -668,7 +656,7 @@
 subject to these terms and conditions. You may not impose any further
 restrictions on the recipients' exercise of the rights granted herein.
 You are not responsible for enforcing compliance by third parties with
-this License. 
+this License.
 
 11. If, as a consequence of a court judgment or allegation of patent
 infringement or for any other reason (not limited to patent issues),
@@ -731,7 +719,7 @@
 of all derivatives of our free software and of promoting the sharing
 and reuse of software generally.
 
-NO WARRANTY 
+NO WARRANTY
 
 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@@ -802,52 +790,33 @@
 
 --------------------------------------------------------------------------
 
-Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-This module is part of urllib3 and is released under
-the MIT License: http://www.opensource.org/licenses/mit-license.php
+ordered_dict license
+====================
+
+Copyright 2009 Raymond Hettinger, released under the MIT License.
 
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files (the “Software”), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
-of the Software, and to permit persons to whom the Software is furnished to do 
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the “Software”), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in all 
+The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 --------------------------------------------------------------------------
 
-Copyright 2009 Raymond Hettinger, released under the MIT License.
-http://code.activestate.com/recipes/576693/
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files (the “Software”), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
-of the Software, and to permit persons to whom the Software is furnished to do 
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
-SOFTWARE.
-
---------------------------------------------------------------------------
+six license
+===========
 
 Copyright (c) 2010-2011 Benjamin Peterson
 
@@ -867,3 +836,44 @@
 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------------------------
+
+PSF license (for ssl_match_hostname, in urllib3)
+
+1.  This LICENSE AGREEMENT is between the Python Software Foundation (“PSF”),
+    and the Individual or Organization (“Licensee”) accessing and otherwise
+    using Python 3.4.3 software in source or binary form and its associated
+    documentation.
+2.  Subject to the terms and conditions of this License Agreement, PSF
+    hereby grants Licensee a nonexclusive, royalty-free, world-wide license
+    to reproduce, analyze, test, perform and/or display publicly, prepare
+    derivative works, distribute, and otherwise use Python 3.4.3 alone or
+    in any derivative version, provided, however, that PSF’s License
+    Agreement and PSF’s notice of copyright, i.e., “Copyright © 2001-2015
+    Python Software Foundation; All Rights Reserved” are retained in Python
+    3.4.3 alone or in any derivative version prepared by Licensee.
+3.  In the event Licensee prepares a derivative work that is based on or
+    incorporates Python 3.4.3 or any part thereof, and wants to make the
+    derivative work available to others as provided herein, then Licensee
+    hereby agrees to include in any such work a brief summary of the
+    changes made to Python 3.4.3.
+4.  PSF is making Python 3.4.3 available to Licensee on an “AS IS” basis.
+    PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY
+    OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY
+    REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY
+    PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 3.4.3 WILL NOT INFRINGE
+    ANY THIRD PARTY RIGHTS.
+5.  PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.4.3
+    FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A
+    RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.4.3, OR
+    ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+6.  This License Agreement will automatically terminate upon a material
+    breach of its terms and conditions.
+7.  Nothing in this License Agreement shall be deemed to create any
+    relationship of agency, partnership, or joint venture between PSF and
+    Licensee. This License Agreement does not grant permission to use PSF
+    trademarks or trade name in a trademark sense to endorse or promote
+    products or services of Licensee, or any third party.
+8.  By copying, installing or otherwise using Python 3.4.3, Licensee agrees
+    to be bound by the terms and conditions of this License Agreement.
--- a/components/python/requests/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/requests/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,2 +1,3 @@
+library/python-2/argparse-26
 runtime/python-26
 runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/retrying/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,52 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		retrying
+COMPONENT_VERSION=	1.3.3
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/rholder/retrying
+COMPONENT_BUGDB=	python-mod/retrying
+
+TPNO=			21637
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# The tarball for this version does not ship unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/retrying/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/retrying/retrying-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,59 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/retrying-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Apache Retry Library"
+set name=pkg.description \
+    value="Retrying is a general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It provides a generic decorator API, a way to specify both stop and wait conditions, and the ability to customize retrying on exceptions and the expected returned result."
+set name=com.oracle.info.description value="the Python retrying module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Ray Holder"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/063
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/retrying.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the retrying package
+depend type=require \
+    fmri=library/python/retrying@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/rfc3986/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,59 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		rfc3986
+COMPONENT_VERSION=	0.2.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:8a7b3f6cfdfb969c2e876513e87c30ebe1e4bdc9fae4a63c701eee88bbec9b22
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/sigmavirus24/rfc3986
+COMPONENT_BUGDB=	python-mod/rfc3986
+
+TPNO=			20390
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+# to make sure that the docs get installed in the right place.
+PYTHON_DATA = /usr
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_ARGS=	../runtests.sh
+COMPONENT_TEST_CMD=	/bin/sh
+COMPONENT_TEST_DIR=	$(SOURCE_DIR)
+COMPONENT_TEST_ENV+=	PYTHON=$(PYTHON)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/rfc3986/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/rfc3986/rfc3986-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,62 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/rfc3986-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Validating URI References per RFC 3986"
+set name=pkg.description \
+    value="A Python implementation of RFC 3986 including validation and authority parsing."
+set name=com.oracle.info.description value="the Python RFC 3986 module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="Ian Cordasco <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/098
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/compat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/misc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/normalizers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/rfc3986/uri.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the rfc3986 package
+depend type=require \
+    fmri=library/python/rfc3986@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/rfc3986/runtests.sh	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+for test in \
+    test_api \
+    test_normalizers \
+    test_unicode_support \
+    test_uri \
+    ; do
+	${PYTHON} tests/${test}.py
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/saharaclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,56 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-saharaclient
+COMPONENT_VERSION=	0.7.6
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:9013b57a70c30c4ef6e799f11755495343106528ee42bbeb8a40b5e8fad825c2
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/python-saharaclient
+COMPONENT_BUGDB=	service/saharaclient
+
+TPNO=			21636
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f sahara sahara-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/test-requirements.txt for the python modules
+# required to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/saharaclient/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/saharaclient/saharaclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,123 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/saharaclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="Python and command-line clients for the OpenStack Data Processing API"
+set name=pkg.description \
+    value="A client for the OpenStack Data Processing API. There's a Python API (the 'saharaclient' module), and a command-line script ('sahara'). Each implements 100% of the OpenStack Data Processing API."
+set name=com.oracle.info.description \
+    value="saharaclient, the Python bindings to the OpenStack Data Processing API"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management"
+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/2015/066
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+link path=usr/bin/sahara target=sahara-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/sahara-$(PYVER)
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_saharaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/cluster_templates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/clusters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/data_sources.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/httpclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/job_binaries.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/job_binary_internals.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/job_executions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/jobs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/node_group_templates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/parameters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/plugins.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/api/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/apiclient/fake_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/cliutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/saharaclient/version.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on prettytable; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/prettytable-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on the saharaclient package
+depend type=require \
+    fmri=library/python/saharaclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/simplegeneric/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		simplegeneric
+COMPONENT_VERSION=	0.8.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).zip
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://pypi.python.org/pypi/simplegeneric
+COMPONENT_BUGDB=	python-mod/simplegeneric
+
+TPNO=			20391
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/simplegeneric/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/simplegeneric/simplegeneric-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/simplegeneric-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Simple generic functions"
+set name=pkg.description \
+    value="The 'simplegeneric' module lets you define simple single-dispatch generic functions, akin to Python's built-in generic functions like 'len()', 'iter()' and so on.  However, instead of using specially-named methods, these generic functions use simple lookup tables, akin to those used by e.g. 'pickle.dump()' and other generic functions found in the Python standard library."
+set name=com.oracle.info.description \
+    value="the Python simple generic functions module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/061
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/simplegeneric-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/simplegeneric-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/simplegeneric-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/simplegeneric-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/simplegeneric.py
+#
+license simplegeneric.license license=ZPL
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the simplegeneric package
+depend type=require \
+    fmri=library/python/simplegeneric@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/simplegeneric/simplegeneric.license	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,11 @@
+Zope Public License (ZPL) Version 2.1
+A copyright notice accompanies this license document that identifies the copyright holders.
+This license has been certified as open source. It has also been designated as GPL compatible by the Free Software Foundation (FSF).
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+1. Redistributions in source code must retain the accompanying copyright notice, this list of conditions, and the following disclaimer.
+2. Redistributions in binary form must reproduce the accompanying copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
+3. Names of the copyright holders must not be used to endorse or promote products derived from this software without prior written permission from the copyright holders.
+4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of the copyright holders. Use of them is covered by separate agreement with the copyright holders.
+5. If any files are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+Disclaimer
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- a/components/python/simplejson/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/simplejson/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,36 +20,38 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		simplejson
-COMPONENT_VERSION=	2.1.2
+COMPONENT_VERSION=	3.6.5
 COMPONENT_PROJECT_URL=	http://undefined.org/python/#simplejson
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH= \
-    sha256:d196d78af44acdf47078e320124bfe4cd2cb3bd7b9be7f5587b2e149124cb49c
+    sha256:2a3189f79d1c7b8a2149a0e783c0b4217fad9b30a6e7d60450f2553dc2c0e57e
 COMPONENT_ARCHIVE_URL=	http://pypi.python.org/packages/source/s/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	python-mod/simplejson
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21749
 
-COMPONENT_TEST_DIR= $(COMPONENT_SRC) 
-COMPONENT_TEST_ARGS= ./setup.py test
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-# common targets
-build:          $(BUILD_32_and_64)
+COMPONENT_TEST_DIR= $(COMPONENT_SRC)
+COMPONENT_TEST_ARGS= ./setup.py test
 
-install:        $(INSTALL_32_and_64)
+# common targets
+build:		$(BUILD_32_and_64)
 
-test:           $(TEST_32_and_64)
+install:	$(INSTALL_32_and_64)
+
+test:		$(TEST_32_and_64)
 
 BUILD_PKG_DEPENDENCIES =        $(BUILD_TOOLS)
 
--- a/components/python/simplejson/simplejson-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/simplejson/simplejson-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,54 +20,39 @@
 #
 
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python-2/simplejson-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="JSON (Java Script Object Notation) encoder/decoder for Python"
+    value="JSON (JavaScript Object Notation) encoder/decoder for Python"
+set name=pkg.description \
+    value="The simplejson module is a simple, fast, complete, correct, and extensible JSON encoder and decoder for Python. The encoder can be specialized to provide serialization in any kind of situation, without any special support by the objects to be serialized (somewhat like pickle). The decoder can handle incoming JSON strings of any specified encoding (UTF-8 by default). It can also be specialized to post-process JSON objects, which is particularly useful for implementing protocols such as JSON-RPC that have a richer type system than JSON itself."
 set name=com.oracle.info.description value="the JSON encoder/decoder for Python"
-set name=com.oracle.info.tpno value=5929
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=LSARC/2008/722
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-2.1.2-py$(PYVER).egg-info/PKG-INFO
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-2.1.2-py$(PYVER).egg-info/SOURCES.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-2.1.2-py$(PYVER).egg-info/dependency_links.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-2.1.2-py$(PYVER).egg-info/top_level.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-2.1.2-py$(PYVER).egg-info/zip-safe
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/simplejson-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/64/_speedups.so
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/_speedups.so
+$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/_speedups.so
+$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/_speedups.so
+file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/compat.py
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/decoder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/encoder.py
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/ordered_dict.py
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/scanner.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_check_circular.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_decimal.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_decode.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_default.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_dump.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_encode_basestring_ascii.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_encode_for_html.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_errors.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_fail.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_float.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_indent.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_pass1.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_pass2.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_pass3.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_recursion.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_scanstring.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_separators.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_speedups.py
-file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tests/test_unicode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/simplejson/tool.py
+#
 license simplejson.license license=MIT
 
 # simplejson was previously in the 'desktop' consolidation. This optional
--- a/components/python/six/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/six/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,36 +18,41 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		six
-COMPONENT_VERSION=	1.6.1
+COMPONENT_VERSION=	1.9.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:d4392a7c8d91b005c002568a85faf617c67241c8cd8399cc395e8f1005aff80d
+    sha256:e24052411fc4fbd1f672635537c3fc2330d9481b18c0317695b46259512c91d5
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://pypi.python.org/pypi/six/
 COMPONENT_BUGDB=	python-mod/six
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21739
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-COMPONENT_TEST_DIR =    $(SOURCE_DIR)
-COMPONENT_TEST_ARGS =   test_six.py
+COMPONENT_TEST_DIR =	$(SOURCE_DIR)
+COMPONENT_TEST_ARGS =	test_six.py
+COMPONENT_TEST_CMD =	py.test-$(PYTHON_VERSION)
 
 # common targets
 build:		$(BUILD_NO_ARCH)
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests require the py Python module which hasn't been integrated yet.
-test:		$(NO_TESTS)
+test:		$(TEST_NO_ARCH)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
 
--- a/components/python/six/six-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/six/six-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -27,7 +27,7 @@
 set name=pkg.description \
     value="Six is a Python 2 and 3 compatibility library. It provides utility functions for smoothing over the differences between the Python versions with the goal of writing Python code that is compatible on both Python versions."
 set name=com.oracle.info.description value="the Python six module"
-set name=com.oracle.info.tpno value=17859
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/components/python/sqlalchemy-migrate/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/sqlalchemy-migrate/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -23,18 +23,20 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		sqlalchemy-migrate
-COMPONENT_VERSION=	0.7.2
+COMPONENT_VERSION=	0.9.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:7f55c768ee26f143fedb11b365a4c57c3bbdb5211e049c7f04b8ae8107c28333
+    sha256:16e327c9642ca4c99a70dcac3b39aeb821edaf5214834b47fb0a89bac44af23b
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://code.google.com/p/sqlalchemy-migrate/
 COMPONENT_BUGDB=	python-mod/sqlalchemy-migrate
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21740
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/sqlalchemy-migrate/patches/01-fix-warnings.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,18 @@
+The following patch address the following upstream issue
+
+	http://code.google.com/p/sqlalchemy-migrate/issues/detail?id=170
+
+It has not yet been submitted upstream.
+
+--- sqlalchemy-migrate-0.9.1/migrate/changeset/__init__.py.~1~	2014-05-06 07:39:34.000000000 -0700
++++ sqlalchemy-migrate-0.9.1/migrate/changeset/__init__.py	2014-09-01 23:26:29.864218808 -0700
+@@ -10,7 +10,8 @@ import warnings
+ import sqlalchemy
+ from sqlalchemy import __version__ as _sa_version
+ 
+-warnings.simplefilter('always', DeprecationWarning)
++warnings.filterwarnings('always', message='.*', category=DeprecationWarning,
++    module='migrate.changeset')
+ 
+ _sa_version = tuple(int(re.match("\d+", x).group(0)) for x in _sa_version.split("."))
+ SQLA_07 = _sa_version >= (0, 7)
--- a/components/python/sqlalchemy-migrate/resolve.deps	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/sqlalchemy-migrate/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -1,11 +1,10 @@
 library/python-2/decorator-26
 library/python-2/decorator-27
-library/python-2/nose-26
-library/python-2/nose-27
 library/python-2/setuptools-26
 library/python-2/setuptools-27
 library/python-2/sqlalchemy-26
 library/python-2/sqlalchemy-27
-library/python-2/unittest2-26
+library/python/six-26
+library/python/six-27
 runtime/python-26
 runtime/python-27
--- a/components/python/sqlalchemy-migrate/sqlalchemy-migrate-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/sqlalchemy-migrate/sqlalchemy-migrate-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 # These template files would be processed by pkgdepend, but shouldn't be.
@@ -30,7 +32,7 @@
     value="Inspired by Ruby on Rails' migrations, Migrate provides a way to deal with database schema changes in SQLAlchemy projects.  Migrate extends SQLAlchemy to have database changeset handling.  It provides a database change repository mechanism which can be used from the command line as well as from inside Python code."
 set name=com.oracle.info.description \
     value="the database schema migration for SQLAlchemy module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Databases \
     value=org.opensolaris.category.2008:Development/Python
@@ -52,64 +54,19 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/constraint.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/firebird.py
+file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/ibmdb2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/mysql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/oracle.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/postgres.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/sqlite.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/databases/visitor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/schema.py
+file path=usr/lib/python$(PYVER)/vendor-packages/migrate/changeset/util.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/exceptions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/changeset/__init__.py
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/changeset/test_changeset.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/changeset/test_constraint.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/__init__.py \
-    pkg.depend.bypass-generate=.*/unittest2.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/base.py \
-    pkg.depend.bypass-generate=.*/unittest2.*
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/database.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/models.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/pathed.py
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/shell.py \
-    pkg.depend.bypass-generate=.*/scripttest.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/fixture/warnings.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/integrated/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/integrated/test_docs.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_api.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_cfgparse.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_database.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_genmodel.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_keyedinstance.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_pathed.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_repository.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_runchangeset.py
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_schema.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_schemadiff.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_script.py
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_shell.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_template.py
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_util.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/tests/versioning/test_version.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/cfgparse.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/config.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
+file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/genmodel.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/migrate_repository.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/pathed.py
@@ -118,7 +75,9 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/schemadiff.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/script/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/script/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/script/py.py
+file \
+    path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/script/py.py \
+    pkg.depend.bypass-generate=.*/six.*
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/script/sql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/template.py
@@ -139,9 +98,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/templates/script/pylons.py_tmpl
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/templates/sql_script/default.py_tmpl
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/templates/sql_script/pylons.py_tmpl
-file \
-    path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/util/__init__.py \
-    pkg.depend.bypass-generate=.*/sqlalchemy.*
+file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/util/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/util/importpath.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/util/keyedinstance.py
 file path=usr/lib/python$(PYVER)/vendor-packages/migrate/versioning/version.py
@@ -149,6 +106,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy_migrate-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 license sqlalchemy-migrate.license license=MIT
@@ -157,5 +115,5 @@
 depend type=require \
     fmri=library/python-2/sqlalchemy-migrate@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 
-# force dependency on tempita; pkgdepend work is needed to flush this out.
+# force a dependency on tempita; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/tempita-$(PYV)
--- a/components/python/sqlalchemy/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/sqlalchemy/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		SQLAlchemy
-COMPONENT_VERSION=	0.7.9
+COMPONENT_VERSION=	0.9.8
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:4a89556cb55275d1af694dc4d5700d8bf0f83690bac16ab30340092ff25bb4d7
+    sha256:de3ac04ecab0a7e0af64eee30a71e723ba5886b958205f7354dd62439da60389
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://www.sqlalchemy.org/
 COMPONENT_BUGDB=	python-mod/sqlalchemy
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21741
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/sqlalchemy/sqlalchemy-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/sqlalchemy/sqlalchemy-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -28,7 +30,7 @@
     value="SQLAlchemy is the Python SQL toolkit and Object Relational Mapper (ORM) that gives application developers the full power and flexibility of SQL.  SQLAlchemy provides a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language."
 set name=com.oracle.info.description \
     value="the Python SQL toolkit and Object Relational Mapper"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Databases \
     value=org.opensolaris.category.2008:Development/Python
@@ -44,6 +46,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/SQLAlchemy-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/64/cprocessors.so
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/64/cresultproxy.so
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/64/cutils.so
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/connectors/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/connectors/mxodbc.py
@@ -52,22 +55,16 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/connectors/zxJDBC.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/cprocessors.so
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/cresultproxy.so
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/cutils.so
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/databases/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/access/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/access/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/drizzle/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/drizzle/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/drizzle/mysqldb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/firebird/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/firebird/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/firebird/fdb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/firebird/kinterbasdb.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/informix/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/informix/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/informix/informixdb.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/maxdb/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/maxdb/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/maxdb/sapdb.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mssql/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mssql/adodbapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mssql/base.py
@@ -78,6 +75,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mssql/zxjdbc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/cymysql.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/gaerdbms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/mysqlconnector.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/mysql/mysqldb.py
@@ -92,9 +90,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgres.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/constraints.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/hstore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/json.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/pg8000.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/psycopg2.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/pypostgresql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/ranges.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/postgresql/zxjdbc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/sqlite/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/sqlite/base.py
@@ -106,29 +108,42 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/dialects/sybase/pysybase.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/ddl.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/default.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/reflection.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/result.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/strategies.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/threadlocal.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/url.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/engine/util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/attr.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/legacy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/event/registry.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/events.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/exc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/associationproxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/automap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/compiler.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/declarative.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/declarative/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/declarative/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/declarative/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/declarative/clsregistry.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/horizontal_shard.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/hybrid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/instrumentation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/mutable.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/orderinglist.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/serializer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/ext/sqlsoup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/inspection.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/log.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/attributes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/collections.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/dependency.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/deprecated_interfaces.py
@@ -140,15 +155,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/identity.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/instrumentation.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/interfaces.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/loading.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/mapper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/path_registry.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/persistence.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/properties.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/query.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/relationships.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/scoping.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/session.py
-file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/shard.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/state.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/strategies.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/strategy_options.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/sync.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/unitofwork.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/orm/util.py
@@ -156,10 +174,21 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/processors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/schema.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/annotation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/compiler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/ddl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/default_comparator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/dml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/elements.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/expression.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/functions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/naming.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/operators.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/schema.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/selectable.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/sqltypes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/type_api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/util.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/sql/visitors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/sqlalchemy/types.py
@@ -173,6 +202,10 @@
 #
 license sqlalchemy.license license=MIT
 
+# force a group dependency on the optional setuptools; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/setuptools-$(PYV)
+
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
--- a/components/python/stevedore/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/stevedore/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,28 +18,33 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		stevedore
-COMPONENT_VERSION=	0.10
+COMPONENT_VERSION=	1.2.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:71a6ffb669c6d84ef0f43f44816257101775f955590986c29a95ce07293fd6e8
+    sha256:3f70db9052c26e66dac61cb73d8c6f5211373983d39872addab617c759db4b45
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	http://pypi.python.org/pypi/stevedore/
+COMPONENT_PROJECT_URL=	https://github.com/dreamhost/stevedore
 COMPONENT_BUGDB=	python-mod/stevedore
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21742
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-COMPONENT_TEST_DIR =    $(SOURCE_DIR)
-COMPONENT_TEST_ARGS =   setup.py test
+COMPONENT_TEST_DIR =	$(SOURCE_DIR)
+COMPONENT_TEST_ARGS =	setup.py test
 
 # common targets
 build:		$(BUILD_NO_ARCH)
--- a/components/python/stevedore/stevedore-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/stevedore/stevedore-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="Python makes loading code dynamically easy, allowing you to configure and extend your application by discovering and loading extensions ('plugins') at runtime. Many applications implement their own library for doing this, using __import__ or importlib. stevedore avoids creating yet another extension mechanism by building on top of setuptools entry points. The code for managing entry points tends to be repetitive, though, so stevedore provides manager classes for implementing common patterns for using dynamically loaded extensions."
 set name=com.oracle.info.description value="the Python stevedore module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -35,12 +37,14 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/245
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/dispatch.py
@@ -56,22 +60,19 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/extension.py
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/hook.py
 file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/named.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/manager.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_dispatch.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_driver.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_enabled.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_example_fields.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_example_simple.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_extension.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_hook.py
-file path=usr/lib/python$(PYVER)/vendor-packages/stevedore/tests/test_named.py
+#
 license LICENSE license="Apache v2.0"
 
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
     pkg.debug.depend.path=usr/bin
 
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
 # force a dependency on the stevedore package
 depend type=require \
     fmri=library/python-2/stevedore@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/swiftclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/swiftclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,26 +20,25 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-swiftclient
-COMPONENT_VERSION=	2.1.0
+COMPONENT_VERSION=	2.3.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:e5304cc2fc58e5f9fec87c0910109b524b3634f49a6dd82a35a28cbdf1515de8
+    sha256:20a9d81dc0d948740a188a0c42e7f7fcc9c81a185bfbdf180f68580ea49309a6
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-swiftclient
 COMPONENT_BUGDB=	service/swift
 
-# depends on keystoneclient which is not Python 3 ready
-PYTHON_VERSIONS=	2.7 2.6
+TPNO=			21736
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- a/components/python/swiftclient/swiftclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/swiftclient/swiftclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,18 +20,18 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python/swiftclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Swift API"
+    value="Python and command-line clients for the OpenStack Object Storage API"
 set name=pkg.description \
     value="A python client for the OpenStack Object Storage API. There's a Python API (the 'swiftclient' module), and a command-line script ('swift')."
 set name=com.oracle.info.description \
     value="swiftclient, the Python bindings to the OpenStack Object Storage API"
-set name=com.oracle.info.tpno value=17873
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -41,12 +41,14 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/007
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 link path=usr/bin/swift target=swift-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
 file path=usr/bin/swift-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_swiftclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
@@ -55,23 +57,23 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/command_helpers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/exceptions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/multithreading.py
-file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/shell.py \
-    pkg.depend.bypass-generate=.*/six.*
+file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/version.py
+#
 license swiftclient.license license="Apache v2.0"
 
-# force a group dependency on the optional simplejson; pkgdepend work is
-# needed to flush this out.
-depend type=group fmri=library/python-2/simplejson-$(PYV)
-
 # force a group dependency on the optional keystoneclient; pkgdepend work is
 # needed to flush this out.
 depend type=group fmri=library/python/keystoneclient-$(PYV)
 
-# force a group dependency on the optional pbr; pkgdepend work is needed to
-# flush this out.
-depend type=group fmri=library/python/pbr-$(PYV)
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on futures; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/futures-$(PYV)
 
 # force a dependency on requests; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/requests-$(PYV)
@@ -79,6 +81,9 @@
 # force a dependency on setuptools; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/setuptools-$(PYV)
 
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
 # force a dependency on the swiftclient package
 depend type=require \
     fmri=library/python/swiftclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/taskflow/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		taskflow
+COMPONENT_VERSION=	0.6.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:5dc4a6e62ebea2f5cebb9ca4d8b3c21b97738065a881f3235ace0c070fa3185f
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://wiki.openstack.org/wiki/TaskFlow
+COMPONENT_BUGDB=	python-mod/taskflow
+
+TPNO=			21638
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/taskflow/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/taskflow/taskflow-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,248 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/taskflow-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="A Python library that provides task execution insurance."
+set name=pkg.description \
+    value="Taskflow is a Python library for OpenStack that helps make task execution easy, consistent, and reliable. It allows the creation of lightweight task objects and/or functions that are combined together into flows (aka: workflows). It includes engines for running these flows in a manner that can be stopped, resumed, and safely reverted.  Projects implemented using the this library enjoy added state resiliency, fault tolerance and simplified crash recovery. Think of it as a way to protect an action, similar to the way transactions protect operations in a RDBMS. Typically if a manager process is terminated while an action was in progress, there is a risk that unprotected code would leave the system in a degraded or inconsistent state. With this library, interrupted actions may be resumed or rolled back automatically when a manager process is resumed."
+set name=com.oracle.info.description \
+    value="the Taskflow task execution insurance Python module"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+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/2014/305
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/atom.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/conductors/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/conductors/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/conductors/single_threaded.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/actions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/actions/retry.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/actions/task.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/analyzer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/compiler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/completer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/engine.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/executor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/runner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/runtime.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/action_engine/scopes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/helpers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/endpoint.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/engine.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/executor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/protocol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/engines/worker_based/worker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/alphabet_soup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/build_a_car.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/buildsystem.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/calculate_in_parallel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/calculate_linear.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/create_parallel_volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/delayed_return.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/example_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/fake_billing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/graph_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/hello_world.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/job_board_no_test.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/jobboard_produce_consume_colors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/parallel_table_multiply.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/persistence_example.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/pseudo_scoping.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/pseudo_scoping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_from_backend.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_from_backend.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_many_flows.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_many_flows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_many_flows/my_flows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_many_flows/resume_all.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_many_flows/run_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_vm_boot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/resume_volume_create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/retry_flow.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/retry_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/reverting_linear.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/reverting_linear.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/run_by_iter.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/run_by_iter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/run_by_iter_enumerate.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/run_by_iter_enumerate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear_listening.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear_listening.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear_pass.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_linear_pass.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/simple_map_reduce.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/timing_listener.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wbe_event_sender.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wbe_mandelbrot.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wbe_mandelbrot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wbe_simple_linear.out.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wbe_simple_linear.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/examples/wrapped_exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/jobs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/jobs/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/jobs/backends/impl_zookeeper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/jobs/job.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/jobs/jobboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/claims.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/logging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/printing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/listeners/timing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/logging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/patterns/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/patterns/graph_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/patterns/linear_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/patterns/unordered_flow.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/impl_dir.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/impl_memory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/impl_sqlalchemy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/impl_zookeeper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/README
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/env.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/alembic/versions/README
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/backends/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/persistence/logbook.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/retry.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/storage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/task.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/test.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/failure.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/fsm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/futures.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/graph.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/latch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/timing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/types/tree.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/async_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/deprecation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/kazoo_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/lock_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/misc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/persistence_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/utils/threading_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/taskflow/version.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional eventlet; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/eventlet-$(PYV)
+
+# force a group dependency on the optional pbr; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/pbr-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on alembic; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/alembic-$(PYV)
+
+# force a dependency on futures; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/futures-$(PYV)
+
+# force a dependency on jsonschema; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/jsonschema-$(PYV)
+
+# force a dependency on kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/kombu-$(PYV)
+
+# force a dependency on networkx; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/networkx-$(PYV)
+
+# force a dependency on ordereddict; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/ordereddict-$(PYV)
+
+# force a dependency on oslo.serialization; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.serialization-$(PYV)
+
+# force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.utils-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/sqlalchemy-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
+
+# force a dependency on the taskflow package
+depend type=require \
+    fmri=library/python/taskflow@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/tox/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/tox/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,28 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
 #
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		tox
-COMPONENT_VERSION=	1.4.3
+COMPONENT_VERSION=	1.8.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:b998d809d954fd9c30476a56bbbbf20a1a5adaa3e4cc5eb052c7051a682b2021
+    sha256:44ca1e038cb57fe40ac0dff8b67b258efe05517bf9b4b4b07035f8be830aac01
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
-COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/tox
+COMPONENT_PROJECT_URL=	http://tox.testrun.org/
 COMPONENT_BUGDB=	python-mod/tox
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21743
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 COMPONENT_POST_INSTALL_ACTION += (cd $(PROTO_DIR)/usr/bin ; \
 	$(MV) -f tox tox-$(PYTHON_VERSION); \
@@ -42,9 +47,13 @@
 
 COMPONENT_TEST_ENV +=	HOME=$(HOME)
 COMPONENT_TEST_ENV +=	PATH=/usr/bin
-COMPONENT_TEST_DIR =    $(COMPONENT_SRC)/tests
-COMPONENT_TEST_CMD =    $(PROTOUSRBINDIR)/tox-$(PYTHON_VERSION)
-COMPONENT_TEST_ARGS =   test_config.py
+COMPONENT_TEST_DIR =	$(COMPONENT_SRC)/tests
+COMPONENT_TEST_CMD =	$(PROTOUSRBINDIR)/tox-$(PYTHON_VERSION)
+# Tox normally runs all test environments at once, which means that with one
+# test target per Python version, we run all environments for each.  So we
+# restrict the Python versions to the one corresponding to the test target.
+PYV = $(shell echo $(PYTHON_VERSION) | tr -d .)
+COMPONENT_TEST_ARGS =	-e $(PYV:%=py%)
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -53,7 +62,6 @@
 
 install:	$(INSTALL_NO_ARCH)
 
-# Tests require py, pytest and virtualenv packages to be installed.
 test:		$(TEST_NO_ARCH)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
--- a/components/python/tox/tox-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/tox/tox-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,7 +29,7 @@
 set name=pkg.description \
     value="Tox as is a generic virtualenv management and test command line tool you can use for: checking your package installs correctly with different Python versions and interpreters; running your tests in each of the environments; configuring your test tool of choice; acting as a frontend to Continuous Integration servers, greatly reducing boilerplate and merging CI and shell-based testing."
 set name=com.oracle.info.description value="the Python tox module"
-set name=com.oracle.info.tpno value=14503
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -46,8 +48,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/tox-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/tox-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/tox-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
-file path=usr/lib/python$(PYVER)/vendor-packages/tox-$(COMPONENT_VERSION)-py$(PYVER).egg-info/zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/tox/__main__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_cmdline.py
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_exception.py
@@ -55,10 +57,13 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_quickstart.py
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_venv.py
 file path=usr/lib/python$(PYVER)/vendor-packages/tox/_verlib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/tox/interpreters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/tox/result.py
+file path=usr/lib/python$(PYVER)/vendor-packages/tox/vendor/__init__.py
 license tox.license license="GPLv2 BSD, MIT, PSF"
 
 # force a dependency on argparse; pkgdepend work is needed to flush this out.
-$(PYTHON_2.6_ONLY)depend type=require fmri=library/python-2/argparse-26
+depend type=require fmri=library/python-2/argparse-26
 
 # force a dependency on py; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/py-$(PYV)
--- a/components/python/troveclient/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/troveclient/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,30 +20,31 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		python-troveclient
-COMPONENT_VERSION=	0.1.4
+COMPONENT_VERSION=	1.0.8
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:745057a1a1dd2a58f3e638cf506f5b21a6bf8a42bf678adb17a58d6799a10141
+    sha256:613adcd3aac54b57f3347b21d36bf22e4092170e434535e91aadb2e46a67536d
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://launchpad.net/python-troveclient
 COMPONENT_BUGDB=	service/trove
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21737
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
 COMPONENT_POST_INSTALL_ACTION = \
-	(cd $(PROTO_DIR)/usr/bin ; \
-	 $(MV) -f trove-cli trove-cli-$(PYTHON_VERSION) ; \
-	 $(MV) -f trove-mgmt-cli trove-mgmt-cli-$(PYTHON_VERSION))
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f trove trove-$(PYTHON_VERSION))
 
 # common targets
 build:		$(BUILD_NO_ARCH)
@@ -51,7 +52,7 @@
 install:	$(INSTALL_NO_ARCH)
 
 # tests require:
-# hacking, discover, sphinx, testrepository and testtools, 
+# hacking, discover, sphinx, testrepository and testtools,
 # some of which have not been integrated.
 test:		$(NO_TESTS)
 
--- a/components/python/troveclient/troveclient-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/troveclient/troveclient-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,18 +20,18 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python/troveclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary \
-    value="Python and command-line clients for the OpenStack Trove API"
+    value="Python and command-line clients for the OpenStack DBaaS API"
 set name=pkg.description \
     value="A client for the OpenStack DBaaS API. There's a Python API (the 'troveclient' module), and a command-line script ('trove'). Each implements 100% of the OpenStack DBaaS API."
 set name=com.oracle.info.description \
     value="troveclient, the Python bindings to the OpenStack DBaaS API"
-set name=com.oracle.info.tpno value=17305
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:System/Administration and Configuration" \
@@ -41,12 +41,10 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2014/165
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
-link path=usr/bin/trove-cli target=trove-cli-$(PYVER) mediator=python \
+#
+link path=usr/bin/trove target=trove-$(PYVER) mediator=python \
     mediator-version=$(PYVER)
-file path=usr/bin/trove-cli-$(PYVER)
-link path=usr/bin/trove-mgmt-cli target=trove-mgmt-cli-$(PYVER) \
-    mediator=python mediator-version=$(PYVER)
-file path=usr/bin/trove-mgmt-cli-$(PYVER)
+file path=usr/bin/trove-$(PYVER)
 file path=usr/lib/python$(PYVER)/vendor-packages/python_troveclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/python_troveclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_troveclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
@@ -55,41 +53,96 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/python_troveclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/python_troveclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/accounts.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/auth.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/backups.py
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/base.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/cli.py
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/client.py
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/common.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/databases.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/diagnostics.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/mcli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/compat/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/exceptions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/flavors.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/hosts.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/instances.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/limits.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/management.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/mcli.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/quota.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/root.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/security_groups.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/storage.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/users.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/extension.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/apiclient/fake_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/service_catalog.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/shell.py
 file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/versions.py
-file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/xml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/accounts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/clusters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/configurations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/databases.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/datastores.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/diagnostics.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/flavors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/hosts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/instances.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/management.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/root.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/security_groups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/storage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/troveclient/v1/users.py
+#
 license LICENSE license="Apache v2.0"
 
-# force a group dependency on simplejson; pkgdepend work is needed
-# to flush this out.
-depend type=group fmri=library/python-2/simplejson-$(PYV)
+# force a group dependency on eventlet; pkgdepend work is needed to flush this
+# out.
+depend type=group fmri=library/python-2/eventlet-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
 
 # force a dependency on httplib2; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python-2/httplib2-$(PYV)
 
-# force a dependency on lxml; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python-2/lxml-$(PYV)
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on prettytable; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/prettytable-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on simplejson; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/stevedore-$(PYV)
 
 # force a dependency on the troveclient package
 depend type=require \
--- a/components/python/virtualenv/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/virtualenv/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -18,23 +18,27 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		virtualenv
-COMPONENT_VERSION=	1.9.1
+COMPONENT_VERSION=	12.0.7
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:d04f750c968e18de42ff15f50759f15ba22800b12247b95826e2f8b160f7d99a
+    sha256:d681db1766cdc8aa1b37eb18252c264b775f971166c2bf658a9618c1f3d28741
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://pypi.python.org/pypi/virtualenv
 COMPONENT_BUGDB=	python-mod/virtualenv
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21744
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
@@ -43,6 +47,7 @@
 
 install:	$(INSTALL_NO_ARCH)
 
+# Virtualenv has tests, but only in the source repo; not in the tarballs.
 test:		$(NO_TESTS)
 
 BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
--- a/components/python/virtualenv/virtualenv-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/virtualenv/virtualenv-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -27,10 +29,11 @@
 set name=pkg.description \
     value="virtualenv is a tool to create isolated Python environments. It creates an environment that has its own installation directories, that doesn't share libraries with other virtualenv environments (and optionally doesn't access the globally installed libraries either)."
 set name=com.oracle.info.description value="the Python virtualenv module"
-set name=com.oracle.info.tpno value=15853
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream [email protected]
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/362
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
@@ -42,13 +45,17 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv.py \
-    pkg.depend.bypass-generate=.*/(configparser|sysconfig).*
+    pkg.depend.bypass-generate=.*/[Cc]onfig[Pp]arser.* \
+    pkg.depend.bypass-generate=.*/_winreg.* \
+    pkg.depend.bypass-generate=.*/sysconfig.* \
+    pkg.depend.bypass-generate=.*/winreg.* pkg.depend.bypass-generate=.*/zlib.*
 file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/distribute-0.6.34.tar.gz
-file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/pip-1.3.1.tar.gz
-file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/setuptools-0.6c11-py$(PYVER).egg
+file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/pip-6.0.8-py2.py3-none-any.whl
+file path=usr/lib/python$(PYVER)/vendor-packages/virtualenv_support/setuptools-12.0.5-py2.py3-none-any.whl
+#
 license virtualenv.license license="MIT, LGPLv2.1, PSF, ZPL"
 
 # force a dependency on the virtualenv package
--- a/components/python/websockify/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/websockify/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,23 +20,25 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		websockify
-COMPONENT_VERSION=	0.5.1
+COMPONENT_VERSION=	0.6.0
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	v$(COMPONENT_VERSION).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:b2704e9127ef8698b5b73b0cb247abd700d2a893bdd32078117e5ebc7f69cbbf
+    sha256:aeb1bb0079696611045d2f188f38b68c8a4cc50e3c229db9156806c0078d608e
 COMPONENT_PROJECT_URL=	https://github.com/kanaka/websockify
 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/archive/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	python-mod/websockify
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			21745
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/websockify/patches/websockify-byte-order.patch	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,22 @@
+In-house developed patch.
+Internal bugdb id# 20202461
+Prevents inappropriate byte swapping of WebSocket frame data and
+and mask on big endian ISAs (like SPARC).
+Not Solaris specific. Suitable for upstream contribution.
+Bug and patch submitted upstream, waiting review:
+https://github.com/kanaka/websockify/issues/150
+
+--- websockify-0.6.0/websockify/websocket.py.~1~	2014-02-18 14:03:09.000000000 -0800
++++ websockify-0.6.0/websockify/websocket.py	2015-02-25 02:02:30.561296598 -0800
+@@ -118,9 +118,9 @@ class WebSocketRequestHandler(SimpleHTTP
+         if numpy:
+             b = c = s2b('')
+             if plen >= 4:
+-                mask = numpy.frombuffer(buf, dtype=numpy.dtype('<u4'),
++                mask = numpy.frombuffer(buf, dtype=numpy.dtype('u4'),
+                         offset=hlen, count=1)
+-                data = numpy.frombuffer(buf, dtype=numpy.dtype('<u4'),
++                data = numpy.frombuffer(buf, dtype=numpy.dtype('u4'),
+                         offset=pstart, count=int(plen / 4))
+                 #b = numpy.bitwise_xor(data, mask).data
+                 b = numpy.bitwise_xor(data, mask).tostring()
--- a/components/python/websockify/websockify-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/websockify/websockify-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 # python-extra is part of python 2.6 only
@@ -32,7 +32,7 @@
     value="Websockify translates WebSockets traffic to normal socket traffic. Websockify accepts the WebSockets handshake, parses it, and then begins forwarding traffic between the client and the target in both directions."
 set name=com.oracle.info.description \
     value="Websockify, the WebSockets translater"
-set name=com.oracle.info.tpno value=16167
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python \
     value="org.opensolaris.category.2008:Web Services/Communications"
@@ -56,6 +56,8 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify/websocket.py \
     pkg.depend.bypass-generate=.*/http.*
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify/websocketproxy.py \
+    pkg.depend.bypass-generate=.*/http.* \
+    pkg.depend.bypass-generate=.*/socketserver.* \
     pkg.depend.bypass-generate=.*/urllib.*
 #
 license websockify.license license="LGPL3, BSD, MIT"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/wsme/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		WSME
+COMPONENT_VERSION=	0.6.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:e4c0012b1a592c3889697259c690447dfc8edcbae5b52307709705377305e953
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://launchpad.net/wsme
+COMPONENT_BUGDB=	python-mod/wsme
+
+TPNO=			21639
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# see $(COMPONENT_SRC)/tox-tmpl.ini for the python modules required
+# to execute unittests.
+test:		$(NO_TESTS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/wsme/resolve.deps	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/wsme/wsme-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,124 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/wsme-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Web Service Made Easy (WSME)"
+set name=pkg.description \
+    value="Web Service Made Easy (WSME) simplifies the writing of REST web services by providing simple yet powerful typing which removes the need to directly manipulate the request and the response objects. WSME can work standalone or on top of other Python web frameworks."
+set name=com.oracle.info.description \
+    value="the Web Service Made Easy (WSME) Python Library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="python-wsme <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/062
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER)-nspkg.pth
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/WSME-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/exc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/protocol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/rest/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/rest/args.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/rest/json.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/rest/protocol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/rest/xml.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/root.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/runtime.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/spore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsme/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/cornice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/extdirect/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/extdirect/datastore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/extdirect/protocol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/extdirect/sadatastore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/flask.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/pecan.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/soap/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/soap/protocol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/soap/simplegeneric.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/soap/wsdl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/sphinxext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/sqlalchemy/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/sqlalchemy/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/tg1.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/tg11.py
+file path=usr/lib/python$(PYVER)/vendor-packages/wsmeext/tg15.py
+#
+license LICENSE license=MIT
+
+# force a group dependency on the optional lxml; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/lxml-$(PYV)
+
+# force a group dependency on the optional pygments; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/pygments-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python-2/simplejson-$(PYV)
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on ipaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/ipaddr-$(PYV)
+
+# force a dependency on ordereddict; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/ordereddict-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/setuptools-$(PYV)
+
+# force a dependency on simplegeneric; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/simplegeneric-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
+
+# force a dependency on the wsme package
+depend type=require \
+    fmri=library/python/wsme@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- a/components/python/xattr/Makefile	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/xattr/Makefile	Mon Apr 20 12:35:51 2015 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../../make-rules/shared-macros.mk
@@ -35,24 +35,16 @@
 COMPONENT_PROJECT_URL=	http://github.com/xattr/xattr
 COMPONENT_BUGDB=	python-mod/xattr
 
-include $(WS_TOP)/make-rules/prep.mk
-include $(WS_TOP)/make-rules/setup.py.mk
-include $(WS_TOP)/make-rules/ips.mk
+TPNO=			16912
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-# Look over into the pycparser and cffi proto areas until they're available in
-# the build environment.  Make sure that cffi is built.
-PYCPARSER =		$(WS_COMPONENTS)/python/pycparser/build/prototype/$(MACH)/$(PYTHON_LIB)
-CFFI =			$(WS_COMPONENTS)/python/cffi/build/prototype/$(MACH)/$(PYTHON_LIB)
-
-$(CFFI):
-	(cd ../cffi; $(MAKE) install)
-
-PYTHONPATH_DEP =	$(PYCPARSER):$(CFFI)
-COMPONENT_BUILD_ENV +=	PYTHONPATH=$(PYTHONPATH_DEP)
-COMPONENT_INSTALL_ENV +=	PYTHONPATH=$(PYTHONPATH_DEP):$(PROTO_DIR)/$(PYTHON_LIB)
-COMPONENT_TEST_ENV +=	PYTHONPATH=$(PYTHONPATH_DEP):$(PROTO_DIR)/$(PYTHON_LIB)
+COMPONENT_INSTALL_ENV +=	PYTHONPATH=$(PROTO_DIR)/$(PYTHON_LIB)
+COMPONENT_TEST_ENV +=		PYTHONPATH=$(PROTO_DIR)/$(PYTHON_LIB)
 # The test suite wants to use some unicode filenames, which don't work in the C
 # locale.
 COMPONENT_TEST_ENV +=	LC_CTYPE=en_US.UTF-8
@@ -71,8 +63,6 @@
 # finding in PYTHONPATH.
 COMPONENT_PRE_TEST_ACTION = $(CP) -r $(SOURCE_DIR) $(@D)/tests
 
-$(BUILD_32_and_64): $(CFFI)
-
 # common targets
 build:		$(BUILD_32_and_64)
 
--- a/components/python/xattr/xattr-PYVER.p5m	Thu Apr 16 01:36:32 2015 -0700
+++ b/components/python/xattr/xattr-PYVER.p5m	Mon Apr 20 12:35:51 2015 -0700
@@ -20,14 +20,14 @@
 #
 
 #
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
     value=pkg:/library/python/xattr-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Python wrapper for extended filesystem attributes"
 set name=com.oracle.info.description value="the xattr Python module"
-set name=com.oracle.info.tpno value=16912
+set name=com.oracle.info.tpno value=$(TPNO)
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/make-rules/ips.mk	Thu Apr 16 01:36:32 2015 -0700
+++ b/make-rules/ips.mk	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 #
@@ -69,6 +69,7 @@
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/devel
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/docs
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/locale
+PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/standard-python-libraries
 PUBLISH_TRANSFORMS +=	$(PKGMOGRIFY_TRANSFORMS)
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/incorporate
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/publish-cleanup
--- a/make-rules/prep.mk	Thu Apr 16 01:36:32 2015 -0700
+++ b/make-rules/prep.mk	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 # One must do all unpack and patch in sequence.
@@ -33,7 +35,7 @@
 # In order to override PATCH_DIR and PATCH_PATTERN in component makefiles, they
 # need to be conditionally set here.  This means that the override needs to
 # happen prior to including prep.mk.  Otherwise other variables set here which
-# are based on those will be expanded too early for the override to take 
+# are based on those will be expanded too early for the override to take
 # effect.
 # You also can't override PATCHES after including prep.mk; if you want to
 # append filenames to PATCHES, you'll have to set $(EXTRA_PATCHES) prior to
@@ -71,7 +73,7 @@
 	$$(TOUCH) $$@
 endef
 
-# Template for patching rules, note that patching is actually done by the 
+# Template for patching rules, note that patching is actually done by the
 # %.ed pattern rule above.
 # To maintain backwards compatibility, the flag PATCH_EACH_ARCHIVE must
 # be non-empty in order to activate individual archive patching.
@@ -117,7 +119,7 @@
 # Calculate the number of defined archives.
 # Always generate at least the basic prep rules.
 # Work out if there are any other archives to be downloaded and patched.
-NUM_EXTRA_ARCHIVES= 1 2 3 4 5 6 7 8 9
+NUM_EXTRA_ARCHIVES ?= 1 2 3 4 5 6 7 8 9
 $(eval $(call archive-rule,))
 ifneq ($(strip $(PATCH_EACH_ARCHIVE)),)
 $(foreach suffix,$(NUM_EXTRA_ARCHIVES), \
--- a/make-rules/setup.py.mk	Thu Apr 16 01:36:32 2015 -0700
+++ b/make-rules/setup.py.mk	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,9 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+
+#
+# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 $(BUILD_DIR)/%-2.6/.built:		PYTHON_VERSION=2.6
@@ -85,7 +87,7 @@
 	$(TOUCH) $@
 
 
-COMPONENT_INSTALL_ARGS +=	--root $(PROTO_DIR) 
+COMPONENT_INSTALL_ARGS +=	--root $(PROTO_DIR)
 COMPONENT_INSTALL_ARGS +=	--install-lib=$(PYTHON_LIB)
 COMPONENT_INSTALL_ARGS +=	--install-purelib=$(PYTHON_LIB)
 COMPONENT_INSTALL_ARGS +=	--install-platlib=$(PYTHON_LIB)
@@ -126,6 +128,10 @@
 clean::
 	$(RM) -r $(SOURCE_DIR) $(BUILD_DIR)
 
-# Make it easy to construct a URL for a pypi source download.
+# Make it easy to construct a URL for a pypi source download.  This
+# construct supports an optional call to a number from
+# NUM_EXTRA_ARCHIVES for multiple archive downloads.
 PYPI_BASE = http://pypi.python.org/packages/source
-pypi_url = $(PYPI_BASE)/$(shell echo $(COMPONENT_NAME) | cut -c1)/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
+pypi_url_multi = $(shell echo $(COMPONENT_NAME_$(1)) | cut -c1)/$(COMPONENT_NAME_$(1))/$(COMPONENT_ARCHIVE_$(1))
+pypi_url_single = $(shell echo $(COMPONENT_NAME) | cut -c1)/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
+pypi_url = $(PYPI_BASE)/$(if $(COMPONENT_NAME_$(1)),$(pypi_url_multi),$(pypi_url_single))
--- a/make-rules/shared-targets.mk	Thu Apr 16 01:36:32 2015 -0700
+++ b/make-rules/shared-targets.mk	Mon Apr 20 12:35:51 2015 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 #
@@ -55,6 +55,7 @@
 	$(RM) $@ ; $(SYMLINK) ../../../../share/man/man1/g$(@F) $@
 
 
+$(PROTO_DIR) \
 $(PROTOETCDIR) \
 $(PROTOETCSECDIR) \
 $(PROTOLIBDIR) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/transforms/standard-python-libraries	Mon Apr 20 12:35:51 2015 -0700
@@ -0,0 +1,8 @@
+#
+# These are part of the standard Python libraries starting with later
+# versions of Python so these dependencies should be elided.
+#
+<transform depend fmri=library/python-2/argparse-27 -> drop>
+<transform depend fmri=library/python-2/importlib-27 -> drop>
+<transform depend fmri=library/python-2/ordereddict-27 -> drop>
+<transform depend fmri=library/python-2/unittest2-27 -> drop>