PSARC/2013/350 OpenStack for Solaris (Umbrella)
authorDrew Fisher <drew.fisher@oracle.com>
Mon, 17 Mar 2014 09:51:44 -0600
changeset 1760 353323c7bdc1
parent 1759 b412ae0aa701
child 1761 430c843da2e3
PSARC/2013/350 OpenStack for Solaris (Umbrella) PSARC/2014/007 OpenStack client API components for Grizzly PSARC/2014/054 OpenStack Cinder (OpenStack Block Storage Service) PSARC/2014/055 OpenStack Glance (OpenStack Image Service) PSARC/2014/058 OpenStack Horizon (OpenStack Dashboard) PSARC/2014/048 OpenStack Keystone (OpenStack Identity Service) PSARC/2014/059 OpenStack Neutron (OpenStack Networking Service) PSARC/2014/049 OpenStack Nova (OpenStack Compute Service) 18290089 integrate cinderclient 18290097 integrate glanceclient 18290102 integrate keystoneclient 18290109 integrate neutronclient 18290113 integrate novaclient 18290119 integrate swiftclient 18290125 integrate quantumclient 18307582 Request to integrate Cinder into userland 18307595 Request to integrate Glance into userland 18307626 Request to integrate Horizon into userland 18307641 Request to integrate Keystone into userland 18307650 Request to integrate Neutron into userland 18307659 Request to integrate Nova into userland 18321909 a few Python packages deliver both po and mo files
components/openstack/cinder/Makefile
components/openstack/cinder/cinder.license
components/openstack/cinder/cinder.p5m
components/openstack/cinder/files/cinder-api
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
components/openstack/cinder/files/cinder-scheduler.xml
components/openstack/cinder/files/cinder-volume
components/openstack/cinder/files/cinder-volume-setup
components/openstack/cinder/files/cinder-volume.xml
components/openstack/cinder/files/cinder.auth_attr
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/zfs.py
components/openstack/cinder/patches/01-noamqplib.patch
components/openstack/cinder/patches/02-noparamiko.patch
components/openstack/cinder/patches/03-emc_smis_iscsi.patch
components/openstack/cinder/resolve.deps
components/openstack/common/Makefile
components/openstack/common/openstack.p5m
components/openstack/common/resolve.deps
components/openstack/glance/Makefile
components/openstack/glance/files/glance-api
components/openstack/glance/files/glance-api.conf
components/openstack/glance/files/glance-api.xml
components/openstack/glance/files/glance-db.xml
components/openstack/glance/files/glance-registry
components/openstack/glance/files/glance-registry.xml
components/openstack/glance/files/glance-scrubber
components/openstack/glance/files/glance-scrubber.conf
components/openstack/glance/files/glance-scrubber.xml
components/openstack/glance/files/glance.auth_attr
components/openstack/glance/files/glance.exec_attr
components/openstack/glance/files/glance.prof_attr
components/openstack/glance/glance.license
components/openstack/glance/glance.p5m
components/openstack/glance/patches/01-nopycrypto.patch
components/openstack/glance/patches/02-zfs-uar-formats.patch
components/openstack/glance/resolve.deps
components/openstack/horizon/Makefile
components/openstack/horizon/files/branding/css/solaris.css
components/openstack/horizon/files/branding/img/OpenStack_Dashboard_txt.png
components/openstack/horizon/files/branding/img/Openstack_banner.png
components/openstack/horizon/files/branding/img/OracleSolaris_Logo.png
components/openstack/horizon/files/branding/img/OracleSolaris_login_banner.png
components/openstack/horizon/files/branding/img/Oracle_Logo.png
components/openstack/horizon/files/branding/img/content_tab_bkgd_selected.png
components/openstack/horizon/files/branding/img/dots.png
components/openstack/horizon/files/branding/img/favicon-solaris.ico
components/openstack/horizon/files/branding/img/header_shadow.png
components/openstack/horizon/files/branding/img/tab_bkgd_deselected.png
components/openstack/horizon/files/branding/img/tab_bkgd_selected.png
components/openstack/horizon/files/branding/theme/_stylesheets.html
components/openstack/horizon/files/local_settings.py
components/openstack/horizon/files/openstack-dashboard.conf
components/openstack/horizon/horizon.license
components/openstack/horizon/horizon.p5m
components/openstack/horizon/patches/01-remove-nodejs.patch
components/openstack/horizon/patches/02-update-flavor-form-length.patch
components/openstack/horizon/patches/03-CVE-2013-6858.patch
components/openstack/horizon/resolve.deps
components/openstack/horizon/solaris.css.license
components/openstack/keystone/Makefile
components/openstack/keystone/files/keystone
components/openstack/keystone/files/keystone.auth_attr
components/openstack/keystone/files/keystone.conf
components/openstack/keystone/files/keystone.exec_attr
components/openstack/keystone/files/keystone.prof_attr
components/openstack/keystone/files/keystone.xml
components/openstack/keystone/keystone.license
components/openstack/keystone/keystone.p5m
components/openstack/keystone/patches/01-ec2_token-import-only.patch
components/openstack/keystone/patches/02-remove-nova-depend.patch
components/openstack/keystone/patches/03-CVE-2013-6391.patch
components/openstack/keystone/patches/04-CVE-2013-4477.patch
components/openstack/keystone/patches/05-CVE-2014-2237.patch
components/openstack/keystone/patches/06-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/linux/device.py
components/openstack/neutron/files/agent/solaris/__init__.py
components/openstack/neutron/files/agent/solaris/device.py
components/openstack/neutron/files/agent/solaris/dhcp.py
components/openstack/neutron/files/agent/solaris/interface.py
components/openstack/neutron/files/agent/solaris/ipfilters_manager.py
components/openstack/neutron/files/agent/solaris/net_lib.py
components/openstack/neutron/files/dhcp_agent.ini
components/openstack/neutron/files/evs/db/api.py
components/openstack/neutron/files/evs/db/l3nat.py
components/openstack/neutron/files/evs/db/quotas_db.py
components/openstack/neutron/files/evs/plugin.py
components/openstack/neutron/files/evs_plugin.ini
components/openstack/neutron/files/l3_agent.ini
components/openstack/neutron/files/neutron-dhcp-agent
components/openstack/neutron/files/neutron-dhcp-agent.xml
components/openstack/neutron/files/neutron-l3-agent
components/openstack/neutron/files/neutron-l3-agent.xml
components/openstack/neutron/files/neutron-server
components/openstack/neutron/files/neutron-server.xml
components/openstack/neutron/files/neutron.auth_attr
components/openstack/neutron/files/neutron.exec_attr
components/openstack/neutron/files/neutron.prof_attr
components/openstack/neutron/files/neutron.user_attr
components/openstack/neutron/files/quantum.conf
components/openstack/neutron/neutron.license
components/openstack/neutron/neutron.p5m
components/openstack/neutron/patches/01-neutron-no-pyudev.patch
components/openstack/neutron/patches/02-dhcp-agent-add-solaris.patch
components/openstack/neutron/patches/03-l3-agent-add-solaris.patch
components/openstack/neutron/patches/04-CVE-2013-6419.patch
components/openstack/neutron/resolve.deps
components/openstack/nova/Makefile
components/openstack/nova/files/nova-api
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
components/openstack/nova/files/nova-cert.xml
components/openstack/nova/files/nova-compute
components/openstack/nova/files/nova-compute.xml
components/openstack/nova/files/nova-conductor
components/openstack/nova/files/nova-conductor.xml
components/openstack/nova/files/nova-consoleauth
components/openstack/nova/files/nova-consoleauth.xml
components/openstack/nova/files/nova-novncproxy
components/openstack/nova/files/nova-novncproxy.xml
components/openstack/nova/files/nova-objectstore
components/openstack/nova/files/nova-objectstore.xml
components/openstack/nova/files/nova-scheduler
components/openstack/nova/files/nova-scheduler.xml
components/openstack/nova/files/nova.auth_attr
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/__init__.py
components/openstack/nova/files/solariszones/driver.py
components/openstack/nova/files/solariszones/sysconfig.py
components/openstack/nova/nova.license
components/openstack/nova/nova.p5m
components/openstack/nova/patches/01-Solaris-vm_mode.patch
components/openstack/nova/patches/02-noamqplib.patch
components/openstack/nova/patches/03-Solaris-flavors.patch
components/openstack/nova/patches/04-CVE-2013-4497.patch
components/openstack/nova/patches/05-CVE-2013-4463.patch
components/openstack/nova/patches/06-CVE-2013-6419.patch
components/openstack/nova/patches/07-CVE-2013-7048.patch
components/openstack/nova/patches/08-CVE-2013-7130.patch
components/openstack/nova/resolve.deps
components/python/cinderclient/Makefile
components/python/cinderclient/cinderclient-PYVER.p5m
components/python/cinderclient/cinderclient.license
components/python/cinderclient/resolve.deps
components/python/django/django-PYVER.p5m
components/python/formencode/formencode-PYVER.p5m
components/python/glanceclient/Makefile
components/python/glanceclient/glanceclient-PYVER.p5m
components/python/glanceclient/glanceclient.license
components/python/glanceclient/resolve.deps
components/python/keystoneclient/Makefile
components/python/keystoneclient/keystoneclient-PYVER.p5m
components/python/keystoneclient/keystoneclient.license
components/python/keystoneclient/resolve.deps
components/python/neutronclient/Makefile
components/python/neutronclient/neutronclient-PYVER.p5m
components/python/neutronclient/neutronclient.license
components/python/neutronclient/resolve.deps
components/python/novaclient/Makefile
components/python/novaclient/novaclient-PYVER.p5m
components/python/novaclient/novaclient.license
components/python/novaclient/resolve.deps
components/python/pycountry/pycountry-PYVER.p5m
components/python/quantumclient/Makefile
components/python/quantumclient/quantumclient-PYVER.p5m
components/python/quantumclient/quantumclient.license
components/python/quantumclient/resolve.deps
components/python/swiftclient/Makefile
components/python/swiftclient/resolve.deps
components/python/swiftclient/swiftclient-GENFRAG.p5m
components/python/swiftclient/swiftclient-PYVER.p5m
components/python/swiftclient/swiftclient.license
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,75 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		cinder
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:b3466dbc2ea88eef67f73db2b12ec2e8b66047b2bfa0eea31392e155657bee00
+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) 
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+# 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
+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; \
+	 $(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); \
+	 $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/cinder.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,242 @@
+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.
+
+# Interactive shell based on Django:
+#
+# Copyright (c) 2005, the Lawrence Journal-World
+# 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.
+#
+#     3. Neither the name of Django 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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/cinder.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,371 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/cinder@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Cinder"
+set name=pkg.description \
+    value="OpenStack Cinder provides an infrastructure for managing block storage volumes in OpenStack. It allows block devices to be exposed and connected to compute instances for expanded storage, better performance and integration with enterprise storage platforms."
+set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=com.oracle.info.description \
+    value="Cinder, the OpenStack block storage service"
+set name=com.oracle.info.tpno value=16268
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/054
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+dir  path=etc/cinder owner=cinder group=cinder mode=0700
+file path=etc/cinder/api-paste.ini owner=cinder group=cinder mode=0644 \
+    overlay=allow preserve=true
+file files/cinder.conf path=etc/cinder/cinder.conf owner=cinder group=cinder \
+    mode=0644 overlay=allow preserve=true
+file cinder/volume/drivers/emc/cinder_emc_config.xml.sample \
+    path=etc/cinder/cinder_emc_config.xml owner=cinder group=cinder mode=0644 \
+    overlay=allow preserve=true
+file etc/cinder/logging_sample.conf path=etc/cinder/logging.conf owner=cinder \
+    group=cinder mode=0644 overlay=allow preserve=true
+file path=etc/cinder/policy.json owner=cinder group=cinder mode=0644 \
+    overlay=allow preserve=true
+file files/cinder.auth_attr \
+    path=etc/security/auth_attr.d/cloud:openstack:cinder group=sys
+file files/cinder.exec_attr \
+    path=etc/security/exec_attr.d/cloud:openstack:cinder group=sys
+file files/cinder.prof_attr \
+    path=etc/security/prof_attr.d/cloud:openstack:cinder group=sys
+file files/cinder.user_attr path=etc/user_attr.d/cloud:openstack:cinder \
+    group=sys
+file path=lib/svc/manifest/application/openstack/cinder-api.xml
+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-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-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
+file usr/bin/cinder-scheduler path=usr/lib/cinder/cinder-scheduler mode=0555
+file usr/bin/cinder-volume path=usr/lib/cinder/cinder-volume mode=0555
+file usr/bin/cinder-volume-usage-audit \
+    path=usr/lib/cinder/cinder-volume-usage-audit mode=0555
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/admin_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/extended_snapshot_attributes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/hosts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/image_create.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/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/services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_extra_specs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/types_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/contrib/volume_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_tenant_attribute.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/fault.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/middleware/sizelimit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/urlmap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/volume/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/volume/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/openstack/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/atom-link.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/schemas/v1.1/extension.rng
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/snapshot_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/volume_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v1/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/snapshot_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/views/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/v2/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/views/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/api/xmlutil.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/services/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/backup/services/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/common/sqlalchemyutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/compute/aggregate_states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/README
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/004_volume_type_to_uuid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/005_add_source_volume_column.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/005_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/006_snapshots_add_provider_location.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/007_add_volume_snapshot_fk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/flags.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/glance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/image/image_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/bs/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/cinder.pot
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/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/es/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/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/ko/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/ru/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/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/zh_CN/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/locale/zh_TW/LC_MESSAGES/cinder.po
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/README
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/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/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/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/policy.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/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/scheduler/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/filters/__init__.py
+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/json_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/weight.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/scheduler/weights/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/setup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/strutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/__init__.py
+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/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/host_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/scheduler_options.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/simple.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/scheduler/weights/capacity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/test.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/configuration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_smis_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/emc/emc_smis_iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/netapp/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/jsonrpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/nexenta/volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solaris/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/solaris/zfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/drivers/zadara.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/iscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinder/volume/manager.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
+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/anyjson-26
+
+# force a dependency on package delivering itadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/itadm
+
+# force a dependency on package delivering stmfadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/stmfadm
+
+# force a dependency on package delivering zfs(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zfs
+
+# force a dependency on package delivering zpool(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zpool
+
+# 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 glanceclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/glanceclient-26
+
+# force a dependency on greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/greenlet-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 kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/kombu-26
+
+# force a dependency on lxml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/lxml-26
+
+# force a dependency on paste; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/paste-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/paste.deploy-26
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/routes-26
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-26
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/stevedore-26
+
+# force a dependency on suds; pkgdepend work is needed to flush this out.
+# (dependency is for NetApp volume driver)
+depend type=require fmri=library/python/suds-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 webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/webob-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-api	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/cinder/cinder-api")
+
+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/cinder/files/cinder-api.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,73 @@
+<?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.
+
+ 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-api">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-api">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </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'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/cinder-api %m">
+      <method_context>
+        <method_credential user='cinder' group='cinder' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":kill"/>
+
+    <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.cinder' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cinder' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder API Service
+        </loctext>
+      </common_name>
+      <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. 
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-backup	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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.
+
+import os
+
+import smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/cinder/cinder-backup")
+
+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/cinder/files/cinder-backup.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,73 @@
+<?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="cinder-backup">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-backup">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </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'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/cinder-backup %m">
+      <method_context>
+        <method_credential user='cinder' group='cinder' />
+      </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.cinder' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cinder' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder Backup Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cinder-backup is a server daemon that provides a means to back up a
+          Cinder volume to the OpenStack Object Store Service (Swift).
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-db.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,70 @@
+<?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.
+
+ 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-db">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-db">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/usr/bin/cinder-manage db sync">
+      <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='false'>
+      <!-- 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>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder Database Creation Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cinder-db is a transient service to create the Cinder database if
+          required.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-scheduler	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/cinder/cinder-scheduler")
+
+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/cinder/files/cinder-scheduler.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,73 @@
+<?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.
+
+ 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-scheduler">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-scheduler">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </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'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/cinder-scheduler %m">
+      <method_context>
+        <method_credential user='cinder' group='cinder' />
+      </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.cinder' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cinder' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder Scheduler Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cinder-scheduler picks a cinder-volume node to host the block storage
+          requested by the OpenStack Compute service. 
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder-volume	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,55 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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
+import os
+
+import smf_include
+
+from subprocess import CalledProcessError, Popen, PIPE, check_call
+
+
+def start():
+    """ checks cinder's conf file for the ZFSISCSIDriver.  If it's found, make
+    sure svc:/network/iscsi/target:default is online.
+
+    """
+    parser = ConfigParser.ConfigParser()
+    parser.read("/etc/cinder/cinder.conf")
+    driver = parser.get("DEFAULT", "volume_driver")
+    if driver == "cinder.volume.drivers.solaris.zfs.ZFSISCSIDriver":
+        iscsi_svc = "svc:/network/iscsi/target:default"
+        cmd = ["/usr/bin/svcs", "-H", "-o", "state", iscsi_svc]
+        try:
+            p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+            output, error = p.communicate()
+        except CalledProcessError:
+            print "%s not found.  Is it installed?" % iscsi_svc
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+        if output.strip() != "online":
+            cmd = ["/usr/sbin/svcadm", "enable", "-rs", iscsi_svc]
+            try:
+                check_call(cmd)
+            except CalledProcessError as err:
+                print "enabling %s failed:  %s" % (iscsi_svc, err)
+                return smf_include.SMF_EXIT_ERR_CONFIG
+
+    smf_include.smf_subprocess("/usr/bin/pfexec /usr/lib/cinder/cinder-volume")
+
+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/cinder/files/cinder-volume-setup	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,84 @@
+#!/usr/bin/python2.6
+
+# 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.
+
+import ConfigParser
+import os
+import sys
+
+import smf_include
+
+from subprocess import CalledProcessError, Popen, PIPE, check_call
+
+
+def start():
+    """ retrieves the setting for 'zfs_volume_base' from Cinder's conf file in
+    order to set it up properly for Cinder to use.
+
+    """
+    parser = ConfigParser.ConfigParser()
+    parser.read("/etc/cinder/cinder.conf")
+
+    # set up the top-level dataset with the proper permissions for cinder
+    top_ds = parser.get("DEFAULT", "zfs_volume_base")
+
+    # look to see if the dataset exists
+    cmd = ["/usr/sbin/zfs", "list", top_ds]
+    try:
+        check_call(cmd, stdout=PIPE, stderr=PIPE)
+    except CalledProcessError as err:
+        # the dataset doesn't exist, so go create it
+        try:
+            check_call(["/usr/sbin/zfs", "create", "-p", top_ds])
+        except CalledProcessError as err:
+            print "unable to create %s:  %s" % (top_ds, err)
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+    # get the mountpoint
+    cmd = ["/usr/sbin/zfs", "get", "-H", "-o", "value", "mountpoint", top_ds]
+    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+    mountpoint, error = p.communicate()
+    if p.returncode != 0:
+        print "unable to determine mountpoint of %s:  %s" % (top_ds, error)
+        return smf_include.SMF_EXIT_ERR_CONFIG
+
+    p = Popen(["/usr/bin/ls", "-dv", mountpoint], stdout=PIPE, stderr=PIPE)
+    output, error = p.communicate()
+
+    if "user:cinder:add_subdirectory/append_data:allow" not in output:
+        # set an ACL to all mountpoint access
+        try:
+            check_call(["/usr/bin/chmod",
+                        "A+user:cinder:add_subdirectory:allow",
+                        mountpoint.strip()])
+        except CalledProcessError as err:
+            print "ACL creation for mountpoint access of "
+            print "%s to 'cinder' failed:  %s" % (top_ds, err)
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+    # set delegation
+    cmd = ["/usr/sbin/zfs", "allow", "cinder",
+           "clone,create,destroy,mount,snapshot", top_ds]
+    try:
+        check_call(cmd)
+    except CalledProcessError as err:
+        print "delegation of %s to 'cinder' failed:  %s" % (top_ds, err)
+        return smf_include.SMF_EXIT_ERR_CONFIG
+
+    return smf_include.SMF_EXIT_OK
+
+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/cinder/files/cinder-volume.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,97 @@
+<?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.
+
+ 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-volume">
+
+  <service version="1" type="service"
+    name="application/openstack/cinder/cinder-volume">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <dependency name='iscsi_target' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/network/iscsi/target:default' />
+    </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'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/cinder/cinder-db'/>
+    </dependency>
+
+    <instance name='setup' enabled='false'>
+
+      <exec_method timeout_seconds="60" type="method" name="start"
+        exec="/lib/svc/method/cinder-volume-setup %m">
+      </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>
+
+    <instance name='default' enabled='false'>
+
+      <dependency name='cinder_volume_setup' grouping='require_all'
+        restart_on='error' type='service'>
+        <service_fmri value='svc:/application/openstack/cinder/cinder-volume:setup' />
+      </dependency>
+
+      <exec_method timeout_seconds="60" type="method" name="start"
+        exec="/lib/svc/method/cinder-volume %m">
+        <method_context>
+          <method_credential user='cinder' group='cinder' />
+        </method_context>
+      </exec_method>
+      <exec_method timeout_seconds="60" type="method" name="stop"
+        exec=":kill"/>
+
+      <!-- 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>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Cinder Volume Management Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cinder-volume is a server daemon for managing volumes requested by
+          the OpenStack Compute service.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder.auth_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+solaris.smf.manage.cinder:RO::Manage OpenStack Cinder Service States::
+solaris.smf.value.cinder:RO::Change Values of OpenStack Cinder Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1186 @@
+####################
+# cinder.conf sample #
+####################
+
+[DEFAULT]
+
+#
+# Options defined in cinder.openstack.common.cfg:CommonConfigOpts
+#
+
+# Print debugging output (boolean value)
+#debug=false
+
+# Print more verbose output (boolean value)
+#verbose=false
+
+# If this option is specified, the logging configuration file
+# specified is used and overrides any other logging options
+# specified. Please see the Python logging module
+# documentation for details on logging configuration files.
+# (string value)
+#log_config=<None>
+
+# A logging.Formatter log message format string which may use
+# any of the available logging.LogRecord attributes. Default:
+# %(default)s (string value)
+#log_format=%(asctime)s %(levelname)8s [%(name)s] %(message)s
+
+# Format string for %%(asctime)s in log records. Default:
+# %(default)s (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to output to. If not set,
+# logging will go to stdout. (string value)
+#log_file=<None>
+
+# (Optional) The directory to keep log files in (will be
+# prepended to --log-file) (string value)
+#log_dir=<None>
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+# syslog facility to receive log lines (string value)
+#syslog_log_facility=LOG_USER
+
+# Do not count snapshots against gigabytes quota (bool value)
+#no_snapshot_gb_quota=False
+
+#
+# Options defined in cinder.exception
+#
+
+# make exception message format errors fatal (boolean value)
+#fatal_exception_format_errors=false
+
+
+#
+# Options defined in cinder.flags
+#
+
+# Virtualization api connection type : libvirt, xenapi, or
+# fake (string value)
+#connection_type=<None>
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+#sql_connection=sqlite:///$state_path/$sqlite_db
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+#sql_connection_debug=0
+
+# File name for the paste.deploy config for cinder-api (string
+# value)
+#api_paste_config=api-paste.ini
+
+# Directory where the cinder python module is installed
+# (string value)
+#pybasedir=/usr/lib/python2.6/vendor-packages
+
+# Directory where cinder binaries are installed (string value)
+bindir=/usr/bin
+
+# Top-level directory for maintaining cinder's state (string
+# value)
+#state_path=$pybasedir
+
+# ip address of this host (string value)
+#my_ip=10.0.0.1
+
+# default glance hostname or ip (string value)
+#glance_host=$my_ip
+
+# default glance port (integer value)
+#glance_port=9292
+
+# A list of the glance api servers available to cinder
+# ([hostname|ip]:port) (list value)
+#glance_api_servers=$glance_host:$glance_port
+
+# default version of the glance api to use
+#glance_api_version=1
+
+# Number retries when downloading an image from glance
+# (integer value)
+#glance_num_retries=0
+
+# Allow to perform insecure SSL (https) requests to glance
+# (boolean value)
+#glance_api_insecure=false
+
+# the topic scheduler nodes listen on (string value)
+#scheduler_topic=cinder-scheduler
+
+# the topic volume nodes listen on (string value)
+#volume_topic=cinder-volume
+
+# Deploy v1 of the Cinder API.  (boolean value)
+#enable_v1_api=true
+
+# Deploy v2 of the Cinder API.  (boolean value)
+#enable_v2_api=true
+
+# whether to rate limit the api (boolean value)
+#api_rate_limit=true
+
+# Specify list of extensions to load when using
+# osapi_volume_extension option with
+# cinder.api.contrib.select_extensions (list value)
+#osapi_volume_ext_list=
+
+# osapi volume extension to load (multi valued)
+#osapi_volume_extension=cinder.api.contrib.standard_extensions
+
+# Base URL that will be presented to users in links to the
+# OpenStack Volume API (string value)
+#osapi_volume_base_URL=<None>
+
+# the maximum number of items returned in a single response
+# from a collection resource (integer value)
+#osapi_max_limit=1000
+
+# the filename to use with sqlite (string value)
+#sqlite_db=cinder.sqlite
+
+# If passed, use synchronous mode for sqlite (boolean value)
+#sqlite_synchronous=true
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#sql_idle_timeout=3600
+
+# maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+#sql_max_retries=10
+
+# interval between retries of opening a sql connection
+# (integer value)
+#sql_retry_interval=10
+
+# full class name for the Manager for volume (string value)
+#volume_manager=cinder.volume.manager.VolumeManager
+
+# full class name for the Manager for scheduler (string value)
+#scheduler_manager=cinder.scheduler.manager.SchedulerManager
+
+# Name of this node.  This can be an opaque identifier.  It is
+# not necessarily a hostname, FQDN, or IP address. (string
+# value)
+#host=cinder
+
+# availability zone of this node (string value)
+#storage_availability_zone=nova
+
+# Memcached servers or None for in process cache. (list value)
+#memcached_servers=<None>
+
+# default volume type to use (string value)
+#default_volume_type=<None>
+
+# time period to generate volume usages for.  Time period must
+# be hour, day, month or year (string value)
+#volume_usage_audit_period=month
+
+# Path to the rootwrap configuration file to use for running
+# commands as root (string value)
+#rootwrap_config=/etc/cinder/rootwrap.conf
+
+# Whether to log monkey patching (boolean value)
+#monkey_patch=false
+
+# List of modules/decorators to monkey patch (list value)
+#monkey_patch_modules=
+
+# maximum time since last check-in for up service (integer
+# value)
+#service_down_time=60
+
+# The full class name of the volume API class to use (string
+# value)
+#volume_api_class=cinder.volume.api.API
+
+# The strategy to use for auth. Supports noauth, keystone, and
+# deprecated. (string value)
+#auth_strategy=noauth
+
+# AMQP exchange to connect to if using RabbitMQ or Qpid
+# (string value)
+#control_exchange=cinder
+
+
+#
+# Options defined in cinder.policy
+#
+
+# 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)
+#quota_volumes=10
+
+# number of volume snapshots allowed per project (integer value)
+#quota_snapshots=10
+
+# number of volume and snapshot gigabytes allowed per project (integer
+# value)
+#quota_gigabytes=1000
+
+# number of seconds until a reservation expires (integer
+# value)
+#reservation_expire=86400
+
+# count of reservations until usage is refreshed (integer
+# value)
+#until_refresh=0
+
+# number of seconds between subsequent usage refreshes
+# (integer value)
+#max_age=0
+
+# default driver to use for quota checks (string value)
+#quota_driver=cinder.quota.DbQuotaDriver
+
+
+#
+# Options defined in cinder.service
+#
+
+# seconds between nodes reporting state to datastore (integer
+# value)
+#report_interval=10
+
+# seconds between running periodic tasks (integer value)
+#periodic_interval=60
+
+# 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
+
+# IP address for OpenStack Volume API to listen (string value)
+#osapi_volume_listen=0.0.0.0
+
+# port for os volume api to listen (integer value)
+#osapi_volume_listen_port=8776
+
+
+#
+# Options defined in cinder.test
+#
+
+# 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
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server
+# socket. Not supported on OS X. (integer value)
+#tcp_keepidle=600
+
+# CA certificate file to use to verify connecting clients
+# (string value)
+#ssl_ca_file=<None>
+
+# Certificate file to use when starting the server securely
+# (string value)
+#ssl_cert_file=<None>
+
+# Private key file to use when starting the server securely
+# (string value)
+#ssl_key_file=<None>
+
+
+#
+# Options defined in cinder.api.middleware.auth
+#
+
+# Treat X-Forwarded-For as the canonical remote address. Only
+# enable this if you have a sanitizing proxy. (boolean value)
+#use_forwarded_for=false
+
+
+#
+# Options defined in cinder.api.middleware.sizelimit
+#
+
+# Max size for body of a request (integer value)
+#osapi_max_request_body_size=114688
+
+
+#
+# Options defined in cinder.common.deprecated
+#
+
+# make deprecations fatal (boolean value)
+#fatal_deprecations=false
+
+
+#
+# Options defined in cinder.db.api
+#
+
+# The backend to use for db (string value)
+#db_backend=sqlalchemy
+
+# Services to be added to the available pool on create
+# (boolean value)
+#enable_new_services=true
+
+# Template string to be used to generate volume names (string
+# value)
+#volume_name_template=volume-%s
+
+# Template string to be used to generate snapshot names
+# (string value)
+#snapshot_name_template=snapshot-%s
+
+# Template string to be used to generate backup names (string
+# value)
+#backup_name_template=backup-%s
+
+#
+# Options defined in cinder.db.base
+#
+
+# driver to use for database access (string value)
+#db_driver=cinder.db
+
+
+#
+# Options defined in cinder.image.image_utils
+#
+
+# parent dir for tempdir used for image conversion (string
+# value)
+#image_conversion_dir=/tmp
+
+
+#
+# Options defined in cinder.openstack.common.lockutils
+#
+
+# Whether to disable inter-process locks (boolean value)
+#disable_process_locking=false
+
+# Directory to use for lock files (string value)
+#lock_path=<None>
+
+
+#
+# Options defined in cinder.openstack.common.log
+#
+
+# Log output to a per-service log file in named directory
+# (string value)
+#logdir=<None>
+
+# Log output to a named file (string value)
+#logfile=<None>
+
+# Log output to standard error (boolean value)
+#use_stderr=true
+
+# Default file mode used when creating log files (string
+# value)
+#logfile_mode=0644
+
+# format string to use for log messages with context (string
+# value)
+#logging_context_format_string=%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user_id)s %(project_id)s] %(instance)s%(message)s
+
+# format string to use for log messages without context
+# (string value)
+#logging_default_format_string=%(asctime)s %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+
+# 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 %(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)
+#publish_errors=false
+
+# If an instance is passed with the log message, format it
+# like this (string value)
+#instance_format="[instance: %(uuid)s] "
+
+# If an instance UUID is passed with the log message, format
+# it like this (string value)
+#instance_uuid_format="[instance: %(uuid)s] "
+
+
+#
+# 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=$host
+
+
+#
+# Options defined in cinder.openstack.common.notifier.rabbit_notifier
+#
+
+# AMQP topic used for openstack notifications (list value)
+#notification_topics=notifications
+
+
+#
+# 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=cinder.openstack.common.exception,nova.exception,cinder.exception
+
+# If passed, use a fake RabbitMQ provider (boolean value)
+#fake_rabbit=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
+# (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 durable queues in RabbitMQ (boolean value)
+#rabbit_durable_queues=false
+
+# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
+# wipe RabbitMQ database when changing this option. (boolean
+# value)
+#rabbit_ha_queues=false
+
+
+#
+# Options defined in cinder.openstack.common.rpc.impl_qpid
+#
+
+# Qpid broker hostname (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port (string value)
+#qpid_port=5672
+
+# 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=
+
+# Automatically reconnect (boolean value)
+#qpid_reconnect=true
+
+# Reconnection timeout in seconds (integer value)
+#qpid_reconnect_timeout=0
+
+# Max reconnections before giving up (integer value)
+#qpid_reconnect_limit=0
+
+# Minimum seconds between reconnection attempts (integer
+# value)
+#qpid_reconnect_interval_min=0
+
+# Maximum seconds between reconnection attempts (integer
+# value)
+#qpid_reconnect_interval_max=0
+
+# Equivalent to setting max and min to the same value (integer
+# value)
+#qpid_reconnect_interval=0
+
+# Seconds between connection keepalive heartbeats (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl' (string value)
+#qpid_protocol=tcp
+
+# Disable Nagle algorithm (boolean value)
+#qpid_tcp_nodelay=true
+
+
+#
+# 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
+
+# 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
+
+
+#
+# Options defined in cinder.scheduler.driver
+#
+
+# The scheduler host manager class to use (string value)
+#scheduler_host_manager=cinder.scheduler.host_manager.HostManager
+
+
+#
+# Options defined in cinder.scheduler.host_manager
+#
+
+# Which filter class names to use for filtering hosts when not
+# specified in the request. (list value)
+#scheduler_default_filters=AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
+
+# Which weigher class names to use for weighing hosts. (list
+# value)
+#scheduler_default_weighers=CapacityWeigher
+
+
+#
+# Options defined in cinder.scheduler.manager
+#
+
+# Default scheduler driver to use (string value)
+#scheduler_driver=cinder.scheduler.simple.SimpleScheduler
+
+
+#
+# Options defined in cinder.scheduler.scheduler_options
+#
+
+# Absolute path to scheduler configuration JSON file. (string
+# value)
+#scheduler_json_config_location=
+
+
+#
+# Options defined in cinder.scheduler.simple
+#
+
+# maximum number of volume gigabytes to allow per host
+# (integer value)
+#max_gigabytes=10000
+
+
+#
+# Options defined in cinder.scheduler.weights.capacity
+#
+
+# Multiplier used for weighing volume capacity. Negative
+# numbers mean to stack vs spread. (floating point value)
+#capacity_weight_multiplier=1.0
+
+
+#
+# Options defined in cinder.volume.api
+#
+
+# Create volume from snapshot at the host where snapshot
+# resides (boolean value)
+#snapshot_same_host=true
+
+
+#
+# Options defined in cinder.volume.driver
+#
+
+# number of times to attempt to run flakey shell commands
+# (integer value)
+#num_shell_tries=3
+
+# The percentage of backend capacity is reserved (integer
+# value)
+#reserved_percentage=0
+
+# number of times to rescan iSCSI target to find volume
+# (integer value)
+#num_iscsi_scan_tries=3
+
+# Number of iscsi target ids per host (integer value)
+#iscsi_num_targets=100
+
+# prefix for iscsi volumes (string value)
+#iscsi_target_prefix=iqn.2010-10.org.openstack:
+
+# The port that the iSCSI daemon is listening on (string
+# value)
+#iscsi_ip_address=$my_ip
+
+# The port that the iSCSI daemon is listening on (integer
+# value)
+#iscsi_port=3260
+
+# Optional override to the capacity based volume backend name
+#
+#volume_backend_name=LVM_iSCSI_unique1
+
+#
+# Options defined in cinder.volume.drivers.glusterfs
+#
+
+# File with the list of available gluster shares (string
+# value)
+#glusterfs_shares_config=<None>
+
+# Base dir where gluster expected to be mounted (string value)
+#glusterfs_mount_point_base=$state_path/mnt
+
+# 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)
+#glusterfs_sparsed_volumes=true
+
+
+#
+# Options defined in cinder.volume.drivers.lvm
+#
+
+# Name for the VG that will contain exported volumes (string
+# value)
+#volume_group=cinder-volumes
+
+# Method used to wipe old volumes (valid options are: none,
+# zero, shred) (string value)
+#volume_clear=zero
+
+# Size in MiB to wipe at start of old volumes. 0 => all
+# (integer value)
+#volume_clear_size=0
+
+# Size of thin provisioning pool (None uses entire cinder VG)
+# (string value)
+#pool_size=<None>
+
+# If set, create lvms with multiple mirrors. Note that this
+# requires lvm_mirrors + 2 pvs with available space (integer
+# value)
+#lvm_mirrors=0
+
+
+#
+# Options defined in cinder.volume.drivers.netapp
+#
+
+# URL of the WSDL file for the DFM server (string value)
+#netapp_wsdl_url=<None>
+
+# User name for the DFM server (string value)
+#netapp_login=<None>
+
+# Password for the DFM server (string value)
+#netapp_password=<None>
+
+# Hostname for the DFM server (string value)
+#netapp_server_hostname=<None>
+
+# Port number for the DFM server (integer value)
+#netapp_server_port=8088
+
+# Storage service to use for provisioning (when
+# volume_type=None) (string value)
+#netapp_storage_service=<None>
+
+# Prefix of storage service name to use for provisioning
+# (volume_type name will be appended) (string value)
+#netapp_storage_service_prefix=<None>
+
+# Vfiler to use for provisioning (string value)
+#netapp_vfiler=<None>
+
+
+#
+# Options defined in cinder.volume.drivers.netapp_nfs
+#
+
+# Does snapshot creation call returns immediately (integer
+# value)
+#synchronous_snapshot_create=0
+
+# URL of the WSDL file for the DFM server (string value)
+#netapp_wsdl_url=<None>
+
+# User name for the DFM server (string value)
+#netapp_login=<None>
+
+# Password for the DFM server (string value)
+#netapp_password=<None>
+
+# Hostname for the DFM server (string value)
+#netapp_server_hostname=<None>
+
+# Port number for the DFM server (integer value)
+#netapp_server_port=8088
+
+# Storage service to use for provisioning (when
+# volume_type=None) (string value)
+#netapp_storage_service=<None>
+
+# Prefix of storage service name to use for provisioning
+# (volume_type name will be appended) (string value)
+#netapp_storage_service_prefix=<None>
+
+# Vfiler to use for provisioning (string value)
+#netapp_vfiler=<None>
+
+
+#
+# Options defined in cinder.volume.drivers.nexenta.volume
+#
+
+# 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/
+
+# block size for volumes (blank=default,8KB) (string value)
+#nexenta_blocksize=
+
+# flag to create 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=<None>
+
+# Base dir where nfs expected to be mounted (string value)
+#nfs_mount_point_base=$state_path/mnt
+
+# Use du or df for free space calculation (string value)
+#nfs_disk_util=df
+
+# Create volumes as sparsed files which take no space.If set
+# to False volume is created as regular file.In such case
+# volume creation takes a lot of time. (boolean value)
+#nfs_sparsed_volumes=true
+
+# Mount options passed to the nfs client (string value)
+# The value set here is passed directly to the -o flag
+# of the mount command. See the nfs man page for details.
+#nfs_mount_options=None
+
+
+#
+# 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 (string
+# value)
+#rbd_user=<None>
+
+# the libvirt uuid of the secret for the rbd_uservolumes
+# (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>
+
+
+#
+# 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.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
+
+
+#
+# Options defined in cinder.volume.drivers.storwize_svc
+#
+
+# Storage system storage pool for volumes (string value)
+#storwize_svc_volpool_name=volpool
+
+# Storage system space-efficiency parameter for volumes
+# (string value)
+#storwize_svc_vol_rsize=2%
+
+# Storage system threshold for volume capacity warnings
+# (string value)
+#storwize_svc_vol_warning=0
+
+# Storage system autoexpand parameter for volumes (True/False)
+# (boolean value)
+#storwize_svc_vol_autoexpand=true
+
+# Storage system grain size parameter for volumes
+# (32/64/128/256) (string value)
+#storwize_svc_vol_grainsize=256
+
+# Storage system compression option for volumes (boolean
+# value)
+#storwize_svc_vol_compression=false
+
+# Enable Easy Tier for volumes (boolean value)
+#storwize_svc_vol_easytier=true
+
+# Maximum number of seconds to wait for FlashCopy to be
+# prepared. Maximum value is 600 seconds (10 minutes). (string
+# value)
+#storwize_svc_flashcopy_timeout=120
+
+
+#
+# Options defined in cinder.volume.drivers.windows
+#
+
+# Path to store VHD backed volumes (string value)
+#windows_iscsi_lun_path=C:\iSCSIVirtualDisks
+
+
+#
+# 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>
+
+
+#
+# Options defined in cinder.volume.drivers.xiv
+#
+
+# Proxy driver (string value)
+#xiv_proxy=xiv_openstack.nova_proxy.XIVNovaProxy
+
+
+#
+# Options defined in cinder.volume.drivers.zadara
+#
+
+# Management IP of Zadara VPSA (string value)
+#zadara_vpsa_ip=<None>
+
+# Zadara VPSA port number (string value)
+#zadara_vpsa_port=<None>
+
+# Use SSL connection (boolean value)
+#zadara_vpsa_use_ssl=false
+
+# User name for the VPSA (string value)
+#zadara_user=<None>
+
+# Password for the VPSA (string value)
+#zadara_password=<None>
+
+# Name of VPSA storage pool for volumes (string value)
+#zadara_vpsa_poolname=<None>
+
+# Default cache policy for volumes (string value)
+#zadara_default_cache_policy=write-through
+
+# Default encryption policy for volumes (string value)
+#zadara_default_encryption=NO
+
+# Default 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
+
+# Automatically detach from servers on volume delete (boolean
+# value)
+#zadara_vpsa_auto_detach_on_delete=true
+
+# Don't halt on deletion of non-existing volumes (boolean
+# value)
+#zadara_vpsa_allow_nonexistent_delete=true
+
+
+#
+# Options defined in cinder.volume.iscsi
+#
+
+# iscsi target user-land tool to use (string value)
+#iscsi_helper=tgtadm
+
+# Volume configuration file storage directory (string value)
+#volumes_dir=$state_path/volumes
+
+# IET configuration file (string value)
+#iet_conf=/etc/iet/ietd.conf
+
+# Comma-separatd list of initiator IQNs allowed to connect to
+# the iSCSI target. (From Nova compute nodes.) (string value)
+#lio_initiator_iqns=
+
+
+#
+# Options defined in cinder.volume.manager
+#
+
+# Driver to use for volume creation (string value)
+# The local ZFS driver provides direct access to ZFS volumes that it
+# creates. The iSCSI ZFS driver provides the access to local ZFS volumes
+# using iSCSI over loopback and may be more suitable for future use of
+# features such as live migration of Nova instances.
+volume_driver=cinder.volume.drivers.solaris.zfs.ZFSVolumeDriver
+#volume_driver=cinder.volume.drivers.solaris.zfs.ZFSISCSIDriver
+
+
+#
+# Options defined in cinder.volume.drivers.solaris.zfs
+#
+
+# The base dataset for ZFS cinder volumes.
+#zfs_volume_base=rpool/cinder
+
+
+#
+# Multi backend options
+#
+
+# Define the names of the groups for multiple volume backends
+#enabled_backends=fakedriver,lvmdriver
+
+# Define the groups as above
+#[lvmdriver]
+#volume_group=lvm-group-1
+#volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
+#volume_backend_name=LVM_iSCSI_unique1
+#[fakedriver]
+#volume_driver=cinder.volume.driver.FakeISCSIDriver
+
+
+# Total option count: 256
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder.exec_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,9 @@
+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
+
+cinder-volume:solaris:cmd:RO::/usr/sbin/itadm:uid=0
+cinder-volume:solaris:cmd:RO::/usr/sbin/stmfadm:euid=0
+cinder-volume:solaris:cmd:RO::/usr/sbin/zfs:privs=sys_config,sys_mount
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder.prof_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,15 @@
+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,\
+solaris.smf.manage.cinder,\
+solaris.smf.value.cinder
+
+OpenStack Management:RO:::profiles=OpenStack Block Storage Management
+
+cinder-volume:RO::\
+Do not assign to users. \
+Commands required for application/openstack/cinder/cinder-volume:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/cinder.user_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1 @@
+cinder::RO::profiles=cinder-volume
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/files/solaris/zfs.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,529 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright (c) 2012 OpenStack LLC.
+# 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.
+"""
+Drivers for Solaris ZFS operations in local and iSCSI modes
+"""
+
+import abc
+import os
+
+from oslo.config import cfg
+
+from cinder import exception
+from cinder import flags
+from cinder.image import image_utils
+from cinder.openstack.common import log as logging
+from cinder.volume import driver
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+solaris_zfs_opts = [
+    cfg.StrOpt('zfs_volume_base',
+               default='rpool/cinder',
+               help='The base dataset for ZFS volumes.'), ]
+
+FLAGS.register_opts(solaris_zfs_opts)
+
+
+class ZFSVolumeDriver(driver.VolumeDriver):
+    """Local ZFS volume operations."""
+    protocol = 'local'
+
+    def __init__(self, *args, **kwargs):
+        super(ZFSVolumeDriver, self).__init__(*args, **kwargs)
+        self.configuration.append_config_values(solaris_zfs_opts)
+
+    def check_for_setup_error(self):
+        """Check the setup error."""
+        pass
+
+    def create_volume(self, volume):
+        """Create a volume."""
+        size = '%sG' % volume['size']
+        zfs_volume = self._get_zfs_volume_name(volume)
+
+        # Create a ZFS volume
+        cmd = ['/usr/sbin/zfs', 'create', '-V', size, zfs_volume]
+        self._execute(*cmd)
+        LOG.debug(_("Created ZFS volume '%s'") % volume['name'])
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        """Create a cloned volume from a snapshot."""
+        if volume['size'] != snapshot['volume_size']:
+            exception_message = (_("Could not create volume '%s' because "
+                                   "its volume size of '%s' is different "
+                                   "from that of the snapshot, '%s'.")
+                                 % (volume['name'], volume['size'],
+                                    snapshot['volume_size']))
+            raise exception.VolumeBackendAPIException(data=exception_message)
+
+        # Create a ZFS clone
+        zfs_snapshot = self._get_zfs_snap_name(snapshot)
+        zfs_volume = self._get_zfs_volume_name(volume)
+        cmd = ['/usr/sbin/zfs', 'clone', zfs_snapshot, zfs_volume]
+        self._execute(*cmd)
+
+        LOG.debug(_("Created cloned volume '%s'") % volume['name'])
+
+    def create_cloned_volume(self, volume, src_vref):
+        """Create a clone of the specified volume."""
+        if volume['size'] != src_vref['size']:
+            exception_message = (_("Could not clone volume '%s' because "
+                                   "its volume size of '%s' is different "
+                                   "from that of the source volume, '%s'.")
+                                 % (volume['name'], volume['size'],
+                                    src_vref['size']))
+            raise exception.VolumeBackendAPIException(data=exception_message)
+
+        src_volume_name = src_vref['name']
+        volume_name = volume['name']
+        tmp_snapshot = {'volume_name': src_volume_name,
+                        'name': 'tmp-snapshot-%s' % volume['id']}
+        self.create_snapshot(tmp_snapshot)
+
+        # Create a ZFS clone
+        zfs_snapshot = self._get_zfs_snap_name(tmp_snapshot)
+        zfs_volume = self._get_zfs_volume_name(volume)
+        cmd = ['/usr/sbin/zfs', 'clone', zfs_snapshot, zfs_volume]
+        self._execute(*cmd)
+
+        LOG.debug(_("Created cloned volume '%s' from source volume '%s'")
+                  % (volume_name, src_volume_name))
+
+    def delete_volume(self, volume):
+        """Delete a volume.
+
+        Firstly, the volume should be checked if it is a cloned one. If yes,
+        its parent snapshot with prefix 'tmp-snapshot-' should be deleted as
+        well after it is removed.
+        """
+        zvol = self._get_zvol_path(volume)
+        if not os.path.exists(zvol):
+            LOG.debug(_("The volume path '%s' doesn't exist") % zvol)
+            return
+
+        zfs_volume = self._get_zfs_volume_name(volume)
+        origin_snapshot = self._get_zfs_property('origin', zfs_volume)
+        tmp_cloned_vol = False
+
+        # Check if it is the temporary snapshot created for the cloned volume
+        if origin_snapshot.startswith(self.configuration.zfs_volume_base):
+            prop_type = self._get_zfs_property('type', origin_snapshot)
+            tmp_snap_prefix = 'tmp-snapshot-%s' % volume['id']
+            if prop_type == 'snapshot' and tmp_snap_prefix in origin_snapshot:
+                tmp_cloned_vol = True
+
+        cmd = ['/usr/sbin/zfs', 'destroy', zfs_volume]
+        self._execute(*cmd)
+        LOG.debug(_("Deleted volume '%s'") % volume['name'])
+
+        if tmp_cloned_vol:
+            self._execute('/usr/sbin/zfs', 'destroy', origin_snapshot)
+            LOG.debug(_("Deleted parent snapshot '%s' of volume '%s'")
+                      % (origin_snapshot, volume['name']))
+
+    def create_snapshot(self, snapshot):
+        """Create a snapshot."""
+        cmd = ['/usr/sbin/zfs', 'snapshot', self._get_zfs_snap_name(snapshot)]
+        self._execute(*cmd)
+
+        LOG.debug(_("Created snapshot '%s'") % snapshot['name'])
+
+    def delete_snapshot(self, snapshot):
+        """Delete a snapshot."""
+        cmd = ['/usr/sbin/zfs', 'destroy', self._get_zfs_snap_name(snapshot)]
+        self._execute(*cmd)
+
+        LOG.debug(_("Deleted snapshot '%s'") % snapshot['name'])
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreate an export for a logical volume."""
+        pass
+
+    def create_export(self, context, volume):
+        """Export the volume."""
+        pass
+
+    def remove_export(self, context, volume):
+        """Remove an export for a volume."""
+        pass
+
+    def initialize_connection(self, volume, connector):
+        """Initialize the connection and returns connection info."""
+        volume_path = '%s/volume-%s' % (self.configuration.zfs_volume_base,
+                                        volume['id'])
+        return {
+            'driver_volume_type': 'local',
+            'volume_path': volume_path
+        }
+
+    def terminate_connection(self, volume, connector, **kwargs):
+        """Disconnection from the connector."""
+        pass
+
+    def attach_volume(self, context, volume_id, instance_uuid, mountpoint):
+        """ Callback for volume attached to instance."""
+        pass
+
+    def detach_volume(self, context, volume_id):
+        """ Callback for volume detached."""
+        pass
+
+    def get_volume_stats(self, refresh=False):
+        """Get volume status."""
+
+        if refresh:
+            self._update_volume_stats()
+
+        return self._stats
+
+    def copy_image_to_volume(self, context, volume, image_service, image_id):
+        """Fetch the image from image_service and write it to the volume."""
+        image_utils.fetch_to_raw(context,
+                                 image_service,
+                                 image_id,
+                                 self.local_path(volume))
+
+    def copy_volume_to_image(self, context, volume, image_service, image_meta):
+        """Copy the volume to the specified image."""
+        image_utils.upload_volume(context,
+                                  image_service,
+                                  image_meta,
+                                  self.local_path(volume))
+
+    def _get_zfs_property(self, prop, vol_snap):
+        """Get the value of property for the volume or snapshot."""
+        (out, _err) = self._execute('/usr/sbin/zfs', 'get', '-H', '-o',
+                                    'value', prop, vol_snap)
+        return out.rstrip()
+
+    def _get_zfs_snap_name(self, snapshot):
+        """Get the snapshot path."""
+        return "%s/%s@%s" % (self.configuration.zfs_volume_base,
+                             snapshot['volume_name'], snapshot['name'])
+
+    def _get_zfs_volume_name(self, volume):
+        """Add the pool name to get the ZFS volume."""
+        return "%s/%s" % (self.configuration.zfs_volume_base,
+                          volume['name'])
+
+    def _get_zpool_property(self, prop):
+        """Get the value of property from the zpool."""
+        zpool = self.configuration.zfs_volume_base.split('/')[0]
+        try:
+            value = None
+            (out, _err) = self._execute('/usr/sbin/zpool', 'get', prop, zpool)
+        except exception.ProcessExecutionError as err:
+            LOG.error(_("Failed to get property '%s': %s")
+                      % (prop, err.stderr))
+            return value
+
+        zpool_prop = out.splitlines()[1].split()
+        if zpool_prop[1] == prop:
+            value = zpool_prop[2]
+
+        return value
+
+    def _get_zvol_path(self, volume):
+        """Get the ZFS volume path."""
+        return "/dev/zvol/rdsk/%s" % self._get_zfs_volume_name(volume)
+
+    def _update_volume_stats(self):
+        """Retrieve volume status info."""
+
+        LOG.debug(_("Updating volume status"))
+        stats = {}
+        backend_name = self.configuration.safe_get('volume_backend_name')
+        stats["volume_backend_name"] = backend_name or self.__class__.__name__
+        stats["storage_protocol"] = self.protocol
+        stats["driver_version"] = '1.0'
+        stats["vendor_name"] = 'Oracle'
+        stats['QoS_support'] = False
+
+        total = self._get_zpool_property("size")
+        free = self._get_zpool_property("free")
+        if total is not None:
+            stats['total_capacity_gb'] = float(total.split('G')[0])
+        else:
+            stats['total_capacity_gb'] = 0
+        if free is not None:
+            stats['free_capacity_gb'] = float(free.split('G')[0])
+        else:
+            stats['free_capacity_gb'] = 0
+        stats['reserved_percentage'] = self.configuration.reserved_percentage
+
+        self._stats = stats
+
+
+class STMFDriver(ZFSVolumeDriver):
+    """Abstract base class for common COMSTAR operations."""
+    __metaclass__ = abc.ABCMeta
+
+    def __init__(self, *args, **kwargs):
+        super(STMFDriver, self).__init__(*args, **kwargs)
+
+    def _check_target(self, target, protocol):
+        """Verify if the target exists."""
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-target')
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Target:"):
+                if target == line.split()[-1]:
+                    break
+        else:
+            LOG.debug(_("The target '%s' doesn't exist") % target)
+            return False
+
+        # Verify if the target protocol is iSCSI.
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-target',
+                                    '-v', target)
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Target:"):
+                tmp_target = line.split()[-1]
+            if line.startswith("Operational"):
+                status = line.split()[-1]
+            if line.startswith("Protocol"):
+                tmp_protocol = line.split()[-1]
+                break
+
+        return (tmp_target == target and status == 'Online' and
+                tmp_protocol == protocol)
+
+    def _check_tg(self, tg):
+        """Check if the target group exists."""
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg')
+        found = False
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("Target"):
+                if tg == line.split()[-1]:
+                    found = True
+                    break
+        else:
+            LOG.debug(_("The target group '%s' doesn't exist") % tg)
+
+        return found
+
+    def _get_luid(self, volume):
+        """Get the LU corresponding to the volume."""
+        zvol = self._get_zvol_path(volume)
+
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-lu', '-v')
+        luid = None
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("LU Name:"):
+                luid = line.split()[-1]
+            if line.startswith("Alias") and line.split()[-1] == zvol:
+                break
+        else:
+            luid = None
+
+        if luid is not None:
+            LOG.debug(_("Got the LU '%s'") % luid)
+        else:
+            LOG.debug(_("Failed to get LU for volume '%s'")
+                      % volume['name'])
+        return luid
+
+    def _get_view_and_lun(self, lu):
+        """Check the view entry of the LU and then get the lun and view."""
+        view_and_lun = {}
+        view_and_lun['valid_value'] = False
+        try:
+            (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-view',
+                                        '-l', lu)
+        except exception.ProcessExecutionError as error:
+            if 'no views found' in error.stderr:
+                LOG.debug(_("No view is found for LU '%s'") % lu)
+                return view_and_lun
+            else:
+                raise
+
+        for line in [l.strip() for l in out.splitlines()]:
+            if line.startswith("View Entry:"):
+                view_and_lun['view'] = line.split()[-1]
+                view_and_lun['valid_value'] = True
+            if line.startswith("LUN"):
+                view_and_lun['lun'] = line.split()[-1]
+
+        if view_and_lun['lun'] == 'Auto':
+            view_and_lun['lun'] = 0
+
+        LOG.debug(_("The view_entry and LUN of LU '%s' are '%s' and '%s'.")
+                  % (lu, view_and_lun['view'], view_and_lun['lun']))
+
+        return view_and_lun
+
+
+class ZFSISCSIDriver(STMFDriver, driver.ISCSIDriver):
+    """ZFS volume operations in iSCSI mode."""
+    protocol = 'iSCSI'
+
+    def __init__(self, *args, **kwargs):
+        super(ZFSISCSIDriver, self).__init__(*args, **kwargs)
+
+    def create_export(self, context, volume):
+        """Export the volume."""
+        zvol = self._get_zvol_path(volume)
+
+        # Create a Logical Unit (LU)
+        self._execute('/usr/sbin/stmfadm', 'create-lu', zvol)
+        luid = self._get_luid(volume)
+        if not luid:
+            msg = (_("Failed to create LU for volume '%s'")
+                   % volume['name'])
+            raise exception.VolumeBackendAPIException(data=msg)
+
+        # 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)
+
+        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._execute('/usr/sbin/itadm', 'create-target', '-n', target_name)
+        assert self._check_target(target_name, 'iSCSI')
+
+        # Add a logical unit view entry
+        if luid is not None:
+            self._execute('/usr/sbin/stmfadm', 'add-view', '-t',
+                          target_group, luid)
+
+    def remove_export(self, context, volume):
+        """Remove an export for a volume.
+
+        All of the related elements about the volume, including the
+        target, target group, view entry and lu, are deleted.
+        """
+        luid = self._get_luid(volume)
+        target_group = 'tg-%s' % volume['name']
+        target_name = '%s%s' % (self.configuration.iscsi_target_prefix,
+                                volume['name'])
+
+        # Remove the view entry
+        if luid is not None:
+            view_lun = self._get_view_and_lun(luid)
+            if view_lun['valid_value']:
+                self._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)
+
+        if self._check_tg(target_group):
+            self._execute('/usr/sbin/stmfadm', 'delete-tg', target_group)
+
+        # Remove the LU
+        if luid is not None:
+            self._execute('/usr/sbin/stmfadm', 'delete-lu', luid)
+
+    def _get_iscsi_properties(self, volume):
+        """Get iSCSI configuration
+
+        Now we use the discovery address as the default approach to add
+        objects into the initiator. A discovery address is an IP address:port
+        combination used in a SendTargets discovery session in the initiator.
+
+        :target_discovered:    boolean indicating whether discovery was used
+        :target_iqn:           the IQN of the iSCSI target
+        :target_portal:        the portal of the iSCSI target
+        :target_lun:           the lun of the iSCSI target
+        :volume_id:            the id of the volume
+
+        :auth_method:, :auth_username:, :auth_password:
+            the authentication details. Right now, either auth_method is not
+            present meaning no authentication, or auth_method == `CHAP`
+            meaning use CHAP with the specified credentials.
+        """
+        luid = self._get_luid(volume)
+        if not luid:
+            msg = (_("Failed to get LU for volume '%s'") % volume['name'])
+            raise exception.VolumeBackendAPIException(data=msg)
+
+        target_name = '%s%s' % (self.configuration.iscsi_target_prefix,
+                                volume['name'])
+        properties = {}
+
+        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['valid_value']:
+            properties['target_lun'] = view_lun['lun']
+        properties['volume_id'] = volume['id']
+
+        auth = volume['provider_auth']
+        if auth:
+            (auth_method, auth_username, auth_secret) = auth.split()
+            properties['auth_method'] = auth_method
+            properties['auth_username'] = auth_username
+            properties['auth_password'] = auth_secret
+
+        return properties
+
+    def initialize_connection(self, volume, connector):
+        """Initialize the connection and returns connection info.
+
+        The iSCSI driver returns a driver_volume_type of 'iscsi'.
+        The format of the driver data is defined in _get_iscsi_properties.
+        Example return value::
+
+        {
+            'driver_volume_type': 'iscsi'
+            'data': {
+                'target_discovered': True,
+                'target_iqn':
+                'iqn.1986-03.com.sun:02:200720c6-9bca-cb8f-c061-d427d7ab978f',
+                'target_portal': '127.0.0.1:3260',
+                'volume_id': 1,
+            }
+        }
+
+        """
+        initiator_name = connector['initiator']
+        volume_name = volume['name']
+        LOG.debug(_('Connecting the initiator %(initiator_name)s '
+                    'for volume %(volume_name)s')
+                  % {'initiator_name': initiator_name,
+                     'volume_name': volume_name})
+        iscsi_properties = self._get_iscsi_properties(volume)
+
+        return {
+            'driver_volume_type': 'iscsi',
+            'data': iscsi_properties
+        }
+
+    def terminate_connection(self, volume, connector, **kwargs):
+        """Disconnection from the connector."""
+        initiator_name = connector['initiator']
+        volume_name = volume['name']
+
+        LOG.debug(_('Disconnecting the initiator %(initiator_name)s '
+                    'for volume %(volume_name)s')
+                  % {'initiator_name': initiator_name,
+                     'volume_name': volume_name})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/01-noamqplib.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,20 @@
+In-house patch to remove amqplib from Cinder's requirements files as
+an alternate implementation is used on Solaris.
+
+--- cinder-2013.1.4/cinder.egg-info/requires.txt.orig 2013-11-22 07:46:37.051978903 -0700
++++ cinder-2013.1.4/cinder.egg-info/requires.txt        2013-11-22 07:46:45.304481983 -0700
+@@ -1,5 +1,4 @@
+ SQLAlchemy>=0.7.3,<=0.7.9
+-amqplib>=0.6.1
+ anyjson>=0.2.4
+ eventlet>=0.9.17
+ kombu>=1.0.4
+
+--- cinder-2013.1.4/tools/pip-requires.orig       2013-11-22 07:48:29.381781247 -0700
++++ cinder-2013.1.4/tools/pip-requires        2013-11-22 07:48:34.137850426 -0700
+@@ -1,5 +1,4 @@
+ SQLAlchemy>=0.7.3,<=0.7.9
+-amqplib>=0.6.1
+ anyjson>=0.2.4
+ argparse
+ eventlet>=0.9.17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/02-noparamiko.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,169 @@
+In-house patch for the temporary removal of Paramiko dependency in
+Cinder.  This patch is Solaris-specific and not suitable for upstream
+
+--- cinder-2013.1.4/cinder/utils.py.orig	2013-10-17 11:21:37.000000000 -0700
++++ cinder-2013.1.4/cinder/utils.py	2014-03-08 11:55:09.044072461 -0800
+@@ -27,7 +27,6 @@
+ import inspect
+ import itertools
+ import os
+-import paramiko
+ import pyclbr
+ import random
+ import re
+@@ -233,135 +232,6 @@
+     return out, err
+ 
+ 
+-def ssh_execute(ssh, cmd, process_input=None,
+-                addl_env=None, check_exit_code=True):
+-    LOG.debug(_('Running cmd (SSH): %s'), cmd)
+-    if addl_env:
+-        raise exception.Error(_('Environment not supported over SSH'))
+-
+-    if process_input:
+-        # This is (probably) fixable if we need it...
+-        raise exception.Error(_('process_input not supported over SSH'))
+-
+-    stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(cmd)
+-    channel = stdout_stream.channel
+-
+-    #stdin.write('process_input would go here')
+-    #stdin.flush()
+-
+-    # NOTE(justinsb): This seems suspicious...
+-    # ...other SSH clients have buffering issues with this approach
+-    stdout = stdout_stream.read()
+-    stderr = stderr_stream.read()
+-    stdin_stream.close()
+-    stdout_stream.close()
+-    stderr_stream.close()
+-
+-    exit_status = channel.recv_exit_status()
+-
+-    # exit_status == -1 if no exit code was returned
+-    if exit_status != -1:
+-        LOG.debug(_('Result was %s') % exit_status)
+-        if check_exit_code and exit_status != 0:
+-            raise exception.ProcessExecutionError(exit_code=exit_status,
+-                                                  stdout=stdout,
+-                                                  stderr=stderr,
+-                                                  cmd=cmd)
+-    channel.close()
+-    return (stdout, stderr)
+-
+-
+-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.
+-        """
+-        if self.free_items:
+-            conn = self.free_items.popleft()
+-            if conn:
+-                if conn.get_transport().is_active():
+-                    return conn
+-                else:
+-                    conn.close()
+-            return self.create()
+-        if self.current_size < self.max_size:
+-            created = self.create()
+-            self.current_size += 1
+-            return created
+-        return self.channel.get()
+-
+-    def remove(self, ssh):
+-        """Close an ssh client and remove it if in free_items."""
+-        ssh.close()
+-        if ssh in self.free_items:
+-            self.free_items.pop(ssh)
+-        ssh = None
+-
+-        if self.current_size > 0:
+-            self.current_size -= 1
+-
+-
+ def cinderdir():
+     import cinder
+     return os.path.abspath(cinder.__file__).split('cinder/__init__.py')[0]
+--- cinder-2013.1.4/cinder.egg-info/requires.txt.orig	Wed Feb 26 10:56:39 2014
++++ cinder-2013.1.4/cinder.egg-info/requires.txt	Wed Feb 26 10:58:01 2014
+@@ -14,7 +14,6 @@
+ sqlalchemy-migrate>=0.7.2
+ stevedore>=0.8.0
+ suds>=0.4
+-paramiko
+ Babel>=0.9.6
+ iso8601>=0.1.4
+ setuptools_git>=0.4
+--- cinder-2013.1.4/tools/pip-requires.orig	Wed Feb 26 10:56:38 2014
++++ cinder-2013.1.4/tools/pip-requires	Wed Feb 26 10:58:25 2014
+@@ -14,7 +14,6 @@
+ sqlalchemy-migrate>=0.7.2
+ stevedore>=0.8.0
+ suds>=0.4
+-paramiko
+ Babel>=0.9.6
+ iso8601>=0.1.4
+ setuptools_git>=0.4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/03-emc_smis_iscsi.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,61 @@
+In-house patch to adopt EMC driver to use Solaris' iscsiadm(1M) rather
+than that from Linux.  Patch has not yet been submitted upstream.
+
+--- cinder-2013.1.4/cinder/volume/drivers/emc/emc_smis_iscsi.py.~1~	2013-10-17 11:21:37.000000000 -0700
++++ cinder-2013.1.4/cinder/volume/drivers/emc/emc_smis_iscsi.py	2014-03-12 17:07:06.500560732 -0700
+@@ -21,6 +21,7 @@
+ """
+ 
+ import os
++import sys
+ import time
+ 
+ from cinder import exception
+@@ -118,13 +119,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/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,14 @@
+library/python-2/eventlet-26
+library/python-2/ipython-26
+library/python-2/sqlalchemy-26
+library/python-2/sqlalchemy-migrate-26
+library/python/eventlet-26
+library/python/ipython-26
+library/python/oslo.config-26
+library/python/sqlalchemy-26
+library/python/sqlalchemy-migrate-26
+runtime/python-26
+system/core-os
+system/file-system/zfs
+system/storage/iscsi/iscsi-target
+system/storage/scsi-target-mode-framework
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/common/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,61 @@
+#
+# 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, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		openstack
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_PROJECT_URL=	http://www.openstack.org/
+IPS_COMPONENT_VERSION=  0.$(COMPONENT_VERSION)
+
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Do not apply the standard license transforms for this component.
+LICENSE_TRANSFORMS =
+
+# common targets
+prep:
+	$(TOUCH) $@
+
+build:		FRC
+	@/bin/true
+
+install:	FRC
+	@/bin/true
+
+download::
+	@echo 'No downloads for this component'
+
+clobber::	clean
+
+clean::
+	$(RM) -r $(SOURCE_DIR)/build
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/common/openstack.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -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) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value=OpenStack
+set name=pkg.description \
+    value="OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a data center, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface."
+set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=info.classification \
+    value="org.opensolaris.category.2008:Meta Packages/Group Packages" \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    value=org.opensolaris.category.2008:System/Virtualization \
+    value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+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
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+depend type=group fmri=cloud/openstack/cinder
+depend type=group fmri=cloud/openstack/glance
+depend type=group fmri=cloud/openstack/horizon
+depend type=group fmri=cloud/openstack/keystone
+depend type=group fmri=cloud/openstack/neutron
+depend type=group fmri=cloud/openstack/nova
+depend type=group fmri=library/python/cinderclient
+depend type=group fmri=library/python/glanceclient
+depend type=group fmri=library/python/keystoneclient
+depend type=group fmri=library/python/neutronclient
+depend type=group fmri=library/python/novaclient
+depend type=group fmri=library/python/quantumclient
+depend type=group fmri=library/python/swiftclient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/common/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1 @@
+consolidation/userland/userland-incorporation
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,68 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		glance
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:dfb8070a12bbf5761db1c55d21db4772fe81ed903d57cf991618e5224cbdcd67
+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) 
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+# glance-api and glance-registry depend on the glance-db svc so copy
+# the manifests into the proto directory for pkgdepend 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)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-api	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/glance/glance-api")
+
+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/glance/files/glance-api.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,356 @@
+[DEFAULT]
+# Show more verbose log output (sets INFO log level output)
+#verbose = False
+
+# Show debugging output in logs (sets DEBUG log level output)
+#debug = False
+
+# Which backend scheme should Glance use by default is not specified
+# in a request to add a new image to Glance? Known schemes are determined
+# by the known_stores option below.
+# Default: 'file'
+default_store = file
+
+# List of which store classes and store class locations are
+# currently known to glance at startup.
+#known_stores = glance.store.filesystem.Store,
+#               glance.store.http.Store,
+#               glance.store.rbd.Store,
+#               glance.store.s3.Store,
+#               glance.store.swift.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
+# and must be set to a value under 8 EB (9223372036854775808).
+#image_size_cap = 1099511627776
+
+# Address to bind the API server
+bind_host = 0.0.0.0
+
+# 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_file = /var/log/glance/api.log
+
+# Backlog requests when creating socket
+backlog = 4096
+
+# TCP_KEEPIDLE value in seconds when creating socket.
+# Not supported on OS X.
+#tcp_keepidle = 600
+
+# SQLAlchemy connection string for the reference implementation
+# registry server. Any valid SQLAlchemy connection string is fine.
+# See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
+sql_connection = sqlite:////var/lib/glance/glance.sqlite
+
+# Period in seconds after which SQLAlchemy should reestablish its connection
+# to the database.
+#
+# MySQL uses a default `wait_timeout` of 8 hours, after which it will drop
+# idle connections. This can result in 'MySQL Gone Away' exceptions. If you
+# notice this, you can lower this value to ensure that SQLAlchemy reconnects
+# before MySQL can drop the connection.
+sql_idle_timeout = 3600
+
+# 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
+
+# Role used to identify an authenticated user as administrator
+#admin_role = admin
+
+# Allow unauthenticated users to access the API with read-only
+# privileges. This only applies when using ContextMiddleware.
+#allow_anonymous_access = False
+
+# Allow access to version 1 of glance api
+#enable_v1_api = True
+
+# Allow access to version 2 of glance api
+#enable_v2_api = True
+
+# Return the URL that references where the data is stored on
+# the backend storage system.  For example, if using the
+# file system store a URL of 'file:///path/to/image' will
+# be returned to the user in the 'direct_url' meta-data field.
+# The default value is false.
+#show_image_direct_url = False
+
+# ================= Syslog Options ============================
+
+# Send logs to syslog (/dev/log) instead of to file specified
+# by `log_file`
+#use_syslog = False
+
+# Facility to use. If unset defaults to LOG_USER.
+#syslog_log_facility = LOG_LOCAL0
+
+# ================= SSL Options ===============================
+
+# Certificate file to use when starting API server securely
+#cert_file = /path/to/certfile
+
+# Private key file to use when starting API server securely
+#key_file = /path/to/keyfile
+
+# CA certificate file to use to verify connecting clients
+#ca_file = /path/to/cafile
+
+# ================= Security Options ==========================
+
+# AES key for encrypting store 'location' metadata, including
+# -- if used -- Swift or S3 credentials
+# Should be set to a random string of length 16, 24 or 32 bytes
+#metadata_encryption_key = <16, 24 or 32 char registry metadata key>
+
+# ============ Registry Options ===============================
+
+# Address to find the registry server
+registry_host = 0.0.0.0
+
+# Port the registry server is listening on
+registry_port = 9191
+
+# What protocol to use when connecting to the registry server?
+# Set to https for secure HTTP communication
+registry_client_protocol = http
+
+# The path to the key file to use in SSL connections to the
+# registry server, if any. Alternately, you may set the
+# GLANCE_CLIENT_KEY_FILE environ variable to a filepath of the key file
+#registry_client_key_file = /path/to/key/file
+
+# The path to the cert file to use in SSL connections to the
+# registry server, if any. Alternately, you may set the
+# GLANCE_CLIENT_CERT_FILE environ variable to a filepath of the cert file
+#registry_client_cert_file = /path/to/cert/file
+
+# The path to the certifying authority cert file to use in SSL connections
+# to the registry server, if any. Alternately, you may set the
+# GLANCE_CLIENT_CA_FILE environ variable to a filepath of the CA cert file
+#registry_client_ca_file = /path/to/ca/file
+
+# When using SSL in connections to the registry server, do not require
+# validation via a certifying authority. This is the registry's equivalent of
+# specifying --insecure on the command line using glanceclient for the API
+# Default: False
+#registry_client_insecure = False
+
+# The period of time, in seconds, that the API server will wait for a registry
+# request to complete. A value of '0' implies no timeout.
+# Default: 600
+#registry_client_timeout = 600
+
+# Whether to automatically create the database tables.
+# Default: False
+#db_auto_create = False
+
+# ============ 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
+
+# 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_host = 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
+
+# ============ Filesystem Store Options ========================
+
+# Directory that the Filesystem backend store
+# writes image data to
+filesystem_store_datadir = /var/lib/glance/images/
+
+# ============ Swift Store Options =============================
+
+# Version of the authentication service to use
+# Valid versions are '2' for keystone and '1' for swauth and rackspace
+swift_store_auth_version = 2
+
+# Address where the Swift authentication service lives
+# Valid schemes are 'http://' and 'https://'
+# If no scheme specified,  default to 'https://'
+# For swauth, use something like '127.0.0.1:8080/v1.0/'
+swift_store_auth_address = 127.0.0.1:5000/v2.0/
+
+# User to authenticate against the Swift authentication service
+# If you use Swift authentication service, set it to 'account':'user'
+# where 'account' is a Swift storage account and 'user'
+# is a user in that account
+swift_store_user = jdoe:jdoe
+
+# Auth key for the user authenticating against the
+# Swift authentication service
+swift_store_key = a86850deb2742ec3cb41518e26aa2d89
+
+# Container within the account that the account should use
+# for storing images in Swift
+swift_store_container = glance
+
+# Do we create the container if it does not exist?
+swift_store_create_container_on_put = False
+
+# What size, in MB, should Glance start chunking image files
+# and do a large object manifest in Swift? By default, this is
+# the maximum object size in Swift, which is 5GB
+swift_store_large_object_size = 5120
+
+# 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
+# the image file, and the default is 200MB
+swift_store_large_object_chunk_size = 200
+
+# Whether to use ServiceNET to communicate with the Swift storage servers.
+# (If you aren't RACKSPACE, leave this False!)
+#
+# To use ServiceNET for authentication, prefix hostname of
+# `swift_store_auth_address` with 'snet-'.
+# Ex. https://example.com/v1.0/ -> https://snet-example.com/v1.0/
+swift_enable_snet = False
+
+# If set to True enables multi-tenant storage mode which causes Glance images
+# to be stored in tenant specific Swift accounts.
+#swift_store_multi_tenant = False
+
+# A list of swift ACL strings that will be applied as both read and
+# write ACLs to the containers created by Glance in multi-tenant
+# mode. This grants the specified tenants/users read and write access
+# to all newly created image objects. The standard swift ACL string
+# formats are allowed, including:
+# <tenant_id>:<username>
+# <tenant_name>:<username>
+# *:<username>
+# Multiple ACLs can be combined using a comma separated list, for
+# example: swift_store_admin_tenants = service:glance,*:admin
+#swift_store_admin_tenants =
+
+# The region of the swift endpoint to be used for single tenant. This setting
+# is only necessary if the tenant has multiple swift endpoints.
+#swift_store_region =
+
+# ============ S3 Store Options =============================
+
+# Address where the S3 authentication service lives
+# Valid schemes are 'http://' and 'https://'
+# If no scheme specified,  default to 'http://'
+s3_store_host = 127.0.0.1:8080/v1.0/
+
+# User to authenticate against the S3 authentication service
+s3_store_access_key = <20-char AWS access key>
+
+# Auth key for the user authenticating against the
+# S3 authentication service
+s3_store_secret_key = <40-char AWS secret key>
+
+# Container within the account that the account should use
+# for storing images in S3. Note that S3 has a flat namespace,
+# so you need a unique bucket name for your glance images. An
+# easy way to do this is append your AWS access key to "glance".
+# S3 buckets in AWS *must* be lowercased, so remember to lowercase
+# your AWS access key if you use it in your bucket name below!
+s3_store_bucket = <lowercased 20-char aws access key>glance
+
+# Do we create the bucket if it does not exist?
+s3_store_create_bucket_on_put = False
+
+# When sending images to S3, the data will first be written to a
+# temporary buffer on disk. By default the platform's temporary directory
+# will be used. If required, an alternative directory can be specified here.
+#s3_store_object_buffer_dir = /path/to/dir
+
+# When forming a bucket url, boto will either set the bucket name as the
+# subdomain or as the first token of the path. Amazon's S3 service will
+# accept it as the subdomain, but Swift's S3 middleware requires it be
+# in the path. Set this to 'path' or 'subdomain' - defaults to 'subdomain'.
+#s3_store_bucket_url_format = subdomain
+
+# ============ 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
+
+# RADOS user to authenticate as (only applicable if using cephx)
+rbd_store_user = glance
+
+# RADOS pool in which images are stored
+rbd_store_pool = images
+
+# 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
+
+# ============ 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
+
+# =============== Image Cache Options =============================
+
+# Base directory that the Image Cache uses
+image_cache_dir = /var/lib/glance/image-cache/
+
+[keystone_authtoken]
+auth_host = 127.0.0.1
+auth_port = 35357
+auth_protocol = http
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+
+[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=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-api.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,71 @@
+<?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.
+
+ 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-api">
+
+  <service version="1" type="service"
+    name="application/openstack/glance/glance-api">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+    <!-- create a dependency on the glance_db service so the glance-api and
+         glance-registry services do not collide when creating the database -->
+    <dependency name='glance_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-db'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/glance-api %m">
+      <method_context>
+        <method_credential user='glance' group='glance' />
+      </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.glance' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.glance' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Glance API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          glance-api is a server daemon that serves the Glance API
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-db.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,70 @@
+<?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.
+
+ 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-db">
+
+  <service version="1" type="service"
+    name="application/openstack/glance/glance-db">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/usr/bin/glance-manage db_sync">
+      <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='false'>
+
+      <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>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Glance Database Creation Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          glance-db is a transient service to create the Glance database if
+          required.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-registry	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/glance/glance-registry")
+
+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/glance/files/glance-registry.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,72 @@
+<?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.
+
+ 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-registry">
+
+  <service version="1" type="service"
+    name="application/openstack/glance/glance-registry">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+    <!-- create a dependency on the glance_db service so the glance-api and
+         glance-registry services do not collide when creating the database -->
+    <dependency name='glance_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/glance/glance-db'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/glance-registry %m">
+      <method_context>
+        <method_credential user='glance' group='glance' />
+      </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.glance' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.glance' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Glance Image Metadata Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          glance-registry is a server daemon that serves image metadata through
+          a REST-like API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-scrubber	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/glance/glance-scrubber")
+
+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/glance/files/glance-scrubber.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,40 @@
+[DEFAULT]
+# Show more verbose log output (sets INFO log level output)
+#verbose = False
+
+# Show debugging output in logs (sets DEBUG log level output)
+#debug = False
+
+# Log to this file. Make sure you do not set the same log
+# file for both the API and registry servers!
+log_file = /var/log/glance/scrubber.log
+
+# Send logs to syslog (/dev/log) instead of to file specified by `log_file`
+#use_syslog = False
+
+# Should we run our own loop or rely on cron/scheduler to run us
+daemon = True
+
+# Loop time between checking for new items to schedule for delete
+wakeup_time = 300
+
+# Directory that the scrubber will use to remind itself of what to delete
+# Make sure this is also set in glance-api.conf
+scrubber_datadir = /var/lib/glance/scrubber
+
+# Only one server in your deployment should be designated the cleanup host
+cleanup_scrubber = False
+
+# pending_delete items older than this time are candidates for cleanup
+cleanup_scrubber_time = 86400
+
+# Address to find the registry server for cleanups
+registry_host = 0.0.0.0
+
+# Port the registry server is listening on
+registry_port = 9191
+
+# AES key for encrypting store 'location' metadata, including
+# -- if used -- Swift or S3 credentials
+# Should be set to a random string of length 16, 24 or 32 bytes
+#metadata_encryption_key = <16, 24 or 32 char registry metadata key>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance-scrubber.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,67 @@
+<?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.
+
+ 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-scrubber">
+
+  <service version="1" type="service"
+    name="application/openstack/glance/glance-scrubber">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/glance-scrubber %m">
+      <method_context>
+        <method_credential user='glance' group='glance' />
+      </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.glance' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.glance' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Glance Image Scrubbing Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          glance-scrubber is an utility that cleans up images that have been
+          deleted. The mechanics of this differ depending on the backend store
+          and pending_deletion options chosen.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance.auth_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+solaris.smf.manage.glance:RO::Manage OpenStack Glance Service States::
+solaris.smf.value.glance:RO::Change Values of OpenStack Glance Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance.exec_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,11 @@
+OpenStack Image Management:solaris:cmd:RO::/usr/bin/glance-cache-manage:\
+uid=glance;gid=glance
+
+OpenStack Image Management:solaris:cmd:RO::/usr/bin/glance-cache-prefetcher:\
+uid=glance;gid=glance
+
+OpenStack Image Management:solaris:cmd:RO::/usr/bin/glance-manage:\
+uid=glance;gid=glance
+
+OpenStack Image Management:solaris:cmd:RO::/usr/bin/glance-replicator:\
+uid=glance;gid=glance
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/files/glance.prof_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,14 @@
+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,\
+solaris.smf.manage.glance,\
+solaris.smf.value.glance
+
+OpenStack Management:RO:::profiles=OpenStack Image Management
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/glance.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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/openstack/glance/glance.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,297 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/glance@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Glance"
+set name=pkg.description \
+    value="OpenStack Glance provides services for discovering, registering, and retrieving virtual machine images. Glance has a RESTful API that allows querying of VM image metadata as well as retrieval of the actual image. VM images made available through Glance can be stored in a variety of locations from simple file systems to object-storage systems like OpenStack Swift."
+set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=com.oracle.info.description value="Glance, the OpenStack image service"
+set name=com.oracle.info.tpno value=16269
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/055
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+dir  path=etc/glance owner=glance group=glance mode=0700
+file etc/glance-api-paste.ini path=etc/glance/glance-api-paste.ini \
+    owner=glance group=glance mode=0644 overlay=allow preserve=true
+file files/glance-api.conf path=etc/glance/glance-api.conf owner=glance \
+    group=glance mode=0644 overlay=allow preserve=true
+file etc/glance-cache.conf path=etc/glance/glance-cache.conf owner=glance \
+    group=glance mode=0644 overlay=allow preserve=true
+file etc/glance-registry-paste.ini path=etc/glance/glance-registry-paste.ini \
+    owner=glance group=glance mode=0644 overlay=allow preserve=true
+file etc/glance-registry.conf path=etc/glance/glance-registry.conf \
+    owner=glance group=glance mode=0644 overlay=allow preserve=true
+file files/glance-scrubber.conf path=etc/glance/glance-scrubber.conf \
+    owner=glance group=glance mode=0644 overlay=allow preserve=true
+file etc/logging.cnf.sample path=etc/glance/logging.conf owner=glance \
+    group=glance mode=0644 overlay=allow preserve=true
+file etc/policy.json path=etc/glance/policy.json owner=glance group=glance \
+    mode=0644 overlay=allow preserve=true
+file etc/schema-image.json path=etc/glance/schema-image.json owner=glance \
+    group=glance
+file files/glance.auth_attr \
+    path=etc/security/auth_attr.d/cloud:openstack:glance group=sys
+file files/glance.exec_attr \
+    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 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 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 path=usr/bin/glance-cache-manage
+file path=usr/bin/glance-cache-prefetcher
+file path=usr/bin/glance-manage
+file path=usr/bin/glance-replicator
+file usr/bin/glance-api path=usr/lib/glance/glance-api mode=0555
+file usr/bin/glance-cache-cleaner path=usr/lib/glance/glance-cache-cleaner \
+    mode=0555
+file usr/bin/glance-cache-pruner path=usr/lib/glance/glance-cache-pruner \
+    mode=0555
+file usr/bin/glance-registry path=usr/lib/glance/glance-registry mode=0555
+file usr/bin/glance-scrubber path=usr/lib/glance/glance-scrubber mode=0555
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/glance-$(COMPONENT_VERSION)-py$(PYVER).egg-info/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
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/authorization.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/cached_images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/cache_manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/middleware/version_negotiation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/controller.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/filters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/members.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v1/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_data.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/image_members.py
+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/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/v2/schemas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/api/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/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
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/config.py \
+    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/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/common/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/simple/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/simple/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/api.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
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/schema.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/001_add_images_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/002_add_image_properties_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/003_add_disk_format.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/003_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/003_sqlite_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/004_add_checksum.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/005_size_big_integer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/006_key_to_name.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/006_mysql_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/006_mysql_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/006_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/006_sqlite_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/007_add_owner.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/008_add_image_members_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/009_add_mindisk_and_minram.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/010_default_update_at.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/011_make_mindisk_and_minram_notnull.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/011_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/011_sqlite_upgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/012_id_to_uuid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/013_add_protected.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/014_add_image_tags_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/015_quote_swift_credentials.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/016_add_status_image_member.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/016_sqlite_downgrade.sql
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/017_quote_encrypted_swift_credentials.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/018_add_image_locations_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/019_migrate_image_locations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/020_drop_images_table_location.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/021_set_engine_mysql_innodb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/022_image_member_index.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/db/sqlalchemy/migrate_repo/versions/__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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/drivers/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/image_cache/drivers/sqlite.py
+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/bs/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/es/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/fr/LC_MESSAGES/glance.po
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/glance.pot
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/locale/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/ko/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/ru/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/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/zh_CN/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/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/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/log.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/setup.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/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/api/v1/members.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/registry/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glance/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/filesystem.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/swift.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/anyjson-26
+
+# force a dependency on boto; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/boto-26
+
+# force a dependency on httplib2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/httplib2-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 jsonschema; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/jsonschema-26
+
+# force a dependency on kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/kombu-26
+
+# force a dependency on paste; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/paste-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/paste.deploy-26
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/routes-26
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-26
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/sqlalchemy-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 webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/webob-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/01-nopycrypto.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,106 @@
+In-house removal of PyCrypto dependency in Glance.  This patch is
+Solaris-specific and not suitable for upstream.
+
+Convert urlsafe_encrypt() and urlsafe_decrypt() to use M2Crypto instead
+of PyCrypto.
+
+--- glance-2013.1.4/glance.egg-info/requires.txt.orig	Thu Jan 16 22:08:47 2014
++++ glance-2013.1.4/glance.egg-info/requires.txt	Thu Jan 16 22:23:01 2014
+@@ -11,7 +11,7 @@
+ sqlalchemy-migrate>=0.7
+ httplib2
+ kombu
+-pycrypto>=2.1.0alpha1
++M2Crypto>=0.21.1
+ iso8601>=0.1.4
+ oslo.config>=1.1.0
+ python-swiftclient>=1.2,<2
+--- glance-2013.1.4/glance/common/crypt.py.orig	Thu Oct 17 11:22:18 2013
++++ glance-2013.1.4/glance/common/crypt.py	Thu Jan 16 22:42:41 2014
+@@ -4,6 +4,8 @@
+ # Copyright 2011 OpenStack LLC.
+ # 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
+@@ -21,12 +23,27 @@
+ """
+ 
+ import base64
++import os
+ 
+-from Crypto.Cipher import AES
+-from Crypto import Random
+-from Crypto.Random import random
++from M2Crypto.EVP import Cipher
+ 
++from glance.common import exception
+ 
++
++def _key_to_alg(key):
++    """Return a M2Crypto-compatible AES-CBC algorithm name given a key."""
++    aes_algs = {
++        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 exception.Invalid(msg)
++    return aes_algs[keylen]
++
+ def urlsafe_encrypt(key, plaintext, blocksize=16):
+     """
+     Encrypts plaintext. Resulting ciphertext will contain URL-safe characters
+@@ -36,20 +53,12 @@
+ 
+     :returns : Resulting ciphertext
+     """
+-    def pad(text):
+-        """
+-        Pads text to be encrypted
+-        """
+-        pad_length = (blocksize - len(text) % blocksize)
+-        sr = random.StrongRandom()
+-        pad = ''.join(chr(sr.randint(1, 0xFF)) for i in range(pad_length - 1))
+-        # We use chr(0) as a delimiter between text and padding
+-        return text + chr(0) + pad
+ 
+     # random initial 16 bytes for CBC
+-    init_vector = Random.get_random_bytes(16)
+-    cypher = AES.new(key, AES.MODE_CBC, init_vector)
+-    padded = cypher.encrypt(pad(str(plaintext)))
++    init_vector = os.urandom(16)
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=init_vector, op=1)
++    padded = cipher.update(str(plaintext))
++    padded = padded + cipher.final()
+     return base64.urlsafe_b64encode(init_vector + padded)
+ 
+ 
+@@ -63,6 +72,7 @@
+     """
+     # Cast from unicode
+     ciphertext = base64.urlsafe_b64decode(str(ciphertext))
+-    cypher = AES.new(key, AES.MODE_CBC, ciphertext[:16])
+-    padded = cypher.decrypt(ciphertext[16:])
+-    return padded[:padded.rfind(chr(0))]
++    cipher = Cipher(alg=_key_to_alg(key), key=key, iv=ciphertext[:16], op=0)
++    padded = cipher.update(ciphertext[16:])
++    padded = padded + cipher.final()
++    return padded
+--- glance-2013.1.4/tools/pip-requires.orig	Thu Oct 17 11:22:19 2013
++++ glance-2013.1.4/tools/pip-requires	Thu Jan 16 22:22:56 2014
+@@ -15,7 +15,7 @@
+ sqlalchemy-migrate>=0.7
+ httplib2
+ kombu
+-pycrypto>=2.1.0alpha1
++M2Crypto>=0.21.1
+ iso8601>=0.1.4
+ oslo.config>=1.1.0
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/patches/02-zfs-uar-formats.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,40 @@
+In-house patch to add 'uar' and 'zfs' container and disk formats to
+registered image types.  Patch has not yet been submitted upstream.
+
+diff --git a/glance/api/v1/images.py b/glance/api/v1/images.py
+index 4993a28..a4efe16 100644
+--- a/glance/api/v1/images.py
++++ b/glance/api/v1/images.py
+@@ -55,9 +55,9 @@ CONF = cfg.CONF
+ LOG = logging.getLogger(__name__)
+ SUPPORTED_PARAMS = glance.api.v1.SUPPORTED_PARAMS
+ SUPPORTED_FILTERS = glance.api.v1.SUPPORTED_FILTERS
+-CONTAINER_FORMATS = ['ami', 'ari', 'aki', 'bare', 'ovf']
++CONTAINER_FORMATS = ['ami', 'ari', 'aki', 'bare', 'ovf', 'uar']
+ DISK_FORMATS = ['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2', 'vdi',
+-                'iso']
++                'iso', 'zfs']
+ 
+ 
+ def validate_image_meta(req, values):
+diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py
+index 3121b25..32090c9 100644
+--- a/glance/api/v2/images.py
++++ b/glance/api/v2/images.py
+@@ -520,14 +520,14 @@ _BASE_PROPERTIES = {
+         'type': 'string',
+         'description': _(''),
+         'type': 'string',
+-        'enum': ['bare', 'ovf', 'ami', 'aki', 'ari'],
++        'enum': ['bare', 'ovf', 'ami', 'aki', 'ari', 'uar'],
+     },
+     'disk_format': {
+         'type': 'string',
+         'description': _(''),
+         'type': 'string',
+         'enum': ['raw', 'vhd', 'vmdk', 'vdi', 'iso', 'qcow2',
+-                 'aki', 'ari', 'ami'],
++                 'aki', 'ari', 'ami', 'zfs'],
+     },
+     'created_at': {
+         'type': 'string',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/glance/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,9 @@
+library/python-2/eventlet-26
+library/python-2/m2crypto-26
+library/python-2/sqlalchemy-migrate-26
+library/python/eventlet-26
+library/python/m2crypto-26
+library/python/oslo.config-26
+library/python/sqlalchemy-migrate-26
+runtime/python-26
+system/core-os
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,68 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		horizon
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:fb24b6d8b38d199a8ab0174335df63c7612e74a02e4f0883ee8a3181ce07b4ab
+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)
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+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)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/files/branding/css/solaris.css	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,5957 @@
+/*!
+ * Bootstrap v2.0.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+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%;
+  -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; }
+
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  line-height: 18px;
+  color: #333333;
+  background-color: #ffffff;
+}
+a {
+  color: #dd4814;
+  text-decoration: none;
+}
+a:hover {
+  color: #dd4814;
+  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;
+}
+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;
+}
+.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: 18px;
+}
+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;
+}
+.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;
+}
+dl {
+  margin-bottom: 18px;
+}
+dt,
+dd {
+  line-height: 18px;
+}
+dt {
+  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;
+  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;
+  padding-left: 0;
+  padding-right: 15px;
+  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;
+}
+code {
+  padding: 3px 4px;
+  color: #d14;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+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;
+  word-break: break-all;
+  word-wrap: break-word;
+}
+pre.prettyprint {
+  margin-bottom: 18px;
+}
+pre code {
+  padding: 0;
+  color: inherit;
+  background-color: transparent;
+  border: 0;
+}
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+form {
+  margin: 0 0 18px;
+}
+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 {
+  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 {
+  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 {
+  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: 14px;
+  height: 14px;
+  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 {
+  *margin-bottom: -3px;
+}
+.dropdown-toggle:active,
+.open .dropdown-toggle {
+  outline: 0;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  text-indent: -99999px;
+  *text-indent: 0;
+  vertical-align: top;
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid #000000;
+  opacity: 0.3;
+  filter: alpha(opacity=30);
+  content: "\2193";
+}
+.dropdown .caret {
+  margin-top: 8px;
+  margin-left: 2px;
+}
+.dropdown:hover .caret,
+.open.dropdown .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.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;
+  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;*/
+  -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;
+}
+.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 {
+  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;
+
+}
+
+.btn-primary {
+    color: #fff;
+    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;
+  /*background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: linear-gradient(top, #ee5f5b, #bd362f);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
+  border-color: #bd362f #bd362f #802420;
+  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 #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;
+}
+.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-tabs > li,
+.nav-pills > li {
+  float: left;
+}
+.nav-tabs > li > a,
+.nav-pills > li > a {
+  line-height: 33px;
+  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;
+}
+.nav-pills > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.nav-pills .active > a,
+.nav-pills .active > a:hover {
+  color: #ffffff;
+  background-color: #0088cc;
+}
+.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: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.nav-tabs .dropdown-toggle .caret,
+.nav-pills .dropdown-toggle .caret {
+  border-top-color: #0088cc;
+  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-color: #333333;
+}
+.nav > .dropdown.active > a:hover {
+  color: #000000;
+  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;
+  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 {
+  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 {
+  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: #dd4814;
+}
+ul {
+  list-style: none;
+  margin: 0;
+}
+dt {
+  font-weight: bold;
+}
+#main_content {
+  padding-left: 247px;   
+  padding-right: 20px;
+}
+.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;
+}
+.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;
+  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: 347px;
+  margin-right: 15px;
+}
+.left form {
+  margin: 0;
+}
+.right {
+  float: left;
+  width: 308px;
+}
+
+.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 #FFFFFF;
+	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;
+}
+.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 */
+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 {
+  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 {
+  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;
+}
+.project_membership .fake_table_header {
+  background-color: #F1F1F1;
+  width: 306px;
+  height: 38px;
+  padding-top: 15px;
+  border: 1px solid #DDD;
+  border-bottom: none;
+}
+.project_membership .fake_table {
+  margin-left: 5px;
+  width: 315px;
+}
+.project_membership .fake_table ul.no_results {
+  width: 298px;
+}
+.project_membership .fake_table ul.btn-group:hover {
+  background-color: #DDD;
+}
+.project_membership .left .fake_table_header {
+  width: 318px;
+}
+.project_membership .right .fake_table_header {
+  width: 318px;
+  margin-left: -15px;
+}
+.project_membership .right .fake_table ul.no_results {
+  margin-left: -20px;
+}
+.project_membership .member {
+  padding: 10px;
+  text-align: left;
+}
+.project_membership .project_members {
+  margin-left: -20px;
+}
+.project_membership .project_members ul.btn-group,
+.project_membership .available_users ul.btn-group {
+  width: 308px;
+}
+.project_membership .dark_stripe {
+  background-color: #F9F9F9;
+}
+.project_membership .light_stripe {
+  background-color: white;
+}
+.project_membership .last_stripe {
+  border-bottom: 1px solid #DDD;
+}
+.project_membership .filter {
+  width: 120px;
+  margin: -5px 13px 15px 0px;
+  float: right;
+}
+.project_membership .no_results {
+  border: 1px solid #DDD;
+  padding: 10px;
+  color: #08C;
+}
+.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;
+}
+.project_membership .role_dropdown li:hover {
+  background-color: #EBECED;
+}
+.project_membership .nav .role_options {
+  float: right;
+  padding-right: 5px;
+}
+/* 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-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;
+  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;
+  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 {
+  text-align: right;
+  margin: 10px 0px 15px 10px;
+}
+.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;
+  position: relative;
+  top: 107px;
+}
+
+#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;
+}
+
+.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;
+}
+
Binary file components/openstack/horizon/files/branding/img/OpenStack_Dashboard_txt.png has changed
Binary file components/openstack/horizon/files/branding/img/Openstack_banner.png has changed
Binary file components/openstack/horizon/files/branding/img/OracleSolaris_Logo.png has changed
Binary file components/openstack/horizon/files/branding/img/OracleSolaris_login_banner.png has changed
Binary file components/openstack/horizon/files/branding/img/Oracle_Logo.png has changed
Binary file components/openstack/horizon/files/branding/img/content_tab_bkgd_selected.png has changed
Binary file components/openstack/horizon/files/branding/img/dots.png has changed
Binary file components/openstack/horizon/files/branding/img/favicon-solaris.ico has changed
Binary file components/openstack/horizon/files/branding/img/header_shadow.png has changed
Binary file components/openstack/horizon/files/branding/img/tab_bkgd_deselected.png has changed
Binary file components/openstack/horizon/files/branding/img/tab_bkgd_selected.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/files/branding/theme/_stylesheets.html	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +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"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/files/local_settings.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,214 @@
+import os
+
+from django.utils.translation import ugettext_lazy as _
+
+from openstack_dashboard import exceptions
+
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+
+# Set SSL proxy settings:
+# For Django 1.4+ pass this header from the proxy after terminating the SSL,
+# and don't forget to strip it from the client's request.
+# For more information see:
+# https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header
+SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
+
+# If Horizon is being served through SSL, then uncomment the following two
+# settings to better secure the cookies from security exploits
+CSRF_COOKIE_SECURE = True
+SESSION_COOKIE_SECURE = True
+
+# Default configuration uses /horizon as the application root.  Configure auth
+# redirects here accordingly.
+LOGIN_URL = '/horizon/auth/login/'
+LOGOUT_URL = '/horizon/auth/logout/'
+LOGIN_REDIRECT_URL = '/horizon'
+
+# Set STATIC_ROOT directly.
+STATIC_ROOT = "/var/lib/openstack_dashboard/static"
+
+# Enable Solaris theme
+TEMPLATE_DIRS = ('/var/lib/openstack_dashboard/static/solaris/theme', )
+
+# Default OpenStack Dashboard configuration.
+HORIZON_CONFIG = {
+    'dashboards': ('project', 'admin', 'settings',),
+    'default_dashboard': 'project',
+    'user_home': 'openstack_dashboard.views.get_user_home',
+    'ajax_queue_limit': 10,
+    'auto_fade_alerts': {
+        'delay': 3000,
+        'fade_duration': 1500,
+        'types': ['alert-success', 'alert-info']
+    },
+    'help_url': "http://docs.openstack.org",
+    'exceptions': {'recoverable': exceptions.RECOVERABLE,
+                   'not_found': exceptions.NOT_FOUND,
+                   'unauthorized': exceptions.UNAUTHORIZED},
+}
+
+# Specify a regular expression to validate user passwords.
+# HORIZON_CONFIG["password_validator"] = {
+#     "regex": '.*',
+#     "help_text": _("Your password does not meet the requirements.")
+# }
+
+# Disable simplified floating IP address management for deployments with
+# 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.
+# HORIZON_CONFIG["password_autocomplete"] = "off"
+
+LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
+
+# Set custom secret key:
+# You can either set it to a specific value or you can let horizion 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
+# multiple dashboard instances are distributed on different machines (usually
+# behind a load-balancer). Either you have to make sure that a session gets all
+# requests routed to the same dashboard instance or you set the same SECRET_KEY
+# for all of them.
+from horizon.utils import secret_key
+SECRET_KEY = secret_key.generate_key()
+
+# 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',
+#    }
+#}
+
+CACHES = {
+    'default': {
+        'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache'
+    }
+}
+
+# Send email to the console by default
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+# Or send them to /dev/null
+#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
+
+# Configure these for your outgoing email host
+# EMAIL_HOST = 'smtp.my-company.com'
+# EMAIL_PORT = 25
+# EMAIL_HOST_USER = 'djangomail'
+# EMAIL_HOST_PASSWORD = 'top-secret!'
+
+# For multiple regions uncomment this configuration, and add (endpoint, title).
+# AVAILABLE_REGIONS = [
+#     ('http://cluster1.example.com:5000/v2.0', 'cluster1'),
+#     ('http://cluster2.example.com:5000/v2.0', 'cluster2'),
+# ]
+
+OPENSTACK_HOST = "127.0.0.1"
+OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
+OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
+
+# Disable SSL certificate checks (useful for self-signed certificates):
+# OPENSTACK_SSL_NO_VERIFY = True
+
+# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
+# capabilities of the auth backend for Keystone.
+# If Keystone has been configured to use LDAP as the auth backend then set
+# can_edit_user to False and name to 'ldap'.
+#
+# TODO(tres): Remove these once Keystone has an API to identify auth backend.
+OPENSTACK_KEYSTONE_BACKEND = {
+    'name': 'native',
+    'can_edit_user': True,
+    'can_edit_project': True
+}
+
+OPENSTACK_HYPERVISOR_FEATURES = {
+    'can_set_mount_point': True,
+
+    # NOTE: as of Grizzly this is not yet supported in Nova so enabling this
+    # setting will not do anything useful
+    'can_encrypt_volumes': False
+}
+
+# The OPENSTACK_QUANTUM_NETWORK settings can be used to enable optional
+# services provided by quantum.  Currently only the load balancer service
+# is available.
+OPENSTACK_QUANTUM_NETWORK = {
+    'enable_lb': False
+}
+
+# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints
+# in the Keystone service catalog. Use this setting when Horizon is running
+# external to the OpenStack environment. The default is 'internalURL'.
+#OPENSTACK_ENDPOINT_TYPE = "publicURL"
+
+# The number of objects (Swift containers/objects or images) to display
+# on a single page before providing a paging element (a "more" link)
+# to paginate results.
+API_RESULT_LIMIT = 1000
+API_RESULT_PAGE_SIZE = 20
+
+# The timezone of the server. This should correspond with the timezone
+# of your entire OpenStack installation, and hopefully be in UTC.
+TIME_ZONE = "UTC"
+
+LOGGING = {
+    'version': 1,
+    # When set to True this will disable all logging except
+    # for loggers specified in this configuration dictionary. Note that
+    # if nothing is specified here and disable_existing_loggers is True,
+    # django.db.backends will still log unless it is disabled explicitly.
+    'disable_existing_loggers': False,
+    'handlers': {
+        'null': {
+            'level': 'DEBUG',
+            'class': 'django.utils.log.NullHandler',
+        },
+        'console': {
+            # Set the level to "DEBUG" for verbose output logging.
+            'level': 'INFO',
+            'class': 'logging.StreamHandler',
+        },
+    },
+    'loggers': {
+        # Logging from django.db.backends is VERY verbose, send to null
+        # by default.
+        'django.db.backends': {
+            'handlers': ['null'],
+            'propagate': False,
+        },
+        'requests': {
+            'handlers': ['null'],
+            'propagate': False,
+        },
+        'horizon': {
+            'handlers': ['console'],
+            'propagate': False,
+        },
+        'openstack_dashboard': {
+            'handlers': ['console'],
+            'propagate': False,
+        },
+        'novaclient': {
+            'handlers': ['console'],
+            'propagate': False,
+        },
+        'keystoneclient': {
+            'handlers': ['console'],
+            'propagate': False,
+        },
+        'glanceclient': {
+            'handlers': ['console'],
+            'propagate': False,
+        },
+        'nose.plugins.manager': {
+            'handlers': ['console'],
+            'propagate': False,
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/files/openstack-dashboard.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,49 @@
+<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>
+
+#
+# Enable Solaris Cryptographic Framework
+#
+SSLCryptoDevice pkcs11
+
+#<VirtualHost *:80>
+#    RedirectPermanent /horizon https://openstack.example.com/horizon
+#</VirtualHost>
+
+Listen 443
+
+<VirtualHost *:443>
+    #ServerName openstack.example.com
+
+    SSLEngine On
+    #
+    # For an overview on SSL with Apache see:
+    #    http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html
+    # For examples on how to configure certificates and keys see:
+    #    http://www.akadia.com/services/ssh_test_certificate.html
+    #
+    #SSLCertificateFile /path/to/Server_PEM-encoded_X.509_Certificate_file
+    #SSLCACertificateFile /path/to/Concatenated_PEM-encoded_CA_Certificates
+    #SSLCertificateKeyFile /path/to/Server_PEM-encoded_Private_Key_file
+
+    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 /var/lib/openstack_dashboard/static/
+
+    <Directory /usr/lib/python2.6/vendor-packages/openstack_dashboard/wsgi>
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+    <Directory /var/lib/openstack_dashboard/static>
+        Order allow,deny
+        Allow from all
+    </Directory>
+</VirtualHost>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/horizon.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,445 @@
+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.
+
+--------------------------------------------------------------------------
+
+Copyright (c) 2011 Yahoo! Inc. All rights reserved.
+The copyrights embodied in the content of this file are licensed
+by Yahoo! Inc. under the BSD (revised) open source license.
+
+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 THE COPYRIGHT HOLDER 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.
+
+--------------------------------------------------------------------------
+
+Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
+http://sass-lang.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.
+
+--------------------------------------------------------------------------
+
+Copyright 2011, Klaus Hartl
+Dual licensed under the MIT or GPL Version 2 licenses.
+http://www.opensource.org/licenses/mit-license.php
+http://www.opensource.org/licenses/GPL-2.0
+
+Oracle chooses 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 
+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.
+
+
+--------------------------------------------------------------------------
+
+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.
+
+--------------------------------------------------------------------------
+
+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
+
+Oracle chooses 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 
+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.
+
+--------------------------------------------------------------------------
+
+Copyright (c) 2012 John Resig, Jörn Zaefferer
+Dual licensed under the MIT (MIT-LICENSE.txt)
+or GPL (GPL-LICENSE.txt) licenses.
+
+Oracle chooses 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 
+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.
+
+--------------------------------------------------------------------------
+
+Copyright (c) 2012 John Resig, Jörn Zaefferer
+Dual licensed under the MIT (MIT-LICENSE.txt)
+or GPL (GPL-LICENSE.txt) licenses.
+
+Oracle chooses 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 
+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.
+
+--------------------------------------------------------------------------
+
+* jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+* http://flesler.blogspot.com Licensed under BSD
+
+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 THE COPYRIGHT HOLDER 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.
+
+--------------------------------------------------------------------------
+
+Underscore is freely distributable under the MIT license.
+Portions of Underscore are inspired or borrowed from Prototype,
+Oliver Steele's Functional, and John Resig's Micro-Templating.
+For all details and documentation:
+http://documentcloud.github.com/underscore
+
+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/horizon.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,826 @@
+#
+# 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, 2014, 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"
+set name=pkg.description \
+    value="OpenStack Horizon is the canonical implementation of Openstack's Dashboard, which provides a web based user interface to OpenStack services including Nova, Swift, Keystone, etc."
+set name=pkg.human-version value="Grizzly $(COMPONENT_VERSION)"
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/058
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+file files/openstack-dashboard.conf \
+    path=etc/apache2/2.2/conf.d/openstack-dashboard.conf \
+    refresh_fmri=svc:/network/http:apache22
+file files/local_settings.py path=etc/openstack_dashboard/local_settings.py \
+    mode=0644 overlay=allow pkg.tmp.autopyc=false preserve=true
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/browsers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/browsers/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/browsers/breadcrumb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/browsers/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/dashboard.py.tmpl
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/static/dash_name/css/dash_name.css
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/static/dash_name/js/dash_name.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/dash_template/templates/dash_name/base.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/default.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/panel.py.tmpl
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/templates/panel_name/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/conf/panel_template/tests.py.tmpl
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/fields.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/forms/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/loaders.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/bg_BG/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/bg_BG/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ca/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/cs/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/en_GB/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/es/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/es/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fi_FI/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fr/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/fr/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/hu/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/it/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/it/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ja/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ja/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ka_GE/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ko_KR/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ko_KR/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/nl_NL/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/nl_NL/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pl/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt_BR/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/pt_BR/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ru/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/ru/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/vi_VN/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_CN/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_CN/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_HK/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_TW/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/locale/zh_TW/LC_MESSAGES/djangojs.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/management/__init__.py
+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
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/management/commands/startpanel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/messages.py
+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.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/bootstrap/js/bootstrap.min.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.communication.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.conf.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.cookies.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.forms.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.messages.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.modals.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.networktopology.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.projects.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.quota.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.tables.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.tabs.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.templates.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.users.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/js/horizon.utils.js
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/static/horizon/lib/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/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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/tabs/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/_header.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/_stylesheets.html
+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/_conf.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
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/_subnav_list.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_alert_message.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_loading.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_modal.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_project_user.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_script_loader.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/_table_row.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/client_side/template.html
+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_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_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/_form_fields.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/_page_header.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_progress_bar.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_quota_summary.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_region_selector.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_resource_browser.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_sidebar.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_sidebar_module.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_tab_group.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_usage_summary.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow_step.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/common/_workflow_step_update_members.html
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/templates/horizon/qunit.html
+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/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/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/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/validators.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/workflows/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/horizon/workflows/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/cinder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/glance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/keystone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/lbaas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/network.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/nova.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/quantum.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/api/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/context_processors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/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/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/_edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_edit.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/flavors/templates/flavors/extras/_index.html
+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/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/images/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/images/panel.py
+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/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/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/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/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/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/index.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/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/forms.py
+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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/ports/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/subnets/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/subnets/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/subnets/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/subnets/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/subnets/workflows.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/ports/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/subnets/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/templates/networks/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/networks/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/templates/overview/usage.csv
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/overview/templates/overview/usage.html
+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/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_add_user.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_create_user.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_quotas.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/_update_members.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/add_user.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/create_user.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/quotas.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/usage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/templates/projects/users.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/projects/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/admin/routers/ports/views.py
+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/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/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/templates/volumes/index.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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/api_access/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/api_access/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/api_access/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/api_access/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/floating_ips/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/security_groups/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/api_access/ec2rc.sh.template
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/api_access/openrc.sh.template
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/_allocate.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/allocate.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/floating_ips/associate.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/_import.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/download.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/import.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/_add_rule.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/add_rule.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/security_groups/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/access_and_security/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/browsers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/_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/_upload.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/copy.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/containers/templates/containers/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/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/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py
+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/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_console.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_log.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_instance_ips.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_customize_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_details_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_network_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_launch_volumes_help.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/_update_networks.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/launch.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/templates/instances/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/instances/workflows/update_instance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_member_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_members_tab.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_monitor_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_monitors_tab.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_pool_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_pools_tab.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/_vip_details.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addmember.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addmonitor.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addpool.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/addvip.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/templates/loadbalancers/details_tabs.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/loadbalancers/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/templates/network_topology/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/network_topology/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/ports/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/subnets/__init__.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_network_ips.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/_port_ips.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/_update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/ports/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/_detail_overview.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/create.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/detail.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/index.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/subnets/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/templates/networks/update.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/networks/workflows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/templates/overview/usage.csv
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/templates/overview/usage.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/overview/tests.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/tabs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/ports/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/tables.py
+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/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/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/tests.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/urls.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/routers/views.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/project/volumes/panel.py
+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/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/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/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/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/settings/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/dashboard.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/forms.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/panel.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/templates/user/_settings.html
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/dashboards/settings/user/templates/user/settings.html
+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/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/__init__.py
+link \
+    path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/local/local_settings.py \
+    target=../../../../../../etc/openstack_dashboard/local_settings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/bg_BG/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ca/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/cs/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/en/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/en_GB/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/es/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/fi_FI/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/fr/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/hu/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/it/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ja/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ka_GE/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ko_KR/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/nl_NL/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pl/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pt/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/pt_BR/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/ru/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/vi_VN/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/zh_CN/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.mo
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/setup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/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/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/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/action_required.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/favicon.ico
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/loading.gif
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/logo-splash.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/logo.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/right_droparrow.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/router.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/search.png
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/static/dashboard/img/server.png
+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/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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/tables.py
+file path=usr/lib/python$(PYVER)/vendor-packages/openstack_dashboard/usage/views.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
+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.tpno=16292 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.tpno=16775 com.oracle.info.version=1.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 dependency on cinderclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/cinderclient-26
+
+# force dependency on django; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/django-26
+
+# force dependency on django_compressor; one of the applications defined in
+# settings.py
+depend type=require fmri=library/python/django_compressor-26
+
+# force dependency on django_openstack_auth; pkgdepend work is needed to flush
+# this out
+depend type=require fmri=library/python/django_openstack_auth-26
+
+# force dependency on glanceclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/glanceclient-26
+
+# force dependency on keystoneclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/keystoneclient-26
+
+# force dependency on lesscpy; one of the filters defined in settings.py
+depend type=require fmri=library/python/lesscpy-26
+
+# force dependency on lockfile; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/lockfile-26
+
+# force dependency on netaddr; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/netaddr-26
+
+# force dependency on novaclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/novaclient-26
+
+# force dependency on pytz; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/pytz-26
+
+# force dependency on quantumclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/quantumclient-26
+
+# force dependency on setuptools; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/setuptools-26
+
+# force dependency on swiftclient; pkgdepend work is needed to flush this out
+depend type=require fmri=library/python/swiftclient-26
+
+# force a dependency on the Apache web server
+depend type=require fmri=web/server/apache-22
+
+# force dependency on the apache-wsgi module
+depend type=require fmri=web/server/apache-22/module/apache-wsgi-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/01-remove-nodejs.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,18 @@
+Upstream Change I89ed102f: Drop NodeJS dependency in favor of
+pure-python lesscpy https://review.openstack.org/#/c/37473/
+
+Fixed in Havana 2013.2
+
+--- horizon-2013.1.4/openstack_dashboard/settings.py.orig  2013-12-03 09:39:07.042100957 -0700
++++ horizon-2013.1.4/openstack_dashboard/settings.py 2013-12-03 09:39:34.835630769 -0700
+@@ -112,9 +112,8 @@
+     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+ )
+
+-less_binary = os.path.join(BIN_DIR, 'less', 'lessc')
+ COMPRESS_PRECOMPILERS = (
+-    ('text/less', (less_binary + ' {infile} {outfile}')),
++    ('text/less', ('lesscpy {infile}')),
+ )
+
+ COMPRESS_CSS_FILTERS = (
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/02-update-flavor-form-length.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,40 @@
+In-house patch to increase the size of the form field for Flavor Names, Flavor
+Keys, and Flavor Values from to 50 characters.  Patch has not yet been
+submitted upstream
+
+--- horizon-2013.1.4/openstack_dashboard/dashboards/admin/flavors/forms.py.orig   2014-03-04 14:05:10.040319808 -0700
++++ horizon-2013.1.4/openstack_dashboard/dashboards/admin/flavors/forms.py    2014-03-04 14:05:14.940287716 -0700
+@@ -34,7 +34,7 @@
+
+ class CreateFlavor(forms.SelfHandlingForm):
+     name = forms.RegexField(label=_("Name"),
+-                            max_length=25,
++                            max_length=50,
+                             regex=r'^[\w\.\- ]+$',
+                             error_messages={'invalid': _('Name may only '
+                                 'contain letters, numbers, underscores, '
+
+--- horizon-2013.1.4/openstack_dashboard/dashboards/admin/flavors/extras/forms.py.orig   2014-03-04 14:06:58.958564688 -0700
++++ horizon-2013.1.4/openstack_dashboard/dashboards/admin/flavors/extras/forms.py    2014-03-04 14:07:08.193582887 -0700
+@@ -31,8 +31,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="50", label=_("Key"))
++    value = forms.CharField(max_length="50", label=_("Value"))
+     flavor_id = forms.CharField(widget=forms.widgets.HiddenInput)
+
+     def handle(self, request, data):
+@@ -49,8 +49,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="50", label=_("Key"))
++    value = forms.CharField(max_length="50", label=_("Value"))
+     flavor_id = forms.CharField(widget=forms.widgets.HiddenInput)
+
+     def handle(self, request, data):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/patches/03-CVE-2013-6858.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,73 @@
+Upstream patch fixed in Havana 2013.2.1
+
+commit b14debc73132d1253220192e110f00f62ddb8bbc
+Author: Rob Raymond <[email protected]>
+Date:   Mon Nov 4 12:12:40 2013 -0700
+
+    Fix bug by escaping strings from Nova before displaying them
+    
+    Fixes bug #1247675
+    
+    (cherry-picked from commit b8ff480)
+    Change-Id: I3637faafec1e1fba081533ee020f4ee218fea101
+
+diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py
+index 2311e5c..17a4fb5 100644
+--- a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py
++++ b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py
+@@ -17,6 +17,7 @@
+ import logging
+ 
+ from django.core.urlresolvers import reverse
++from django.utils import html
+ from django.utils import safestring
+ from django.utils.http import urlencode
+ from django.utils.translation import ugettext_lazy as _
+@@ -68,6 +69,7 @@ class SnapshotVolumeNameColumn(tables.Column):
+         request = self.table.request
+         volume_name = api.cinder.volume_get(request,
+                                             snapshot.volume_id).display_name
++        volume_name = html.escape(volume_name)
+         return safestring.mark_safe(volume_name)
+ 
+     def get_link_url(self, snapshot):
+diff --git a/openstack_dashboard/dashboards/project/volumes/tables.py b/openstack_dashboard/dashboards/project/volumes/tables.py
+index b14145b..e5426c1 100644
+--- a/openstack_dashboard/dashboards/project/volumes/tables.py
++++ b/openstack_dashboard/dashboards/project/volumes/tables.py
+@@ -19,7 +19,7 @@ import logging
+ from django.core.urlresolvers import reverse, NoReverseMatch
+ from django.template.defaultfilters import title
+ from django.utils import safestring
+-from django.utils.html import strip_tags
++from django.utils import html
+ from django.utils.translation import ugettext_lazy as _
+ 
+ from horizon import exceptions
+@@ -111,7 +111,7 @@ def get_attachment_name(request, attachment):
+                                          "attachment information."))
+     try:
+         url = reverse("horizon:project:instances:detail", args=(server_id,))
+-        instance = '<a href="%s">%s</a>' % (url, name)
++        instance = '<a href="%s">%s</a>' % (url, html.escape(name))
+     except NoReverseMatch:
+         instance = name
+     return instance
+@@ -132,7 +132,7 @@ class AttachmentColumn(tables.Column):
+             # without the server name...
+             instance = get_attachment_name(request, attachment)
+             vals = {"instance": instance,
+-                    "dev": attachment["device"]}
++                    "dev": html.escape(attachment["device"])}
+             attachments.append(link % vals)
+         return safestring.mark_safe(", ".join(attachments))
+ 
+@@ -225,7 +225,7 @@ class AttachmentsTable(tables.DataTable):
+     def get_object_display(self, attachment):
+         instance_name = get_attachment_name(self.request, attachment)
+         vals = {"dev": attachment['device'],
+-                "instance_name": strip_tags(instance_name)}
++                "instance_name": html.escape(instance_name)}
+         return _("%(dev)s on instance %(instance_name)s") % vals
+ 
+     def get_object_by_id(self, obj_id):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1 @@
+runtime/python-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/horizon/solaris.css.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,215 @@
+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.
+
+Copyright (c) 2009 Jacob Kaplan-Moss - initial codebase (< v2.1)
+Copyright (c) 2011 Rackspace - OpenStack extensions (>= v2.1)
+All rights reserved.
+
+		                 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/keystone/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,60 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		keystone
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:3673f5d7c1c19fca7529934308e2d9a6efa55bf7d100d20de1aa85e431d259b2
+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) 
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,84 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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
+import os
+import sys
+
+import smf_include
+
+from subprocess import CalledProcessError, check_call, PIPE, Popen
+
+from sqlalchemy import create_engine
+
+
+def db_sync():
+    """ function to create the database schema
+    """
+
+    cmd = ["/usr/bin/keystone-manage", "db_sync"]
+    try:
+        check_call(cmd)
+    except CalledProcessError as err:
+        print "Unable to create database for Keystone:  %s" % err
+        sys.exit(smf_include.SMF_EXIT_ERR_CONFIG)
+
+
+def start():
+    # read the options from the config file
+    parser = ConfigParser.ConfigParser()
+    parser.read("/etc/keystone/keystone.conf")
+
+    # get the database type
+    db_engine = create_engine(parser.get("sql", "connection"))
+    db_type = db_engine.name
+
+    if db_type == "sqlite":
+        # look to see if file exists or if it's zero length
+        abspath = os.path.abspath(db_engine.url.database)
+        if not os.path.exists(abspath) or os.path.getsize(abspath) == 0:
+            db_sync()
+
+    elif db_type == "mysql":
+        mysql_svc = "svc:/application/database/mysql:version_55"
+        cmd = ["/usr/bin/svcs", "-H", "-o", "state", mysql_svc]
+
+        try:
+            p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+            output, error = p.communicate()
+        except CalledProcessError:
+            print "mysql service not found.  Is it installed?"
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+        if output.strip() != "online":
+            # attempt to start mysql
+            cmd = ["/usr/sbin/svcadm", "enable", "-rs", mysql_svc]
+
+            try:
+                check_call(cmd)
+            except CalledProcessError as err:
+                print "starting mysql service failed:  %s" % err
+                return smf_include.SMF_EXIT_ERR_CONFIG
+
+        # not sure how to check if the database is valid, so just create
+        # the database every time for now
+        db_sync()
+
+    smf_include.smf_subprocess("/usr/lib/keystone/keystone-all")
+
+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/keystone/files/keystone.auth_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+solaris.smf.manage.keystone:RO::Manage OpenStack Keystone Service States::
+solaris.smf.value.keystone:RO::Change Values of OpenStack Keystone Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,302 @@
+[DEFAULT]
+# A "shared secret" between keystone and other openstack services
+# admin_token = ADMIN
+
+# The IP address of the network interface to listen on
+# bind_host = 0.0.0.0
+
+# The port number which the public service listens on
+# public_port = 5000
+
+# The port number which the public admin listens on
+# admin_port = 35357
+
+# 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)d/
+# admin_endpoint = http://localhost:%(admin_port)d/
+
+# The port number which the OpenStack Compute service listens on
+# compute_port = 8774
+
+# Path to your policy definition containing identity actions
+# policy_file = policy.json
+
+# 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
+
+# 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_
+
+# === Logging Options ===
+# Print debugging output
+# (includes plaintext request logging, potentially including passwords)
+# debug = False
+
+# Print more verbose output
+# verbose = False
+
+# Name of log file to output to. If not set, logging will go to stdout.
+# log_file = keystone.log
+
+# The directory to keep log files in (will be prepended to --logfile)
+# log_dir = /var/log/keystone
+
+# Use syslog for logging.
+# use_syslog = False
+
+# syslog facility to receive log lines
+# syslog_log_facility = LOG_USER
+
+# 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
+
+# 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
+
+# Format string for %(asctime)s in log records.
+# log_date_format = %Y-%m-%d %H:%M:%S
+
+# 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
+
+[sql]
+# The SQLAlchemy connection string used to connect to the database
+# connection = sqlite:////var/lib/keystone/keystone.sqlite
+
+# the timeout before idle sql connections are reaped
+# idle_timeout = 200
+
+[identity]
+# driver = keystone.identity.backends.sql.Identity
+
+# 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
+
+[trust]
+# driver = keystone.trust.backends.sql.Trust
+
+# delegation and impersonation features can be optionally disabled
+# enabled = True
+
+[catalog]
+# dynamic, sql-based backend (supports API/CLI-based management commands)
+# driver = keystone.catalog.backends.sql.Catalog
+
+# static, file-based backend (does *NOT* support any management commands)
+# driver = keystone.catalog.backends.templated.TemplatedCatalog
+
+# template_file = default_catalog.templates
+
+[token]
+# driver = keystone.token.backends.kvs.Token
+
+# Amount of time a token should remain valid (in seconds)
+# expiration = 86400
+
+[policy]
+# driver = keystone.policy.backends.sql.Policy
+
+[ec2]
+# driver = keystone.contrib.ec2.backends.kvs.Ec2
+
+[ssl]
+#enable = True
+#certfile = /etc/keystone/ssl/certs/keystone.pem
+#keyfile = /etc/keystone/ssl/private/keystonekey.pem
+#ca_certs = /etc/keystone/ssl/certs/ca.pem
+#cert_required = True
+
+[signing]
+#token_format = PKI
+#certfile = /etc/keystone/ssl/certs/signing_cert.pem
+#keyfile = /etc/keystone/ssl/private/signing_key.pem
+#ca_certs = /etc/keystone/ssl/certs/ca.pem
+#key_size = 1024
+#valid_days = 3650
+#ca_password = None
+
+[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
+
+# 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
+
+# user_tree_dn = ou=Users,dc=example,dc=com
+# user_filter =
+# user_objectclass = inetOrgPerson
+# user_domain_id_attribute = businessCategory
+# 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 = tenant_id,tenants
+# user_allow_create = True
+# user_allow_update = True
+# user_allow_delete = True
+# user_enabled_emulation = False
+# user_enabled_emulation_dn =
+
+# tenant_tree_dn = ou=Groups,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 =
+
+# 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
+
+# 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
+
+[auth]
+methods = password,token
+password = keystone.auth.plugins.password.Password
+token = keystone.auth.plugins.token.Token
+
+[filter:debug]
+paste.filter_factory = keystone.common.wsgi:Debug.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: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:s3_extension]
+paste.filter_factory = keystone.contrib.s3:S3Extension.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]
+pipeline = access_log sizelimit stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug ec2_extension user_crud_extension public_service
+
+[pipeline:admin_api]
+pipeline = access_log sizelimit stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug stats_reporting ec2_extension s3_extension crud_extension admin_service
+
+[pipeline:api_v3]
+pipeline = access_log sizelimit stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug stats_reporting ec2_extension s3_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 = access_log sizelimit stats_monitoring url_normalize xml_body public_version_service
+
+[pipeline:admin_version_api]
+pipeline = access_log sizelimit stats_monitoring url_normalize xml_body 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.exec_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+OpenStack Identity Management:solaris:cmd:RO::/usr/bin/keystone-manage:\
+uid=keystone;gid=keystone
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone.prof_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,10 @@
+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,\
+solaris.smf.manage.keystone,\
+solaris.smf.value.keystone
+
+OpenStack Management:RO:::profiles=OpenStack Identity Management
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/files/keystone.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,66 @@
+<?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.
+
+ 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">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/keystone %m">
+      <method_context>
+        <method_credential user='keystone' group='keystone' />
+      </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.keystone' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.keystone' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Keystone Identity Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          keystone starts both the service and administrative APIs in a single
+          process to provide catalog, authorization, and authentication
+          services for OpenStack.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/keystone.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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/openstack/keystone/keystone.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,254 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/keystone@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Keystone"
+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="Grizzly $(COMPONENT_VERSION)"
+set name=com.oracle.info.description \
+    value="Keystone, the OpenStack identity service"
+set name=com.oracle.info.tpno value=16293
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/048
+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=true
+file files/keystone.conf path=etc/keystone/keystone.conf owner=keystone \
+    group=keystone mode=0644 overlay=allow preserve=true
+file etc/logging.conf.sample path=etc/keystone/logging.conf owner=keystone \
+    group=keystone mode=0644 overlay=allow preserve=true
+file etc/policy.json path=etc/keystone/policy.json owner=keystone \
+    group=keystone mode=0644 overlay=allow preserve=true
+file files/keystone.xml path=lib/svc/manifest/application/openstack/keystone.xml
+file files/keystone path=lib/svc/method/keystone
+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 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/not-zip-safe
+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
+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/password.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/auth/token_factory.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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/catalog/backends/templated.py
+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/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/bufferedhttp.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/kvs.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/logging.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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/legacy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/migrate_repo/README
+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/__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/nova.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/common/sql/util.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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/access/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/access/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/admin_crud/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/admin_crud/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/ec2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/ec2/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/ec2/backends/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/ec2/backends/sql.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/ec2/core.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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/stats/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/user_crud/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/contrib/user_crud/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/controllers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/exception.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/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/identity/backends/ldap/core.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/routers.py
+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/hu/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/keystone.pot
+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/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/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/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/openstack/common/setup.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/version.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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/policy/backends/sql.py
+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/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/test.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/backends/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/token/backends/memcache.py
+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/routers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/backends/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/backends/kvs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystone/trust/backends/sql.py
+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
+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/anyjson-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 lxml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/lxml-26
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-26
+
+# force a dependency on passlib; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/passlib-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/paste.deploy-26
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/routes-26
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-26
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/webob-26
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/01-ec2_token-import-only.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,35 @@
+Upstream patch fixed in Icehouse-1
+
+The following upstream patch was cherrypicked out of the following
+commit and is required for a subsequent patch to apply cleanly.
+
+commit 0f6f386c74754bc2e94a177d00d74bc074eba2fd
+Author: Dolph Mathews <[email protected]>
+Date:   Thu May 23 15:09:14 2013 -0500
+
+    import only modules (flake8 H302)
+    
+    Change-Id: I0fa6fc6bf9d51b60fa987a0040168f3f0ef78a4a
+
+diff --git a/keystone/middleware/ec2_token.py b/keystone/middleware/ec2_token.py
+index daac10a..7cd007c 100644
+--- a/keystone/middleware/ec2_token.py
++++ b/keystone/middleware/ec2_token.py
+@@ -22,7 +22,7 @@ Starting point for routing EC2 requests.
+ 
+ """
+ 
+-from urlparse import urlparse
++import urlparse
+ 
+ from eventlet.green import httplib
+ import webob.dec
+@@ -73,7 +73,7 @@ class EC2Token(wsgi.Middleware):
+         # Disable 'has no x member' pylint error
+         # for httplib and urlparse
+         # pylint: disable-msg=E1101
+-        o = urlparse(FLAGS.keystone_ec2_url)
++        o = urlparse.urlparse(FLAGS.keystone_ec2_url)
+         if o.scheme == 'http':
+             conn = httplib.HTTPConnection(o.netloc)
+         else:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/02-remove-nova-depend.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,70 @@
+Upstream patch fixed in Icehouse-1
+
+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):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/03-CVE-2013-6391.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,149 @@
+Upstream patch fixed in Havana 2013.2
+
+commit 8fcc18c42bde2db34e4b29236dc2e971d40f146b
+Author: Steven Hardy <[email protected]>
+Date:   Sun Oct 13 10:44:52 2013 +0100
+
+    Fix v2 token user ref with trust impersonation=True
+    
+    The v2 token controller incorrectly checks for a string instead
+    of a boolean, which results in the wrong user ID (trustee, when
+    it should be the trustor) when impersonation=True.  So fix the
+    comparison and tests, adding a test which illustrates the issue.
+    
+    This patchset also closes the gap that allows EC2 credentials to
+    be issued from trust-scoped tokens, allowing privilege escalation
+    since EC2 tokens have no concept of trust-scoping/role
+    restrictions in the Grizzly release.
+    
+    Change-Id: Ic94f30f2354c9fda20531bb598387368fde8a096
+    Closes-Bug: #1239303
+    Related-Bug: #1242597
+
+diff --git a/keystone/contrib/ec2/core.py b/keystone/contrib/ec2/core.py
+index 246587a..2ef9820 100644
+--- a/keystone/contrib/ec2/core.py
++++ b/keystone/contrib/ec2/core.py
+@@ -207,6 +207,9 @@ class Ec2Controller(controller.V2Controller):
+         if not self._is_admin(context):
+             self._assert_identity(context, user_id)
+ 
++        # Disallow trust-scoped tokens from creating credentials.
++        self._assert_not_trust_scoped(context)
++
+         self._assert_valid_user_id(context, user_id)
+         self._assert_valid_project_id(context, tenant_id)
+ 
+@@ -308,6 +311,22 @@ class Ec2Controller(controller.V2Controller):
+         except exception.Forbidden:
+             return False
+ 
++    def _assert_not_trust_scoped(self, context):
++        try:
++            token_ref = self.token_api.get_token(
++                context, token_id=context['token_id'])
++        except exception.TokenNotFound as e:
++            raise exception.Unauthorized(e)
++
++        # NOTE(morganfainberg): In Grizzly, it is not allowed to use a
++        # trust scoped token to create an EC2 credential, this is due to
++        # privilege escalation possibility (there is no way to correlate
++        # the trust to the EC2 credential and limit roles to the trust).
++        if 'trust' in token_ref:
++            raise exception.Forbidden()
++        if 'trust_id' in token_ref.get('metadata', {}):
++            raise exception.Forbidden()
++
+     def _assert_owner(self, context, user_id, credential_id):
+         """Ensure the provided user owns the credential.
+ 
+diff --git a/keystone/token/controllers.py b/keystone/token/controllers.py
+index 1ae1d4f..e42ca7d 100644
+--- a/keystone/token/controllers.py
++++ b/keystone/token/controllers.py
+@@ -201,7 +201,7 @@ class Auth(controller.V2Controller):
+                 context, trust_ref['trustee_user_id'])
+             if not trustee_user_ref['enabled']:
+                 raise exception.Forbidden()()
+-            if trust_ref['impersonation'] == 'True':
++            if trust_ref['impersonation'] is True:
+                 current_user_ref = trustor_user_ref
+             else:
+                 current_user_ref = trustee_user_ref
+diff --git a/tests/test_auth.py b/tests/test_auth.py
+index 3d4ec87..8a810a4 100644
+--- a/tests/test_auth.py
++++ b/tests/test_auth.py
+@@ -19,6 +19,7 @@ import uuid
+ 
+ from keystone import auth
+ from keystone import config
++from keystone.contrib import ec2
+ from keystone import exception
+ from keystone import identity
+ from keystone.openstack.common import timeutils
+@@ -517,7 +518,7 @@ class AuthWithTrust(AuthTest):
+         self.sample_data = {'trustor_user_id': self.trustor['id'],
+                             'trustee_user_id': self.trustee['id'],
+                             'project_id': self.tenant_bar['id'],
+-                            'impersonation': 'True',
++                            'impersonation': True,
+                             'roles': [{'id': self.role_browser['id']},
+                                       {'name': self.role_member['name']}]}
+         expires_at = timeutils.strtime(timeutils.utcnow() +
+@@ -525,7 +526,7 @@ class AuthWithTrust(AuthTest):
+                                        fmt=TIME_FORMAT)
+         self.create_trust(expires_at=expires_at)
+ 
+-    def create_trust(self, expires_at=None, impersonation='True'):
++    def create_trust(self, expires_at=None, impersonation=True):
+         username = self.trustor['name'],
+         password = 'foo2'
+         body_dict = _build_user_auth(username=username, password=password)
+@@ -586,20 +587,42 @@ class AuthWithTrust(AuthTest):
+             self.assertIn(role['id'], role_ids)
+ 
+     def test_create_trust_no_impersonation(self):
+-        self.create_trust(expires_at=None, impersonation='False')
++        self.create_trust(expires_at=None, impersonation=False)
+         self.assertEquals(self.new_trust['trustor_user_id'],
+                           self.trustor['id'])
+         self.assertEquals(self.new_trust['trustee_user_id'],
+                           self.trustee['id'])
+-        self.assertEquals(self.new_trust['impersonation'],
+-                          'False')
++        self.assertIs(self.new_trust['impersonation'], False)
+         auth_response = self.fetch_v2_token_from_trust()
+         token_user = auth_response['access']['user']
+         self.assertEquals(token_user['id'],
+                           self.new_trust['trustee_user_id'])
+-
+         #TODO Endpoints
+ 
++    def test_create_trust_impersonation(self):
++        self.create_trust(expires_at=None)
++        self.assertEqual(self.new_trust['trustor_user_id'], self.trustor['id'])
++        self.assertEqual(self.new_trust['trustee_user_id'], self.trustee['id'])
++        self.assertIs(self.new_trust['impersonation'], True)
++        auth_response = self.fetch_v2_token_from_trust()
++        token_user = auth_response['access']['user']
++        self.assertEqual(token_user['id'], self.new_trust['trustor_user_id'])
++
++    def test_disallow_ec2_credential_from_trust_scoped_token(self):
++        ec2_manager = ec2.Manager()
++        self.ec2_controller = ec2.Ec2Controller()
++        self.test_create_trust_impersonation()
++        auth_response = self.fetch_v2_token_from_trust()
++        # ensure it is not possible to create an ec2 token from a trust
++        context = {'token_id': auth_response['access']['token']['id'],
++                   'is_admin': False}
++
++        self.assertRaises(exception.Forbidden,
++                          self.ec2_controller.create_credential,
++                          context=context,
++                          user_id=self.user_foo['id'],
++                          tenant_id=self.tenant_bar['id'])
++
+     def test_token_from_trust_wrong_user_fails(self):
+         new_trust = self.create_trust()
+         request_body = self.build_v2_token_request('FOO', 'foo2')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/04-CVE-2013-4477.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,72 @@
+Upstream patch fixed in Havana 2013.2.1
+
+commit 82dcde08f60c45002955875664a3cf82d1d211bc
+Author: Brant Knudson <[email protected]>
+Date:   Mon Oct 21 15:21:12 2013 -0500
+
+    Fix remove role assignment adds role using LDAP assignment
+    
+    When using the LDAP assignment backend, attempting to remove a
+    role assignment when the role hadn't been used before would
+    actually add the role assignment and would not return a
+    404 Not Found like the SQL backend.
+    
+    This change makes it so that when attempt to remove a role that
+    wasn't assigned then 404 Not Found is returned.
+    
+    Closes-Bug: #1242855
+    Change-Id: I28ccd26cc4bb1a241d0363d0ab52d2c11410e8b3
+    (cherry picked from commit c6800ca1ac984c879e75826df6694d6199444ea0)
+    (cherry picked from commit b17e7bec768bd53d3977352486378698a3db3cfa)
+    (cherry picked from commit 4221b6020e6b0b42325d8904d7b8a22577a6acc0)
+
+diff --git a/keystone/identity/backends/ldap/core.py b/keystone/identity/backends/ldap/core.py
+index 8ac7395..3d016c0 100644
+--- a/keystone/identity/backends/ldap/core.py
++++ b/keystone/identity/backends/ldap/core.py
+@@ -704,21 +704,10 @@ class RoleApi(common_ldap.BaseLdap, ApiShimMixin):
+         try:
+             conn.modify_s(role_dn, [(ldap.MOD_DELETE,
+                                      self.member_attribute, user_dn)])
+-        except ldap.NO_SUCH_OBJECT:
+-            if tenant_id is None or self.get(role_id) is None:
+-                raise exception.RoleNotFound(role_id=role_id)
+-            attrs = [('objectClass', [self.object_class]),
+-                     (self.member_attribute, [user_dn])]
+-
+-            if self.use_dumb_member:
+-                attrs[1][1].append(self.dumb_member)
+-            try:
+-                conn.add_s(role_dn, attrs)
+-            except Exception as inst:
+-                raise inst
+-
+-        except ldap.NO_SUCH_ATTRIBUTE:
+-            raise exception.UserNotFound(user_id=user_id)
++        except (ldap.NO_SUCH_OBJECT, ldap.NO_SUCH_ATTRIBUTE):
++            raise exception.RoleNotFound(message=_(
++                'Cannot remove role that has not been granted, %s') %
++                role_id)
+ 
+     def get_role_assignments(self, tenant_id):
+         conn = self.get_connection()
+diff --git a/tests/test_backend.py b/tests/test_backend.py
+index d4c2e6c..1af3c16 100644
+--- a/tests/test_backend.py
++++ b/tests/test_backend.py
+@@ -57,6 +57,15 @@ class IdentityTests(object):
+         user_refs = self.identity_api.get_project_users(self.tenant_bar['id'])
+         self.assertNotIn(self.user_two['id'], [x['id'] for x in user_refs])
+ 
++    def test_remove_user_role_not_assigned(self):
++        # Expect failure if attempt to remove a role that was never assigned to
++        # the user.
++        self.assertRaises(exception.RoleNotFound,
++                          self.identity_api.remove_role_from_user_and_project,
++                          tenant_id=self.tenant_bar['id'],
++                          user_id=self.user_two['id'],
++                          role_id=self.role_other['id'])
++
+     def test_authenticate_bad_user(self):
+         self.assertRaises(AssertionError,
+                           self.identity_api.authenticate,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/05-CVE-2014-2237.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,177 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.2, Icehouse
+
+From a411c944af78c36f2fdb87d305ba452dc52d7ed3 Mon Sep 17 00:00:00 2001
+From: Morgan Fainberg <[email protected]>
+Date: Fri, 21 Feb 2014 14:09:04 -0800
+Subject: [PATCH] Ensure tokens are added to both Trustor and Trustee indexes
+
+Tokens are now added to both the Trustor and Trustee user-token-index
+so that bulk token revocations (e.g. password change) of the trustee
+will work as expected. This is a backport of the basic code that was
+used in the Icehouse-vintage Dogpile Token KVS backend that resolves
+this issue by merging the handling of memcache and KVS backends into
+the same logic.
+
+Change-Id: I3e19e4a8fc1e11cef6db51d364e80061e97befa7
+Closes-Bug: #1260080
+
+---
+ keystone/token/backends/memcache.py |   27 +++++++++++++++++------
+ tests/test_backend.py               |   41 ++++++++++++++++++++++++++++++++++-
+ tests/test_backend_kvs.py           |    2 ++
+ tests/test_backend_memcache.py      |    3 +++
+ 4 files changed, 65 insertions(+), 8 deletions(-)
+
+diff --git a/keystone/token/backends/memcache.py b/keystone/token/backends/memcache.py
+index c2c9b51..dc5c34e 100644
+--- a/keystone/token/backends/memcache.py
++++ b/keystone/token/backends/memcache.py
+@@ -62,6 +62,15 @@ class Token(token.Driver):
+         return token_ref
+ 
+     def create_token(self, token_id, data):
++
++        def update_index(user_id, token_data):
++            user_key = self._prefix_user_id(user_id)
++            if not self.client.append(user_key, ',%s' % token_data):
++                if not self.client.add(user_key, token_data):
++                    if not self.client.append(user_key, ',%s' % token_data):
++                        msg = _('Unable to add token user list.')
++                        raise exception.UnexpectedError(msg)
++
+         data_copy = copy.deepcopy(data)
+         ptk = self._prefix_token_id(token.unique_id(token_id))
+         if not data_copy.get('expires'):
+@@ -73,15 +82,19 @@ class Token(token.Driver):
+             expires_ts = utils.unixtime(data_copy['expires'])
+             kwargs['time'] = expires_ts
+         self.client.set(ptk, data_copy, **kwargs)
++        token_data = jsonutils.dumps(token_id)
+         if 'id' in data['user']:
+-            token_data = jsonutils.dumps(token_id)
+             user_id = data['user']['id']
+-            user_key = self._prefix_user_id(user_id)
+-            if not self.client.append(user_key, ',%s' % token_data):
+-                if not self.client.add(user_key, token_data):
+-                    if not self.client.append(user_key, ',%s' % token_data):
+-                        msg = _('Unable to add token user list.')
+-                        raise exception.UnexpectedError(msg)
++            update_index(user_id, token_data)
++
++        if CONF.trust.enabled and data.get('trust_id'):
++            if 'access' in data_copy:
++                trustee_user_id = data_copy['access']['trust'][
++                    'trustee_user_id']
++            else:
++                trustee_user_id = data_copy['OS-TRUST:trust'][
++                    'trustee_user_id']
++            update_index(trustee_user_id, token_data)
+         return copy.deepcopy(data_copy)
+ 
+     def _add_to_revocation_list(self, token_id, token_data):
+diff --git a/tests/test_backend.py b/tests/test_backend.py
+index 1af3c16..19caa0c 100644
+--- a/tests/test_backend.py
++++ b/tests/test_backend.py
+@@ -2096,7 +2096,8 @@ class TokenTests(object):
+                           self.token_api.delete_token, token_id)
+ 
+     def create_token_sample_data(self, tenant_id=None, trust_id=None,
+-                                 user_id="testuserid"):
++                                 user_id='testuserid',
++                                 trustee_user_id='testuserid2'):
+         token_id = self._create_token_id()
+         data = {'id': token_id, 'a': 'b',
+                 'user': {'id': user_id}}
+@@ -2104,6 +2105,11 @@ class TokenTests(object):
+             data['tenant'] = {'id': tenant_id, 'name': tenant_id}
+         if trust_id is not None:
+             data['trust_id'] = trust_id
++            data.setdefault('access', {}).setdefault('trust', {})
++            # Testuserid2 is used here since a trustee will be different in
++            # the cases of impersonation and therefore should not match the
++            # token's user_id.
++            data['access']['trust']['trustee_user_id'] = trustee_user_id
+         self.token_api.create_token(token_id, data)
+         return token_id
+ 
+@@ -2290,6 +2296,39 @@ class TokenTests(object):
+         for t in self.token_api.list_revoked_tokens():
+             self.assertIn('expires', t)
+ 
++    def test_token_in_trustee_and_trustor_token_list(self):
++        self.opt_in_group('trust',
++                          enabled=True)
++        trustor = self.user_foo
++        trustee = self.user_two
++        trust_id = uuid.uuid4().hex
++        trust_info = {'trustor_user_id': trustor['id'],
++                      'trustee_user_id': trustee['id'],
++                      'project_id': self.tenant_bar['id'],
++                      'expires_at': timeutils.
++                      parse_isotime('2031-02-18T18:10:00Z'),
++                      'impersonation': True}
++        self.trust_api.create_trust(trust_id, trust_info,
++                                    roles=[{'id': 'member'},
++                                           {'id': 'other'},
++                                           {'id': 'browser'}])
++
++        token_id = self.create_token_sample_data(
++            tenant_id=self.tenant_bar['id'],
++            trust_id=trust_id,
++            user_id=trustor['id'],
++            trustee_user_id=trustee['id'])
++
++        # Ensure the token id exists in both the trustor and trustee token
++        # lists
++
++        self.assertIn(token_id,
++                      self.token_api.list_tokens(self.user_two['id'],
++                                                 trust_id=trust_id))
++        self.assertIn(token_id,
++                      self.token_api.list_tokens(self.user_foo['id'],
++                                                 trust_id=trust_id))
++
+ 
+ class TrustTests(object):
+     def create_sample_trust(self, new_id):
+diff --git a/tests/test_backend_kvs.py b/tests/test_backend_kvs.py
+index f3a8ece..15a87b5 100644
+--- a/tests/test_backend_kvs.py
++++ b/tests/test_backend_kvs.py
+@@ -73,6 +73,8 @@ class KvsToken(test.TestCase, test_backend.TokenTests):
+     def setUp(self):
+         super(KvsToken, self).setUp()
+         self.token_api = token_kvs.Token(db={})
++        self.load_backends()
++        self.load_fixtures(default_fixtures)
+ 
+ 
+ class KvsTrust(test.TestCase, test_backend.TrustTests):
+diff --git a/tests/test_backend_memcache.py b/tests/test_backend_memcache.py
+index 9fbaeb9..6339e6f 100644
+--- a/tests/test_backend_memcache.py
++++ b/tests/test_backend_memcache.py
+@@ -18,6 +18,7 @@ import uuid
+ 
+ import memcache
+ 
++import default_fixtures
+ from keystone.common import utils
+ from keystone.openstack.common import timeutils
+ from keystone import test
+@@ -75,8 +76,10 @@ class MemcacheClient(object):
+ class MemcacheToken(test.TestCase, test_backend.TokenTests):
+     def setUp(self):
+         super(MemcacheToken, self).setUp()
++        self.load_backends()
+         fake_client = MemcacheClient()
+         self.token_api = token_memcache.Token(client=fake_client)
++        self.load_fixtures(default_fixtures)
+ 
+     def test_create_unicode_token_id(self):
+         token_id = unicode(self._create_token_id())
+-- 
+1.7.9.5
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/patches/06-sample-data-sh.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,201 @@
+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.1.4/tools/sample_data.sh.~1~	2013-10-17 11:23:46.000000000 -0700
++++ keystone-2013.1.4/tools/sample_data.sh	2014-03-07 23:39:03.065369827 -0800
+@@ -23,8 +23,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 +36,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 +93,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 +162,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 +201,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 +229,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 +243,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 +254,30 @@
+ 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: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://$SWIFT_PUBLIC_ADDRESS:8888/v1/AUTH_\$(tenant_id)s" \
++        --adminurl    "http://$SWIFT_ADMIN_ADDRESS:8888/v1" \
++        --internalurl "http://$SWIFT_INTERNAL_ADDRESS:8888/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
+ 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}'`
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/keystone/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,10 @@
+library/python-2/eventlet-26
+library/python-2/greenlet-26
+library/python-2/sqlalchemy-26
+library/python-2/sqlalchemy-migrate-26
+library/python/eventlet-26
+library/python/greenlet-26
+library/python/sqlalchemy-26
+library/python/sqlalchemy-migrate-26
+runtime/python-26
+system/core-os
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,87 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		neutron
+COMPONENT_OLDNAME=	quantum
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_OLDNAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:3bd26ae7dabe6093a3cbe701ac8d7022fbdbe1d8231ab1c6866de388684e272c
+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) 
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+# 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/quantum/agent; \
+	 $(CP) files/agent/evs_l3_agent.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent; \
+	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/linux; \
+	 $(CP) files/agent/linux/device.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/linux; \
+	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/__init__.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/device.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/dhcp.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/interface.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/ipfilters_manager.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(CP) files/agent/solaris/net_lib.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/agent/solaris; \
+	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs; \
+	 $(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/__init__.py; \
+	 $(CP) files/evs/plugin.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs; \
+	 $(MKDIR) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/db; \
+	 $(TOUCH) $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/db/__init__.py; \
+	 $(CP) files/evs/db/api.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/db; \
+	 $(CP) files/evs/db/l3nat.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/db; \
+	 $(CP) files/evs/db/quotas_db.py $(PROTO_DIR)/usr/lib/python$(PYTHON_VERSION)/vendor-packages/quantum/plugins/evs/db)
+
+
+COMPONENT_POST_INSTALL_ACTION += \
+        $(PYTHON) -m compileall $(PROTO_DIR)/$(PYTHON_VENDOR_PACKAGES)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/evs_l3_agent.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,211 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# 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
+#
+#         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 (quantum/agent/l3_agent) code
+"""
+
+from oslo.config import cfg
+
+from quantum.agent import l3_agent
+from quantum.agent.solaris import interface
+from quantum.agent.solaris import ipfilters_manager
+from quantum.agent.solaris import net_lib
+from quantum.common import constants as l3_constants
+from quantum.openstack.common import log as logging
+
+
+LOG = logging.getLogger(__name__)
+INTERNAL_DEV_PREFIX = 'l3i'
+EXTERNAL_DEV_PREFIX = 'l3e'
+
+
+class RouterInfo(object):
+
+    def __init__(self, router_id, root_helper, use_namespaces, router):
+        self.router_id = router_id
+        self.ex_gw_port = None
+        self.internal_ports = []
+        self.floating_ips = []
+        self.router = router
+        self.ipfilters_manager = ipfilters_manager.IpfiltersManager()
+        self.routes = []
+
+
+class EVSL3NATAgent(l3_agent.L3NATAgent):
+
+    RouterInfo = RouterInfo
+
+    OPTS = [
+        cfg.StrOpt('external_network_bridge', default='',
+                   help=_("Name of bridge used for external network "
+                          "traffic.")),
+        cfg.StrOpt('interface_driver',
+                   help=_("The driver used to manage the virtual "
+                          "interface.")),
+        cfg.BoolOpt('use_namespaces', default=False,
+                    help=_("Allow overlapping IP.")),
+        cfg.StrOpt('router_id',
+                   help=_("If namespaces is disabled, the l3 agent can only"
+                          " configure a router that has the matching router "
+                          "ID.")),
+        cfg.BoolOpt('handle_internal_only_routers', default=True,
+                    help=_("Agent should implement routers with no gateway")),
+        cfg.StrOpt('gateway_external_network_id', default='',
+                   help=_("UUID of external network for routers implemented "
+                          "by the agents.")),
+        cfg.StrOpt('external_network_datalink', default='net0',
+                   help=_("Name of the datalink that connects to "
+                          "an external network.")),
+        cfg.BoolOpt('allow_forwarding_between_networks', default=False,
+                    help=_("Allow forwarding of packets between tenant's "
+                           "networks")),
+    ]
+
+    def __init__(self, host, conf=None):
+        cfg.CONF.register_opts(self.OPTS)
+        cfg.CONF.register_opts(interface.OPTS)
+        if not cfg.CONF.router_id:
+            raise SystemExit(_("router_id option needs to be set"))
+
+        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)
+        self.router_info[router_id] = ri
+
+    def _router_removed(self, router_id):
+        ri = self.router_info[router_id]
+        ri.router['gw_port'] = None
+        ri.router[l3_constants.INTERFACE_KEY] = []
+        ri.router[l3_constants.FLOATINGIP_KEY] = []
+        self.process_router(ri)
+        del self.router_info[router_id]
+
+    def get_internal_device_name(self, port_id):
+        # Because of the way how dnsmasq works on Solaris, the length
+        # of datalink name cannot exceed 16 (includes terminating nul
+        # character). So, the linkname can only have 15 characters and
+        # the last two characters are set aside for '_0'. So, we only
+        # have 13 characters left.
+        dname = (INTERNAL_DEV_PREFIX + port_id)[:13]
+        dname += '_0'
+        return dname.replace('-', '_')
+
+    def get_external_device_name(self, port_id):
+        dname = (EXTERNAL_DEV_PREFIX + port_id)[:13]
+        dname += '_0'
+        return dname.replace('-', '_')
+
+    def external_gateway_added(self, ri, ex_gw_port, internal_cidrs):
+        pass
+
+    def external_gateway_removed(self, ri, ex_gw_port, internal_cidrs):
+        pass
+
+    def _get_ippool_name(self, mac_address):
+        # generate a unique-name for ippool(1m) from that last 3
+        # bytes of mac-address
+        mac_suffix = mac_address.split(':')[3:]
+        return int("".join(mac_suffix), 16)
+
+    def internal_network_added(self, ri, ex_gw_port, port):
+
+        internal_dlname = self.get_internal_device_name(port['id'])
+        if not net_lib.Datalink.datalink_exists(internal_dlname):
+            self.driver.plug(port['tenant_id'], port['network_id'], port['id'],
+                             internal_dlname)
+        self.driver.init_l3(internal_dlname, [port['ip_cidr']])
+
+        # add ippool(1m) for the new internal port
+        new_ippool_name = self._get_ippool_name(port['mac_address'])
+        ri.ipfilters_manager.add_ippool(new_ippool_name, None)
+
+        # walk through the other internal ports and retrieve their
+        # cidrs and at the same time add the new internal port's
+        # cidr to them
+        subnet_cidr = port['subnet']['cidr']
+        other_subnet_cidrs = []
+        for oip in ri.internal_ports:
+            if oip['mac_address'] != port['mac_address']:
+                if (self.conf.allow_forwarding_between_networks and
+                    oip['tenant_id'] == port['tenant_id']):
+                    continue
+                other_subnet_cidrs.append(oip['subnet']['cidr'])
+                ippool_name = self._get_ippool_name(oip['mac_address'])
+                ri.ipfilters_manager.add_ippool(ippool_name, [subnet_cidr])
+        # update the new port's pool with other port's cidrs
+        ri.ipfilters_manager.add_ippool(new_ippool_name, other_subnet_cidrs)
+
+        # now setup the IPF rule
+        rules = ['block in quick on %s from %s to pool/%d' %
+                 (internal_dlname, subnet_cidr, new_ippool_name)]
+        ri.ipfilters_manager.add_ipf_rules(rules)
+
+    def internal_network_removed(self, ri, ex_gw_port, port):
+        internal_dlname = self.get_internal_device_name(port['id'])
+        if net_lib.Datalink.datalink_exists(internal_dlname):
+            self.driver.fini_l3(internal_dlname)
+            self.driver.unplug(internal_dlname)
+
+        # remove all the IP filter rules that we added during addition.
+        ippool_name = self._get_ippool_name(port['mac_address'])
+        rules = ['block in quick on %s from %s to pool/%d' %
+                 (internal_dlname, port['subnet']['cidr'], ippool_name)]
+        ri.ipfilters_manager.remove_ipf_rules(rules)
+        # remove the ippool
+        ri.ipfilters_manager.remove_ippool(ippool_name, None)
+        for internal_port in ri.internal_ports:
+            if (self.conf.allow_forwarding_between_networks and
+                internal_port['tenant_id'] == port['tenant_id']):
+                continue
+            ippool_name = \
+                self._get_ippool_name(internal_port['mac_address'])
+            ri.ipfilters_manager.remove_ippool(ippool_name,
+                                               internal_port['subnet']['cidr'])
+
+    def floating_ip_added(self, ri, ex_gw_port, floating_ip, fixed_ip):
+        floating_ipcidr = str(floating_ip) + '/32'
+        fixed_ipcidr = str(fixed_ip) + '/32'
+        #ifname = self.get_external_device_name(ex_gw_port['id'])
+        ifname = self.conf.external_network_datalink
+        ipif = net_lib.IPInterface(ifname)
+        ipif.create_address(floating_ipcidr)
+
+        nat_rules = ['bimap %s %s -> %s' %
+                     (ifname, fixed_ipcidr, floating_ipcidr)]
+        ri.ipfilters_manager.add_nat_rules(nat_rules)
+
+    def floating_ip_removed(self, ri, ex_gw_port, floating_ip, fixed_ip):
+        floating_ipcidr = str(floating_ip) + '/32'
+        fixed_ipcidr = str(fixed_ip) + '/32'
+        ifname = self.conf.external_network_datalink
+        ipif = net_lib.IPInterface(ifname)
+        ipif.delete_address(floating_ipcidr)
+
+        nat_rules = ['bimap %s %s -> %s' %
+                     (ifname, fixed_ipcidr, floating_ipcidr)]
+        ri.ipfilters_manager.remove_nat_rules(nat_rules)
+
+    def routes_updated(self, ri):
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/linux/device.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,197 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack Foundation
+# 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 socket
+import uuid
+
+import netaddr
+from oslo.config import cfg
+
+from quantum.agent.common import config
+from quantum.agent.linux import interface
+from quantum.agent.linux import ip_lib
+from quantum.common import exceptions
+from quantum.openstack.common import importutils
+from quantum.openstack.common import log as logging
+
+LOG = logging.getLogger(__name__)
+NS_PREFIX = 'qdhcp-'
+METADATA_DEFAULT_PREFIX = 16
+METADATA_DEFAULT_IP = '169.254.169.254/%d' % METADATA_DEFAULT_PREFIX
+
+
+class DeviceManager(object):
+    OPTS = [
+        cfg.StrOpt('interface_driver',
+                   help=_("The driver used to manage the virtual interface."))
+    ]
+
+    def __init__(self, conf, plugin):
+        self.conf = conf
+        self.root_helper = config.get_root_helper(conf)
+        self.plugin = plugin
+        cfg.CONF.register_opts(DeviceManager.OPTS)
+        cfg.CONF.register_opts(interface.OPTS)
+        if not conf.interface_driver:
+            raise SystemExit(_('You must specify an interface driver'))
+        try:
+            self.driver = importutils.import_object(conf.interface_driver,
+                                                    conf)
+        except:
+            msg = _("Error importing interface driver "
+                    "'%s'") % conf.interface_driver
+            raise SystemExit(msg)
+
+    def get_interface_name(self, network, port=None):
+        """Return interface(device) name for use by the DHCP process."""
+        if not port:
+            device_id = self.get_device_id(network)
+            port = self.plugin.get_dhcp_port(network.id, device_id)
+        return self.driver.get_device_name(port)
+
+    def get_device_id(self, network):
+        """Return a unique DHCP device ID for this host on the network."""
+        # There could be more than one dhcp server per network, so create
+        # a device id that combines host and network ids
+
+        host_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())
+        return 'dhcp%s-%s' % (host_uuid, network.id)
+
+    def _get_device(self, network):
+        """Return DHCP ip_lib device for this host on the network."""
+        device_id = self.get_device_id(network)
+        port = self.plugin.get_dhcp_port(network.id, device_id)
+        interface_name = self.get_interface_name(network, port)
+        namespace = NS_PREFIX + network.id
+        return ip_lib.IPDevice(interface_name,
+                               self.root_helper,
+                               namespace)
+
+    def _set_default_route(self, network):
+        """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.
+        """
+        device = self._get_device(network)
+        gateway = device.route.get_gateway()
+
+        for subnet in network.subnets:
+            skip_subnet = (
+                subnet.ip_version != 4
+                or not subnet.enable_dhcp
+                or subnet.gateway_ip is None)
+
+            if skip_subnet:
+                continue
+
+            if gateway != subnet.gateway_ip:
+                m = _('Setting gateway for dhcp netns on net %(n)s to %(ip)s')
+                LOG.debug(m, {'n': network.id, 'ip': subnet.gateway_ip})
+
+                device.route.add_gateway(subnet.gateway_ip)
+
+            return
+
+        # No subnets on the network have a valid gateway.  Clean it up to avoid
+        # confusion from seeing an invalid gateway here.
+        if gateway is not None:
+            msg = _('Removing gateway for dhcp netns on net %s')
+            LOG.debug(msg, network.id)
+
+            device.route.delete_gateway(gateway)
+
+    def setup(self, network, reuse_existing=False):
+        """Create and initialize a device for network's DHCP on this host."""
+        device_id = self.get_device_id(network)
+        port = self.plugin.get_dhcp_port(network.id, device_id)
+
+        interface_name = self.get_interface_name(network, port)
+
+        if self.conf.use_namespaces:
+            namespace = NS_PREFIX + network.id
+        else:
+            namespace = None
+
+        if ip_lib.device_exists(interface_name,
+                                self.root_helper,
+                                namespace):
+            if not reuse_existing:
+                raise exceptions.PreexistingDeviceFailure(
+                    dev_name=interface_name)
+
+            LOG.debug(_('Reusing existing device: %s.'), interface_name)
+        else:
+            self.driver.plug(network.id,
+                             port.id,
+                             interface_name,
+                             port.mac_address,
+                             namespace=namespace)
+        ip_cidrs = []
+        for fixed_ip in port.fixed_ips:
+            subnet = fixed_ip.subnet
+            net = netaddr.IPNetwork(subnet.cidr)
+            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):
+            ip_cidrs.append(METADATA_DEFAULT_IP)
+
+        self.driver.init_l3(interface_name, ip_cidrs,
+                            namespace=namespace)
+
+        # ensure that the dhcp interface is first in the list
+        if namespace is None:
+            device = ip_lib.IPDevice(interface_name,
+                                     self.root_helper)
+            device.route.pullup_route(interface_name)
+
+        if self.conf.enable_metadata_network:
+            meta_cidr = netaddr.IPNetwork(METADATA_DEFAULT_IP)
+            metadata_subnets = [s for s in network.subnets if
+                                netaddr.IPNetwork(s.cidr) in meta_cidr]
+            if metadata_subnets:
+                # Add a gateway so that packets can be routed back to VMs
+                device = ip_lib.IPDevice(interface_name,
+                                         self.root_helper,
+                                         namespace)
+                # Only 1 subnet on metadata access network
+                gateway_ip = metadata_subnets[0].gateway_ip
+                device.route.add_gateway(gateway_ip)
+        elif self.conf.use_namespaces:
+            self._set_default_route(network)
+
+        return interface_name
+
+    def update(self, network):
+        """Update device settings for the network's DHCP on this host."""
+        if self.conf.use_namespaces and not self.conf.enable_metadata_network:
+            self._set_default_route(network)
+
+    def destroy(self, network, device_name):
+        """Destroy the device used for the network's DHCP on this host."""
+        if self.conf.use_namespaces:
+            namespace = NS_PREFIX + network.id
+        else:
+            namespace = None
+
+        self.driver.unplug(device_name, namespace=namespace)
+
+        self.plugin.release_dhcp_port(network.id,
+                                      self.get_device_id(network))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/__init__.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,17 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# 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
+#
+#         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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/device.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,100 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# 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
+#
+#         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 socket
+import uuid
+
+import netaddr
+
+from oslo.config import cfg
+from quantum.agent.common import config
+from quantum.agent.solaris import interface
+from quantum.openstack.common import importutils
+from quantum.openstack.common import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+class DeviceManager(object):
+    OPTS = [
+        cfg.StrOpt('interface_driver',
+                   help=_('The driver used to manage the virtual interface.'))
+    ]
+
+    def __init__(self, conf, plugin):
+        self.conf = conf
+        self.root_helper = config.get_root_helper(conf)
+        self.plugin = plugin
+        cfg.CONF.register_opts(DeviceManager.OPTS)
+        cfg.CONF.register_opts(interface.OPTS)
+        if not conf.interface_driver:
+            raise SystemExit(_('You must specify an interface driver.'))
+        try:
+            self.driver = importutils.import_object(conf.interface_driver,
+                                                    conf)
+        except ImportError as ie:
+            raise SystemExit(_('Error importing interface driver %s: %s')
+                             % (conf.interface_driver, ie))
+
+    def get_interface_name(self, network, port=None):
+        """Return interface(device) name for use by the DHCP process."""
+
+        if not port:
+            device_id = self.get_device_id(network)
+            port = self.plugin.get_dhcp_port(network.id, device_id)
+        return self.driver.get_device_name(port)
+
+    def get_device_id(self, network):
+        """Return a unique DHCP device ID for this host on the network."""
+
+        # There could be more than one dhcp server per network, so create
+        # a device id that combines host and network ids
+        host_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())
+        return 'dhcp%s-%s' % (host_uuid, network.id)
+
+    def setup(self, network, reuse_existing=False):
+        """Create and initialize a device for network's DHCP on this host."""
+        device_id = self.get_device_id(network)
+        port = self.plugin.get_dhcp_port(network.id, device_id)
+
+        interface_name = self.get_interface_name(network, port)
+
+        self.driver.plug(network.tenant_id, network.id, port.id,
+                         interface_name)
+        ip_cidrs = []
+        for fixed_ip in port.fixed_ips:
+            subnet = fixed_ip.subnet
+            net = netaddr.IPNetwork(subnet.cidr)
+            ip_cidr = '%s/%s' % (fixed_ip.ip_address, net.prefixlen)
+            ip_cidrs.append(ip_cidr)
+
+        self.driver.init_l3(interface_name, ip_cidrs)
+
+        return interface_name
+
+    def update(self, network):
+        """Update device settings for the network's DHCP on this host."""
+        pass
+
+    def destroy(self, network, device_name):
+        """Destroy the device used for the network's DHCP on this host."""
+
+        self.driver.fini_l3(device_name)
+        self.driver.unplug(device_name)
+        self.plugin.release_dhcp_port(network.id,
+                                      self.get_device_id(network))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/dhcp.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,359 @@
+# 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
+#
+#         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 abc
+import os
+import re
+import shutil
+import StringIO
+
+import netaddr
+
+from oslo.config import cfg
+from quantum.agent.linux import utils
+from quantum.openstack.common import log as logging
+from quantum.openstack.common import uuidutils
+
+LOG = logging.getLogger(__name__)
+
+OPTS = [
+    cfg.StrOpt('dhcp_confs',
+               default='$state_path/dhcp',
+               help=_('Location to store DHCP server config files')),
+    cfg.IntOpt('dhcp_lease_time',
+               default=120,
+               help=_('Lifetime of a DHCP lease in seconds')),
+    cfg.StrOpt('dhcp_domain',
+               default='openstacklocal',
+               help=_('Domain to use for building the hostnames')),
+    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.')),
+]
+
+IPV4 = 4
+IPV6 = 6
+UDP = 'udp'
+TCP = 'tcp'
+DNS_PORT = 53
+DHCPV4_PORT = 67
+DHCPV6_PORT = 467
+
+
+class DhcpBase(object):
+    __metaclass__ = abc.ABCMeta
+
+    def __init__(self, conf, network, root_helper='sudo',
+                 device_delegate=None, namespace=None, version=None):
+        self.conf = conf
+        self.network = network
+        self.root_helper = root_helper
+        self.device_delegate = device_delegate
+        self.namespace = namespace
+        self.version = version
+
+    @abc.abstractmethod
+    def enable(self):
+        """Enables DHCP for this network."""
+
+    @abc.abstractmethod
+    def disable(self, retain_port=False):
+        """Disable dhcp for this network."""
+
+    def restart(self):
+        """Restart the dhcp service for the network."""
+        self.disable(retain_port=True)
+        self.enable()
+
+    @abc.abstractproperty
+    def active(self):
+        """Boolean representing the running state of the DHCP server."""
+
+    @abc.abstractmethod
+    def reload_allocations(self):
+        """Force the DHCP server to reload the assignment database."""
+
+    @classmethod
+    def existing_dhcp_networks(cls, conf, root_helper):
+        """Return a list of existing networks ids (ones we have configs for)"""
+
+        raise NotImplementedError
+
+    @classmethod
+    def check_version(cls):
+        """Execute version checks on DHCP server."""
+
+        raise NotImplementedError
+
+
+class DhcpLocalProcess(DhcpBase):
+    PORTS = []
+
+    def _enable_dhcp(self):
+        """check if there is a subnet within the network with dhcp enabled."""
+        return any(s for s in self.network.subnets if s.enable_dhcp)
+
+    def enable(self):
+        """Enables DHCP for this network by spawning a local process."""
+        interface_name = self.device_delegate.setup(self.network,
+                                                    reuse_existing=True)
+        if self.active:
+            self.restart()
+        elif self._enable_dhcp():
+            self.interface_name = interface_name
+            self.spawn_process()
+
+    def disable(self, retain_port=False):
+        """Disable DHCP for this network by killing the local process."""
+        pid = self.pid
+
+        if self.active:
+            cmd = ['kill', '-9', pid]
+            utils.execute(cmd)
+
+            if not retain_port:
+                self.device_delegate.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})
+        else:
+            LOG.debug(_('No DHCP started for %s'), self.network.id)
+
+        self._remove_config_files()
+
+    def _remove_config_files(self):
+        confs_dir = os.path.abspath(os.path.normpath(self.conf.dhcp_confs))
+        conf_dir = os.path.join(confs_dir, self.network.id)
+        shutil.rmtree(conf_dir, ignore_errors=True)
+
+    def get_conf_file_name(self, kind, ensure_conf_dir=False):
+        """Returns the file name for a given kind of config file."""
+        confs_dir = os.path.abspath(os.path.normpath(self.conf.dhcp_confs))
+        conf_dir = os.path.join(confs_dir, self.network.id)
+        if ensure_conf_dir:
+            if not os.path.isdir(conf_dir):
+                os.makedirs(conf_dir, 0755)
+
+        return os.path.join(conf_dir, kind)
+
+    def _get_value_from_conf_file(self, kind, converter=None):
+        """A helper function to read a value from one of the state files."""
+        file_name = self.get_conf_file_name(kind)
+        msg = _('Error while reading %s')
+
+        try:
+            with open(file_name, 'r') as f:
+                try:
+                    return converter and converter(f.read()) or f.read()
+                except ValueError, e:
+                    msg = _('Unable to convert value in %s')
+        except IOError, e:
+            msg = _('Unable to access %s')
+
+        LOG.debug(msg % file_name)
+        return None
+
+    @property
+    def pid(self):
+        """Last known pid for the DHCP process spawned for this network."""
+        return self._get_value_from_conf_file('pid', int)
+
+    @property
+    def active(self):
+        pid = self.pid
+        if pid is None:
+            return False
+
+        cmd = ['pargs', pid]
+        try:
+            return self.network.id in utils.execute(cmd)
+        except RuntimeError:
+            return False
+
+    @property
+    def interface_name(self):
+        return self._get_value_from_conf_file('interface')
+
+    @interface_name.setter
+    def interface_name(self, value):
+        interface_file_path = self.get_conf_file_name('interface',
+                                                      ensure_conf_dir=True)
+        utils.replace_file(interface_file_path, value)
+
+    @abc.abstractmethod
+    def spawn_process(self):
+        pass
+
+
+class Dnsmasq(DhcpLocalProcess):
+    # The ports that need to be opened when security policies are active
+    # on the Quantum port used for DHCP.  These are provided as a convenience
+    # for users of this class.
+    PORTS = {IPV4: [(UDP, DNS_PORT), (TCP, DNS_PORT), (UDP, DHCPV4_PORT)],
+             IPV6: [(UDP, DNS_PORT), (TCP, DNS_PORT), (UDP, DHCPV6_PORT)]}
+
+    _TAG_PREFIX = 'tag%d'
+
+    QUANTUM_NETWORK_ID_KEY = 'QUANTUM_NETWORK_ID'
+    QUANTUM_RELAY_SOCKET_PATH_KEY = 'QUANTUM_RELAY_SOCKET_PATH'
+
+    @classmethod
+    def check_version(cls):
+        # For Solaris, we rely on the packaging system to ensure a
+        # matching/supported version of dnsmasq
+        pass
+
+    @classmethod
+    def existing_dhcp_networks(cls, conf, root_helper):
+        """Return a list of existing networks ids (ones we have configs for)"""
+
+        confs_dir = os.path.abspath(os.path.normpath(conf.dhcp_confs))
+
+        class FakeNetwork:
+            def __init__(self, net_id):
+                self.id = net_id
+
+        return [
+            c for c in os.listdir(confs_dir)
+            if (uuidutils.is_uuid_like(c) and
+                cls(conf, FakeNetwork(c), root_helper).active)
+        ]
+
+    def spawn_process(self):
+        """Spawns a Dnsmasq process for the network."""
+        env = {
+            self.QUANTUM_NETWORK_ID_KEY: self.network.id
+        }
+
+        cmd = [
+            '/usr/lib/inet/dnsmasq',
+            '--no-hosts',
+            '--no-resolv',
+            '--strict-order',
+            '--bind-interfaces',
+            '--interface=%s' % self.interface_name,
+            '--except-interface=lo0',
+            '--pid-file=%s' % self.get_conf_file_name(
+                'pid', ensure_conf_dir=True),
+            #TODO(gmoodalb): calculate value from cidr (defaults to 150)
+            #'--dhcp-lease-max=%s' % ?,
+            '--dhcp-hostsfile=%s' % self._output_hosts_file(),
+            '--dhcp-optsfile=%s' % self._output_opts_file(),
+            #'--dhcp-script=%s' % self._lease_relay_script_path(),
+            '--leasefile-ro',
+        ]
+
+        for i, subnet in enumerate(self.network.subnets):
+            # 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.
+                mode = 'static'
+            cmd.append('--dhcp-range=set:%s,%s,%s,%ss' %
+                       (self._TAG_PREFIX % i,
+                        netaddr.IPNetwork(subnet.cidr).network,
+                        mode, self.conf.dhcp_lease_time))
+
+        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.dhcp_domain:
+            cmd.append('--domain=%s' % self.conf.dhcp_domain)
+        utils.execute(cmd)
+
+    def reload_allocations(self):
+        """Rebuild the dnsmasq config and signal the dnsmasq to reload."""
+
+        # If all subnets turn off dhcp, kill the process.
+        if not self._enable_dhcp():
+            self.disable()
+            LOG.debug(_('Killing dhcpmasq for network since all subnets have '
+                        'turned off DHCP: %s'), self.network.id)
+            return
+
+        self._output_hosts_file()
+        self._output_opts_file()
+
+        if self.active:
+            cmd = ['kill', '-HUP', self.pid]
+            utils.execute(cmd)
+        else:
+            LOG.debug(_('Pid %d is stale, relaunching dnsmasq'), self.pid)
+        LOG.debug(_('Reloading allocations for network: %s'), self.network.id)
+
+    def _output_hosts_file(self):
+        """Writes a dnsmasq compatible hosts file."""
+        r = re.compile('[:.]')
+        buf = StringIO.StringIO()
+
+        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)
+                buf.write('%s,%s,%s\n' %
+                          (port.mac_address, name, alloc.ip_address))
+
+        name = self.get_conf_file_name('host')
+        utils.replace_file(name, buf.getvalue())
+        return name
+
+    def _output_opts_file(self):
+        """Write a dnsmasq compatible options file."""
+
+        options = []
+        for i, subnet in enumerate(self.network.subnets):
+            if not subnet.enable_dhcp:
+                continue
+            if subnet.dns_nameservers:
+                options.append(
+                    self._format_option(i, 'dns-server',
+                                        ','.join(subnet.dns_nameservers)))
+
+            host_routes = ["%s,%s" % (hr.destination, hr.nexthop)
+                           for hr in subnet.host_routes]
+
+            if host_routes:
+                options.append(
+                    self._format_option(i, 'classless-static-route',
+                                        ','.join(host_routes)))
+
+            if subnet.ip_version == 4:
+                if subnet.gateway_ip:
+                    options.append(self._format_option(i, 'router',
+                                                       subnet.gateway_ip))
+                else:
+                    options.append(self._format_option(i, 'router'))
+
+        name = self.get_conf_file_name('opts')
+        utils.replace_file(name, '\n'.join(options))
+        return name
+
+    def _format_option(self, index, option_name, *args):
+        return ','.join(('tag:' + self._TAG_PREFIX % index,
+                         'option:%s' % option_name) + args)
+
+    @classmethod
+    def lease_update(cls):
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/interface.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,97 @@
+# 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
+#
+#         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.
+
+from oslo.config import cfg
+
+from quantum.agent.linux import utils
+from quantum.agent.solaris import net_lib
+
+
+OPTS = [
+    cfg.StrOpt('evs_controller', default='ssh://evsuser@localhost',
+               help=_("An URI that specifies an EVS controller"))
+]
+
+
+class SolarisVNICDriver(object):
+    """Driver used to manage Solaris EVS VNICs.
+
+    This class provides methods to create/delete an EVS VNIC and
+    plumb/unplumb ab IP interface and addresses on the EVS VNIC.
+    """
+
+    # TODO(gmoodalb): dnsmasq uses old style `ifreq', so 16 is the maximum
+    # 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_SUFFIX = '_0'
+    VNIC_NAME_LEN_WO_SUFFIX = VNIC_NAME_MAXLEN - \
+        len(VNIC_NAME_SUFFIX)
+
+    def __init__(self, conf):
+        self.conf = conf
+        # Since there is no connect_uri() yet, we need to do this ourselves
+        # parse ssh://user@hostname
+        suh = self.conf.evs_controller.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"))
+
+        # set the controller property for this host
+        cmd = ['/usr/sbin/evsadm', 'show-prop', '-co', 'value', '-p',
+               'controller']
+        stdout = utils.execute(cmd)
+        if conf.evs_controller != stdout.strip():
+            cmd = ['/usr/sbin/evsadm', 'set-prop', '-p',
+                   'controller=%s' % (conf.evs_controller)]
+            utils.execute(cmd)
+
+    def fini_l3(self, device_name):
+        ipif = net_lib.IPInterface(device_name)
+        ipif.delete_ip()
+
+    def init_l3(self, device_name, ip_cidrs):
+        """Set the L3 settings for the interface using data from the port.
+           ip_cidrs: list of 'X.X.X.X/YY' strings
+        """
+        ipif = net_lib.IPInterface(device_name)
+        for ip_cidr in ip_cidrs:
+            ipif.create_address(ip_cidr)
+
+    # TODO(gmoodalb): - probably take PREFIX?? for L3
+    def get_device_name(self, port):
+        vnicname = (self.VNIC_NAME_PREFIX +
+                    port.id)[:self.VNIC_NAME_LEN_WO_SUFFIX]
+        vnicname += self.VNIC_NAME_SUFFIX
+        return vnicname.replace('-', '_')
+
+    def plug(self, tenant_id, network_id, port_id, datalink_name,
+             namespace=None, prefix=None):
+        """Plug in the interface."""
+
+        evs_vport = ('%s/%s') % (network_id, port_id)
+        dl = net_lib.Datalink(datalink_name)
+        dl.connect_vnic(evs_vport, tenant_id)
+
+    def unplug(self, device_name, namespace=None, prefix=None):
+        """Unplug the interface."""
+
+        dl = net_lib.Datalink(device_name)
+        dl.delete_vnic()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/ipfilters_manager.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,79 @@
+# 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.
+#
+
+"""Implements ipfilter and ipnat rules using Solaris utilities."""
+
+from quantum.agent.solaris import net_lib
+
+
+class IpfiltersManager(object):
+    """Wrapper for Solaris IPF commands -- ipf(1m), ipnat(1m),
+    and ippool(1m)."""
+
+    def __init__(self):
+        self.ipv4 = {'filter': [], 'nat': []}
+        self.ipv6 = {'filter': [], 'nat': []}
+
+    def add_ippool(self, number, ip_cidrs):
+        ippool = net_lib.IppoolCommand(number)
+        if ip_cidrs:
+            ippool.add_pool_nodes(ip_cidrs)
+        else:
+            ippool.add_pool()
+
+    def remove_ippool(self, number, ip_cidrs):
+        ippool = net_lib.IppoolCommand(number)
+        if ip_cidrs:
+            ippool.remove_pool_nodes(ip_cidrs)
+        else:
+            ippool.remove_pool()
+
+    def add_nat_rules(self, rules, version='4'):
+        # Solaris doesn't support IPv6 NAT rules
+        assert version == '4'
+        ipnat = net_lib.IpnatCommand()
+        ipnat.add_rules(rules)
+        # we successfully added the nat rules, update the local copy
+        for rule in rules:
+            self.ipv4['nat'].append(rule)
+
+    def remove_nat_rules(self, rules, version='4'):
+        # Solaris doesn't support IPv6 NAT rules
+        assert version == '4'
+        ipnat = net_lib.IpnatCommand()
+        ipnat.remove_rules(rules)
+        # we successfully removed the nat rules, update the local copy
+        for rule in rules:
+            self.ipv4['nat'].remove(rule)
+
+    def add_ipf_rules(self, rules, version='4'):
+        ipf = net_lib.IpfilterCommand()
+        ipf.add_rules(rules, version)
+        version_rules = (self.ipv4['filter'] if version == '4' else
+                         self.ipv6['filter'])
+        for rule in rules:
+            version_rules.append(rule)
+
+    def remove_ipf_rules(self, rules, version='4'):
+        ipf = net_lib.IpfilterCommand()
+        ipf.remove_rules(rules, version)
+        version_rules = (self.ipv4['filter'] if version == '4' else
+                         self.ipv6['filter'])
+        for rule in rules:
+            version_rules.remove(rule)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/agent/solaris/net_lib.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,279 @@
+# 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.
+#
+
+from quantum.agent.linux import utils
+
+
+class CommandBase(object):
+    @classmethod
+    def execute_with_pfexec(cls, cmd, **kwargs):
+        # uses pfexec
+        cmd.insert(0, '/usr/bin/pfexec')
+        return utils.execute(cmd, **kwargs)
+
+    @classmethod
+    def execute(cls, cmd, **kwargs):
+        return utils.execute(cmd, **kwargs)
+
+
+class IPInterface(CommandBase):
+    '''Wrapper around Solaris ipadm(1m) command.'''
+
+    def __init__(self, ifname):
+        self._ifname = ifname
+
+    @classmethod
+    def ifname_exists(cls, ifname):
+
+        cmd = ['/usr/sbin/ipadm', 'show-if', '-po', 'ifname']
+        stdout = cls.execute(cmd)
+
+        return ifname in stdout
+
+    @classmethod
+    def ipaddr_exists(cls, ifname, ipaddr):
+
+        if not cls.ifname_exists(ifname):
+            return False
+
+        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'addr', ifname]
+        stdout = cls.execute(cmd)
+
+        return ipaddr in stdout
+
+    def ipaddr_list(self, filters=None):
+        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'type,addr,',
+               self._ifname]
+        stdout = self.execute(cmd)
+        atype_addrs = stdout.strip().split('\n')
+        result = {}
+        for atype_addr in atype_addrs:
+            atype, addr = atype_addr.split(':')
+            val = result.get(atype)
+            if val is None:
+                result[atype] = []
+                val = result.get(atype)
+            val.append(addr)
+        return result
+
+    #TODO(gmoodalb): - might not work for IPv6
+    def create_address(self, ipaddr, addrobjname=None,
+                       addrtype='static', temp=True):
+
+        if not self.ifname_exists(self._ifname):
+            # create ip interface
+            cmd = ['/usr/sbin/ipadm', 'create-ip', self._ifname]
+            if temp:
+                cmd.append('-t')
+            self.execute_with_pfexec(cmd)
+
+        if self.ipaddr_exists(self._ifname, ipaddr):
+            return
+
+        cmd = ['/usr/sbin/ipadm', 'create-addr', '-T', addrtype, '-a',
+               ipaddr, self._ifname]
+        if temp:
+            cmd.append('-t')
+
+        return self.execute_with_pfexec(cmd)
+
+    def delete_address(self, ipaddr):
+        if not self.ipaddr_exists(self._ifname, ipaddr):
+            return
+
+        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'addrobj,addr',
+               self._ifname]
+        stdout = self.execute(cmd)
+        aobj_addrs = stdout.strip().split('\n')
+        for aobj_addr in aobj_addrs:
+            if ipaddr not in aobj_addr:
+                continue
+            aobj = aobj_addr.split(':')[0]
+            cmd = ['/usr/sbin/ipadm', 'delete-addr', aobj]
+            self.execute_with_pfexec(cmd)
+            break
+
+        if len(aobj_addrs) == 1:
+            # delete the interface as well
+            # TODO(gmoodalb): might not work for ipv6
+            cmd = ['/usr/sbin/ipadm', 'delete-ip', self._ifname]
+            self.execute_with_pfexec(cmd)
+
+    def delete_ip(self):
+        if not self.ifname_exists(self._ifname):
+            return
+
+        cmd = ['/usr/sbin/ipadm', 'delete-ip', self._ifname]
+        self.execute_with_pfexec(cmd)
+
+
+class Datalink(CommandBase):
+    '''Wrapper around Solaris dladm(1m) command.'''
+
+    def __init__(self, dlname):
+        self._dlname = dlname
+
+    @classmethod
+    def datalink_exists(cls, dlname):
+
+        cmd = ['/usr/sbin/dladm', 'show-link', '-po', 'link']
+        stdout = utils.execute(cmd)
+
+        return dlname in stdout
+
+    def connect_vnic(self, evsvport, tenantname=None, temp=True):
+        if self.datalink_exists(self._dlname):
+            return
+
+        cmd = ['/usr/sbin/dladm', 'create-vnic', '-c', evsvport, self._dlname]
+        if temp:
+            cmd.append('-t')
+        if tenantname:
+            cmd.append('-T')
+            cmd.append(tenantname)
+
+        return self.execute_with_pfexec(cmd)
+
+    def create_vnic(self, lower_link, mac_address=None, temp=True):
+        if self.datalink_exists(self._dlname):
+            return
+
+        cmd = ['/usr/sbin/dladm', 'create-vnic', '-l', lower_link,
+               '-m', mac_address, self._dlname]
+        if temp:
+            cmd.append('-t')
+
+        return self.execute_with_pfexec(cmd)
+
+    def delete_vnic(self):
+        if not self.datalink_exists(self._dlname):
+            return
+
+        cmd = ['/usr/sbin/dladm', 'delete-vnic', self._dlname]
+        return self.execute_with_pfexec(cmd)
+
+
+class IppoolCommand(CommandBase):
+    '''Wrapper around Solaris ippool(1m) command'''
+
+    def __init__(self, pool_name, role='ipf', pool_type='tree'):
+        self._pool_name = pool_name
+        self._role = role
+        self._pool_type = pool_type
+
+    def pool_exists(self):
+        cmd = ['/usr/sbin/ippool', '-l', '-m', self._pool_name,
+               '-t', self._pool_type]
+        stdout = self.execute_with_pfexec(cmd)
+        return str(self._pool_name) in stdout
+
+    def pool_split_nodes(self, ip_cidrs):
+        cmd = ['/usr/sbin/ippool', '-l', '-m', self._pool_name,
+               '-t', self._pool_type]
+        stdout = self.execute_with_pfexec(cmd)
+        existing_nodes = []
+        non_existing_nodes = []
+        for ip_cidr in ip_cidrs:
+            if ip_cidr in stdout:
+                existing_nodes.append(ip_cidr)
+            else:
+                non_existing_nodes.append(ip_cidr)
+        return existing_nodes, non_existing_nodes
+
+    def add_pool_nodes(self, ip_cidrs):
+        ip_cidrs = self.pool_split_nodes(ip_cidrs)[1]
+
+        for ip_cidr in ip_cidrs:
+            cmd = ['/usr/sbin/ippool', '-a', '-m', self._pool_name,
+                   '-i', ip_cidr]
+            self.execute_with_pfexec(cmd)
+
+    def remove_pool_nodes(self, ip_cidrs):
+        ip_cidrs = self.pool_split_nodes(ip_cidrs)[0]
+
+        for ip_cidr in ip_cidrs:
+            cmd = ['/usr/sbin/ippool', '-r', '-m', self._pool_name,
+                   '-i', ip_cidr]
+            self.execute_with_pfexec(cmd)
+
+    def add_pool(self):
+        if self.pool_exists():
+            return
+
+        cmd = ['/usr/sbin/ippool', '-A', '-m', self._pool_name,
+               '-o', self._role, '-t', self._pool_type]
+        self.execute_with_pfexec(cmd)
+
+    def remove_pool(self):
+        if not self.pool_exists():
+            return
+
+        # This command will fail if ippool is in use by ipf, so the
+        # caller has to ensure that it's not being used in an ipf rule
+        cmd = ['/usr/sbin/ippool', '-R', '-m', self._pool_name,
+               '-o', self._role, '-t', self._pool_type]
+        self.execute_with_pfexec(cmd)
+
+
+class IpfilterCommand(CommandBase):
+    '''Wrapper around Solaris ipf(1m) command'''
+
+    def split_rules(self, rules):
+        # assumes that rules are inbound!
+        cmd = ['/usr/sbin/ipfstat', '-i']
+        stdout = self.execute_with_pfexec(cmd)
+        existing_rules = []
+        non_existing_rules = []
+        for rule in rules:
+            if rule in stdout:
+                existing_rules.append(rule)
+            else:
+                non_existing_rules.append(rule)
+
+        return existing_rules, non_existing_rules
+
+    def add_rules(self, rules, version='4'):
+        rules = self.split_rules(rules)[1]
+        process_input = '\n'.join(rules)
+        cmd = ['/usr/sbin/ipf', '-f', '-']
+        if version == '6':
+            cmd.append('-6')
+        return self.execute_with_pfexec(cmd, process_input=process_input)
+
+    def remove_rules(self, rules, version='4'):
+        rules = self.split_rules(rules)[0]
+        process_input = '\n'.join(rules)
+        cmd = ['/usr/sbin/ipf', '-r', '-f', '-']
+        if version == '6':
+            cmd.append('-6')
+        return self.execute_with_pfexec(cmd, process_input=process_input)
+
+
+class IpnatCommand(CommandBase):
+    '''Wrapper around Solaris ipnat(1m) command'''
+
+    def add_rules(self, rules):
+        process_input = '\n'.join(rules)
+        cmd = ['/usr/sbin/ipnat', '-f', '-']
+        return self.execute_with_pfexec(cmd, process_input=process_input)
+
+    def remove_rules(self, rules):
+        process_input = '\n'.join(rules)
+        cmd = ['/usr/sbin/ipnat', '-r', '-f', '-']
+        return self.execute_with_pfexec(cmd, process_input=process_input)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/dhcp_agent.ini	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,47 @@
+[DEFAULT]
+# Show debugging output in log (sets DEBUG log level output)
+# debug = true
+
+# The DHCP agent will resync its state with Quantum to recover from any
+# transient notification or rpc errors. The interval is number of
+# seconds between attempts.
+# resync_interval = 5
+
+# The DHCP requires that an inteface driver be set.  Choose the one that best
+# matches you plugin.
+
+# Solaris Elastic Virtual Switch (EVS)
+interface_driver = quantum.agent.solaris.interface.SolarisVNICDriver
+
+# The agent can use other DHCP drivers.  Dnsmasq is the simplest and requires
+# no additional setup of the DHCP server.
+dhcp_driver = quantum.agent.solaris.dhcp.Dnsmasq
+
+# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and
+# iproute2 package that supports namespaces).
+use_namespaces = False
+
+# The DHCP server can assist with providing metadata support on isolated
+# networks. Setting this value to True will cause the DHCP server to append
+# specific host routes to the DHCP request.  The metadata service will only
+# be activated when the subnet gateway_ip is None.  The guest instance must
+# be configured to request host routes via DHCP (Option 121).
+# enable_isolated_metadata = False
+
+# Allows for serving metadata requests coming from a dedicated metadata
+# access network whose cidr is 169.254.169.254/16 (or larger prefix), and
+# is connected to a Quantum router from which the VMs send metadata
+# request. In this case DHCP Option 121 will not be injected in VMs, as
+# they will be able to reach 169.254.169.254 through a router.
+# This option requires enable_isolated_metadata = True
+# enable_metadata_network = False
+
+# DeviceManager provides methods to setup/destroy dhcp ports on the
+# host running DHCP agent
+devicemanager = quantum.agent.solaris.device.DeviceManager
+
+# An URI that specifies an EVS controller. It is of the form
+# ssh://user@hostname, where user is the username to use to connect
+# to EVS controller specified by hostname. By default it's set to
+# ssh://evsuser@localhost.
+# evs_controller = ssh://evsuser@localhost
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/db/api.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,71 @@
+# 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 quantum.context import ContextBase
+from quantum.db import model_base
+
+
+EVS_DB_BASE = declarative.declarative_base(cls=model_base.QuantumBaseV2)
+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
+        if not sql_connection:
+            sql_connection = 'sqlite:////var/lib/quantum/quantum.sqlite'
+        EVS_DB_ENGINE = sa.create_engine(sql_connection, echo=True)
+        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 Quantum DB session with EVS DB session"""
+
+    evs_context = EVSContext.from_dict(context.to_dict())
+    evs_context.session = get_session()
+
+    return evs_context
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/db/l3nat.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,306 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# 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
+#
+#         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 (quantum/agent/l3_agent) code
+"""
+
+import sqlalchemy as sa
+
+from quantum.api.v2 import attributes
+from quantum.common import constants as l3_constants
+from quantum.common import exceptions as q_exc
+from quantum.db import l3_db
+from quantum.extensions import l3
+from quantum.openstack.common import log as logging
+from quantum.openstack.common import uuidutils
+from quantum.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 quantum 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, which may or many 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):
+        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}
+        if router['gw_port_id']:
+            nw_id = router['gw_port_network_id']
+            res['external_gateway_info'] = {'network_id': nw_id}
+        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):
+        """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 = self._get_router(context, router_id)
+        gw_port_id = router['gw_port_id']
+        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.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 len(gw_port['fixed_ips']):
+                self.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):
+        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 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 _network_is_external(self, context, net_id):
+        try:
+            evs = self.get_network(context, net_id)
+            return evs[l3.EXTERNAL]
+        except:
+            return False
+
+    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_external_network_id(self, context):
+        return super(EVS_L3_NAT_db_mixin, self).\
+            get_external_network_id(evs_db.get_evs_context(context))
+
+    def _get_tenant_id_for_create(self, context, resource):
+        if context.is_admin and 'tenant_id' in resource:
+            tenant_id = resource['tenant_id']
+        elif ('tenant_id' in resource and
+              resource['tenant_id'] != context.tenant_id):
+            reason = _('Cannot create resource for another tenant')
+            raise q_exc.AdminRequired(reason=reason)
+        else:
+            tenant_id = context.tenant_id
+        return tenant_id
+
+    def _get_by_id(self, context, model, id):
+        return context.session.query(model).\
+            filter(model.id == id).one()
+
+    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 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs/db/quotas_db.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,123 @@
+# 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 quantum.db import quota_db
+from quantum.openstack.common import uuidutils
+from quantum.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/plugin.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,879 @@
+# 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 rad.client as radcli
+import rad.connect as radcon
+import rad.bindings.com.oracle.solaris.rad.evscntl_1 as evsbind
+
+from oslo.config import cfg
+
+from quantum.api.rpc.agentnotifiers import dhcp_rpc_agent_api
+from quantum.api.rpc.agentnotifiers import l3_rpc_agent_api
+from quantum.api.v2 import attributes
+from quantum.common import constants as l3_constants
+from quantum.common import exceptions
+from quantum.common import rpc as q_rpc
+from quantum.common import topics
+from quantum.db import dhcp_rpc_base
+from quantum.db import l3_rpc_base
+from quantum.extensions import l3
+from quantum.extensions import providernet
+from quantum.openstack.common import log as logging
+from quantum.openstack.common import rpc
+from quantum.plugins.evs.db import api as evs_db
+from quantum.plugins.evs.db import l3nat as evs_l3nat
+from quantum import quantum_plugin_base_v2
+
+
+LOG = logging.getLogger(__name__)
+
+evs_controller_opts = [
+    cfg.StrOpt('evs_controller', default='ssh://evsuser@localhost',
+               help=_("An URI that specifies an EVS controller"))
+]
+
+cfg.CONF.register_opts(evs_controller_opts, "EVS")
+
+# Maps OpenStack network resource attributes to EVS properties
+NETWORK_EVS_ATTRIBUTE_MAP = {
+    'tenant_id': 'tenant',
+    'network_id': 'evs',
+    'id': 'evs',
+    'name': 'evs',
+    l3.EXTERNAL: 'OpenStack:' + l3.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.QuantumException):
+    message = _("EVS controller: %(errmsg)s")
+
+    def __init__(self, evs_errmsg):
+        super(EVSControllerError, self).__init__(errmsg=evs_errmsg)
+
+
+class EVSOpNotSupported(exceptions.QuantumException):
+    message = _("Operation not supported by EVS plugin: %(opname)s")
+
+    def __init__(self, evs_errmsg):
+        super(EVSOpNotSupported, self).__init__(opname=evs_errmsg)
+
+
+class EVSRpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin,
+                      l3_rpc_base.L3RpcCallbackMixin):
+    RPC_API_VERSION = '1.0'
+
+    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])
+
+
+class EVSQuantumPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2,
+                         evs_l3nat.EVS_L3_NAT_db_mixin):
+    """Implements v2 Neutron Plug-in API specification.
+
+    All the quantum API calls to create/delete/retrieve Network/Subnet/Port
+    are forwarded to EVS controller through Solaris RAD. The RAD connection
+    to EVS Controller is over SSH. In order that this plugin can communicate
+    with EVS Controller non-interactively and securely, one should setup SSH
+    authentication with pre-shared keys between the host running neutron-server
+    and the host running EVS controller.
+
+    The following table maps OpenStack Neutron resources and attributes to
+    Solaris Elastic Virtual Switch resources and attributes
+
+    |---------------------+------------------+------------------------------|
+    | OpenStack Neutron   | Solaris EVS      | Comments                     |
+    |---------------------+------------------+------------------------------|
+    | Network             | EVS              | Represents an isolated L2    |
+    | -- name             | -- name          | segment; implemented either  |
+    | -- id               | -- uuid          | through VLANs or VXLANs      |
+    | -- tenant_id        | -- tenant        |                              |
+    | -- shared           | Always False     |                              |
+    | -- admin_state_up   | Always True      |                              |
+    | -- status           | Always ACTIVE    |                              |
+    | -- provider:        |                  |                              |
+    |    network_type     |  -- l2-type      | (either VLAN or VXLAN)       |
+    | -- provider:        |                  |                              |
+    |    segmentation_id  |  -- vlanid/vni   |                              |
+    |                     |                  |                              |
+    |                     |                  |                              |
+    | Subnet              | IPnet            | An IP network represents     |
+    | -- name             | -- name          | a block of either IPv4       |
+    | -- id               | -- uuid          | or IPv6 addresses (subnet)   |
+    | -- network_id       | -- evs           | along with a default router  |
+    | -- tenant_id        | -- tenant        | for the block                |
+    | -- cidr             | -- subnet        |                              |
+    | -- gateway_ip       | -- defrouter     |                              |
+    | -- allocation_pools | -- start/stop    |                              |
+    | -- dns_nameservers  | -- OpenStack:\   |                              |
+    |                     | dns_nameservers  |                              |
+    | -- host_routes      | -- OpenStack:\   |                              |
+    |                     | host_routes      |                              |
+    | -- enable_dhcp      | -- OpenStack:\   |                              |
+    |                     | enable_dhcp      |                              |
+    | -- shared           | Always False     |                              |
+    |                     |                  |                              |
+    | Port                | VPort            | A VPort represents the point |
+    | -- name             | -- name          | of attachment between the    |
+    | -- id               | -- uuid          | VNIC and an EVS. It          |
+    | -- network_id       | -- evs           | encapsulates various network |
+    | -- tenant_id        | -- tenant        | configuration parameters (   |
+    | -- status           | -- status        | MAC addresses, IP addresses, |
+    | -- mac_address      | -- macaddr       | and SLAs)                    |
+    | -- fixed_ips        | -- ipaddr        |                              |
+    | -- device_id        | -- OpenStack:\   |                              |
+    |                     |    device_id     |                              |
+    | -- device_owner     | -- OpenStack:\   |                              |
+    |                     |    device_owner  |                              |
+    | -- security_groups  | -- Not Supported |                              |
+    | -- admin_state_up   | Always UP        |                              |
+    |---------------------+------------------+------------------------------|
+    """
+
+    _supported_extension_aliases = ["provider", "router", "quotas"]
+
+    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()
+
+        # Since there is no connect_uri() yet, we need to do this ourselves
+        # parse ssh://user@hostname
+        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"))
+        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"))
+
+        # 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()
+
+    def _setup_rpc(self):
+        # RPC support
+        self.topic = topics.PLUGIN
+        self.conn = rpc.create_connection(new=True)
+        self.callbacks = EVSRpcCallbacks()
+        self.dispatcher = self.callbacks.create_rpc_dispatcher()
+        self.conn.create_consumer(self.topic, self.dispatcher, fanout=False)
+        # Consume from all consumers in a thread
+        self.conn.consume_in_thread()
+        self.dhcp_agent_notifier = dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
+
+    @property
+    def supported_extension_aliases(self):
+        return self._supported_extension_aliases
+
+    def _fields(self, resource, fields):
+        if fields:
+            return dict(((key, item) for key, item in resource.iteritems()
+                         if key in fields))
+        return resource
+
+    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[l3.EXTERNAL] = False
+        for prop in evs.props:
+            if prop.name == 'l2-type':
+                networkdict[providernet.NETWORK_TYPE] = prop.value
+            if prop.name == 'vlanid' or prop.name == 'vni':
+                networkdict[providernet.SEGMENTATION_ID] = int(prop.value)
+            if prop.name == NETWORK_EVS_ATTRIBUTE_MAP[l3.EXTERNAL]:
+                networkdict[l3.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
+            if prop.name == 'subnet':
+                subnetdict['cidr'] = prop.value
+            if prop.name == SUBNET_IPNET_ATTRIBUTE_MAP['enable_dhcp']:
+                subnetdict['enable_dhcp'] = \
+                    (True if prop.value == 'True' else False)
+            if prop.name == SUBNET_IPNET_ATTRIBUTE_MAP['dns_nameservers']:
+                subnetdict['dns_nameservers'] = prop.value.split(',')
+            if 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
+        subnetdict['allocation_pools'] = \
+            [{'start': ipnet.start, 'end': ipnet.end}]
+        subnetdict['shared'] = False
+
+        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
+            if (prop.name == 'ipaddr'):
+                evs = self.get_network(context, vport.evsuuid)
+                portdict['fixed_ips'] = \
+                    [{
+                        'ip_address': prop.value.split('/')[0],
+                        'subnet_id': evs['subnets'][0],
+                    }]
+            if (prop.name == 'OpenStack:device_id'):
+                portdict['device_id'] = prop.value
+            if (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)
+
+    def create_subnet(self, context, subnet):
+        """Creates a subnet(IPnet) for a given network(EVS).
+
+         An IP network represents a block of either IPv4 or IPv6 addresses
+         (i.e., subnet) along with a default router for the block. Only one
+         IPnet can be associated with an EVS. All the zones/VNICs that
+         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, we don't support it
+            raise EVSOpNotSupported(_("cannot use --no-gateway"))
+        if defrouter is not attributes.ATTR_NOT_SPECIFIED:
+            proplist.append('defrouter=%s' % (defrouter))
+
+        # 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)
+
+        # TODO(gmoodalb): extract the tenant id if an admin is creating for
+        # someone else
+        try:
+            evsuuid = subnet['subnet']['network_id']
+            tenantname = subnet['subnet']['tenant_id']
+            pat = radcli.ADRGlobPattern(
+                {'name': evsuuid, 'tenant': tenantname})
+            evs = self._rc.get_object(evsbind.EVS(), pat)
+            ipnet = evs.addIPnet(propstr, ipnetname)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        retval = self._convert_ipnet_to_subnet(ipnet)
+
+        # notify dhcp agent of subnet creation
+        self.dhcp_agent_notifier.notify(context, {'subnet': retval},
+                                        'subnet.create.end')
+        return retval
+
+    def update_subnet(self, context, id, subnet):
+        evs_rpccall_sync = subnet.pop('evs_rpccall_sync', False)
+        if not (set(subnet['subnet'].keys()) == set(('enable_dhcp',))):
+                raise EVSOpNotSupported(_("only enable_dhcp can be updated"))
+
+        propstr = "%s=%s" % (SUBNET_IPNET_ATTRIBUTE_MAP['enable_dhcp'],
+                             subnet['subnet']['enable_dhcp'])
+        try:
+            pat = radcli.ADRGlobPattern({'uuid': id})
+            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)
+
+        retval = self.get_subnet(context, id)
+
+        # notify dhcp agent of subnet update
+        methodname = 'subnet.update.end'
+        payload = {'subnet': retval}
+        if not evs_rpccall_sync:
+            self.dhcp_agent_notifier.notify(context, payload, methodname)
+        else:
+            msg = self.dhcp_agent_notifier.make_msg(
+                methodname.replace(".", "_"), payload=payload)
+            self.dhcp_agent_notifier.call(context, msg,
+                                          topic=topics.DHCP_AGENT)
+        return retval
+
+    def get_subnet(self, context, id, fields=None):
+        try:
+            ipnetlist = self._evsc.getIPnetInfo('ipnet=%s' % (id))
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        if ipnetlist:
+            subnetdict = self._convert_ipnet_to_subnet(ipnetlist[0])
+            return self._fields(subnetdict, fields)
+        return {}
+
+    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([str(val) for val in value])
+                filterlist.append("%s=%s" % (key, value))
+
+            if filterlist:
+                filterstr = ",".join(filterlist)
+
+        LOG.debug(_("calling ListIPnet from get_subnets() filterstr: '%s'")
+                  % (filterstr))
+        try:
+            ipnetlist = self._evsc.getIPnetInfo(filterstr)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        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_ipnets(context, filters))
+
+    def _release_subnet_dhcp_port(self, context, subnet):
+        """Release any dhcp port associated with the subnet"""
+        filters = dict(evs=subnet['network_id'])
+        portlist = self.get_ports(context, filters)
+        if len(portlist) == 1:
+            # the lone port is a dhcp port created by dhcp agent
+            # it must be released before we can delete the subnet
+            assert portlist[0]['device_owner'] == 'network:dhcp'
+            subnet_update = {'subnet': {'enable_dhcp': False},
+                             'evs_rpccall_sync': True}
+            self.update_subnet(context, subnet['id'], subnet_update)
+
+    def delete_subnet(self, context, id):
+        try:
+            subnet = self.get_subnet(context, id)
+            if not subnet:
+                return
+            pat = radcli.ADRGlobPattern({'name': subnet['network_id'],
+                                         'tenant': subnet['tenant_id']})
+            evs = self._rc.get_object(evsbind.EVS(), pat)
+            # If the subnet is dhcp_enabled, then the dhcp agent would have
+            # created a port connected to this subnet. We need to remove
+            # that port before we can proceed with subnet delete operation.
+            # Since, there is no subnet.delete.start event, we use an another
+            # approach of updating the subnet's enable_dhcp attribute to
+            # False that in turn sends a subnet.udpate notification. This
+            # results in DHCP agent releasing the port.
+            if subnet['enable_dhcp']:
+                self._release_subnet_dhcp_port(context, subnet)
+            evs.removeIPnet(id)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        # notify dhcp agent
+        payload = {
+            'subnet': {
+                'network_id': subnet['network_id'],
+                'id': id,
+            }
+        }
+        self.dhcp_agent_notifier.notify(context, payload, 'subnet.delete.end')
+
+    def create_network(self, context, network):
+        """Creates a network(EVS) for a given tenant.
+
+        An Elastic Virtual Switch (EVS) is a virtual switch that spans
+        one or more servers (physical machines). It represents an isolated L2
+        segment, and the isolation is implemented either through VLANs or
+        VXLANs. An EVS provides network connectivity between the Virtual
+        Machines connected to it. There are two main resources associated with
+        an EVS: IPnet and VPort.
+        """
+        evsname = network['network']['name']
+        if not evsname:
+            evsname = None
+
+        tenantname = network['network']['tenant_id']
+        proplist = []
+        network_type = network['network'][providernet.NETWORK_TYPE]
+        if attributes.is_attr_set(network_type):
+            proplist.append('l2-type=%s' % network_type)
+
+        segment_id = network['network'][providernet.SEGMENTATION_ID]
+        if attributes.is_attr_set(segment_id):
+            if (not attributes.is_attr_set(network_type) or
+                    len(network_type) == 0):
+                raise EVSControllerError(_("provider:network_type must be "
+                                           "specified when provider:"
+                                           "segmentation_id is provided"))
+
+            if network_type == 'vxlan':
+                proplist.append('vni=%d' % segment_id)
+            elif network_type == 'vlan':
+                proplist.append('vlanid=%d' % segment_id)
+            else:
+                raise EVSControllerError(_("specified "
+                                           "provider:network_type '%s' not "
+                                           "supported") % network_type)
+
+        router_external = network['network'][l3.EXTERNAL]
+        if attributes.is_attr_set(router_external):
+            proplist.append("%s=%s" % (NETWORK_EVS_ATTRIBUTE_MAP[l3.EXTERNAL],
+                                       router_external))
+
+        propstr = None
+        if proplist:
+            propstr = ",".join(proplist)
+
+        try:
+            evs = self._evsc.createEVS(propstr, tenantname, evsname)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        return self._convert_evs_to_network(evs)
+
+    def update_network(self, context, id, network):
+        raise EVSOpNotSupported(_("net-update"))
+
+    def get_network(self, context, id, fields=None):
+        try:
+            evslist = self._evsc.getEVSInfo('evs=%s' % id)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.getpayload().errmsg)
+
+        if evslist:
+            networkdict = self._convert_evs_to_network(evslist[0])
+            return self._fields(networkdict, fields)
+        return {}
+
+    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([str(val) for val in value])
+                filterlist.append("%s=%s" % (key, value))
+
+            if filterlist:
+                filterstr = ",".join(filterlist)
+
+        LOG.debug(_("calling ListEVswitch from get_networks(): '%s'")
+                  % (filterstr))
+        try:
+            evslist = self._evsc.getEVSInfo(filterstr)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        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))
+
+    def delete_network(self, context, id):
+        try:
+            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)
+            self._evsc.deleteEVS(id, context.tenant_id)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        # notify dhcp agent of network deletion
+        self.dhcp_agent_notifier.notify(context, {'network': {'id': id}},
+                                        'network.delete.end')
+
+    def create_port(self, context, port):
+        """Creates a port(VPort) for a given network(EVS).
+
+         A VPort represents the point of attachment between the VNIC and an
+         EVS. It encapsulates various network configuration parameters such as
+             -- SLAs (maxbw, cos, and priority)
+             -- IP address and
+             -- MAC address, et al
+         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)
+
+        # 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))
+
+        propstr = None
+        if proplist:
+            propstr = ",".join(proplist)
+
+        try:
+            evsuuid = port['port']['network_id']
+            tenantname = port['port']['tenant_id']
+            # TODO(gmoodalb): -- pull it from the network_id!!
+            if not tenantname:
+                tenantname = context.tenant_id
+            pat = radcli.ADRGlobPattern({'name': evsuuid,
+                                         'tenant': tenantname})
+            evs = self._rc.get_object(evsbind.EVS(), pat)
+            vport = evs.addVPort(propstr, vportname)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        retval = self._convert_vport_to_port(context, vport)
+
+        # notify dhcp agent of port creation
+        self.dhcp_agent_notifier.notify(context, {'port': retval},
+                                        'port.create.end')
+        return retval
+
+    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"))
+
+        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()
+
+        try:
+            pat = radcli.ADRGlobPattern({'uuid': id})
+            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)
+
+        retval = self.get_port(context, id)
+
+        # notify dhcp agent of port update
+        self.dhcp_agent_notifier.notify(context, {'port': retval},
+                                        'port.update.end')
+        return retval
+
+    def get_port(self, context, id, fields=None):
+        try:
+            vportlist = self._evsc.getVPortInfo('vport=%s' % (id))
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        if vportlist:
+            portdict = self._convert_vport_to_port(context, vportlist[0])
+            return self._fields(portdict, fields)
+        return {}
+
+    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))
+
+        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([str(val) for val in value])
+                filterlist.append("%s=%s" % (key, value))
+
+            if filterlist:
+                filterstr = ",".join(filterlist)
+
+        LOG.debug(_("calling getVPortInfo from get_ports(): '%s'") %
+                  (filterstr))
+        try:
+            vportlist = self._evsc.getVPortInfo(filterstr)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        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 port['device_owner'] not in [l3_constants.DEVICE_OWNER_ROUTER_INTF,
+                                        l3_constants.DEVICE_OWNER_ROUTER_GW,
+                                        l3_constants.DEVICE_OWNER_FLOATINGIP]:
+            return
+        router_id = port['device_id']
+        port_update = {
+            'port': {
+                'device_id': '',
+                'device_owner': ''
+            }
+        }
+        self.update_port(context, port['id'], port_update)
+        routers = self.get_sync_data(context.elevated(), [router_id])
+        msg = l3_rpc_agent_api.L3AgentNotify.make_msg("routers_updated",
+                                                      routers=routers)
+        l3_rpc_agent_api.L3AgentNotify.call(context, msg,
+                                            topic=topics.L3_AGENT)
+
+    def delete_port(self, context, id, l3_port_check=True):
+        if l3_port_check:
+            self.prevent_l3_port_deletion(context, id)
+        try:
+            port = self.get_port(context, id)
+            if not port:
+                return
+            if not l3_port_check:
+                self._release_l3agent_internal_port(context, port)
+            pat = radcli.ADRGlobPattern({'name': port['network_id'],
+                                         'tenant': port['tenant_id']})
+            evs = self._rc.get_object(evsbind.EVS(), pat)
+            evs.removeVPort(id)
+        except radcli.ObjectError as oe:
+            raise EVSControllerError(oe.get_payload().errmsg)
+
+        # notify dhcp agent of port deletion
+        payload = {
+            'port': {
+                'network_id': port['network_id'],
+                'id': id,
+            }
+        }
+        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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/evs_plugin.ini	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,11 @@
+[EVS]
+# An URI that specifies an EVS controller. It is of the form
+# ssh://user@hostname, where user is the username to use to connect
+# 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/quantum/quantum.sqlite
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/l3_agent.ini	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,53 @@
+[DEFAULT]
+# Show debugging output in log (sets DEBUG log level output)
+# debug = True
+
+# L3 requires that an interface driver be set.  Choose the one that best
+# matches your plugin.
+
+# Solaris Elastic Virtual Switch (EVS)
+interface_driver = quantum.agent.solaris.interface.SolarisVNICDriver
+
+# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS=y and
+# iproute2 package that supports namespaces).
+# use_namespaces = False
+
+# 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
+# gateway_external_network_id =
+
+# Indicates that this L3 agent should also handle routers that do not have
+# an external network gateway configured.  This option should be True only
+# for a single agent in a Quantum deployment, and may be False for all agents
+# if all routers must have an external network gateway
+# handle_internal_only_routers = True
+
+# Name of bridge used for external network traffic. This should be set to
+# empty value for the linux bridge
+# external_network_bridge =
+
+# seconds between re-sync routers' data if needed
+# periodic_interval = 40
+
+# seconds to start to sync routers' data after
+# starting agent
+# periodic_fuzzy_delay = 5
+
+# Name of the datalink that connects to an external network. By default it's
+# set to net0.
+# external_network_datalink = net0
+
+# Allow forwarding of packets between tenant's networks
+# allow_forwarding_between_networks = False
+
+# An URI that specifies an EVS controller. It is of the form
+# ssh://user@hostname, where user is the username to use to connect
+# to EVS controller specified by hostname. By default it's set to
+# ssh://evsuser@localhost.
+# evs_controller = ssh://evsuser@localhost
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-dhcp-agent	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.6
+
+# 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.
+
+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-dhcp-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-dhcp-agent.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,129 @@
+<?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.
+
+ 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-dhcp-agent">
+
+  <service version="1" type="service"
+    name="application/openstack/neutron/neutron-dhcp-agent">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </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'
+                type='service'>
+      <service_fmri value='svc:/network/dns/server'/>
+    </dependency>
+
+    <dependency name='exclude-dhcp-relay'
+                grouping='exclude_all'
+                restart_on='none'
+                type='service'>
+      <service_fmri value='svc:/network/dhcp/relay'/>
+    </dependency>
+
+    <dependency name='exclude-dhcp-server'
+                grouping='exclude_all'
+                restart_on='none'
+                type='service'>
+      <service_fmri value='svc:/network/dhcp/server'/>
+    </dependency>
+
+    <dependency name='exclude-tftp'
+                grouping='exclude_all'
+                restart_on='none'
+                type='service'>
+      <service_fmri value='svc:/network/tftp/udp6'/>
+    </dependency>
+
+    <dependency name='exclude-dnsmasq'
+                grouping='exclude_all'
+                restart_on='none'
+                type='service'>
+      <service_fmri value='svc:/network/dnsmasq'/>
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/neutron-dhcp-agent %m %{config/config_path} %{config/dhcp_config_path}">
+      <method_context>
+        <method_credential user='neutron' group='neutron'
+          privileges='basic,{net_privaddr}:53/udp,{net_privaddr}:53/tcp,{net_privaddr}:67/udp,{net_privaddr}:69/udp,{net_privaddr}:547/udp,net_icmpaccess,sys_ip_config' />
+      </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/quantum.conf'/>
+        <propval name='dhcp_config_path' type='astring'
+          value='/etc/neutron/dhcp_agent.ini'/>
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Neutron DHCP Agent
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          neutron-dhcp-agent is a server daemon that provides DHCP services to
+          tenant networks.
+        </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='dhcp_config_path' type='astring'
+          required='true'>
+          <common_name>
+            <loctext xml:lang='C'>
+              Filesystem path to Neutron DHCP .ini file
+            </loctext>
+          </common_name>
+        </prop_pattern>
+      </pg_pattern>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-l3-agent	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.6
+
+# 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.
+
+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-l3-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-l3-agent.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,92 @@
+<?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.
+
+ 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-l3-agent">
+
+  <service version="1" type="service"
+    name="application/openstack/neutron/neutron-l3-agent">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <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' />
+      </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/quantum.conf'/>
+        <propval name='l3_config_path' type='astring'
+          value='/etc/neutron/l3_agent.ini'/>
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Neutron Layer 3 Agent
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          neutron-l3-agent is a server daemon that supports Layer 3 and NAT
+          forwarding to provide external network access for VMs on tenant
+          networks.
+        </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='l3_config_path' type='astring'
+          required='true'>
+          <common_name>
+            <loctext xml:lang='C'>
+              Filesystem path to Neutron l3 .ini file
+            </loctext>
+          </common_name>
+        </prop_pattern>
+      </pg_pattern>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron-server	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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-server --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-server.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,91 @@
+<?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.
+
+ 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-server">
+
+  <service version="1" type="service"
+    name="application/openstack/neutron/neutron-server">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/neutron-server %m %{config/config_path} %{config/plugin_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/quantum.conf'/>
+        <propval name='plugin_config_path' type='astring'
+          value='/etc/neutron/plugins/evs/evs_plugin.ini'/>
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Neutron Network Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          neutron-server provides a webserver that exposes the Neutron API, and
+          passes all webservice calls to the Neutron plugin for processing.
+        </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='plugin_config_path' type='astring'
+          required='true'>
+          <common_name>
+            <loctext xml:lang='C'>
+              Filesystem path to Neutron plugin .ini file
+            </loctext>
+          </common_name>
+        </prop_pattern>
+      </pg_pattern>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron.auth_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+solaris.smf.manage.neutron:RO::Manage OpenStack Neutron Service States::
+solaris.smf.value.neutron:RO::Change Values of OpenStack Neutron Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron.exec_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,6 @@
+neutron-agent:solaris:cmd:RO::/usr/sbin/dladm:\
+privs=net_icmpaccess,net_privaddr,net_rawaccess,proc_audit,sys_dl_config
+neutron-agent:solaris:cmd:RO::/usr/sbin/ipadm:\
+privs=net_rawaccess,sys_ip_config
+neutron-agent:solaris:cmd:RO::/usr/sbin/route:\
+privs=sys_ip_config
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron.prof_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,19 @@
+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/plugins/evs/evs_plugin.ini,\
+solaris.admin.edit/etc/neutron/policy.json,\
+solaris.admin.edit/etc/neutron/quantum.conf,\
+solaris.smf.manage.neutron,\
+solaris.smf.value.neutron
+
+OpenStack Management:RO:::profiles=OpenStack Network Management
+
+neutron-agent:RO::\
+Do not assign to users. \
+Commands required for application/openstack/neutron agents:\
+auths=solaris.network.interface.config;\
+profiles=Elastic Virtual Switch Administration,IP Filter Management
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/neutron.user_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1 @@
+neutron::RO::profiles=neutron-agent
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/files/quantum.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,295 @@
+[DEFAULT]
+# Default log level is INFO
+# verbose and debug has the same result.
+# One of them will set DEBUG log level output
+# debug = False
+# verbose = False
+
+# Where to store Quantum state files.  This directory must be writable by the
+# user executing the agent.
+# state_path = /var/lib/quantum
+
+# Where to store lock files
+lock_path = $state_path/lock
+
+# log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s
+# log_date_format = %Y-%m-%d %H:%M:%S
+
+# use_syslog                           -> syslog
+# log_file and log_dir                 -> log_dir/log_file
+# (not log_file) and log_dir           -> log_dir/{binary_name}.log
+# use_stderr                           -> stderr
+# (not user_stderr) and (not log_file) -> stdout
+# publish_errors                       -> notification system
+
+# use_syslog = False
+# syslog_log_facility = LOG_USER
+
+# use_stderr = True
+# log_file =
+# log_dir =
+
+# publish_errors = False
+
+# Address to bind the API server
+bind_host = 0.0.0.0
+
+# Port the bind the API server to
+bind_port = 9696
+
+# Path to the extensions.  Note that this can be a colon-separated list of
+# paths.  For example:
+# api_extensions_path = extensions:/path/to/more/extensions:/even/more/extensions
+# The __path__ of quantum.extensions is appended to this, so if your
+# extensions are in there you don't need to specify them here
+# api_extensions_path =
+
+# Quantum plugin provider module
+# The EVSQuantumPluginV2 Neutron plugin connects to the Solaris Elastic
+# Virtual Switch framework to provide virtual networking between Solaris
+# Zones.
+core_plugin = quantum.plugins.evs.plugin.EVSQuantumPluginV2
+
+# Advanced service modules
+# service_plugins =
+
+# Paste configuration file
+api_paste_config = api-paste.ini
+
+# The strategy to be used for auth.
+# Supported values are 'keystone'(default), 'noauth'.
+# 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
+# randomly generated.
+# 3 octet
+# base_mac = fa:16:3e:00:00:00
+# 4 octet
+# base_mac = fa:16:3e:4f:00:00
+
+# Maximum amount of retries to generate a unique MAC address
+# mac_generation_retries = 16
+
+# DHCP Lease duration (in seconds)
+# dhcp_lease_duration = 120
+
+# Allow sending resource operation notification to DHCP agent
+# dhcp_agent_notification = True
+
+# Enable or disable bulk create/update/delete operations
+# allow_bulk = True
+# Enable or disable pagination
+# allow_pagination = False
+# Enable or disable sorting
+# allow_sorting = False
+# Enable or disable overlapping IPs for subnets
+# Attention: the following parameter MUST be set to False if Quantum is
+# being used in conjunction with nova security groups and/or metadata service.
+# 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 = quantum.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 = quantum.openstack.common.exception, nova.exception
+# AMQP exchange to connect to if using RabbitMQ or QPID
+control_exchange = quantum
+
+# 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=quantum.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=quantum.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 = quantum.openstack.common.notifier.no_op_notifier
+# Logging driver
+# notification_driver = quantum.openstack.common.notifier.log_notifier
+# RPC driver. DHCP agents needs it.
+notification_driver = quantum.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
+
+# 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
+# pagination_max_limit, server will just return pagination_max_limit
+# of number of items.
+# pagination_max_limit = -1
+
+# Maximum number of DNS nameservers per subnet
+# max_dns_nameservers = 5
+
+# Maximum number of host routes per subnet
+# max_subnet_host_routes = 20
+
+# Maximum number of fixed ips per port
+# max_fixed_ips_per_port = 5
+
+# =========== items for agent management extension =============
+# Seconds to regard the agent as down.
+# agent_down_time = 5
+# ===========  end of items for agent management extension =====
+
+# =========== items for agent scheduler extension =============
+# Driver to use for scheduling network to DHCP agent
+# network_scheduler_driver = quantum.scheduler.dhcp_agent_scheduler.ChanceScheduler
+# Driver to use for scheduling router to a default L3 agent
+# router_scheduler_driver = quantum.scheduler.l3_agent_scheduler.ChanceScheduler
+
+# Allow auto scheduling networks to DHCP agent. It will schedule non-hosted
+# networks to first DHCP agent which sends get_active_networks message to
+# quantum server
+# network_auto_schedule = True
+
+# Allow auto scheduling routers to L3 agent. It will schedule non-hosted
+# routers to first L3 agent which sends sync_routers message to quantum server
+# router_auto_schedule = True
+# ===========  end of items for agent scheduler extension =====
+
+[QUOTAS]
+# 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_quota = -1
+
+# number of networks allowed per tenant, and minus means unlimited
+# quota_network = 10
+
+# number of subnets allowed per tenant, and minus means unlimited
+# quota_subnet = 10
+
+# number of ports allowed per tenant, and minus means unlimited
+# quota_port = 50
+
+# number of security groups allowed per tenant, and minus means unlimited
+# quota_security_group = 10
+
+# number of security group rules allowed per tenant, and minus means unlimited
+# quota_security_group_rule = 100
+
+# default driver to use for quota checks
+# The default quota driver 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
+# quantum.plugins.evs.db.quotas_db.EVSDbQuotaDriver.
+# quota_driver = quantum.quota.ConfDriver
+
+[DEFAULT_SERVICETYPE]
+# Description of the default service type (optional)
+# description = "default service type"
+# Enter a service definition line for each advanced service provided
+# by the default service type.
+# Each service definition should be in the following format:
+# <service>:<plugin>[:driver]
+
+[AGENT]
+# Use "sudo quantum-rootwrap /etc/quantum/rootwrap.conf" to use the real
+# root filter facility.
+# Change to "sudo" to skip the filtering and just run the comand directly
+# root_helper = sudo
+
+# =========== items for agent management extension =============
+# seconds between nodes reporting state to server, should be less than
+# agent_down_time
+# report_interval = 4
+
+# ===========  end of items for agent management extension =====
+
+[keystone_authtoken]
+auth_host = 127.0.0.1
+auth_port = 35357
+auth_protocol = http
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+signing_dir = /var/lib/quantum/keystone-signing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/neutron.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,233 @@
+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.
+
+Colorizer Code is borrowed from Twisted:
+Copyright (c) 2001-2010 Twisted Matrix Laboratories.
+
+  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/neutron/neutron.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,381 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/neutron@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Neutron"
+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="Grizzly $(COMPONENT_VERSION)"
+set name=com.oracle.info.description \
+    value="Neutron, the OpenStack virtual network service"
+set name=com.oracle.info.tpno value=16305
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/059
+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=true
+file files/dhcp_agent.ini path=etc/neutron/dhcp_agent.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=true
+file files/l3_agent.ini path=etc/neutron/l3_agent.ini owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=true
+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=true
+file etc/policy.json path=etc/neutron/policy.json owner=neutron group=neutron \
+    mode=0644 overlay=allow preserve=true
+file files/quantum.conf path=etc/neutron/quantum.conf owner=neutron \
+    group=neutron mode=0644 overlay=allow preserve=true
+link path=etc/quantum target=./neutron
+file files/neutron.auth_attr \
+    path=etc/security/auth_attr.d/cloud:openstack:neutron group=sys
+file files/neutron.exec_attr \
+    path=etc/security/exec_attr.d/cloud:openstack:neutron group=sys
+file files/neutron.prof_attr \
+    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 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-server path=lib/svc/method/neutron-server
+file usr/bin/quantum-dhcp-agent path=usr/lib/neutron/neutron-dhcp-agent \
+    mode=0555
+file usr/bin/quantum-l3-agent path=usr/lib/neutron/neutron-l3-agent mode=0555
+file usr/bin/quantum-server path=usr/lib/neutron/neutron-server mode=0555
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/eager_resources.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/dhcp_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/evs_l3_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/l3_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/daemon.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/device.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/dhcp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/external_process.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/interface.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/ip_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/iptables_firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/iptables_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/ovs_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/linux/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/metadata/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/metadata/agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/metadata/namespace_proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/netns_cleanup_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/ovs_cleanup_util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/securitygroups_rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/device.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/dhcp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/interface.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/ipfilters_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/agent/solaris/net_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/api_common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/rpc/agentnotifiers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/rpc/agentnotifiers/l3_rpc_agent_api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/v2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/v2/attributes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/v2/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/v2/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/v2/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/api/views/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/rpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/test_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/topics.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/agents_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/agentschedulers_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/db_base_plugin_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/dhcp_rpc_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/extraroute_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/l3_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/l3_rpc_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/loadbalancer/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/loadbalancer/loadbalancer_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/README
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic.ini
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/common_ext_ops.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/env.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/script.py.mako
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/1149d7de0cfa_port_security.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/1341ed32cc1e_nvp_netbinding_update.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/1b693c095aa3_quota_ext_db_grizzly.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/1c33fa3cd1a1_extra_route_config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/1d76643bcec4_nvp_netbinding.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/2a6d0b51f4bb_cisco_plugin_cleanup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/2c4af419145b_l3_support.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/363468ac592c_nvp_network_gw.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/38335592a0dc_nvp_portmap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/3b54bf9e29f7_nec_plugin_sharednet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/3cb5d900c5de_security_groups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/45680af419f9_nvp_qos.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/4692d074d587_agent_scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/48b6f43f7471_service_type.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/49332180ca96_ryu_plugin_update.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/511471cc46b_agent_ext_model_supp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/54c2c487e913_lbaas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/5a875d0e5c_ryu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/README
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/folsom_initial.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/alembic_migrations/versions/grizzly_release.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/migration/cli.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/model_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/models_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/portsecurity_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/quota_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/routedserviceinsertion_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/routerservicetype_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/securitygroups_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/securitygroups_rpc_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/servicetype_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/db/sqlalchemyutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/debug/README
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/debug/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/debug/commands.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/debug/debug_agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/debug/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/agentscheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/extraroute.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/flavor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/l3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/loadbalancer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/portbindings.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/portsecurity.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/providernet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/quotasv2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/routedserviceinsertion.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/routerservicetype.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/securitygroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/extensions/servicetype.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/locale/ja/LC_MESSAGES/quantum.po
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/locale/quantum.pot
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/eventlet_backdoor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/network_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/log_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/no_op_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/rabbit_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/rpc_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/rpc_notifier2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/notifier/test_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/periodic_task.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/processutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/amqp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/impl_fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/impl_kombu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/impl_qpid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/impl_zmq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/matchmaker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/matchmaker_redis.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/rpc/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/setup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/threadgroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/openstack/common/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/db/l3nat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/db/quotas_db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/evs/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/agent/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/agent/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/agent/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/drivers/haproxy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/drivers/haproxy/cfg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/drivers/haproxy/namespace_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/agent_loadbalancer/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/plugins/services/service_base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/quantum_plugin_base_v2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/rootwrap/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/rootwrap/filters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/rootwrap/wrapper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/scheduler/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/scheduler/dhcp_agent_scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/scheduler/l3_agent_scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/server/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantum/wsgi.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/anyjson-26
+
+# force a dependency on package delivering dnsmasq(8)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/lib/inet/dnsmasq
+
+# force a dependency on package delivering dladm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/dladm
+
+# force a dependency on package delivering evsadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/evsadm
+
+# force a dependency on package delivering ipadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/ipadm
+
+# force a dependency on package delivering ipf(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/ipf
+
+# force a dependency on package delivering ipfstat(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/ipfstat
+
+# force a dependency on package delivering ipnat(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/ipnat
+
+# force a dependency on package delivering ippool(1M)
+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/alembic-26
+
+# force a dependency on cliff; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/cliff-26
+
+# force a dependency on eventlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/eventlet-26
+
+# force a dependency on greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/greenlet-26
+
+# force a dependency on httplib2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/httplib2-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 kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/kombu-26
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/netaddr-26
+
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/paste.deploy-26
+
+# force a dependency on quantumclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/quantumclient-26
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/routes-26
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/sqlalchemy-26
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/webob-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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/patches/01-neutron-no-pyudev.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,17 @@
+In-house patch to Neutron's setup.py file.  It contains requirement
+code which looks for the pyudev module.  Since this module is Linux
+specific, we need to exclude it.  Patch has not yet been submitted
+upstream.
+
+--- quantum-2013.1.3/setup.py.orig   2013-09-19 10:57:28.784977728 -0600
++++ quantum-2013.1.3/setup.py    2013-09-19 10:57:48.050712916 -0600
+@@ -24,6 +24,9 @@
+     requires.append('pywin32')
+     requires.append('wmi')
+     requires.remove('pyudev')
++elif sys.platform == 'sunos5':
++    requires.remove('pyudev')
++    requires.remove('amqplib>=0.6.1')
+
+ Name = 'quantum'
+ Url = "https://launchpad.net/quantum"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/patches/02-dhcp-agent-add-solaris.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,251 @@
+In-house patch to split out the Linux specific implementation details of the
+Neutron DHCP agent into a separate module. This allows for a common
+main DHCP agent module on different platforms.  This patch has not yet
+been submitted upstream.
+
+--- quantum-2013.1.4/quantum/agent/dhcp_agent.py.~1~	2013-10-17 11:24:18.000000000 -0700
++++ quantum-2013.1.4/quantum/agent/dhcp_agent.py	2014-03-13 01:37:26.539103862 -0700
+@@ -17,7 +17,6 @@
+ 
+ import os
+ import socket
+-import uuid
+ 
+ import eventlet
+ import netaddr
+@@ -26,11 +25,8 @@
+ from quantum.agent.common import config
+ from quantum.agent.linux import dhcp
+ from quantum.agent.linux import external_process
+-from quantum.agent.linux import interface
+-from quantum.agent.linux import ip_lib
+ from quantum.agent import rpc as agent_rpc
+ from quantum.common import constants
+-from quantum.common import exceptions
+ from quantum.common import topics
+ from quantum import context
+ from quantum import manager
+@@ -58,6 +54,9 @@
+         cfg.StrOpt('dhcp_driver',
+                    default='quantum.agent.linux.dhcp.Dnsmasq',
+                    help=_("The driver used to manage the DHCP server.")),
++        cfg.StrOpt('devicemanager',
++                   default='quantum.agent.linux.device.DeviceManager',
++                   help=_("The driver to manage OS specific devices.")),
+         cfg.BoolOpt('use_namespaces', default=True,
+                     help=_("Allow overlapping IP.")),
+         cfg.BoolOpt('enable_isolated_metadata', default=False,
+@@ -77,7 +76,9 @@
+         self.dhcp_driver_cls = importutils.import_class(self.conf.dhcp_driver)
+         ctx = context.get_admin_context_without_session()
+         self.plugin_rpc = DhcpPluginApi(topics.PLUGIN, ctx)
+-        self.device_manager = DeviceManager(self.conf, self.plugin_rpc)
++        self.device_manager = \
++            importutils.import_object(self.conf.devicemanager,
++                                      self.conf, self.plugin_rpc)
+         self.lease_relay = DhcpLeaseRelay(self.update_lease)
+ 
+         self.dhcp_version = self.dhcp_driver_cls.check_version()
+@@ -494,167 +495,6 @@
+                 'ports': num_ports}
+ 
+ 
+-class DeviceManager(object):
+-    OPTS = [
+-        cfg.StrOpt('interface_driver',
+-                   help=_("The driver used to manage the virtual interface."))
+-    ]
+-
+-    def __init__(self, conf, plugin):
+-        self.conf = conf
+-        self.root_helper = config.get_root_helper(conf)
+-        self.plugin = plugin
+-        if not conf.interface_driver:
+-            raise SystemExit(_('You must specify an interface driver'))
+-        try:
+-            self.driver = importutils.import_object(conf.interface_driver,
+-                                                    conf)
+-        except:
+-            msg = _("Error importing interface driver "
+-                    "'%s'") % conf.interface_driver
+-            raise SystemExit(msg)
+-
+-    def get_interface_name(self, network, port=None):
+-        """Return interface(device) name for use by the DHCP process."""
+-        if not port:
+-            device_id = self.get_device_id(network)
+-            port = self.plugin.get_dhcp_port(network.id, device_id)
+-        return self.driver.get_device_name(port)
+-
+-    def get_device_id(self, network):
+-        """Return a unique DHCP device ID for this host on the network."""
+-        # There could be more than one dhcp server per network, so create
+-        # a device id that combines host and network ids
+-
+-        host_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())
+-        return 'dhcp%s-%s' % (host_uuid, network.id)
+-
+-    def _get_device(self, network):
+-        """Return DHCP ip_lib device for this host on the network."""
+-        device_id = self.get_device_id(network)
+-        port = self.plugin.get_dhcp_port(network.id, device_id)
+-        interface_name = self.get_interface_name(network, port)
+-        namespace = NS_PREFIX + network.id
+-        return ip_lib.IPDevice(interface_name,
+-                               self.root_helper,
+-                               namespace)
+-
+-    def _set_default_route(self, network):
+-        """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.
+-        """
+-        device = self._get_device(network)
+-        gateway = device.route.get_gateway()
+-
+-        for subnet in network.subnets:
+-            skip_subnet = (
+-                subnet.ip_version != 4
+-                or not subnet.enable_dhcp
+-                or subnet.gateway_ip is None)
+-
+-            if skip_subnet:
+-                continue
+-
+-            if gateway != subnet.gateway_ip:
+-                m = _('Setting gateway for dhcp netns on net %(n)s to %(ip)s')
+-                LOG.debug(m, {'n': network.id, 'ip': subnet.gateway_ip})
+-
+-                device.route.add_gateway(subnet.gateway_ip)
+-
+-            return
+-
+-        # No subnets on the network have a valid gateway.  Clean it up to avoid
+-        # confusion from seeing an invalid gateway here.
+-        if gateway is not None:
+-            msg = _('Removing gateway for dhcp netns on net %s')
+-            LOG.debug(msg, network.id)
+-
+-            device.route.delete_gateway(gateway)
+-
+-    def setup(self, network, reuse_existing=False):
+-        """Create and initialize a device for network's DHCP on this host."""
+-        device_id = self.get_device_id(network)
+-        port = self.plugin.get_dhcp_port(network.id, device_id)
+-
+-        interface_name = self.get_interface_name(network, port)
+-
+-        if self.conf.use_namespaces:
+-            namespace = NS_PREFIX + network.id
+-        else:
+-            namespace = None
+-
+-        if ip_lib.device_exists(interface_name,
+-                                self.root_helper,
+-                                namespace):
+-            if not reuse_existing:
+-                raise exceptions.PreexistingDeviceFailure(
+-                    dev_name=interface_name)
+-
+-            LOG.debug(_('Reusing existing device: %s.'), interface_name)
+-        else:
+-            self.driver.plug(network.id,
+-                             port.id,
+-                             interface_name,
+-                             port.mac_address,
+-                             namespace=namespace)
+-        ip_cidrs = []
+-        for fixed_ip in port.fixed_ips:
+-            subnet = fixed_ip.subnet
+-            net = netaddr.IPNetwork(subnet.cidr)
+-            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):
+-            ip_cidrs.append(METADATA_DEFAULT_IP)
+-
+-        self.driver.init_l3(interface_name, ip_cidrs,
+-                            namespace=namespace)
+-
+-        # ensure that the dhcp interface is first in the list
+-        if namespace is None:
+-            device = ip_lib.IPDevice(interface_name,
+-                                     self.root_helper)
+-            device.route.pullup_route(interface_name)
+-
+-        if self.conf.enable_metadata_network:
+-            meta_cidr = netaddr.IPNetwork(METADATA_DEFAULT_IP)
+-            metadata_subnets = [s for s in network.subnets if
+-                                netaddr.IPNetwork(s.cidr) in meta_cidr]
+-            if metadata_subnets:
+-                # Add a gateway so that packets can be routed back to VMs
+-                device = ip_lib.IPDevice(interface_name,
+-                                         self.root_helper,
+-                                         namespace)
+-                # Only 1 subnet on metadata access network
+-                gateway_ip = metadata_subnets[0].gateway_ip
+-                device.route.add_gateway(gateway_ip)
+-        elif self.conf.use_namespaces:
+-            self._set_default_route(network)
+-
+-        return interface_name
+-
+-    def update(self, network):
+-        """Update device settings for the network's DHCP on this host."""
+-        if self.conf.use_namespaces and not self.conf.enable_metadata_network:
+-            self._set_default_route(network)
+-
+-    def destroy(self, network, device_name):
+-        """Destroy the device used for the network's DHCP on this host."""
+-        if self.conf.use_namespaces:
+-            namespace = NS_PREFIX + network.id
+-        else:
+-            namespace = None
+-
+-        self.driver.unplug(device_name, namespace=namespace)
+-
+-        self.plugin.release_dhcp_port(network.id,
+-                                      self.get_device_id(network))
+-
+-
+ class DictModel(object):
+     """Convert dict into an object that provides attribute access to values."""
+     def __init__(self, d):
+@@ -783,11 +623,11 @@
+     cfg.CONF.register_opts(DhcpAgent.OPTS)
+     config.register_agent_state_opts_helper(cfg.CONF)
+     config.register_root_helper(cfg.CONF)
+-    cfg.CONF.register_opts(DeviceManager.OPTS)
+     cfg.CONF.register_opts(DhcpLeaseRelay.OPTS)
+     cfg.CONF.register_opts(dhcp.OPTS)
+-    cfg.CONF.register_opts(interface.OPTS)
+     cfg.CONF(project='quantum')
++    if not cfg.CONF.devicemanager:
++        raise SystemExit(_('You must specify a devicemanager'))
+     config.setup_logging(cfg.CONF)
+     server = quantum_service.Service.create(
+         binary='quantum-dhcp-agent',
+--- quantum-2013.1.4/quantum/db/dhcp_rpc_base.py.~1~	2013-10-17 11:24:18.000000000 -0700
++++ quantum-2013.1.4/quantum/db/dhcp_rpc_base.py	2014-03-13 01:27:46.731450967 -0700
+@@ -97,11 +97,14 @@
+                 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'])
+-                port['fixed_ips'].extend(
+-                    [dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
++                if dhcp_enabled_subnet_ids:
++                    port['fixed_ips'].extend(
++                        [dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
+ 
+-                retval = plugin.update_port(context, port['id'],
+-                                            dict(port=port))
++                    retval = plugin.update_port(context, port['id'],
++                                                dict(port=port))
++                else:
++                    retval = port
+ 
+         except exc.NoResultFound:
+             pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/patches/03-l3-agent-add-solaris.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,410 @@
+In-house patch to the Neutron L3 agent to allow an alternate implementation (in
+this case, EVS) of L3 and NAT support.  This patch has not yet been
+submitted upstream.
+
+--- quantum-2013.1.4/quantum/agent/l3_agent.py.~1~	2013-10-17 11:24:18.000000000 -0700
++++ quantum-2013.1.4/quantum/agent/l3_agent.py	2014-03-13 01:51:36.761165189 -0700
+@@ -3,6 +3,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
+@@ -16,12 +18,14 @@
+ #    under the License.
+ #
+ # @author: Dan Wendlandt, Nicira, Inc
++# @author: Girish Moodalbail, Oracle, Inc
+ #
+ """
+ 
+ import eventlet
+ from eventlet import semaphore
+ import netaddr
++import platform
+ from oslo.config import cfg
+ 
+ from quantum.agent.common import config
+@@ -31,6 +35,8 @@
+ from quantum.agent.linux import iptables_manager
+ from quantum.agent.linux import utils
+ from quantum.agent import rpc as agent_rpc
++from quantum.agent.solaris import ipfilters_manager
++from quantum.agent.solaris import net_lib
+ from quantum.common import constants as l3_constants
+ from quantum.common import topics
+ from quantum.common import utils as common_utils
+@@ -113,6 +119,8 @@
+ 
+ class L3NATAgent(manager.Manager):
+ 
++    RouterInfo = RouterInfo
++
+     OPTS = [
+         cfg.StrOpt('external_network_bridge', default='br-ex',
+                    help=_("Name of bridge used for external network "
+@@ -223,8 +231,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)
+@@ -303,14 +311,11 @@
+         for p in new_ports:
+             self._set_subnet_info(p)
+             ri.internal_ports.append(p)
+-            self.internal_network_added(ri, ex_gw_port,
+-                                        p['network_id'], p['id'],
+-                                        p['ip_cidr'], p['mac_address'])
++            self.internal_network_added(ri, ex_gw_port, p)
+ 
+         for p in old_ports:
+             ri.internal_ports.remove(p)
+-            self.internal_network_removed(ri, ex_gw_port, p['id'],
+-                                          p['ip_cidr'])
++            self.internal_network_removed(ri, ex_gw_port, p)
+ 
+         internal_cidrs = [p['ip_cidr'] for p in ri.internal_ports]
+ 
+@@ -470,16 +475,17 @@
+             rules.extend(self.internal_network_nat_rules(ex_gw_ip, cidr))
+         return rules
+ 
+-    def internal_network_added(self, ri, ex_gw_port, network_id, port_id,
+-                               internal_cidr, mac_address):
+-        interface_name = self.get_internal_device_name(port_id)
++    def internal_network_added(self, ri, ex_gw_port, p):
++
++        interface_name = self.get_internal_device_name(p['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(p['network_id'], p['id'], interface_name,
++                             p['mac_address'],
+                              namespace=ri.ns_name(),
+                              prefix=INTERNAL_DEV_PREFIX)
+-
++        internal_cidr = p['ip_cidr']
+         self.driver.init_l3(interface_name, [internal_cidr],
+                             namespace=ri.ns_name())
+         ip_address = internal_cidr.split('/')[0]
+@@ -492,8 +498,8 @@
+                 ri.iptables_manager.ipv4['nat'].add_rule(c, r)
+             ri.iptables_manager.apply()
+ 
+-    def internal_network_removed(self, ri, ex_gw_port, port_id, internal_cidr):
+-        interface_name = self.get_internal_device_name(port_id)
++    def internal_network_removed(self, ri, ex_gw_port, p):
++        interface_name = self.get_internal_device_name(p['id'])
+         if ip_lib.device_exists(interface_name,
+                                 root_helper=self.root_helper,
+                                 namespace=ri.ns_name()):
+@@ -503,7 +509,7 @@
+         if ex_gw_port:
+             ex_gw_ip = ex_gw_port['fixed_ips'][0]['ip_address']
+             for c, r in self.internal_network_nat_rules(ex_gw_ip,
+-                                                        internal_cidr):
++                                                        p['ip_cidr']):
+                 ri.iptables_manager.ipv4['nat'].remove_rule(c, r)
+             ri.iptables_manager.apply()
+ 
+@@ -742,16 +748,20 @@
+ def main():
+     eventlet.monkey_patch()
+     conf = cfg.CONF
+-    conf.register_opts(L3NATAgent.OPTS)
+     config.register_agent_state_opts_helper(conf)
+     config.register_root_helper(conf)
+     conf.register_opts(interface.OPTS)
+     conf.register_opts(external_process.OPTS)
++    if platform.system() == "SunOS":
++        manager = 'quantum.agent.evs_l3_agent.EVSL3NATAgent'
++    else:
++        conf.register_opts(L3NATAgent.OPTS)
++        manager = 'quantum.agent.l3_agent.L3NATAgentWithStateReport'
+     conf(project='quantum')
+     config.setup_logging(conf)
+     server = quantum_service.Service.create(
+         binary='quantum-l3-agent',
+         topic=topics.L3_AGENT,
+         report_interval=cfg.CONF.AGENT.report_interval,
+-        manager='quantum.agent.l3_agent.L3NATAgentWithStateReport')
++        manager=manager)
+     service.launch(server).wait()
+--- quantum-2013.1.4/quantum/db/l3_db.py.~1~	2013-10-17 11:24:18.000000000 -0700
++++ quantum-2013.1.4/quantum/db/l3_db.py	2014-03-13 01:48:03.082634902 -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
+@@ -82,6 +85,9 @@
+ class L3_NAT_db_mixin(l3.RouterPluginBase):
+     """Mixin class to add L3/NAT router methods to db_plugin_base_v2"""
+ 
++    Router = Router
++    FloatingIP = FloatingIP
++
+     def _network_model_hook(self, context, original_model, query):
+         query = query.outerjoin(ExternalNetwork,
+                                 (original_model.id ==
+@@ -117,7 +123,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)
+         except exc.MultipleResultsFound:
+@@ -148,11 +154,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)
+@@ -273,7 +279,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,
+@@ -282,15 +288,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).all()
++            rports = self.get_ports(context,
++                                    filters={'device_id': [router_id]})
+             # its possible these ports on on the same network, but
+             # different subnet
+             new_ipnet = netaddr.IPNetwork(subnet_cidr)
+@@ -348,8 +353,9 @@
+                                               port['network_id'],
+                                               subnet['id'],
+                                               subnet['cidr'])
+-            port.update({'device_id': router_id,
+-                         'device_owner': DEVICE_OWNER_ROUTER_INTF})
++            self.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._get_subnet(context, subnet_id)
+@@ -394,7 +400,7 @@
+                                              subnet_id):
+         subnet_db = self._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(
+@@ -440,22 +446,19 @@
+             subnet = self._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']).all()
+-
+-                for p in ports:
+-                    if p['fixed_ips'][0]['subnet_id'] == subnet_id:
+-                        port_id = p['id']
+-                        _network_id = p['network_id']
+-                        self.delete_port(context, p['id'], l3_port_check=False)
+-                        found = True
+-                        break
+-            except exc.NoResultFound:
+-                pass
++            filters = {
++                'device_id': router_id,
++                'device_owner': DEVICE_OWNER_ROUTER_INTF,
++                'network_id': subnet['network_id']
++            }
++            ports = self.get_ports(context, filters)
++            for p in ports:
++                if p['fixed_ips'][0]['subnet_id'] == subnet_id:
++                    port_id = p['id']
++                    _network_id = p['network_id']
++                    self.delete_port(context, p['id'], l3_port_check=False)
++                    found = True
++                    break
+ 
+             if not found:
+                 raise l3.RouterInterfaceNotFoundForSubnet(router_id=router_id,
+@@ -477,7 +480,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)
+         except exc.MultipleResultsFound:
+@@ -505,19 +508,21 @@
+             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.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.get_ports_count(context, filters)
+                 if has_gw_port:
+                     return router_id
+ 
+@@ -578,13 +583,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)
+-            ports = 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.get_ports(context.elevated(), filters)
++        if not ports:
+             raise l3.ExternalGatewayForFloatingIPNotFound(
+                 subnet_id=internal_subnet_id,
+                 port_id=internal_port['id'])
+@@ -602,7 +607,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'],
+@@ -653,7 +658,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'],
+@@ -731,7 +736,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,
+@@ -740,7 +745,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):
+@@ -770,7 +775,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,
+@@ -874,14 +879,17 @@
+                            if it is None, all of routers will be queried.
+         @return: a list of dicted routers with dicted gw_port populated if any
+         """
+-        router_query = context.session.query(Router)
++        router_query = context.session.query(self.Router)
+         if router_ids:
+             if 1 == len(router_ids):
+-                router_query = router_query.filter(Router.id == router_ids[0])
++                router_query = \
++                    router_query.filter(self.Router.id == router_ids[0])
+             else:
+-                router_query = router_query.filter(Router.id.in_(router_ids))
++                router_query = \
++                    router_query.filter(self.Router.id.in_(router_ids))
+         if active is not None:
+-            router_query = router_query.filter(Router.admin_state_up == active)
++            router_query = \
++                router_query.filter(self.Router.admin_state_up == active)
+         routers = router_query.all()
+         gw_port_ids = []
+         if not routers:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/patches/04-CVE-2013-6419.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,219 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.1, Icehouse
+
+commit 67d7d9d617c64f41bb899c4ce525a66c84ccf071
+Author: Aaron Rosen <[email protected]>
+Date:   Mon Oct 7 15:34:38 2013 -0700
+
+    Add X-Tenant-ID to metadata request
+    
+    Previously, one could update a port's device_id to be that of
+    another tenant's instance_id and then be able to retrieve that
+    instance's metadata. In order to prevent this X-Tenant-ID is now
+    passed in the metadata request to nova and nova then checks that
+    X-Tenant-ID also matches the tenant_id for the instance against it's
+    database to ensure it's not being spoofed.
+    
+    DocImpact - When upgrading OpenStack nova and neturon, neutron
+                should be updated first (and neutron-metadata-agent
+                restarted before nova is upgraded) in order to minimize
+                downtime. This is because there is also a patch to nova
+                which has checks X-Tenant-ID against it's database
+                therefore neutron-metadata-agent needs to pass that
+                before nova is upgraded for metadata to work.
+    
+    Change-Id: I2b8fa2f561a7f2914608e68133abf15efa95015a
+    Closes-Bug: #1235450
+
+diff --git a/quantum/agent/metadata/agent.py b/quantum/agent/metadata/agent.py
+index 7bdfae8..e1abe93 100644
+--- a/quantum/agent/metadata/agent.py
++++ b/quantum/agent/metadata/agent.py
+@@ -83,9 +83,9 @@ class MetadataProxyHandler(object):
+         try:
+             LOG.debug(_("Request: %s"), req)
+ 
+-            instance_id = self._get_instance_id(req)
++            instance_id, tenant_id = self._get_instance_and_tenant_id(req)
+             if instance_id:
+-                return self._proxy_request(instance_id, req)
++                return self._proxy_request(instance_id, tenant_id, req)
+             else:
+                 return webob.exc.HTTPNotFound()
+ 
+@@ -95,7 +95,7 @@ class MetadataProxyHandler(object):
+                     'Please try your request again.')
+             return webob.exc.HTTPInternalServerError(explanation=unicode(msg))
+ 
+-    def _get_instance_id(self, req):
++    def _get_instance_and_tenant_id(self, req):
+         qclient = self._get_quantum_client()
+ 
+         remote_address = req.headers.get('X-Forwarded-For')
+@@ -116,12 +116,14 @@ class MetadataProxyHandler(object):
+             fixed_ips=['ip_address=%s' % remote_address])['ports']
+ 
+         if len(ports) == 1:
+-            return ports[0]['device_id']
++            return ports[0]['device_id'], ports[0]['tenant_id']
++        return None, None
+ 
+-    def _proxy_request(self, instance_id, req):
++    def _proxy_request(self, instance_id, tenant_id, req):
+         headers = {
+             'X-Forwarded-For': req.headers.get('X-Forwarded-For'),
+             'X-Instance-ID': instance_id,
++            'X-Tenant-ID': tenant_id,
+             'X-Instance-ID-Signature': self._sign_instance_id(instance_id)
+         }
+ 
+diff --git a/quantum/tests/unit/test_metadata_agent.py b/quantum/tests/unit/test_metadata_agent.py
+index c81a237..0e74bcb 100644
+--- a/quantum/tests/unit/test_metadata_agent.py
++++ b/quantum/tests/unit/test_metadata_agent.py
+@@ -54,8 +54,9 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+ 
+     def test_call(self):
+         req = mock.Mock()
+-        with mock.patch.object(self.handler, '_get_instance_id') as get_id:
+-            get_id.return_value = 'id'
++        with mock.patch.object(self.handler,
++                               '_get_instance_and_tenant_id') as get_ids:
++            get_ids.return_value = ('instance_id', 'tenant_id')
+             with mock.patch.object(self.handler, '_proxy_request') as proxy:
+                 proxy.return_value = 'value'
+ 
+@@ -64,21 +65,23 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+ 
+     def test_call_no_instance_match(self):
+         req = mock.Mock()
+-        with mock.patch.object(self.handler, '_get_instance_id') as get_id:
+-            get_id.return_value = None
++        with mock.patch.object(self.handler,
++                               '_get_instance_and_tenant_id') as get_ids:
++            get_ids.return_value = None, None
+             retval = self.handler(req)
+             self.assertIsInstance(retval, webob.exc.HTTPNotFound)
+ 
+     def test_call_internal_server_error(self):
+         req = mock.Mock()
+-        with mock.patch.object(self.handler, '_get_instance_id') as get_id:
+-            get_id.side_effect = Exception
++        with mock.patch.object(self.handler,
++                               '_get_instance_and_tenant_id') as get_ids:
++            get_ids.side_effect = Exception
+             retval = self.handler(req)
+             self.assertIsInstance(retval, webob.exc.HTTPInternalServerError)
+             self.assertEqual(len(self.log.mock_calls), 2)
+ 
+-    def _get_instance_id_helper(self, headers, list_ports_retval,
+-                                networks=None, router_id=None):
++    def _get_instance_and_tenant_id_helper(self, headers, list_ports_retval,
++                                           networks=None, router_id=None):
+         headers['X-Forwarded-For'] = '192.168.1.1'
+         req = mock.Mock(headers=headers)
+ 
+@@ -86,8 +89,7 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+             return {'ports': list_ports_retval.pop(0)}
+ 
+         self.qclient.return_value.list_ports.side_effect = mock_list_ports
+-        retval = self.handler._get_instance_id(req)
+-
++        instance_id, tenant_id = self.handler._get_instance_and_tenant_id(req)
+         expected = [
+             mock.call(
+                 username=FakeConf.admin_user,
+@@ -114,7 +116,7 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+ 
+         self.qclient.assert_has_calls(expected)
+ 
+-        return retval
++        return (instance_id, tenant_id)
+ 
+     def test_get_instance_id_router_id(self):
+         router_id = 'the_id'
+@@ -125,13 +127,14 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+         networks = ['net1', 'net2']
+         ports = [
+             [{'network_id': 'net1'}, {'network_id': 'net2'}],
+-            [{'device_id': 'device_id'}]
++            [{'device_id': 'device_id', 'tenant_id': 'tenant_id'}]
+         ]
+ 
+         self.assertEqual(
+-            self._get_instance_id_helper(headers, ports, networks=networks,
+-                                         router_id=router_id),
+-            'device_id'
++            self._get_instance_and_tenant_id_helper(headers, ports,
++                                                    networks=networks,
++                                                    router_id=router_id),
++            ('device_id', 'tenant_id')
+         )
+ 
+     def test_get_instance_id_router_id_no_match(self):
+@@ -145,10 +148,11 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+             [{'network_id': 'net1'}, {'network_id': 'net2'}],
+             []
+         ]
+-
+-        self.assertIsNone(
+-            self._get_instance_id_helper(headers, ports, networks=networks,
+-                                         router_id=router_id),
++        self.assertEqual(
++            self._get_instance_and_tenant_id_helper(headers, ports,
++                                                    networks=networks,
++                                                    router_id=router_id),
++            (None, None)
+         )
+ 
+     def test_get_instance_id_network_id(self):
+@@ -158,12 +162,14 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+         }
+ 
+         ports = [
+-            [{'device_id': 'device_id'}]
++            [{'device_id': 'device_id',
++              'tenant_id': 'tenant_id'}]
+         ]
+ 
+         self.assertEqual(
+-            self._get_instance_id_helper(headers, ports, networks=['the_id']),
+-            'device_id'
++            self._get_instance_and_tenant_id_helper(headers, ports,
++                                                    networks=['the_id']),
++            ('device_id', 'tenant_id')
+         )
+ 
+     def test_get_instance_id_network_id_no_match(self):
+@@ -174,8 +180,10 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+ 
+         ports = [[]]
+ 
+-        self.assertIsNone(
+-            self._get_instance_id_helper(headers, ports, networks=['the_id'])
++        self.assertEqual(
++            self._get_instance_and_tenant_id_helper(headers, ports,
++                                                    networks=['the_id']),
++            (None, None)
+         )
+ 
+     def _proxy_request_test_helper(self, response_code=200, method='GET'):
+@@ -190,7 +198,8 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+             with mock.patch('httplib2.Http') as mock_http:
+                 mock_http.return_value.request.return_value = (resp, 'content')
+ 
+-                retval = self.handler._proxy_request('the_id', req)
++                retval = self.handler._proxy_request('the_id', 'tenant_id',
++                                                     req)
+                 mock_http.assert_has_calls([
+                     mock.call().request(
+                         'http://9.9.9.9:8775/the_path',
+@@ -198,7 +207,8 @@ class TestMetadataProxyHandler(base.BaseTestCase):
+                         headers={
+                             'X-Forwarded-For': '8.8.8.8',
+                             'X-Instance-ID-Signature': 'signed',
+-                            'X-Instance-ID': 'the_id'
++                            'X-Instance-ID': 'the_id',
++                            'X-Tenant-ID': 'tenant_id'
+                         },
+                         body=body
+                     )]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/neutron/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,9 @@
+library/python-2/setuptools-26
+library/python/oslo.config-26
+library/python/setuptools-26
+network/ipfilter
+runtime/python-26
+service/network/dnsmasq
+service/network/evs
+system/core-os
+system/network
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,67 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		nova
+COMPONENT_CODENAME=	grizzly
+COMPONENT_VERSION=	2013.1.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:0491ec81552b9c407021941ea1c477d5bcd93ec1dcc66d5fc0c1cef594dac760
+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) 
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version.  The manifest is parameterized, though.
+PYTHON_VERSIONS=	2.6
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+
+COMPONENT_POST_INSTALL_ACTION += \
+	($(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)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-api	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,46 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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
+
+from oslo.config import cfg
+
+
+# name to script mapping for nova API
+MAPPING = {
+    "ec2": "/usr/lib/nova/nova-api-ec2",
+    "metadata": "/usr/lib/nova/nova-api-metadata",
+    "osapi_compute": "/usr/lib/nova/nova-api-os-compute"
+}
+
+
+def start():
+    conf = cfg.CONF
+    conf.import_opt("enabled_apis", "nova.service")
+
+    if sys.argv[2] in conf.enabled_apis:
+        smf_include.smf_subprocess(MAPPING[sys.argv[2]])
+    else:
+        print "Not starting %s.  'enabled_apis' does not include %s" % \
+              (os.environ["SMF_FMRI"], sys.argv[2])
+        return smf_include.SMF_EXIT_TEMP_DISABLE
+
+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/nova-api-ec2.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,65 @@
+<?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.
+
+ 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-api">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-api-ec2">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-api %m ec2">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova EC2 API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-api-ec2 is a service that supports the Nova EC2 API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-api-metadata.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,65 @@
+<?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.
+
+ 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-api-metadata">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-api-metadata">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-api %m metadata">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Metadata API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-api-metadata is a service that supports the Nova Metadata API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-api-osapi-compute.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,66 @@
+<?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.
+
+ 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-api-osapi-compute">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-api-osapi-compute">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-api %m osapi_compute">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Compute API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-api-os-compute is a service that supports the Nova OpenStack
+          Compute API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-cert	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/nova/nova-cert")
+
+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/nova-cert.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,67 @@
+<?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.
+
+ 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-cert">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-cert">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-cert %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Cert Service 
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-cert is a service that supports the Nova Cert service for
+          X509 certificates.  Used to generate certificates for
+          euca-bundle-image.  Only needed for EC2 API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-compute	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/bin/pfexec /usr/lib/nova/nova-compute")
+
+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/nova-compute.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,78 @@
+<?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.
+
+ 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-compute">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-compute">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+    <dependency name='evs' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/network/evs:default' />
+    </dependency>
+    <dependency name='conductor' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/nova/nova-conductor' />
+    </dependency>
+
+    <!-- increase the timeout to 120 seconds.  Nova's RPC calls have a timeout
+         of 60 seconds so the start method needs to extend past that -->
+    <exec_method timeout_seconds="120" type="method" name="start"
+      exec="/lib/svc/method/nova-compute %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Compute Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          Handles all processes relating to instances (guest VMs).
+          nova-compute is responsible for building a disk image, launching it
+          via the underlying virtualization driver, responding to calls to
+          check its state, attaching persistent storage, and terminating it.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-conductor	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,84 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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
+import os
+import sys
+
+import smf_include
+
+from subprocess import CalledProcessError, check_call, PIPE, Popen
+
+from sqlalchemy import create_engine
+
+
+def db_sync():
+    """ function to create the database schema
+    """
+
+    cmd = ["/usr/bin/nova-manage", "db", "sync"]
+    try:
+        check_call(cmd)
+    except CalledProcessError as err:
+        print "Unable to create database for Nova:  %s" % err
+        sys.exit(smf_include.SMF_EXIT_ERR_CONFIG)
+
+
+def start():
+    # read the options from the config file
+    parser = ConfigParser.ConfigParser()
+    parser.read("/etc/nova/nova.conf")
+
+    # get the database type
+    db_engine = create_engine(parser.get("DEFAULT", "sql_connection"))
+    db_type = db_engine.name
+
+    if db_type == "sqlite":
+        # look to see if file exists or if it's zero length
+        abspath = os.path.abspath(db_engine.url.database)
+        if not os.path.exists(abspath) or os.path.getsize(abspath) == 0:
+            db_sync()
+
+    elif db_type == "mysql":
+        mysql_svc = "svc:/application/database/mysql:version_55"
+        cmd = ["/usr/bin/svcs", "-H", "-o", "state", mysql_svc]
+
+        try:
+            p = Popen(cmd, stdout=PIPE, stderr=PIPE)
+            output, error = p.communicate()
+        except CalledProcessError:
+            print "mysql service not found.  Is it installed?"
+            return smf_include.SMF_EXIT_ERR_CONFIG
+
+        if output.strip() != "online":
+            # attempt to start mysql
+            cmd = ["/usr/sbin/svcadm", "enable", "-rs", mysql_svc]
+
+            try:
+                check_call(cmd)
+            except CalledProcessError as err:
+                print "starting mysql service failed:  %s" % err
+                return smf_include.SMF_EXIT_ERR_CONFIG
+
+        # not sure how to check if the database is valid, so just create
+        # the database every time for now
+        db_sync()
+
+    smf_include.smf_subprocess("/usr/lib/nova/nova-conductor")
+
+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/nova-conductor.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,66 @@
+<?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.
+
+ 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-conductor">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-conductor">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-conductor %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Conductor Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          nova-conductor is a service that supports the Nova Conductor, which
+          provides coordination and database query support for Nova.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-consoleauth	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/nova/nova-consoleauth")
+
+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/nova-consoleauth.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,65 @@
+<?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.
+
+ 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-consoleauth">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-consoleauth">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-consoleauth %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Console Authentication Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          Provides authentication support for Nova consoles.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-novncproxy	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/nova/nova-novncproxy")
+
+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/nova-novncproxy.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,70 @@
+<?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.
+
+ 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-novncproxy">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-novncproxy">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-novncproxy %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </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">
+          Websocket noVNC Proxy for OpenStack Nova noVNC consoles.
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          Websocket proxy that is compatible with OpenStack Nova noVNC
+          consoles.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-objectstore	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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.
+
+import os
+
+import smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/nova/nova-objectstore")
+
+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/nova-objectstore.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,66 @@
+<?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="nova-objectstore">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-objectstore">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-objectstore %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Object Store Service 
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          The nova-objectstore service provides an S3 interface for registering
+          images onto the Glance image management service.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova-scheduler	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,27 @@
+#!/usr/bin/python2.6
+
+# 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
+#
+#         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 smf_include
+
+
+def start():
+    smf_include.smf_subprocess("/usr/lib/nova/nova-scheduler")
+
+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/nova-scheduler.xml	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,65 @@
+<?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.
+
+ 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-scheduler">
+
+  <service version="1" type="service"
+    name="application/openstack/nova/nova-scheduler">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/nova-scheduler %m">
+      <method_context>
+        <method_credential user='nova' group='nova' />
+      </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.nova' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.nova' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Nova Scheduler Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          Nova Scheduler picks a compute node to run a VM instance.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova.auth_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+solaris.smf.manage.nova:RO::Manage OpenStack Nova Service States::
+solaris.smf.value.nova:RO::Change Values of OpenStack Nova Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova.conf	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2893 @@
+[DEFAULT]
+
+#
+# Options defined in nova.availability_zones
+#
+
+# availability_zone to show internal services under (string
+# value)
+#internal_service_availability_zone=internal
+
+# default compute node availability_zone (string value)
+#default_availability_zone=nova
+
+
+#
+# Options defined in nova.crypto
+#
+
+# Filename of root CA (string value)
+#ca_file=cacert.pem
+
+# Filename of private key (string value)
+#key_file=private/cakey.pem
+
+# Filename of root Certificate Revocation List (string value)
+#crl_file=crl.pem
+
+# Where we keep our keys (string value)
+#keys_path=$state_path/keys
+
+# Where we keep our root CA (string value)
+#ca_path=$state_path/CA
+
+# Should we use a CA for each project? (boolean value)
+#use_project_ca=false
+
+# Subject for certificate for users, %s for project, user,
+# timestamp (string value)
+#user_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=%.16s-%.16s-%s
+
+# Subject for certificate for projects, %s for project,
+# timestamp (string value)
+#project_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=project-ca-%.16s-%s
+
+
+#
+# Options defined in nova.exception
+#
+
+# make exception message format errors fatal (boolean value)
+#fatal_exception_format_errors=false
+
+
+#
+# Options defined in nova.manager
+#
+
+# Some periodic tasks can be run in a separate process. Should
+# we run them here? (boolean value)
+#run_external_periodic_tasks=true
+
+
+#
+# Options defined in nova.netconf
+#
+
+# 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
+# not necessarily a hostname, FQDN, or IP address. However,
+# the node name must be valid within an AMQP key, and if using
+# ZeroMQ, a valid hostname, FQDN, or IP address (string value)
+#host=nova
+
+# use ipv6 (boolean value)
+#use_ipv6=false
+
+
+#
+# Options defined in nova.notifications
+#
+
+# If set, send compute.instance.update notifications on
+# instance state changes.  Valid values are False for no
+# notifications, True for notifications on any instance
+# changes. (boolean value)
+#notify_on_any_change=false
+
+# If set, send api.fault notifications on caught exceptions in
+# the API service. (boolean value)
+#notify_api_faults=false
+
+# If set, send compute.instance.update notifications on
+# instance state changes.  Valid values are None for no
+# notifications, "vm_state" for notifications on VM state
+# changes, or "vm_and_task_state" for notifications on VM and
+# task state changes. (string value)
+#notify_on_state_change=<None>
+
+
+#
+# Options defined in nova.paths
+#
+
+# Directory where the nova python module is installed (string
+# value)
+#pybasedir=/usr/lib/python2.6/vendor-packages
+
+# Directory where nova binaries are installed (string value)
+bindir=/usr/bin
+
+# Top-level directory for maintaining nova's state (string
+# value)
+state_path=/var/lib/nova
+
+
+#
+# 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)
+#quota_instances=10
+
+# number of instance cores allowed per project (integer value)
+#quota_cores=20
+
+# megabytes of instance ram allowed per project (integer
+# value)
+#quota_ram=51200
+
+# number of floating ips allowed per project (integer value)
+#quota_floating_ips=10
+
+# number of metadata items allowed per instance (integer
+# value)
+#quota_metadata_items=128
+
+# number of injected files allowed (integer value)
+#quota_injected_files=5
+
+# 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)
+#quota_security_groups=10
+
+# number of security rules per security group (integer value)
+#quota_security_group_rules=20
+
+# number of key pairs per user (integer value)
+#quota_key_pairs=100
+
+# number of seconds until a reservation expires (integer
+# value)
+#reservation_expire=86400
+
+# count of reservations until usage is refreshed (integer
+# value)
+#until_refresh=0
+
+# number of seconds between subsequent usage refreshes
+# (integer value)
+#max_age=0
+
+# default driver to use for quota checks (string value)
+#quota_driver=nova.quota.DbQuotaDriver
+
+
+#
+# Options defined in nova.service
+#
+
+# seconds between nodes reporting state to datastore (integer
+# value)
+#report_interval=10
+
+# enable periodic tasks (boolean value)
+#periodic_enable=true
+
+# 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)
+#enabled_apis=ec2,osapi_compute,metadata
+
+# a list of APIs with enabled SSL (list value)
+#enabled_ssl_apis=
+
+# IP address for EC2 API to listen (string value)
+#ec2_listen=0.0.0.0
+
+# port for ec2 api to 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)
+#osapi_compute_listen=0.0.0.0
+
+# list port for osapi compute (integer value)
+#osapi_compute_listen_port=8774
+
+# Number of workers for OpenStack API service (integer value)
+#osapi_compute_workers=<None>
+
+# OpenStack metadata service manager (string value)
+#metadata_manager=nova.api.manager.MetadataManager
+
+# IP address for metadata api to listen (string value)
+#metadata_listen=0.0.0.0
+
+# port for metadata api to 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)
+#compute_manager=nova.compute.manager.ComputeManager
+
+# 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)
+#cert_manager=nova.cert.manager.CertManager
+
+# 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)
+#scheduler_manager=nova.scheduler.manager.SchedulerManager
+
+# maximum time since last check-in for up service (integer
+# value)
+#service_down_time=60
+
+
+#
+# Options defined in nova.test
+#
+
+# File name of clean sqlite db (string value)
+#sqlite_clean_db=clean.sqlite
+
+
+#
+# Options defined in nova.utils
+#
+
+# Whether to log monkey patching (boolean value)
+#monkey_patch=false
+
+# List of modules/decorators to monkey patch (list value)
+#monkey_patch_modules=nova.api.ec2.cloud:nova.openstack.common.notifier.api.notify_decorator,nova.compute.api:nova.openstack.common.notifier.api.notify_decorator
+
+# Length of generated instance admin passwords (integer value)
+#password_length=12
+
+# Whether to disable inter-process locks (boolean value)
+#disable_process_locking=false
+
+# time period to generate instance usages for.  Time period
+# must be hour, day, month or year (string value)
+#instance_usage_audit_period=month
+
+# Path to the rootwrap configuration file to use for running
+# commands as root (string value)
+#rootwrap_config=/etc/nova/rootwrap.conf
+
+# Explicitly specify the temporary working directory (string
+# value)
+#tempdir=<None>
+
+
+#
+# Options defined in nova.wsgi
+#
+
+# File name for the paste.deploy config for nova-api (string
+# value)
+#api_paste_config=api-paste.ini
+
+# A python format string that is used as the template to
+# generate log lines. The following values can be formatted
+# into it: client_ip, date_time, request_line, status_code,
+# body_length, wall_seconds. (string value)
+#wsgi_log_format=%(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f
+
+# CA certificate file to use to verify connecting clients
+# (string value)
+#ssl_ca_file=<None>
+
+# SSL certificate of API server (string value)
+#ssl_cert_file=<None>
+
+# SSL private key of API server (string value)
+#ssl_key_file=<None>
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server
+# socket. Not supported on OS X. (integer value)
+#tcp_keepidle=600
+
+
+#
+# Options defined in nova.api.auth
+#
+
+# whether to rate limit the api (boolean value)
+#api_rate_limit=true
+
+# The strategy to use for auth: noauth or keystone. (string
+# value)
+#auth_strategy=noauth
+
+# Treat X-Forwarded-For as the canonical remote address. Only
+# enable this if you have a sanitizing proxy. (boolean value)
+#use_forwarded_for=false
+
+
+#
+# Options defined in nova.api.ec2
+#
+
+# Number of failed auths before lockout. (integer value)
+#lockout_attempts=5
+
+# Number of minutes to lockout if triggered. (integer value)
+#lockout_minutes=15
+
+# Number of minutes for lockout window. (integer value)
+#lockout_window=15
+
+# URL to get token from ec2 request. (string value)
+#keystone_ec2_url=http://localhost:5000/v2.0/ec2tokens
+
+# Return the IP address as private dns hostname in describe
+# instances (boolean value)
+#ec2_private_dns_show_ip=false
+
+# Validate security group names according to EC2 specification
+# (boolean value)
+#ec2_strict_validation=true
+
+# Time in seconds before ec2 timestamp expires (integer value)
+#ec2_timestamp_expiry=300
+
+
+#
+# Options defined in nova.api.ec2.cloud
+#
+
+# the ip of the ec2 api server (string value)
+#ec2_host=$my_ip
+
+# the internal ip of the ec2 api server (string value)
+#ec2_dmz_host=$my_ip
+
+# the port of the ec2 api server (integer value)
+#ec2_port=8773
+
+# 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
+# value)
+#ec2_path=/services/Cloud
+
+# list of region=fqdn pairs separated by commas (list value)
+#region_list=
+
+
+#
+# Options defined in nova.api.metadata.base
+#
+
+# List of metadata versions to skip placing into the config
+# drive (string value)
+#config_drive_skip_versions=1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01
+
+
+#
+# Options defined in nova.api.metadata.handler
+#
+
+# Set flag to indicate Quantum will proxy metadata requests
+# and resolve instance ids. (boolean value)
+#service_quantum_metadata_proxy=false
+
+# Shared secret to validate proxies Quantum metadata requests
+# (string value)
+#quantum_metadata_proxy_shared_secret=
+
+
+#
+# Options defined in nova.api.openstack.common
+#
+
+# the maximum number of items returned in a single response
+# from a collection resource (integer value)
+#osapi_max_limit=1000
+
+# Base URL that will be presented to users in links to the
+# OpenStack Compute API (string value)
+#osapi_compute_link_prefix=<None>
+
+# Base URL that will be presented to users in links to glance
+# resources (string value)
+#osapi_glance_link_prefix=<None>
+
+
+#
+# Options defined in nova.api.openstack.compute
+#
+
+# Permit instance snapshot operations. (boolean value)
+#allow_instance_snapshots=true
+
+
+#
+# Options defined in nova.api.openstack.compute.contrib
+#
+
+# Specify list of extensions to load when using
+# osapi_compute_extension option with
+# nova.api.openstack.compute.contrib.select_extensions (list
+# value)
+#osapi_compute_ext_list=
+
+
+#
+# Options defined in nova.api.openstack.compute.contrib.fping
+#
+
+# Full path to fping. (string value)
+fping_path=/usr/bin/fping
+
+
+#
+# Options defined in nova.api.openstack.compute.contrib.hide_server_addresses
+#
+
+# List of instance states that should hide network info (list
+# value)
+#osapi_hide_server_address_states=building
+
+
+#
+# Options defined in nova.api.openstack.compute.contrib.os_tenant_networks
+#
+
+# Enables or disables quotaing of tenant networks (boolean
+# value)
+#enable_network_quota=false
+
+# Control for checking for default networks (string value)
+#use_quantum_default_nets=False
+
+# Default tenant id when creating quantum networks (string
+# value)
+#quantum_default_tenant_id=default
+
+
+#
+# Options defined in nova.api.openstack.compute.extensions
+#
+
+# osapi compute extension to load (multi valued)
+#osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
+
+
+#
+# Options defined in nova.api.openstack.compute.servers
+#
+
+# Allows use of instance password during server creation
+# (boolean value)
+#enable_instance_password=true
+
+
+#
+# Options defined in nova.api.sizelimit
+#
+
+# the maximum body size per each osapi request(bytes) (integer
+# value)
+#osapi_max_request_body_size=114688
+
+
+#
+# Options defined in nova.cert.rpcapi
+#
+
+# the topic cert nodes listen on (string value)
+#cert_topic=cert
+
+
+#
+# Options defined in nova.cloudpipe.pipelib
+#
+
+# image id used when starting up a cloudpipe vpn server
+# (string value)
+#vpn_image_id=0
+
+# Instance type for vpn instances (string value)
+#vpn_instance_type=m1.tiny
+
+# Template for cloudpipe instance boot script (string value)
+#boot_script_template=$pybasedir/nova/cloudpipe/bootscript.template
+
+# Network to push into openvpn config (string value)
+#dmz_net=10.0.0.0
+
+# Netmask to push into openvpn config (string value)
+#dmz_mask=255.255.255.0
+
+# Suffix to add to project name for vpn key and secgroups
+# (string value)
+#vpn_key_suffix=-vpn
+
+
+#
+# Options defined in nova.common.memorycache
+#
+
+# Memcached servers or None for in process cache. (list value)
+#memcached_servers=<None>
+
+
+#
+# Options defined in nova.compute
+#
+
+# The full class name of the compute API class to use (string
+# value)
+#compute_api_class=nova.compute.api.API
+
+
+#
+# Options defined in nova.compute.api
+#
+
+# Allow destination machine to match source for resize. Useful
+# when testing in single-host environments. (boolean value)
+#allow_resize_to_same_host=false
+
+# availability zone to use when user doesn't specify one
+# (string value)
+#default_schedule_zone=<None>
+
+# These are image properties which a snapshot should not
+# 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
+# a raw disk image instead (string value)
+#null_kernel=nokernel
+
+# When creating multiple instances with a single request using
+# the os-multiple-create API extension, this template will be
+# used to build the display name for each instance. The
+# benefit is that the instances end up with different
+# hostnames. To restore legacy behavior of every instance
+# having the same name, set this option to "%(name)s".  Valid
+# keys for the template are: name, uuid, count. (string value)
+#multi_instance_display_name_template=%(name)s-%(uuid)s
+
+
+#
+# Options defined in nova.compute.instance_types
+#
+
+# default instance type to use, testing only (string value)
+#default_instance_type=m1.small
+
+
+#
+# Options defined in nova.compute.manager
+#
+
+# Console proxy host to use to connect to instances on this
+# host. (string value)
+#console_host=nova
+
+# Name of network to use to set access ips for instances
+# (string value)
+#default_access_ip_network_name=<None>
+
+# Whether to batch up the application of IPTables rules during
+# a host restart and apply all at the end of the init phase
+# (boolean value)
+#defer_iptables_apply=false
+
+# where instances are stored on disk (string value)
+#instances_path=$state_path/instances
+
+# Generate periodic compute.instance.exists notifications
+# (boolean value)
+#instance_usage_audit=false
+
+# Number of 1 second retries needed in live_migration (integer
+# value)
+#live_migration_retry_count=30
+
+# Whether to start guests that were running before the host
+# rebooted (boolean value)
+#resume_guests_state_on_host_boot=false
+
+# interval to pull bandwidth usage info (integer value)
+#bandwidth_poll_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
+
+# Interval in seconds for gathering volume usages (integer
+# value)
+#volume_usage_poll_interval=0
+
+# 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
+
+# Number of seconds to wait between runs of the cleanup task.
+# (integer value)
+#running_deleted_instance_poll_interval=1800
+
+# Number of seconds after being deleted when a running
+# instance should be considered eligible for cleanup. (integer
+# value)
+#running_deleted_instance_timeout=0
+
+# Automatically hard reboot an instance if it has been stuck
+# in a rebooting state longer than N seconds. Set to 0 to
+# disable. (integer value)
+#reboot_timeout=0
+
+# Amount of time in seconds an instance can be in BUILD before
+# going into ERROR status.Set to 0 to disable. (integer value)
+#instance_build_timeout=0
+
+# Automatically unrescue an instance after N seconds. Set to 0
+# to disable. (integer value)
+#rescue_timeout=0
+
+# Automatically confirm resizes after N seconds. Set to 0 to
+# disable. (integer value)
+#resize_confirm_window=0
+
+
+#
+# Options defined in nova.compute.resource_tracker
+#
+
+# Amount of disk in MB to reserve for the host (integer value)
+#reserved_host_disk_mb=0
+
+# Amount of memory in MB to reserve for the host (integer
+# value)
+#reserved_host_memory_mb=512
+
+# Class that will manage stats for the local compute host
+# (string value)
+#compute_stats_class=nova.compute.stats.Stats
+
+
+#
+# Options defined in nova.compute.rpcapi
+#
+
+# the topic compute nodes listen on (string value)
+#compute_topic=compute
+
+
+#
+# Options defined in nova.console.manager
+#
+
+# Driver to use for the console proxy (string value)
+console_driver=nova.console.fake.FakeConsoleProxy
+
+# Stub calls to compute worker for tests (boolean value)
+#stub_compute=false
+
+# Publicly visible name for this console host (string value)
+#console_public_hostname=nova
+
+
+#
+# Options defined in nova.console.rpcapi
+#
+
+# the topic console proxy nodes listen on (string value)
+#console_topic=console
+
+
+#
+# Options defined in nova.console.vmrc
+#
+
+# port for VMware VMRC connections (integer value)
+#console_vmrc_port=443
+
+# number of retries for retrieving VMRC information (integer
+# value)
+#console_vmrc_error_retries=10
+
+
+#
+# Options defined in nova.console.xvp
+#
+
+# XVP conf template (string value)
+#console_xvp_conf_template=$pybasedir/nova/console/xvp.conf.template
+
+# generated XVP conf file (string value)
+#console_xvp_conf=/etc/xvp.conf
+
+# XVP master process pid file (string value)
+#console_xvp_pid=/var/run/xvp.pid
+
+# XVP log file (string value)
+#console_xvp_log=/var/log/xvp.log
+
+# port for XVP to multiplex VNC connections on (integer value)
+#console_xvp_multiplex_port=5900
+
+
+#
+# Options defined in nova.consoleauth
+#
+
+# the topic console auth proxy nodes listen on (string value)
+#consoleauth_topic=consoleauth
+
+
+#
+# Options defined in nova.consoleauth.manager
+#
+
+# 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
+#
+
+# Services to be added to the available pool on create
+# (boolean value)
+#enable_new_services=true
+
+# Template string to be used to generate instance names
+# (string value)
+#instance_name_template=instance-%08x
+
+# Template string to be used to generate snapshot names
+# (string value)
+#snapshot_name_template=snapshot-%s
+
+
+#
+# Options defined in nova.db.base
+#
+
+# driver to use for database access (string value)
+#db_driver=nova.db
+
+
+#
+# Options defined in nova.db.sqlalchemy.api
+#
+
+# When set, compute API will consider duplicate hostnames
+# invalid within the specified scope, regardless of case.
+# Should be empty, "project" or "global". (string value)
+#osapi_compute_unique_server_name_scope=
+
+
+#
+# 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)
+#image_decryption_dir=/tmp
+
+# 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)
+#s3_port=3333
+
+# 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)
+#s3_secret_key=notchecked
+
+# 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)
+#s3_affix_tenant=false
+
+
+#
+# Options defined in nova.ipv6.api
+#
+
+# Backend to use for IPv6 generation (string value)
+#ipv6_backend=rfc2462
+
+
+#
+# Options defined in nova.network
+#
+
+# The full class name of the network API class to use (string
+# value)
+network_api_class=nova.network.quantumv2.api.API
+
+
+#
+# Options defined in nova.network.driver
+#
+
+# Driver to use for network creation (string value)
+#network_driver=nova.network.linux_net
+
+
+#
+# Options defined in nova.network.floating_ips
+#
+
+# Default pool for floating ips (string value)
+#default_floating_pool=nova
+
+# Autoassigning floating ip to VM (boolean value)
+#auto_assign_floating_ip=false
+
+# 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
+# value)
+#instance_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
+
+# full class name for the DNS Zone for instance IPs (string
+# value)
+#instance_dns_domain=
+
+
+#
+# Options defined in nova.network.ldapdns
+#
+
+# 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)
+#ldap_dns_user=uid=admin,ou=people,dc=example,dc=org
+
+# password for ldap DNS (string value)
+#ldap_dns_password=password
+
+# Hostmaster for ldap dns driver Statement of Authority
+# (string value)
+#[email protected]
+
+# DNS Servers for ldap dns driver (multi valued)
+#ldap_dns_servers=dns.example.org
+
+# 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
+# of Authority (string value)
+#ldap_dns_soa_refresh=1800
+
+# 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
+# of Authority (string value)
+#ldap_dns_soa_expiry=86400
+
+# Minimum interval (in seconds) for ldap dns driver Statement
+# of Authority (string value)
+#ldap_dns_soa_minimum=7200
+
+
+#
+# Options defined in nova.network.linux_net
+#
+
+# location of flagfiles for dhcpbridge (multi valued)
+#dhcpbridge_flagfile=/etc/nova/nova-dhcpbridge.conf
+
+# Location to keep network config files (string value)
+#networks_path=$state_path/networks
+
+# 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)
+#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
+# specified multiple times. (multi valued)
+#dns_server=
+
+# if set, uses the dns1 and dns2 from the network ref.as dns
+# servers. (boolean value)
+#use_network_dns_servers=false
+
+# A list of dmz range that should be accepted (list value)
+#dmz_cidr=
+
+# Traffic to this range will always be snatted to the fallback
+# ip, even if it would normally be bridged out of the node.
+# Can be specified multiple times. (multi valued)
+#force_snat_range=
+
+# Override the default dnsmasq settings with this file (string
+# value)
+#dnsmasq_config_file=
+
+# Driver used to create ethernet devices. (string value)
+#linuxnet_interface_driver=nova.network.linux_net.LinuxBridgeInterfaceDriver
+
+# Name of Open vSwitch bridge used with linuxnet (string
+# value)
+#linuxnet_ovs_integration_bridge=br-int
+
+# send gratuitous ARPs for HA setup (boolean value)
+#send_arp_for_ha=false
+
+# 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
+# default gateway from dhcp server (boolean value)
+#use_single_default_gateway=false
+
+# An interface that bridges can forward to. If this is set to
+# all then all traffic will be forwarded. Can be specified
+# multiple times. (multi valued)
+#forward_bridge_interface=all
+
+# the ip for the metadata api server (string value)
+#metadata_host=$my_ip
+
+# the port for the metadata api port (integer value)
+#metadata_port=8775
+
+# Regular expression to match iptables rule that shouldalways
+# be on the top. (string value)
+#iptables_top_regex=
+
+# Regular expression to match iptables rule that shouldalways
+# be on the bottom. (string value)
+#iptables_bottom_regex=
+
+
+#
+# Options defined in nova.network.manager
+#
+
+# Bridge for simple network instances (string value)
+#flat_network_bridge=<None>
+
+# Dns for simple network (string value)
+#flat_network_dns=8.8.4.4
+
+# Whether to attempt to inject network setup into guest
+# (boolean value)
+#flat_injected=false
+
+# FlatDhcp will bridge into this interface if set (string
+# value)
+#flat_interface=<None>
+
+# First VLAN for private networks (integer value)
+#vlan_start=100
+
+# vlans will bridge into this interface if set (string value)
+#vlan_interface=<None>
+
+# Number of networks to support (integer value)
+#num_networks=1
+
+# Public IP for the cloudpipe VPN servers (string value)
+#vpn_ip=$my_ip
+
+# First Vpn port for private networks (integer value)
+#vpn_start=1000
+
+# Number of addresses in each private subnet (integer value)
+#network_size=256
+
+# Fixed IP address block (string value)
+#fixed_range=10.0.0.0/8
+
+# Fixed IPv6 address block (string value)
+#fixed_range_v6=fd00::/48
+
+# Default IPv4 gateway (string value)
+#gateway=<None>
+
+# Default IPv6 gateway (string value)
+#gateway_v6=<None>
+
+# Number of addresses reserved for vpn clients (integer value)
+#cnt_vpn_clients=0
+
+# Seconds after which a deallocated ip is disassociated
+# (integer value)
+#fixed_ip_disassociate_timeout=600
+
+# Number of attempts to create unique mac address (integer
+# 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
+
+# If True, unused gateway devices (VLAN and bridge) are
+# deleted in VLAN network mode with multi hosted networks
+# (boolean value)
+#teardown_unused_network_gateway=false
+
+# If True, send a dhcp release on instance termination
+# (boolean value)
+#force_dhcp_release=false
+
+# If True in multi_host mode, all compute hosts share the same
+# dhcp address. (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)
+#update_dns_entries=false
+
+# Number of seconds to wait between runs of updates to DNS
+# entries. (integer value)
+#dns_update_periodic_interval=-1
+
+# domain to use for building the hostnames (string value)
+#dhcp_domain=novalocal
+
+# Indicates underlying L3 management library (string value)
+#l3_lib=nova.network.l3.LinuxNetL3
+
+
+#
+# Options defined in nova.network.quantumv2.api
+#
+
+# URL for connecting to quantum (string value)
+#quantum_url=http://127.0.0.1:9696
+
+# timeout value for connecting to quantum in seconds (integer
+# value)
+#quantum_url_timeout=30
+
+# username for connecting to quantum in admin context (string
+# value)
+#quantum_admin_username=<None>
+
+# password for connecting to quantum in admin context (string
+# value)
+#quantum_admin_password=<None>
+
+# tenant name for connecting to quantum in admin context
+# (string value)
+#quantum_admin_tenant_name=<None>
+
+# region name for connecting to quantum in admin context
+# (string value)
+#quantum_region_name=<None>
+
+# auth url for connecting to quantum in admin context (string
+# value)
+#quantum_admin_auth_url=http://localhost:5000/v2.0
+
+# if set, ignore any SSL validation issues (boolean value)
+#quantum_api_insecure=false
+
+# auth strategy for connecting to quantum in admin context
+# (string value)
+#quantum_auth_strategy=keystone
+
+# Name of Integration Bridge used by Open vSwitch (string
+# value)
+#quantum_ovs_bridge=br-int
+
+# Number of seconds before querying quantum for extensions
+# (integer value)
+#quantum_extension_sync_interval=600
+
+
+#
+# Options defined in nova.network.rpcapi
+#
+
+# the topic network nodes listen on (string value)
+#network_topic=network
+
+# Default value for multi_host in networks. Also, if set, some
+# rpc network calls will be sent directly to host. (boolean
+# value)
+#multi_host=false
+
+
+#
+# Options defined in nova.network.security_group.openstack_driver
+#
+
+# The full class name of the security API class (string value)
+#security_group_api=nova
+
+# The full class name of the security group handler class
+# (string value)
+#security_group_handler=nova.network.sg.NullSecurityGroupHandler
+
+
+#
+# Options defined in bin.nova-clear-rabbit-queues
+#
+
+# Queues to delete (multi valued)
+#queues=
+
+# delete nova exchange too. (boolean value)
+#delete_exchange=false
+
+
+#
+# Options defined in bin.nova-novncproxy
+#
+
+# Record sessions to FILE.[session_number] (boolean value)
+#record=false
+
+# Become a daemon (background process) (boolean value)
+#daemon=false
+
+# Disallow non-encrypted connections (boolean value)
+#ssl_only=false
+
+# Source is ipv6 (boolean value)
+#source_is_ipv6=false
+
+# SSL certificate file (string value)
+#cert=self.pem
+
+# SSL key file (if separate from cert) (string value)
+#key=<None>
+
+# Run webserver on same port. Serve files from DIR. (string
+# value)
+#web=/usr/share/novnc
+
+# Host on which to listen for incoming requests (string value)
+#novncproxy_host=0.0.0.0
+
+# Port on which to listen for incoming requests (integer
+# value)
+#novncproxy_port=6080
+
+
+#
+# Options defined in nova.objectstore.s3server
+#
+
+# 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)
+#s3_listen_port=3333
+
+
+#
+# Options defined in nova.openstack.common.db.api
+#
+
+# The backend to use for db (string value)
+#db_backend=sqlalchemy
+
+# Enable the experimental use of thread pooling for all DB API
+# calls (boolean value)
+#dbapi_use_tpool=false
+
+
+#
+# Options defined in nova.openstack.common.db.sqlalchemy.session
+#
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+#sql_connection=sqlite:////nova/openstack/common/db/$sqlite_db
+
+# the filename to use with sqlite (string value)
+#sqlite_db=nova.sqlite
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#sql_idle_timeout=3600
+
+# If passed, use synchronous mode for sqlite (boolean value)
+#sqlite_synchronous=true
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+#sql_min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+#sql_max_pool_size=5
+
+# maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+#sql_max_retries=10
+
+# interval between retries of opening a sql connection
+# (integer value)
+#sql_retry_interval=10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+#sql_max_overflow=<None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+#sql_connection_debug=0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+#sql_connection_trace=false
+
+
+#
+# Options defined in nova.openstack.common.eventlet_backdoor
+#
+
+# port for eventlet backdoor to listen (integer value)
+#backdoor_port=<None>
+
+
+#
+# Options defined in nova.openstack.common.lockutils
+#
+
+# Whether to disable inter-process locks (boolean value)
+#disable_process_locking=false
+
+# Directory to use for lock files. Default to a temp directory
+# (string value)
+#lock_path=<None>
+
+
+#
+# Options defined in nova.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
+
+# Log output to standard error (boolean value)
+#use_stderr=true
+
+# Default file mode used when creating log files (string
+# value)
+#logfile_mode=0644
+
+# format string to use for log messages with context (string
+# value)
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
+
+# format string to use for log messages without context
+# (string value)
+#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+
+# data to append to log format when level is DEBUG (string
+# value)
+#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
+
+# prefix each line of exception output with this format
+# (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)
+#publish_errors=false
+
+# make deprecations fatal (boolean value)
+#fatal_deprecations=false
+
+# If an instance is passed with the log message, format it
+# like this (string value)
+#instance_format="[instance: %(uuid)s] "
+
+# If an instance UUID is passed with the log message, format
+# it like this (string value)
+#instance_uuid_format="[instance: %(uuid)s] "
+
+# If this option is specified, the logging configuration file
+# specified is used and overrides any other logging options
+# specified. Please see the Python logging module
+# documentation for details on logging configuration files.
+# (string value)
+#log_config=<None>
+
+# A logging.Formatter log message format string which may use
+# any of the available logging.LogRecord attributes. Default:
+# %(default)s (string value)
+#log_format=%(asctime)s %(levelname)8s [%(name)s] %(message)s
+
+# Format string for %%(asctime)s in log records. Default:
+# %(default)s (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to output to. If not set,
+# logging will go to stdout. (string value)
+#log_file=<None>
+
+# (Optional) The directory to keep log files in (will be
+# prepended to --log-file) (string value)
+#log_dir=<None>
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+# syslog facility to receive log lines (string value)
+#syslog_log_facility=LOG_USER
+
+
+#
+# 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=$host
+
+
+#
+# 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.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.openstack.common.exception,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
+#
+
+# Enable a fast single reply queue if using AMQP based RPC
+# like RabbitMQ or Qpid. (boolean value)
+#amqp_rpc_single_reply_queue=false
+
+
+#
+# Options defined in nova.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
+# (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 durable queues in RabbitMQ (boolean value)
+#rabbit_durable_queues=false
+
+# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
+# wipe RabbitMQ database when changing this option. (boolean
+# value)
+#rabbit_ha_queues=false
+
+
+#
+# Options defined in nova.openstack.common.rpc.impl_qpid
+#
+
+# Qpid broker hostname (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port (string 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
+
+
+#
+# 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=sorcha
+
+
+#
+# Options defined in nova.openstack.common.rpc.matchmaker
+#
+
+# Matchmaker ring file (JSON) (string value)
+#matchmaker_ringfile=/etc/nova/matchmaker_ring.json
+
+
+#
+# Options defined in nova.scheduler.driver
+#
+
+# 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
+#
+
+# New instances will be scheduled on a host chosen randomly
+# from a subset of the N best hosts. This property defines the
+# subset size that a host is chosen from. A value of 1 chooses
+# the first host returned by the weighing functions. This
+# value must be at least 1. Any value less than 1 will be
+# ignored, and 1 will be used instead (integer value)
+#scheduler_host_subset_size=1
+
+
+#
+# Options defined in nova.scheduler.filters.core_filter
+#
+
+# Virtual CPU to Physical CPU allocation ratio (floating point
+# value)
+#cpu_allocation_ratio=16.0
+
+
+#
+# Options defined in nova.scheduler.filters.disk_filter
+#
+
+# virtual disk to physical disk allocation ratio (floating
+# point value)
+#disk_allocation_ratio=1.0
+
+
+#
+# Options defined in nova.scheduler.filters.io_ops_filter
+#
+
+# Ignore hosts that have too many
+# builds/resizes/snaps/migrations (integer value)
+#max_io_ops_per_host=8
+
+
+#
+# Options defined in nova.scheduler.filters.isolated_hosts_filter
+#
+
+# Images to run on isolated host (list value)
+#isolated_images=
+
+# Host reserved for specific images (list value)
+#isolated_hosts=
+
+
+#
+# Options defined in nova.scheduler.filters.num_instances_filter
+#
+
+# Ignore hosts that have too many instances (integer value)
+#max_instances_per_host=50
+
+
+#
+# Options defined in nova.scheduler.filters.ram_filter
+#
+
+# virtual ram to physical ram allocation ratio (floating point
+# value)
+#ram_allocation_ratio=1.5
+
+
+#
+# Options defined in nova.scheduler.host_manager
+#
+
+# Filter classes available to the scheduler which may be
+# specified more than once.  An entry of
+# "nova.scheduler.filters.standard_filters" maps to all
+# filters included with nova. (multi valued)
+#scheduler_available_filters=nova.scheduler.filters.all_filters
+
+# 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
+
+# Which weight class names to use for weighing hosts (list
+# value)
+#scheduler_weight_classes=nova.scheduler.weights.all_weighers
+
+
+#
+# Options defined in nova.scheduler.manager
+#
+
+# Default driver to use for the scheduler (string value)
+#scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
+
+
+#
+# Options defined in nova.scheduler.multi
+#
+
+# Driver to use for scheduling compute calls (string value)
+#compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
+
+# Default driver to use for scheduling calls (string value)
+#default_scheduler_driver=nova.scheduler.chance.ChanceScheduler
+
+
+#
+# Options defined in nova.scheduler.rpcapi
+#
+
+# the topic scheduler nodes listen on (string value)
+#scheduler_topic=scheduler
+
+
+#
+# Options defined in nova.scheduler.scheduler_options
+#
+
+# Absolute path to scheduler configuration JSON file. (string
+# value)
+#scheduler_json_config_location=
+
+
+#
+# Options defined in nova.scheduler.weights.least_cost
+#
+
+# Which cost functions the LeastCostScheduler should use (list
+# value)
+#least_cost_functions=<None>
+
+# How much weight to give the noop cost function (floating
+# point value)
+#noop_cost_fn_weight=1.0
+
+# How much weight to give the fill-first cost function. A
+# negative value will reverse behavior: e.g. spread-first
+# (floating point value)
+#compute_fill_first_cost_fn_weight=<None>
+
+
+#
+# Options defined in nova.scheduler.weights.ram
+#
+
+# Multiplier used for weighing ram.  Negative numbers mean to
+# stack vs spread. (floating point value)
+#ram_weight_multiplier=1.0
+
+
+#
+# Options defined in nova.servicegroup.api
+#
+
+# The driver for servicegroup service (valid options are: db,
+# zk, mc) (string value)
+#servicegroup_driver=db
+
+
+#
+# Options defined in nova.virt.configdrive
+#
+
+# Config drive format. One of iso9660 (default) or vfat
+# (string value)
+#config_drive_format=iso9660
+
+# 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
+# set, valid options are: always) (string value)
+#force_config_drive=<None>
+
+# Name and optionally path of the tool used for ISO image
+# creation (string value)
+#mkisofs_cmd=genisoimage
+
+
+#
+# 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
+
+
+#
+# Options defined in nova.virt.disk.mount.nbd
+#
+
+# time to wait for a NBD device coming up (integer value)
+#timeout_nbd=10
+
+
+#
+# Options defined in nova.virt.driver
+#
+
+# Driver to use for controlling virtualization. Options
+# include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
+# fake.FakeDriver, baremetal.BareMetalDriver,
+# vmwareapi.VMWareESXDriver (string value)
+compute_driver=solariszones.SolarisZonesDriver
+
+# The default format an ephemeral_volume will be formatted
+# with on creation. (string value)
+#default_ephemeral_format=<None>
+
+# VM image preallocation mode: "none" => no storage
+# provisioning is done up front, "space" => storage is fully
+# allocated at instance start (string value)
+#preallocate_images=none
+
+# Whether to use cow images (boolean value)
+#use_cow_images=true
+
+
+#
+# Options defined in nova.virt.firewall
+#
+
+# Firewall driver (defaults to hypervisor specific iptables
+# driver) (string value)
+#firewall_driver=<None>
+
+# Whether to allow network traffic from same network (boolean
+# value)
+#allow_same_net_traffic=true
+
+
+#
+# Options defined in nova.virt.hyperv.vif
+#
+
+# External virtual switch Name, if not provided, the first
+# external virtual switch is used (string value)
+#vswitch_name=<None>
+
+
+#
+# Options defined in nova.virt.hyperv.vmops
+#
+
+# Required for live migration among hosts with different CPU
+# features (boolean value)
+#limit_cpu_features=false
+
+# Sets the admin password in the config drive image (boolean
+# value)
+#config_drive_inject_password=false
+
+# qemu-img 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
+# a disk drive (boolean value)
+#config_drive_cdrom=false
+
+
+#
+# Options defined in nova.virt.hyperv.volumeops
+#
+
+# The number of times we retry on attaching volume  (integer
+# value)
+#hyperv_attaching_volume_retry_count=10
+
+# The seconds to wait between an volume attachment attempt
+# (integer value)
+#hyperv_wait_between_attach_retry=5
+
+# Force volumeutils v1 (boolean value)
+#force_volumeutils_v1=false
+
+
+#
+# Options defined in nova.virt.images
+#
+
+# Force backing images to raw format (boolean value)
+#force_raw_images=true
+
+
+#
+# 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,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=
+
+
+#
+# Options defined in nova.virt.libvirt.imagebackend
+#
+
+# VM Images format. Acceptable values are: raw, qcow2, lvm,
+# 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
+
+
+#
+# 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
+
+# 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
+
+# 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
+
+
+#
+# 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.vmwareapi.driver
+#
+
+# URL for connection to VMware ESX/VC host. Required if
+# compute_driver is vmwareapi.VMwareESXDriver or
+# vmwareapi.VMwareVCDriver. (string value)
+#vmwareapi_host_ip=<None>
+
+# Username for connection to VMware ESX/VC host. Used only if
+# compute_driver is vmwareapi.VMwareESXDriver or
+# vmwareapi.VMwareVCDriver. (string value)
+#vmwareapi_host_username=<None>
+
+# Password for connection to VMware ESX/VC host. Used only if
+# compute_driver is vmwareapi.VMwareESXDriver or
+# vmwareapi.VMwareVCDriver. (string value)
+#vmwareapi_host_password=<None>
+
+# Name of a VMware Cluster ComputeResource. Used only if
+# compute_driver is vmwareapi.VMwareVCDriver. (string value)
+#vmwareapi_cluster_name=<None>
+
+# The interval used for polling of remote tasks. Used only if
+# compute_driver is vmwareapi.VMwareESXDriver or
+# vmwareapi.VMwareVCDriver. (floating point value)
+#vmwareapi_task_poll_interval=5.0
+
+# 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)
+#vmwareapi_api_retry_count=10
+
+# VNC starting port (integer value)
+#vnc_port=5900
+
+# Total number of VNC ports (integer value)
+#vnc_port_total=10000
+
+# VNC password (string value)
+#vnc_password=<None>
+
+# Whether to use linked clone (boolean value)
+#use_linked_clone=true
+
+
+#
+# Options defined in nova.virt.vmwareapi.vif
+#
+
+# Physical ethernet adapter name for vlan networking (string
+# value)
+#vmwareapi_vlan_interface=vmnic0
+
+
+#
+# Options defined in nova.virt.vmwareapi.vim
+#
+
+# Optional VIM Service WSDL Location e.g
+# http://<server>/vimService.wsdl
+#vmwareapi_wsdl_loc=<None>
+
+
+#
+# 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
+
+# Disable XenAPI agent. Reduces the amount of time it takes
+# nova to detect that a VM has started, when that VM does not
+# have the agent installed (boolean value)
+#xenapi_disable_agent=false
+
+
+#
+# Options defined in nova.virt.xenapi.driver
+#
+
+# URL for connection to XenServer/Xen Cloud Platform. 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
+# 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.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
+
+# 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. The default value is the Local Storage in
+# default XenServer/XCP installations. 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=other-config:i18n-key=local-storage
+
+# 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
+
+# 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.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
+
+# Object Store Driver used to handle image uploads. (string
+# value)
+#xenapi_image_upload_handler=nova.virt.xenapi.imageupload.glance.GlanceStore
+
+
+#
+# Options defined in nova.vnc
+#
+
+# 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
+# "http://127.0.0.1:6081/console" (string value)
+#xvpvncproxy_base_url=http://127.0.0.1:6081/console
+
+# IP address on which instance vncservers should listen
+# (string value)
+#vncserver_listen=127.0.0.1
+
+# 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)
+#vnc_enabled=true
+
+# keymap for vnc (string value)
+#vnc_keymap=en-us
+
+
+#
+# Options defined in nova.vnc.xvp_proxy
+#
+
+# Port that the XCP VNC proxy should bind to (integer value)
+#xvpvncproxy_port=6081
+
+# Address that the XCP VNC proxy should bind to (string value)
+#xvpvncproxy_host=0.0.0.0
+
+
+#
+# Options defined in nova.volume
+#
+
+# The full class name of the volume API class to use (string
+# value)
+#volume_api_class=nova.volume.cinder.API
+
+
+#
+# Options defined in nova.volume.cinder
+#
+
+# Info to match when looking for cinder in the service
+# catalog. Format is : separated values of the form:
+# <service_type>:<service_name>:<endpoint_type> (string value)
+#cinder_catalog_info=volume:cinder:publicURL
+
+# Override service catalog lookup with template for cinder
+# endpoint e.g. http://localhost:8776/v1/%(project_id)s
+# (string value)
+#cinder_endpoint_template=<None>
+
+# region name of this node (string value)
+#os_region_name=<None>
+
+# Number of cinderclient retries on failed http calls (integer
+# value)
+#cinder_http_retries=3
+
+# Allow to perform insecure SSL requests to cinder (boolean
+# value)
+#cinder_api_insecure=false
+
+# Allow attach between instance and volume in different
+# availability zones. (boolean value)
+#cinder_cross_az_attach=true
+
+
+[HYPERV]
+
+#
+# Options defined in nova.virt.hyperv.pathutils
+#
+
+# The name of a Windows share name mapped to the
+# "instances_path" dir and used by the resize feature to copy
+# files to the target host. If left blank, an administrative
+# share will be used, looking for the same "instances_path"
+# used locally (string value)
+#instances_path_share=
+
+
+[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
+
+
+[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
+
+
+#
+# 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
+#
+
+# 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
+#
+
+# Seconds between getting fresh cell info from db. (integer
+# value)
+#db_check_interval=60
+
+
+[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
+# (integer value)
+#sg_retry_interval=5
+
+
+[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
+#
+
+# Whether baremetal compute injects password or not (boolean
+# value)
+#inject_password=true
+
+# Template file for injected network (string value)
+#injected_network_template=$pybasedir/nova/virt/baremetal/interfaces.template
+
+# 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
+# (string value)
+#terminal_pid_dir=$state_path/baremetal/console
+
+# maximal number of retries for IPMI operations (integer
+# value)
+#ipmi_power_retry=5
+
+
+#
+# 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=<None>
+
+# 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
+# value)
+#pxe_deploy_timeout=0
+
+
+#
+# Options defined in nova.virt.baremetal.virtual_power_driver
+#
+
+# ip or name to virtual power host (string value)
+#virtual_power_ssh_host=
+
+# base command to use for virtual power(vbox,virsh) (string
+# value)
+#virtual_power_type=vbox
+
+# 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=
+
+
+#
+# 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.
+# (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
+
+
+[trusted_computing]
+
+#
+# Options defined in nova.scheduler.filters.trusted_filter
+#
+
+# attestation server http (string value)
+#attestation_server=<None>
+
+# attestation server Cert file for Identity verification
+# (string value)
+#attestation_server_ca_file=<None>
+
+# attestation server port (string value)
+#attestation_port=8443
+
+# attestation web API URL (string value)
+#attestation_api_url=/OpenAttestationWebServices/V1.0
+
+# attestation authorization blob - must change (string value)
+#attestation_auth_blob=<None>
+
+# Attestation status cache valid period length (integer value)
+#attestation_auth_timeout=60
+
+
+[vmware]
+
+#
+# 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
+# (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
+
+
+#
+# Options defined in nova.virt.solariszones.driver
+#
+
+# Default path to Glance cache for Solaris Zones. (string
+# value)
+#glancecache_dirname=/export/glance
+
+# Default path to Solaris Zone root file systems. (string
+# value)
+#zonepath_dirname=/export/zone
+
+# Location where solariszones driver will store snapshots
+# before uploading them to image service (string value)
+#solariszones_snapshots_directory=$instances_path/snapshots
+
+
+# Total option count: 587
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova.exec_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,10 @@
+OpenStack Compute Management:solaris:cmd:RO::/usr/bin/nova-manage:\
+uid=nova;gid=nova
+
+nova-compute:solaris:cmd:RO::/usr/lib/rad/rad:\
+privs={zone}\:/etc/zones/*,{zone}\:/system/volatile/zones/*
+
+nova-compute:solaris:cmd:RO::/usr/sbin/zonecfg:\
+privs={zone}\:/etc/zones/*,{zone}\:/system/volatile/zones/*
+
+nova-compute:solaris:cmd:RO::/usr/sbin/iscsiadm:euid=0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova.prof_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,18 @@
+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
+
+OpenStack Management:RO:::profiles=OpenStack Compute Management
+
+nova-compute:RO::\
+Do not assign to users. \
+Commands required for application/openstack/nova/nova-compute:\
+profiles=Unified Archive Administration,\
+Zone Configuration,\
+Zone Management,\
+Zone Security
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/nova.user_attr	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,1 @@
+nova::RO::profiles=nova-compute
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/release	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,4 @@
+[Nova]
+vendor = Oracle Solaris
+product = OpenStack Nova
+package = Grizzly 2013.1.4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/solariszones/__init__.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,21 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 Citrix Systems, Inc.
+#
+# Copyright (c) 2013, 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 nova.virt.solariszones import driver
+
+SolarisZonesDriver = driver.SolarisZonesDriver
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/solariszones/driver.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2150 @@
+# 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.
+#
+#    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.
+
+"""
+Driver for Solaris Zones (nee Containers):
+"""
+
+import glob
+import os
+import platform
+import shutil
+import tempfile
+import uuid
+
+import rad.bindings.com.oracle.solaris.rad.kstat as kstat
+import rad.bindings.com.oracle.solaris.rad.zonesbridge as zonesbridge
+import rad.bindings.com.oracle.solaris.rad.zonemgr as zonemgr
+import rad.client
+import rad.connect
+from solaris_install.archive.checkpoints import InstantiateUnifiedArchive
+from solaris_install.archive import LOGFILE as ARCHIVE_LOGFILE
+from solaris_install.archive import UnifiedArchive
+from solaris_install.engine import InstallEngine
+
+from eventlet import greenthread
+from lxml import etree
+from oslo.config import cfg
+
+from nova.compute import power_state
+from nova.compute import task_states
+from nova.compute import vm_mode
+from nova import conductor
+from nova import context as nova_context
+from nova import exception
+from nova.image import glance
+from nova.network import quantumv2
+from nova.openstack.common import fileutils
+from nova.openstack.common import jsonutils
+from nova.openstack.common import log as logging
+from nova import paths
+from nova import utils
+from nova.virt import driver
+from nova.virt import event as virtevent
+from nova.virt import images
+from nova.virt.solariszones import sysconfig
+from nova import volume
+
+solariszones_opts = [
+    cfg.StrOpt('glancecache_dirname',
+               default='$state_path/images',
+               help='Default path to Glance cache for Solaris Zones.'),
+    cfg.StrOpt('solariszones_snapshots_directory',
+               default='$instances_path/snapshots',
+               help='Location where solariszones driver will store snapshots '
+                    'before uploading them to the Glance image service'),
+]
+
+CONF = cfg.CONF
+CONF.register_opts(solariszones_opts)
+LOG = logging.getLogger(__name__)
+
+# These should match the strings returned by the zone_state_str()
+# function in the (private) libzonecfg library. These values are in turn
+# returned in the 'state' string of the Solaris Zones' RAD interface by
+# the zonemgr(3RAD) provider.
+ZONE_STATE_CONFIGURED = 'configured'
+ZONE_STATE_INCOMPLETE = 'incomplete'
+ZONE_STATE_UNAVAILABLE = 'unavailable'
+ZONE_STATE_INSTALLED = 'installed'
+ZONE_STATE_READY = 'ready'
+ZONE_STATE_RUNNING = 'running'
+ZONE_STATE_SHUTTING_DOWN = 'shutting_down'
+ZONE_STATE_DOWN = 'down'
+ZONE_STATE_MOUNTED = 'mounted'
+
+# Mapping between zone state and Nova power_state.
+SOLARISZONES_POWER_STATE = {
+    ZONE_STATE_CONFIGURED:      power_state.NOSTATE,
+    ZONE_STATE_INCOMPLETE:      power_state.BUILDING,
+    ZONE_STATE_UNAVAILABLE:     power_state.NOSTATE,
+    ZONE_STATE_INSTALLED:       power_state.SHUTDOWN,
+    ZONE_STATE_READY:           power_state.RUNNING,
+    ZONE_STATE_RUNNING:         power_state.RUNNING,
+    ZONE_STATE_SHUTTING_DOWN:   power_state.RUNNING,
+    ZONE_STATE_DOWN:            power_state.RUNNING,
+    ZONE_STATE_MOUNTED:         power_state.NOSTATE
+}
+
+# Solaris Zones brands as defined in brands(5).
+ZONE_BRAND_LABELED = 'labeled'
+ZONE_BRAND_SOLARIS = 'solaris'
+ZONE_BRAND_SOLARIS_KZ = 'solaris-kz'
+ZONE_BRAND_SOLARIS10 = 'solaris10'
+
+# Mapping between supported zone brands and the name of the corresponding
+# brand template.
+ZONE_BRAND_TEMPLATE = {
+    ZONE_BRAND_SOLARIS:         'SYSdefault',
+    ZONE_BRAND_SOLARIS_KZ:      'SYSsolaris-kz',
+}
+
+MAX_CONSOLE_BYTES = 102400
+
+
+def lookup_resource_property(zone, resource, prop, filter=None):
+    """Lookup specified property from specified Solaris Zone resource."""
+    try:
+        val = zone.getResourceProperties(zonemgr.Resource(resource, filter),
+                                         [prop])
+    except rad.client.ObjectError:
+        return None
+    except Exception:
+        raise
+    return val[0].value if val else None
+
+
+def lookup_resource_property_value(zone, resource, prop, value):
+    """Lookup specified property with value from specified Solaris Zone
+       resource. Returns property if matching value is found, else None
+    """
+    try:
+        resources = zone.getResources(zonemgr.Resource(resource))
+        for resource in resources:
+            for propertee in resource.properties:
+                if propertee.name == prop and propertee.value == value:
+                    return propertee
+        else:
+            return None
+    except rad.client.ObjectError:
+        return None
+    except Exception:
+        raise
+
+
+class ZoneConfig(object):
+    """ ZoneConfig - context manager for access zone configurations.
+    Automatically opens the configuration for a zone and commits any changes
+    before exiting
+    """
+    def __init__(self, zone):
+        """ zone is a zonemgr object representing either a kernel zone or
+        non-glboal zone.
+        """
+        self.zone = zone
+        self.editing = False
+
+    def __enter__(self):
+        """ enables the editing of the zone.
+        """
+        try:
+            self.zone.editConfig()
+            self.editing = True
+            return self
+        except rad.client.ObjectError as err:
+            LOG.error(_("Unable to initialize editing of instance '%s' via "
+                        "zonemgr(3RAD): %s") % (self.zone.name, err))
+            raise
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        """ looks for any kind of exception before exiting.  If one is found,
+        cancel any configuration changes and reraise the exception.  If not,
+        commit the new configuration.
+        """
+        if exc_type is not None and self.editing:
+            # We received some kind of exception.  Cancel the config and raise.
+            self.zone.cancelConfig()
+            raise
+        else:
+            # commit the config
+            try:
+                self.zone.commitConfig()
+            except rad.client.ObjectError as err:
+                LOG.error(_("Unable to commit the new configuration for "
+                            "instance '%s' via zonemgr(3RAD): %s")
+                          % (self.zone.name, err))
+                raise
+
+    def setprop(self, resource, prop, value):
+        """ sets a property for an existing resource OR creates a new resource
+        with the given property(s).
+        """
+        current = lookup_resource_property(self.zone, resource, prop)
+        if current is not None and current == value:
+            # the value is already set
+            return
+
+        try:
+            if current is None:
+                self.zone.addResource(zonemgr.Resource(
+                    resource, [zonemgr.Property(prop, value)]))
+            else:
+                self.zone.setResourceProperties(
+                    zonemgr.Resource(resource),
+                    [zonemgr.Property(prop, value)])
+        except rad.client.ObjectError as err:
+            LOG.error(_("Unable to set '%s' property on '%s' resource for "
+                        "instance '%s' via zonemgr(3RAD): %s")
+                      % (prop, resource, self.zone.name, err))
+            raise
+
+    def addresource(self, resource, props=None):
+        """ creates a new resource with an optional property list.
+        """
+        if props is None:
+            props = []
+
+        try:
+            self.zone.addResource(zonemgr.Resource(resource, props))
+        except rad.client.ObjectError as err:
+            LOG.error(_("Unable to create new resource '%s' for instance '%s'"
+                        "via zonemgr(3RAD): %s")
+                      % (resource, self.zone.name, err))
+            raise
+
+    def removeresources(self, resource, props=None):
+        """ removes resources whose properties include the optional property
+            list specified in props.
+        """
+        if props is None:
+            props = []
+
+        try:
+            self.zone.removeResources(zonemgr.Resource(resource, props))
+        except rad.client.ObjectError as err:
+            LOG.error(_("Unable to remove resource '%s' for instance '%s' via "
+                        "zonemgr(3RAD): %s") % (resource, self.zone.name, err))
+            raise
+
+
+class SolarisZonesDriver(driver.ComputeDriver):
+    """Solaris Zones Driver using the zonemgr(3RAD) and kstat(3RAD) providers.
+
+    The interface to this class talks in terms of 'instances' (Amazon EC2 and
+    internal Nova terminology), by which we mean 'running virtual machine'
+    (XenAPI terminology) or domain (Xen or libvirt terminology).
+
+    An instance has an ID, which is the identifier chosen by Nova to represent
+    the instance further up the stack.  This is unfortunately also called a
+    'name' elsewhere.  As far as this layer is concerned, 'instance ID' and
+    'instance name' are synonyms.
+
+    Note that the instance ID or name is not human-readable or
+    customer-controlled -- it's an internal ID chosen by Nova.  At the
+    nova.virt layer, instances do not have human-readable names at all -- such
+    things are only known higher up the stack.
+
+    Most virtualization platforms will also have their own identity schemes,
+    to uniquely identify a VM or domain.  These IDs must stay internal to the
+    platform-specific layer, and never escape the connection interface.  The
+    platform-specific layer is responsible for keeping track of which instance
+    ID maps to which platform-specific ID, and vice versa.
+
+    Some methods here take an instance of nova.compute.service.Instance.  This
+    is the data structure used by nova.compute to store details regarding an
+    instance, and pass them into this layer.  This layer is responsible for
+    translating that generic data structure into terms that are specific to the
+    virtualization platform.
+
+    """
+
+    capabilities = {
+        "has_imagecache": False,
+        "supports_recreate": False,
+    }
+
+    def __init__(self, virtapi):
+        self.virtapi = virtapi
+        self._compute_event_callback = None
+        self._conductor_api = conductor.API()
+        self._host_stats = {}
+        self._initiator = None
+        self._install_engine = None
+        self._pagesize = os.sysconf('SC_PAGESIZE')
+        self._uname = os.uname()
+        self._validated_archives = list()
+        self._volume_api = volume.API()
+
+    def _init_rad(self):
+        """Connect to RAD providers for kernel statistics and Solaris
+        Zones. By connecting to the local rad(1M) service through a
+        UNIX domain socket, kernel statistics can be read via
+        kstat(3RAD) and Solaris Zones can be configured and controlled
+        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(
+                kstat.Control())
+        except Exception as reason:
+            msg = (_('Unable to connect to svc:/system/rad:local: %s')
+                   % reason)
+            raise exception.NovaException(msg)
+
+    def init_host(self, host):
+        """Initialize anything that is necessary for the driver to function,
+        including catching up with currently running VM's on the given host."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+
+        self._init_rad()
+
+    def _get_iscsi_initiator(self):
+        """ Return the iSCSI initiator node name IQN for this host """
+        out, err = utils.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]
+        initiator_iqn = initiator_name_line.rsplit(' ', 1)[1]
+        return initiator_iqn
+
+    def _get_zone_by_name(self, name):
+        """Return a Solaris Zones object via RAD by name."""
+        try:
+            zone = self._rad_instance.get_object(
+                zonemgr.Zone(), rad.client.ADRGlobPattern({'name': name}))
+        except rad.client.NotFoundError:
+            return None
+        except Exception:
+            raise
+
+        return zone
+
+    def _get_state(self, zone):
+        """Return the running state, one of the power_state codes."""
+        return SOLARISZONES_POWER_STATE[zone.state]
+
+    def _pages_to_kb(self, pages):
+        """Convert a number of pages of memory into a total size in KBytes."""
+        return (pages * self._pagesize) / 1024
+
+    def _get_max_mem(self, zone):
+        """Return the maximum memory in KBytes allowed."""
+        max_mem = lookup_resource_property(zone, 'capped-memory', 'physical')
+        if max_mem is not None:
+            return utils.to_bytes(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
+        # memory.
+        return self._pages_to_kb(os.sysconf('SC_PHYS_PAGES'))
+
+    def _get_mem(self, zone):
+        """Return the memory in KBytes used by the domain."""
+
+        # There isn't any way of determining this from the hypervisor
+        # perspective in Solaris, so just return the _get_max_mem() value
+        # for now.
+        return self._get_max_mem(zone)
+
+    def _get_num_cpu(self, zone):
+        """Return the number of virtual CPUs for the domain.
+
+        In the case of kernel zones, the number of virtual CPUs a zone
+        ends up with depends on whether or not there were 'virtual-cpu'
+        or 'dedicated-cpu' resources in the configuration or whether
+        there was an assigned pool in the configuration. This algorithm
+        attempts to emulate what the virtual platform code does to
+        determine a number of virtual CPUs to use.
+        """
+
+        # If a 'virtual-cpu' resource exists, use the minimum number of
+        # CPUs defined there.
+        ncpus = lookup_resource_property(zone, 'virtual-cpu', 'ncpus')
+        if ncpus is not None:
+            min = ncpus.split('-', 1)[0]
+            if min.isdigit():
+                return int(min)
+
+        # Otherwise if a 'dedicated-cpu' resource exists, use the maximum
+        # number of CPUs defined there.
+        ncpus = lookup_resource_property(zone, 'dedicated-cpu', 'ncpus')
+        if ncpus is not None:
+            max = ncpus.split('-', 1)[-1]
+            if max.isdigit():
+                return int(max)
+
+        # Finally if neither resource exists but the zone was assigned a
+        # pool in the configuration, the number of CPUs would be the size
+        # of the processor set. Currently there's no way of easily
+        # determining this so use the system's notion of the total number
+        # of online CPUs.
+        return os.sysconf('SC_NPROCESSORS_ONLN')
+
+    def _get_kstat_by_name(self, kstat_class, module, instance, name):
+        """Return Kstat snapshot data via RAD as a dictionary."""
+        pattern = {
+            'class':    kstat_class,
+            'module':   module,
+            'instance': instance,
+            'name':     name
+        }
+        try:
+            self._kstat_control.update()
+            kstat_object = self._rad_instance.get_object(
+                kstat.Kstat(), rad.client.ADRGlobPattern(pattern))
+        except Exception as reason:
+            LOG.warning(_("Unable to retrieve kstat object '%s:%s:%s' of "
+                          "class '%s' via kstat(3RAD): %s")
+                        % (module, instance, name, kstat_class, reason))
+            return None
+
+        kstat_data = {}
+        for named in kstat_object.fresh_snapshot().data.NAMED:
+            kstat_data[named.name] = getattr(named.value,
+                                             str(named.value.discriminant))
+
+        return kstat_data
+
+    def _get_cpu_time(self, zone):
+        """Return the CPU time used in nanoseconds."""
+        if zone.id == -1:
+            return 0
+
+        kstat_data = self._get_kstat_by_name('zones', 'cpu', str(zone.id),
+                                             'sys_zone_aggr')
+        if kstat_data is None:
+            return 0
+
+        return kstat_data['cpu_nsec_kernel'] + kstat_data['cpu_nsec_user']
+
+    def get_info(self, instance):
+        """Get the current status of an instance, by name (not ID!)
+
+        Returns a dict containing:
+
+        :state:           the running state, one of the power_state codes
+        :max_mem:         (int) the maximum memory in KBytes allowed
+        :mem:             (int) the memory in KBytes used by the domain
+        :num_cpu:         (int) the number of virtual CPUs for the domain
+        :cpu_time:        (int) the CPU time used in nanoseconds
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            LOG.error(_("Unable to find instance '%s' via zonemgr(3RAD)")
+                      % name)
+            raise exception.InstanceNotFound(instance_id=name)
+
+        return {
+            'state':    self._get_state(zone),
+            'max_mem':  self._get_max_mem(zone),
+            'mem':      self._get_mem(zone),
+            'num_cpu':  self._get_num_cpu(zone),
+            'cpu_time': self._get_cpu_time(zone)
+        }
+
+    def get_num_instances(self):
+        """Return the total number of virtual machines.
+
+        Return the number of virtual machines that the hypervisor knows
+        about.
+
+        .. note::
+
+            This implementation works for all drivers, but it is
+            not particularly efficient. Maintainers of the virt drivers are
+            encouraged to override this method with something more
+            efficient.
+        """
+        return len(self.list_instances())
+
+    def instance_exists(self, instance_id):
+        """Checks existence of an instance on the host.
+
+        :param instance_id: The ID / name of the instance to lookup
+
+        Returns True if an instance with the supplied ID exists on
+        the host, False otherwise.
+
+        .. note::
+
+            This implementation works for all drivers, but it is
+            not particularly efficient. Maintainers of the virt drivers are
+            encouraged to override this method with something more
+            efficient.
+        """
+        return instance_id in self.list_instances()
+
+    def _get_list_zone_object(self):
+        """Return a list of all Solaris Zones objects via RAD."""
+        return self._rad_instance.list_objects(zonemgr.Zone())
+
+    def list_instances(self):
+        """
+        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)
+
+        return instances_list
+
+    def list_instance_uuids(self):
+        """
+        Return the UUIDS of all the instances known to the virtualization
+        layer, as a list.
+        """
+        raise NotImplementedError()
+
+    def _fetch_image(self, context, instance):
+        """Fetch an image using Glance given the instance's image_ref."""
+        glancecache_dirname = CONF.glancecache_dirname
+        fileutils.ensure_tree(glancecache_dirname)
+        image = ''.join([glancecache_dirname, '/', instance['image_ref']])
+        if os.path.exists(image):
+            LOG.debug(_("Using existing, cached Glance image: id %s")
+                      % instance['image_ref'])
+            return image
+
+        LOG.debug(_("Fetching new Glance image: id %s")
+                  % instance['image_ref'])
+        try:
+            images.fetch(context, instance['image_ref'], image,
+                         instance['user_id'], instance['project_id'])
+        except Exception as reason:
+            LOG.error(_("Unable to fetch Glance image: id %s: %s")
+                      % (instance['image_ref'], reason))
+            raise
+
+        return image
+
+    def _validate_image(self, image, instance):
+        """Validate a glance image for compatibility with the instance"""
+        # Skip if the image was already checked and confirmed as valid
+        if instance['image_ref'] in self._validated_archives:
+            return
+
+        if self._install_engine is None:
+            self._install_engine = InstallEngine(ARCHIVE_LOGFILE)
+
+        try:
+            init_ua_cp = InstantiateUnifiedArchive(instance['image_ref'],
+                                                   image)
+            init_ua_cp.execute()
+        except Exception:
+            reason = (_("Image query failed. Possibly invalid or corrupt. "
+                        "Log file location: %s:%s")
+                      % (self._uname[1], ARCHIVE_LOGFILE))
+            LOG.error(reason)
+            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
+                                              reason=reason)
+
+        try:
+            ua = self._install_engine.doc.volatile.get_first_child(
+                class_type=UnifiedArchive)
+            # Validate the image at this point to ensure:
+            # - contains one deployable system
+            deployables = ua.archive_objects
+            if len(deployables) != 1:
+                reason = (_('Image must contain only 1 deployable system'))
+                raise exception.ImageUnacceptable(
+                    image_id=instance['image_ref'],
+                    reason=reason)
+            # - matching architecture
+            deployable_arch = deployables[0].system.arch
+            compute_arch = platform.processor()
+            if deployable_arch != compute_arch:
+                reason = (_('Image architecture "%s" is incompatible with this'
+                          'compute host architecture: "%s"')
+                          % (deployable_arch, compute_arch))
+                raise exception.ImageUnacceptable(
+                    image_id=instance['image_ref'],
+                    reason=reason)
+            # - single root pool only
+            streams = deployables[0].zfs_streams
+            stream_pools = set(stream.zpool for stream in streams)
+            if len(stream_pools) > 1:
+                reason = (_('Image contains more than one zpool: "%s"')
+                          % (stream_pools))
+                raise exception.ImageUnacceptable(
+                    image_id=instance['image_ref'],
+                    reason=reason)
+            # - looks like it's OK
+            self._validated_archives.append(instance['image_ref'])
+        finally:
+            # Clear the reference to the UnifiedArchive object in the engine
+            # data cache to avoid collision with the next checkpoint execution.
+            self._install_engine.doc.volatile.delete_children(
+                class_type=UnifiedArchive)
+
+    def _suri_from_volume_info(self, connection_info):
+        """Returns a suri(5) formatted string based on connection_info
+           Currently supports local ZFS volume and iSCSI driver types.
+        """
+        driver_type = connection_info['driver_volume_type']
+        if driver_type not in ['iscsi', 'local']:
+            raise exception.VolumeDriverNotFound(driver_type=driver_type)
+        if driver_type == 'local':
+            suri = 'dev:/dev/zvol/dsk/%s' % connection_info['volume_path']
+        elif driver_type == 'iscsi':
+            data = connection_info['data']
+            # suri(5) format:
+            #       iscsi://<host>[:<port>]/target.<IQN>,lun.<LUN>
+            # Sample iSCSI connection data values:
+            # target_portal: 192.168.1.244:3260
+            # target_iqn: iqn.2010-10.org.openstack:volume-a89c.....
+            # target_lun: 1
+            suri = 'iscsi://%s/target.%s,lun.%d' % (data['target_portal'],
+                                                    data['target_iqn'],
+                                                    data['target_lun'])
+            # TODO(npower): need to handle CHAP authentication also
+
+        return suri
+
+    def _set_global_properties(self, name, extra_specs, brand):
+        """Set Solaris Zone's global properties if supplied via flavor."""
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        # TODO(dcomay): Should figure this out via the brands themselves.
+        zonecfg_items = [
+            'bootargs',
+            'brand',
+            'hostid'
+        ]
+        if brand == ZONE_BRAND_SOLARIS:
+            zonecfg_items.extend(
+                ['file-mac-profile', 'fs-allowed', 'limitpriv'])
+
+        with ZoneConfig(zone) as zc:
+            for key, value in extra_specs.iteritems():
+                # Ignore not-zonecfg-scoped brand properties.
+                if not key.startswith('zonecfg:'):
+                    continue
+                _scope, prop = key.split(':', 1)
+                # Ignore the 'brand' property if present.
+                if prop == 'brand':
+                    continue
+                # Ignore but warn about unsupported zonecfg-scoped properties.
+                if prop not in zonecfg_items:
+                    LOG.warning(_("Ignoring unsupported zone property '%s' "
+                                  "set on flavor for instance '%s'")
+                                % (prop, name))
+                    continue
+                zc.setprop('global', prop, value)
+
+    def _connect_boot_volume(self, context, instance, extra_specs):
+        """Provision a (Cinder) volume service backed boot volume"""
+        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
+        connection_info = None
+        try:
+            vol = self._volume_api.create(
+                context,
+                instance['root_gb'],
+                instance['display_name'] + "-rootzpool",
+                "Boot volume for instance '%s' (%s)"
+                % (instance['name'], instance['uuid']))
+            # TODO(npower): Polling is what nova/compute/manager also does when
+            # creating a new volume, so we do likewise here.
+            while True:
+                volume = self._volume_api.get(context, vol['id'])
+                if volume['status'] != 'creating':
+                    break
+                greenthread.sleep(1)
+
+        except Exception as reason:
+            LOG.error(_("Unable to create root zpool volume for instance '%s':"
+                        "%s") % (instance['name'], reason))
+            raise
+
+        instance_uuid = instance['uuid']
+        # TODO(npower): Adequate for default boot device. We currently
+        # ignore this value, but cinder gets stroppy about this if we set it to
+        # None
+        mountpoint = "c1d0"
+
+        try:
+            connector = self.get_volume_connector(instance)
+            connection_info = self._volume_api.initialize_connection(context,
+                                                                     volume,
+                                                                     connector)
+            # Check connection_info to determine if the provided volume is
+            # local to this compute node. If it is, then don't use it for
+            # Solaris branded zones in order to avoid a know ZFS deadlock issue
+            # when using a zpool within another zpool on the same system.
+            delete_boot_volume = False
+            if brand == ZONE_BRAND_SOLARIS:
+                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."))
+                    delete_boot_volume = True
+                elif driver_type == 'iscsi':
+                    # Check for a potential loopback iSCSI situation
+                    data = connection_info['data']
+                    target_portal = data['target_portal']
+                    # Strip off the port number (eg. 127.0.0.1:3260)
+                    host = target_portal.rsplit(':', 1)
+                    # Strip any enclosing '[' and ']' brackets for
+                    # IPV6 addresses.
+                    target_host = host[0].strip('[]')
+
+                    # Check if target_host is an IP or hostname matching the
+                    # connector host or IP, which would mean the provisioned
+                    # 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."))
+                        delete_boot_volume = True
+                else:
+                    # 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."))
+                    delete_boot_volume = True
+
+            if delete_boot_volume:
+                LOG.warning(_("Volume '%s' is being discarded") % volume['id'])
+                self._volume_api.delete(context, volume)
+                return None
+
+            # Notify Cinder DB of the volume attachment.
+            self._volume_api.attach(context, volume, instance_uuid, mountpoint)
+            values = {
+                'instance_uuid': instance['uuid'],
+                'connection_info': jsonutils.dumps(connection_info),
+                # TODO(npower): device_name also ignored currently, but Cinder
+                # breaks without it. Figure out a sane mapping scheme.
+                'device_name': mountpoint,
+                'delete_on_termination': True,
+                'virtual_name': None,
+                'snapshot_id': None,
+                'volume_id': volume['id'],
+                'volume_size': instance['root_gb'],
+                'no_device': None}
+            self._conductor_api.block_device_mapping_update_or_create(context,
+                                                                      values)
+
+        except Exception as reason:
+            LOG.error(_("Unable to attach root zpool volume '%s' to instance "
+                        "%s: %s") % (volume['id'], instance['name'], reason))
+            self._volume_api.detach(context, volume)
+            self._volume_api.delete(context, volume)
+            raise
+
+        return connection_info
+
+    def _set_boot_device(self, name, connection_info, brand):
+        """Set the boot device specified by connection_info"""
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        suri = self._suri_from_volume_info(connection_info)
+
+        with ZoneConfig(zone) as zc:
+            # ZOSS device configuration is different for the solaris-kz brand
+            if brand == ZONE_BRAND_SOLARIS_KZ:
+                zc.zone.setResourceProperties(
+                    zonemgr.Resource(
+                        "device",
+                        [zonemgr.Property("bootpri", "0")]),
+                    [zonemgr.Property("storage", suri)])
+            else:
+                zc.addresource(
+                    "rootzpool",
+                    [zonemgr.Property("storage", listvalue=[suri])])
+
+    def _set_num_cpu(self, name, vcpus, brand):
+        """Set number of VCPUs in a Solaris Zone configuration."""
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        # The Solaris Zone brand type is used to specify the type of
+        # 'cpu' resource set in the Solaris Zone configuration.
+        if brand == ZONE_BRAND_SOLARIS:
+            vcpu_resource = 'capped-cpu'
+        else:
+            vcpu_resource = 'virtual-cpu'
+
+        # TODO(dcomay): Until 17881862 is resolved, this should be turned into
+        # an appropriate 'rctl' resource for the 'capped-cpu' case.
+        with ZoneConfig(zone) as zc:
+            zc.setprop(vcpu_resource, 'ncpus', str(vcpus))
+
+    def _set_memory_cap(self, name, memory_mb, brand):
+        """Set memory cap in a Solaris Zone configuration."""
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        # The Solaris Zone brand type is used to specify the type of
+        # 'memory' cap set in the Solaris Zone configuration.
+        if brand == ZONE_BRAND_SOLARIS:
+            mem_resource = 'swap'
+        else:
+            mem_resource = 'physical'
+
+        with ZoneConfig(zone) as zc:
+            zc.setprop('capped-memory', mem_resource, '%dM' % memory_mb)
+
+    def _set_network(self, context, name, instance, network_info, brand,
+                     sc_dir):
+        """ add networking information to the zone.
+        """
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        tenant_id = None
+        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']
+            ip = network['network']['subnets'][0]['ips'][0]['address']
+            ip_version = network['network']['subnets'][0]['version']
+            route = network['network']['subnets'][0]['gateway']['address']
+            dns_list = network['network']['subnets'][0]['dns']
+            nameservers = []
+            for dns in dns_list:
+                if dns['type'] == 'dns':
+                    nameservers.append(dns['address'])
+
+            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)
+                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)]
+                if brand == ZONE_BRAND_SOLARIS:
+                    linkname = lookup_resource_property(zc.zone, 'anet',
+                                                        'linkname', filter)
+                else:
+                    id = lookup_resource_property(zc.zone, 'anet', 'id',
+                                                  filter)
+                    linkname = 'net%s' % id
+
+            # create the required sysconfig file
+            network_plugin = quantumv2.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']
+
+            if subnet['enable_dhcp']:
+                tree = sysconfig.create_ncp_defaultfixed('dhcp', linkname,
+                                                         netid, ip_version)
+            else:
+                tree = sysconfig.create_ncp_defaultfixed('static', linkname,
+                                                         netid, ip_version, ip,
+                                                         route, nameservers)
+
+            fp = os.path.join(sc_dir, 'evs-network-%d.xml' % netid)
+            sysconfig.create_sc_profile(fp, tree)
+
+        if tenant_id is not None:
+            # set the tenant id
+            with ZoneConfig(zone) as zc:
+                zc.setprop('global', 'tenant', tenant_id)
+
+    def _verify_sysconfig(self, sc_dir, instance):
+        """ verify the SC profile(s) passed in contain an entry for
+        system/config-user to configure the root account.  If an SSH key is
+        specified, configure root's profile to use it.
+
+        """
+        usercheck = lambda e: e.attrib.get('name') == 'system/config-user'
+        hostcheck = lambda e: e.attrib.get('name') == 'system/identity'
+
+        root_account_needed = True
+        hostname_needed = True
+        sshkey = instance.get('key_data')
+        name = instance.get('display_name')
+
+        # find all XML files in sc_dir
+        for root, dirs, files in os.walk(sc_dir):
+            for fname in [f for f in files if f.endswith(".xml")]:
+                root = etree.parse(os.path.join(root, fname))
+
+                # look for config-user properties
+                if filter(usercheck, root.findall('service')):
+                    # a service element was found for config-user.  Verify
+                    # root's password is set, the admin account name is set and
+                    # the admin's password is set
+                    pgs = root.iter('property_group')
+                    for pg in pgs:
+                        if pg.attrib.get('name') == 'root_account':
+                            root_account_needed = False
+
+                # look for identity properties
+                if filter(hostcheck, root.findall('service')):
+                    for props in root.iter('propval'):
+                        if props.attrib.get('name') == 'nodename':
+                            hostname_needed = False
+
+        # Verify all of the requirements were met.  Create the required SMF
+        # profile(s) if needed.
+        if root_account_needed:
+            fp = os.path.join(sc_dir, 'config-root.xml')
+
+            if sshkey is not None:
+                # set up the root account as 'normal' with no expiration and
+                # an ssh key
+                tree = sysconfig.create_default_root_account(sshkey=sshkey)
+            else:
+                # set up the root account as 'normal' but to expire immediately
+                tree = sysconfig.create_default_root_account(expire='0')
+
+            sysconfig.create_sc_profile(fp, tree)
+
+        elif sshkey is not None:
+            fp = os.path.join(sc_dir, 'config-root-ssh-keys.xml')
+            tree = sysconfig.create_root_ssh_keys(sshkey)
+            sysconfig.create_sc_profile(fp, tree)
+
+        if hostname_needed and name is not None:
+            fp = os.path.join(sc_dir, 'hostname.xml')
+            sysconfig.create_sc_profile(fp, sysconfig.create_hostname(name))
+
+    def _create_config(self, context, instance, network_info,
+                       connection_info, extra_specs, sc_dir):
+        """Create a new Solaris Zone configuration."""
+        name = instance['name']
+        if self._get_zone_by_name(name) is not None:
+            raise exception.InstanceExists(name=name)
+
+        # If unspecified, default zone brand is ZONE_BRAND_SOLARIS
+        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
+        template = ZONE_BRAND_TEMPLATE.get(brand)
+        # TODO(dcomay): Detect capability via libv12n(3LIB) or virtinfo(1M).
+        if template is None:
+            msg = (_("Invalid brand '%s' specified for instance '%s'"
+                   % (brand, name)))
+            raise exception.NovaException(msg)
+
+        sc_profile = extra_specs.get('install:sc_profile')
+        if sc_profile is not None:
+            if os.path.isfile(sc_profile):
+                shutil.copy(sc_profile, sc_dir)
+            elif os.path.isdir(sc_profile):
+                shutil.copytree(sc_profile, os.path.join(sc_dir, 'sysconfig'))
+
+        self._verify_sysconfig(sc_dir, instance)
+
+        zonemanager = self._rad_instance.get_object(zonemgr.ZoneManager())
+        try:
+            zonemanager.create(name, None, template)
+            self._set_global_properties(name, extra_specs, brand)
+            if connection_info:
+                self._set_boot_device(name, connection_info, brand)
+            self._set_num_cpu(name, instance['vcpus'], brand)
+            self._set_memory_cap(name, instance['memory_mb'], brand)
+            self._set_network(context, name, instance, network_info, brand,
+                              sc_dir)
+        except Exception as reason:
+            LOG.error(_("Unable to create configuration for instance '%s' via "
+                        "zonemgr(3RAD): %s") % (name, reason))
+            raise
+
+    def _install(self, instance, image, extra_specs, sc_dir):
+        """Install a new Solaris Zone root file system."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        # log the zone's configuration
+        with ZoneConfig(zone) as zc:
+            LOG.debug("-" * 80)
+            LOG.debug(zc.zone.exportConfig(True))
+            LOG.debug("-" * 80)
+
+        options = ['-a ', image]
+
+        if os.listdir(sc_dir):
+            # the directory isn't empty so pass it along to install
+            options.extend(['-c ', sc_dir])
+
+        try:
+            LOG.debug(_("installing instance '%s' (%s)") %
+                      (name, instance['display_name']))
+            zone.install(options=options)
+        except Exception as reason:
+            LOG.error(_("Unable to install root file system for instance '%s' "
+                        "via zonemgr(3RAD): %s") % (name, reason))
+            raise
+
+        LOG.debug(_("installation of instance '%s' (%s) complete") %
+                  (name, instance['display_name']))
+
+        if os.listdir(sc_dir):
+            # remove the sc_profile temp directory
+            shutil.rmtree(sc_dir)
+
+    def _power_on(self, instance):
+        """Power on a Solaris Zone."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        try:
+            zone.boot()
+        except Exception as reason:
+            LOG.error(_("Unable to power on instance '%s' via zonemgr(3RAD): "
+                        "%s") % (name, reason))
+            raise exception.InstancePowerOnFailure(reason=reason)
+
+    def _uninstall(self, instance):
+        """Uninstall an existing Solaris Zone root file system."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        try:
+            zone.uninstall(['-F'])
+        except Exception as reason:
+            LOG.error(_("Unable to uninstall root file system for instance "
+                        "'%s' via zonemgr(3RAD): %s") % (name, reason))
+            raise
+
+    def _delete_config(self, instance):
+        """Delete an existing Solaris Zone configuration."""
+        name = instance['name']
+        if self._get_zone_by_name(name) is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        zonemanager = self._rad_instance.get_object(zonemgr.ZoneManager())
+        try:
+            zonemanager.delete(name)
+        except Exception as reason:
+            LOG.error(_("Unable to delete configuration for instance '%s' via "
+                        "zonemgr(3RAD): %s") % (name, reason))
+            raise
+
+    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.
+
+        Once this successfully completes, the instance should be
+        running (power_state.RUNNING).
+
+        If this fails, any partial instance should be completely
+        cleaned up, and the virtualization platform should be in the state
+        that it was before this call began.
+
+        :param context: security context
+        :param instance: Instance object as returned by DB layer.
+                         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 network_info:
+           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
+        :param block_device_info: Information about block devices to be
+                                  attached to the instance.
+        """
+        inst_type = self.virtapi.instance_type_get(
+            nova_context.get_admin_context(read_deleted='yes'),
+            instance['instance_type_id'])
+        extra_specs = inst_type['extra_specs'].copy()
+
+        image = self._fetch_image(context, instance)
+        self._validate_image(image, instance)
+
+        # create a new directory for SC profiles
+        sc_dir = tempfile.mkdtemp(prefix="nova-sysconfig-",
+                                  dir=CONF.state_path)
+        os.chmod(sc_dir, 0755)
+
+        # Attempt to provision a (Cinder) volume service backed boot volume
+        connection_info = self._connect_boot_volume(context, instance,
+                                                    extra_specs)
+
+        LOG.debug(_("creating zone configuration for '%s' (%s)") %
+                  (instance['name'], instance['display_name']))
+        self._create_config(context, instance, network_info,
+                            connection_info, extra_specs, sc_dir)
+        try:
+            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")
+                      % (instance['name'], reason))
+            self._uninstall(instance)
+            self._delete_config(instance)
+            raise
+
+    def _power_off(self, instance, halt_type):
+        """Power off a Solaris Zone."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        try:
+            if halt_type == 'SOFT':
+                zone.shutdown()
+            else:
+                zone.halt()
+            return
+        except rad.client.ObjectError as reason:
+            result = reason.get_payload()
+            if result.code == zonemgr.ErrorCode.COMMAND_ERROR:
+                LOG.warning(_("Ignoring command error returned while trying "
+                              "to power off instance '%s' via zonemgr(3RAD): "
+                              "%s" % (name, reason)))
+                return
+        except Exception as reason:
+            LOG.error(_("Unable to power off instance '%s' via zonemgr(3RAD): "
+                        "%s") % (name, reason))
+            raise exception.InstancePowerOffFailure(reason=reason)
+
+    def destroy(self, instance, network_info, block_device_info=None,
+                destroy_disks=True):
+        """Destroy (shutdown and delete) the specified instance.
+
+        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 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
+
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        # If instance cannot be found, just return.
+        if zone is None:
+            LOG.warning(_("Unable to find instance '%s' via zonemgr(3RAD)")
+                        % name)
+            return
+
+        try:
+            if self._get_state(zone) == power_state.RUNNING:
+                self._power_off(instance, 'HARD')
+            if self._get_state(zone) == power_state.SHUTDOWN:
+                self._uninstall(instance)
+            if self._get_state(zone) == power_state.NOSTATE:
+                self._delete_config(instance)
+        except Exception as reason:
+            LOG.warning(_("Unable to destroy instance '%s' via zonemgr(3RAD): "
+                          "%s") % (name, reason))
+
+    def reboot(self, context, instance, network_info, reboot_type,
+               block_device_info=None, bad_volumes_callback=None):
+        """Reboot the specified instance.
+
+        After this is called successfully, the instance's state
+        goes back to power_state.RUNNING. The virtualization
+        platform should ensure that the reboot action has completed
+        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 network_info:
+           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
+        :param reboot_type: Either a HARD or SOFT reboot
+        :param block_device_info: Info pertaining to attached volumes
+        :param bad_volumes_callback: Function to handle any bad volumes
+            encountered
+        """
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        try:
+            if reboot_type == 'SOFT':
+                zone.shutdown(['-r'])
+            else:
+                zone.reboot()
+        except Exception as reason:
+            LOG.error(_("Unable to reboot instance '%s' via zonemgr(3RAD): %s")
+                      % (name, reason))
+            raise exception.InstanceRebootFailure(reason=reason)
+
+    def get_console_pool_info(self, console_type):
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def _get_console_output(self, instance):
+        """Builds a string containing the console output (capped at
+        MAX_CONSOLE_BYTES characters) by reassembling the log files
+        that Solaris Zones framework maintains for each zone.
+        """
+        console_str = ""
+        avail = MAX_CONSOLE_BYTES
+
+        # Examine the log files in most-recently modified order, keeping
+        # track of the size of each file and of how many characters have
+        # been seen. If there are still characters left to incorporate,
+        # then the contents of the log file in question are prepended to
+        # the console string built so far. When the number of characters
+        # available has run out, the last fragment under consideration
+        # will likely begin within the middle of a line. As such, the
+        # start of the fragment up to the next newline is thrown away.
+        # The remainder constitutes the start of the resulting console
+        # output which is then prepended to the console string built so
+        # far and the result returned.
+        logfile_pattern = '/var/log/zones/%s.console*' % instance['name']
+        logfiles = sorted(glob.glob(logfile_pattern), key=os.path.getmtime,
+                          reverse=True)
+        for file in logfiles:
+            size = os.path.getsize(file)
+            if size == 0:
+                continue
+            avail -= size
+            with open(file, 'r') as log:
+                if avail < 0:
+                    (fragment, _) = utils.last_bytes(log, avail + size)
+                    remainder = fragment.find('\n') + 1
+                    console_str = fragment[remainder:] + console_str
+                    break
+                fragment = ''
+                for line in log.readlines():
+                    fragment += line
+                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
+        return self._get_console_output(instance)
+
+    def get_vnc_console(self, instance):
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def get_spice_console(self, instance):
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def _get_zone_diagnostics(self, zone):
+        """Return data about Solaris Zone diagnostics."""
+        if zone.id == -1:
+            return None
+
+        diagnostics = {}
+        id = str(zone.id)
+
+        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
+                                             ''.join(('lockedmem_zone_', id)))
+        if kstat_data is not None:
+            diagnostics['lockedmem'] = kstat_data['usage']
+
+        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
+                                             ''.join(('nprocs_zone_', id)))
+        if kstat_data is not None:
+            diagnostics['nprocs'] = kstat_data['usage']
+
+        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
+                                             ''.join(('swapresv_zone_', id)))
+        if kstat_data is not None:
+            diagnostics['swapresv'] = kstat_data['usage']
+
+        kstat_data = self._get_kstat_by_name('zones', 'cpu', id,
+                                             'sys_zone_aggr')
+        if kstat_data is not None:
+            for key in kstat_data.keys():
+                if key not in ('class', 'crtime', 'snaptime'):
+                    diagnostics[key] = kstat_data[key]
+
+        return diagnostics
+
+    def get_diagnostics(self, instance):
+        """Return data about VM diagnostics."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            LOG.error(_("Unable to find instance '%s' via zonemgr(3RAD)")
+                      % name)
+            raise exception.InstanceNotFound(instance_id=name)
+
+        return self._get_zone_diagnostics(zone)
+
+    def get_all_bw_counters(self, instances):
+        """Return bandwidth usage counters for each interface on each
+           running VM"""
+        raise NotImplementedError()
+
+    def get_all_volume_usage(self, context, compute_host_bdms):
+        """Return usage info for volumes attached to vms on
+           a given host"""
+        raise NotImplementedError()
+
+    def get_host_ip_addr(self):
+        """
+        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, connection_info, instance, mountpoint):
+        """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)
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        zprop = lookup_resource_property_value(zone, "global", "brand",
+                                               ZONE_BRAND_SOLARIS_KZ)
+        if not zprop:
+            # Only Solaris Kernel zones are currently supported.
+            raise NotImplementedError()
+
+        suri = self._suri_from_volume_info(connection_info)
+
+        with ZoneConfig(zone) as zc:
+            zc.addresource("device", [zonemgr.Property("storage", suri)])
+
+    def detach_volume(self, connection_info, instance, mountpoint):
+        """Detach the disk attached to the instance."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        zprop = lookup_resource_property_value(zone, "global", "brand",
+                                               ZONE_BRAND_SOLARIS_KZ)
+        if not zprop:
+            # Only Solaris Kernel zones are currently supported.
+            raise NotImplementedError()
+
+        suri = self._suri_from_volume_info(connection_info)
+
+        # Check if the specific property value exists before attempting removal
+        prop = lookup_resource_property_value(zone, "device", "storage", suri)
+        if not prop:
+            LOG.warning(_("Storage resource '%s' is not attached to instance "
+                        "'%s'") % (suri, name))
+            return
+
+        with ZoneConfig(zone) as zc:
+            zc.removeresources("device", [zonemgr.Property("storage", suri)])
+
+    def attach_interface(self, instance, image_meta, network_info):
+        """Attach an interface to the instance."""
+        raise NotImplementedError()
+
+    def detach_interface(self, instance, network_info):
+        """Detach an interface from the 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
+        off the instance before the end.
+        """
+        raise NotImplementedError()
+
+    def snapshot(self, context, instance, image_id, update_task_state):
+        """
+        Snapshots the specified instance.
+
+        :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.
+        """
+        # Get original base image info
+        (base_service, base_id) = glance.get_remote_image_service(
+            context, instance['image_ref'])
+        try:
+            base = base_service.show(context, base_id)
+        except exception.ImageNotFound:
+            base = {}
+
+        snapshot_service, snapshot_id = glance.get_remote_image_service(
+            context, image_id)
+
+        # Build updated snapshot image metadata
+        snapshot = snapshot_service.show(context, snapshot_id)
+        metadata = {
+            'is_public': False,
+            'status': 'active',
+            'name': snapshot['name'],
+            'properties': {
+                'image_location': 'snapshot',
+                'image_state': 'available',
+                'owner_id': instance['project_id'],
+            }
+        }
+        # Match architecture, hypervisor_type and vm_mode properties to base
+        # image.
+        for prop in ['architecture', 'hypervisor_type', 'vm_mode']:
+            if prop in base.get('properties', {}):
+                base_prop = base['properties'][prop]
+                metadata['properties'][prop] = base_prop
+
+        # Set generic container and disk formats initially in case the glance
+        # service rejects unified archives (uar) and zfs in metadata
+        metadata['container_format'] = 'ovf'
+        metadata['disk_format'] = 'raw'
+
+        update_task_state(task_state=task_states.IMAGE_PENDING_UPLOAD)
+        snapshot_directory = CONF.solariszones_snapshots_directory
+        fileutils.ensure_tree(snapshot_directory)
+        snapshot_name = uuid.uuid4().hex
+
+        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)
+
+            LOG.info(_("Snapshot extracted, beginning image upload"),
+                     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)
+                with open(out_path, 'r') as image_file:
+                    snapshot_service.update(context,
+                                            image_id,
+                                            metadata,
+                                            image_file)
+                    LOG.info(_("Snapshot image upload complete"),
+                             instance=instance)
+                try:
+                    # Try to update the image metadata container and disk
+                    # formats more suitably for a unified archive if the
+                    # glance server recognises them.
+                    metadata['container_format'] = 'uar'
+                    metadata['disk_format'] = 'zfs'
+                    snapshot_service.update(context,
+                                            image_id,
+                                            metadata,
+                                            None)
+                except exception.Invalid as invalid:
+                    LOG.warning(_("Image service rejected image metadata "
+                                  "container and disk formats 'uar' and "
+                                  "'zfs'. Using generic values 'ovf' and "
+                                  "'raw' as fallbacks."))
+            finally:
+                # Delete the snapshot image file source
+                os.unlink(out_path)
+
+    def finish_migration(self, context, migration, instance, disk_info,
+                         network_info, image_meta, resize_instance,
+                         block_device_info=None):
+        """Completes a resize, turning on the migrated instance
+
+        :param network_info:
+           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
+        :param image_meta: image object returned by nova.image.glance that
+                           defines the image from which this instance
+                           was created
+        """
+        raise NotImplementedError()
+
+    def confirm_migration(self, migration, instance, network_info):
+        """Confirms a resize, destroying the source VM."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def finish_revert_migration(self, instance, network_info,
+                                block_device_info=None):
+        """Finish reverting a resize, powering back on the instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def pause(self, instance):
+        """Pause the specified instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def unpause(self, instance):
+        """Unpause paused VM instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def _suspend(self, instance):
+        """Suspend a Solaris Zone."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        if self._uname[4] != 'i86pc':
+            # Only x86 platforms are currently supported.
+            raise NotImplementedError()
+
+        zprop = lookup_resource_property_value(zone, "global", "brand",
+                                               ZONE_BRAND_SOLARIS_KZ)
+        if not zprop:
+            # Only Solaris Kernel zones are currently supported.
+            raise NotImplementedError()
+
+        try:
+            zone.suspend()
+        except Exception as reason:
+            # TODO(dcomay): Try to recover in cases where zone has been
+            # resumed automatically.
+            LOG.error(_("Unable to suspend instance '%s' via zonemgr(3RAD): "
+                        "%s") % (name, reason))
+            raise exception.InstanceSuspendFailure(reason=reason)
+
+    def suspend(self, instance):
+        """suspend the specified instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        self._suspend(instance)
+
+    def resume(self, instance, network_info, block_device_info=None):
+        """resume the specified instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        try:
+            self._power_on(instance)
+        except Exception as reason:
+            raise exception.InstanceResumeFailure(reason=reason)
+
+    def resume_state_on_host_boot(self, context, instance, network_info,
+                                  block_device_info=None):
+        """resume guest state when a host is booted."""
+        name = instance['name']
+        zone = self._get_zone_by_name(name)
+        if zone is None:
+            raise exception.InstanceNotFound(instance_id=name)
+
+        # TODO(dcomay): Should reconcile with value of zone's autoboot
+        # property.
+        if self._get_state(zone) not in (power_state.CRASHED,
+                                         power_state.SHUTDOWN):
+            return
+
+        self._power_on(instance)
+
+    def rescue(self, context, instance, network_info, image_meta,
+               rescue_password):
+        """Rescue the specified instance."""
+        raise NotImplementedError()
+
+    def unrescue(self, instance, network_info):
+        """Unrescue the specified 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."""
+        self._power_off(instance, 'SOFT')
+
+    def power_on(self, context, instance, network_info,
+                 block_device_info=None):
+        """Power on the specified instance."""
+        self._power_on(instance)
+
+    def soft_delete(self, instance):
+        """Soft delete the specified instance."""
+        raise NotImplementedError()
+
+    def restore(self, instance):
+        """Restore the specified instance."""
+        raise NotImplementedError()
+
+    def _update_host_stats(self):
+        """Update currently known host stats."""
+        host_stats = {}
+        host_stats['vcpus'] = os.sysconf('SC_NPROCESSORS_ONLN')
+        pages = os.sysconf('SC_PHYS_PAGES')
+        host_stats['memory_mb'] = self._pages_to_kb(pages) / 1024
+        host_stats['local_gb'] = 0
+
+        # Account for any existing processor sets by looking at the the
+        # number of CPUs not assigned to any processor sets.
+        kstat_data = self._get_kstat_by_name('misc', 'unix', '0', 'pset')
+        if kstat_data is not None:
+            host_stats['vcpus_used'] = \
+                host_stats['vcpus'] - kstat_data['ncpus']
+        else:
+            host_stats['vcpus_used'] = 0
+
+        # Subtract the number of free pages from the total to get the
+        # used.
+        kstat_data = self._get_kstat_by_name('pages', 'unix', '0',
+                                             'system_pages')
+        if kstat_data is not None:
+            host_stats['memory_mb_used'] = \
+                self._pages_to_kb((pages - kstat_data['freemem'])) / 1024
+        else:
+            host_stats['memory_mb_used'] = 0
+
+        host_stats['local_gb_used'] = 0
+        host_stats['hypervisor_type'] = 'solariszones'
+        host_stats['hypervisor_version'] = int(self._uname[2].replace('.', ''))
+        host_stats['hypervisor_hostname'] = self._uname[1]
+        if self._uname[4] == 'i86pc':
+            architecture = 'x86_64'
+        else:
+            architecture = 'sparc64'
+        host_stats['cpu_info'] = str({'arch': architecture})
+        host_stats['disk_available_least'] = 0
+
+        supported_instances = [
+            (architecture, 'solariszones', 'zones')
+        ]
+        host_stats['supported_instances'] = supported_instances
+
+        self._host_stats = host_stats
+
+    def get_available_resource(self, nodename):
+        """Retrieve resource information.
+
+        This method is called when nova-compute launches, and
+        as part of a periodic task
+
+        :param nodename:
+            node which the caller want to get resources from
+            a driver that manages only one node can safely ignore this
+        :returns: Dictionary describing resources
+        """
+        self._update_host_stats()
+        host_stats = self._host_stats
+
+        resources = {}
+        resources['vcpus'] = host_stats['vcpus']
+        resources['memory_mb'] = host_stats['memory_mb']
+        resources['local_gb'] = host_stats['local_gb']
+        resources['vcpus_used'] = host_stats['vcpus_used']
+        resources['memory_mb_used'] = host_stats['memory_mb_used']
+        resources['local_gb_used'] = host_stats['local_gb_used']
+        resources['hypervisor_type'] = host_stats['hypervisor_type']
+        resources['hypervisor_version'] = host_stats['hypervisor_version']
+        resources['hypervisor_hostname'] = host_stats['hypervisor_hostname']
+        resources['cpu_info'] = host_stats['cpu_info']
+        resources['disk_available_least'] = host_stats['disk_available_least']
+
+        return resources
+
+    def pre_live_migration(self, ctxt, instance_ref, 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 block_device_info: instance block device information
+        :param network_info: instance network information
+        :param disk_info: instance disk information
+        :param migrate_data: implementation specific data dict.
+        """
+        raise NotImplementedError()
+
+    def live_migration(self, ctxt, instance_ref, 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:
+            nova.db.sqlalchemy.models.Instance object
+            instance object that is migrated.
+        :params dest: destination host
+        :params post_method:
+            post operation method.
+            expected nova.compute.manager.post_live_migration.
+        :params 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.
+
+        """
+        raise NotImplementedError()
+
+    def post_live_migration_at_destination(self, ctxt, instance_ref,
+                                           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 network_info: instance network information
+        :param block_migration: if true, post operation of block_migration.
+        """
+        raise NotImplementedError()
+
+    def check_can_live_migrate_destination(self, ctxt, instance_ref,
+                                           src_compute_info, dst_compute_info,
+                                           block_migration=False,
+                                           disk_over_commit=False):
+        """Check if it is possible to execute live migration.
+
+        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 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
+        :param disk_over_commit: if true, allow disk over commit
+        """
+        raise NotImplementedError()
+
+    def check_can_live_migrate_destination_cleanup(self, ctxt,
+                                                   dest_check_data):
+        """Do required cleanup on dest host after check_can_live_migrate calls
+
+        :param ctxt: 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,
+                                      dest_check_data):
+        """Check if it is possible to execute live migration.
+
+        This checks if the live migration can succeed, based on the
+        results from check_can_live_migrate_destination.
+
+        :param context: security context
+        :param instance_ref: nova.db.sqlalchemy.models.Instance
+        :param dest_check_data: result of check_can_live_migrate_destination
+        """
+        raise NotImplementedError()
+
+    def refresh_security_group_rules(self, security_group_id):
+        """This method is called after a change to security groups.
+
+        All security groups and their associated rules live in the datastore,
+        and calling this method should apply the updated rules to instances
+        running the specified security group.
+
+        An error should be raised if the operation cannot complete.
+
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def refresh_security_group_members(self, security_group_id):
+        """This method is called when a security group is added to an instance.
+
+        This message is sent to the virtualization drivers on hosts that are
+        running an instance that belongs to a security group that has a rule
+        that references the security group identified by `security_group_id`.
+        It is the responsibility of this method to make sure any rules
+        that authorize traffic flow with members of the security group are
+        updated and any new members can communicate, and any removed members
+        cannot.
+
+        Scenario:
+            * we are running on host 'H0' and we have an instance 'i-0'.
+            * instance 'i-0' is a member of security group 'speaks-b'
+            * group 'speaks-b' has an ingress rule that authorizes group 'b'
+            * another host 'H1' runs an instance 'i-1'
+            * instance 'i-1' is a member of security group 'b'
+
+            When 'i-1' launches or terminates we will receive the message
+            to update members of group 'b', at which time we will make
+            any changes needed to the rules for instance 'i-0' to allow
+            or deny traffic coming from 'i-1', depending on if it is being
+            added or removed from the group.
+
+        In this scenario, 'i-1' could just as easily have been running on our
+        host 'H0' and this method would still have been called.  The point was
+        that this method isn't called on the host where instances of that
+        group are running (as is the case with
+        :py:meth:`refresh_security_group_rules`) but is called where references
+        are made to authorizing those instances.
+
+        An error should be raised if the operation cannot complete.
+
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def refresh_provider_fw_rules(self):
+        """This triggers a firewall update based on database changes.
+
+        When this is called, rules have either been added or removed from the
+        datastore.  You can retrieve rules with
+        :py:meth:`nova.db.provider_fw_rule_get_all`.
+
+        Provider rules take precedence over security group rules.  If an IP
+        would be allowed by a security group ingress rule, but blocked by
+        a provider rule, then packets from the IP are dropped.  This includes
+        intra-project traffic in the case of the allow_project_net_traffic
+        flag for the libvirt-derived classes.
+
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        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):
+        """Setting up filtering rules and waiting for its completion.
+
+        To migrate an instance, filtering rules to hypervisors
+        and firewalls are inevitable on destination host.
+        ( Waiting only for filtering rules to hypervisor,
+        since filtering rules to firewall rules can be set faster).
+
+        Concretely, the below method must be called.
+        - setup_basic_filtering (for nova-basic, etc.)
+        - prepare_instance_filter(for nova-instance-instance-xxx, etc.)
+
+        to_xml may have to be called since it defines PROJNET, PROJMASK.
+        but libvirt migrates those value through migrateToURI(),
+        so , no need to be called.
+
+        Don't use thread for this method since migration should
+        not be started when setting-up filtering rules operations
+        are not completed.
+
+        :params instance_ref: nova.db.sqlalchemy.models.Instance object
+
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def filter_defer_apply_on(self):
+        """Defer application of IPTables rules."""
+        pass
+
+    def filter_defer_apply_off(self):
+        """Turn off deferral of IPTables rules and apply the rules now."""
+        pass
+
+    def unfilter_instance(self, instance, network_info):
+        """Stop filtering instance."""
+        # 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.
+        """
+        raise NotImplementedError()
+
+    def inject_file(self, instance, b64_path, b64_contents):
+        """
+        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.
+        """
+        # 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.
+
+        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.
+        """
+        pass
+
+    def inject_network_info(self, instance, nw_info):
+        """inject network info for specified instance."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        pass
+
+    def poll_rebooting_instances(self, timeout, instances):
+        """Poll for rebooting instances
+
+        :param timeout: the currently configured timeout for considering
+                        rebooting instances to be stuck
+        :param instances: instances that have been in rebooting state
+                          longer than the configured timeout
+        """
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def host_power_action(self, host, action):
+        """Reboots, shuts down or powers up the host."""
+        raise NotImplementedError()
+
+    def host_maintenance_mode(self, host, mode):
+        """Start/Stop host maintenance window. On start, it triggers
+        guest VMs evacuation."""
+        raise NotImplementedError()
+
+    def set_host_enabled(self, host, enabled):
+        """Sets the specified host's ability to accept new instances."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        raise NotImplementedError()
+
+    def get_host_uptime(self, host):
+        """Returns the result of calling "uptime" on the target host."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        return utils.execute('/usr/bin/uptime')[0]
+
+    def plug_vifs(self, instance, network_info):
+        """Plug VIFs into networks."""
+        # TODO(Vek): Need to pass context in for access to auth_token
+        pass
+
+    def unplug_vifs(self, instance, network_info):
+        """Unplug VIFs from networks."""
+        raise NotImplementedError()
+
+    def get_host_stats(self, refresh=False):
+        """Return currently known host stats."""
+        if refresh:
+            self._update_host_stats()
+
+        return self._host_stats
+
+    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
+        bytes transferred, and errs is the number of requests held up due to a
+        full pipeline.
+
+        All counters are long integers.
+
+        This method is optional.  On some platforms (e.g. XenAPI) performance
+        statistics can be retrieved directly in aggregate form, without Nova
+        having to do the aggregation.  On those platforms, this method is
+        unused.
+
+        Note that this function takes an instance ID.
+        """
+        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,
+        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
+        is the total number of packets failed / dropped.
+
+        All counters are long integers.
+
+        This method is optional.  On some platforms (e.g. XenAPI) performance
+        statistics can be retrieved directly in aggregate form, without Nova
+        having to do the aggregation.  On those platforms, this method is
+        unused.
+
+        Note that this function takes an instance ID.
+        """
+        raise NotImplementedError()
+
+    def legacy_nwinfo(self):
+        """True if the driver requires the legacy network_info format."""
+        # TODO(tr3buchet): update all subclasses and remove this method and
+        # related helpers.
+        return False
+
+    def macs_for_instance(self, instance):
+        """What MAC addresses must this instance have?
+
+        Some hypervisors (such as bare metal) cannot do freeform virtualisation
+        of MAC addresses. This method allows drivers to return a set of MAC
+        addresses that the instance is to have. allocate_for_instance will take
+        this into consideration when provisioning networking for the instance.
+
+        Mapping of MAC addresses to actual networks (or permitting them to be
+        freeform) is up to the network implementation layer. For instance,
+        with openflow switches, fixed MAC addresses can still be virtualised
+        onto any L2 domain, with arbitrary VLANs etc, but regular switches
+        require pre-configured MAC->network mappings that will match the
+        actual configuration.
+
+        Most hypervisors can use the default implementation which returns None.
+        Hypervisors with MAC limits should return a set of MAC addresses, which
+        will be supplied to the allocate_for_instance call by the compute
+        manager, and it is up to that call to ensure that all assigned network
+        details are compatible with the set of MAC addresses.
+
+        This is called during spawn_instance by the compute manager.
+
+        :return: None, or a set of MAC ids (e.g. set(['12:34:56:78:90:ab'])).
+            None means 'no constraints', a set means 'these and only these
+            MAC addresses'.
+        """
+        return None
+
+    def manage_image_cache(self, context, all_instances):
+        """
+        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.
+        """
+        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
+        raise NotImplementedError()
+
+    def remove_from_aggregate(self, context, aggregate, host, **kwargs):
+        """Remove a compute host from an aggregate."""
+        raise NotImplementedError()
+
+    def undo_aggregate_operation(self, context, op, aggregate,
+                                 host, set_error=True):
+        """Undo for Resource Pools."""
+        raise NotImplementedError()
+
+    def get_volume_connector(self, instance):
+        """Get connector information for the instance for attaching to volumes.
+
+        Connector information is a dictionary representing the ip of the
+        machine that will be making the connection, the name of the iscsi
+        initiator and the hostname of the machine as follows::
+
+            {
+                'ip': ip,
+                'initiator': initiator,
+                'host': hostname
+            }
+        """
+        connector = {'ip': self.get_host_ip_addr(),
+                     'host': CONF.host}
+        if not self._initiator:
+            self._initiator = self._get_iscsi_initiator()
+
+        if self._initiator:
+            connector['initiator'] = self._initiator
+        else:
+            LOG.warning(_("Could not determine iSCSI initiator name"),
+                        instance=instance)
+
+        return connector
+
+    def get_available_nodes(self):
+        """Returns nodenames of all nodes managed by the compute service.
+
+        This method is for multi compute-nodes support. If a driver supports
+        multi compute-nodes, this method returns a list of nodenames managed
+        by the service. Otherwise, this method should return
+        [hypervisor_hostname].
+        """
+        stats = self.get_host_stats(refresh=True)
+        if not isinstance(stats, list):
+            stats = [stats]
+        return [s['hypervisor_hostname'] for s in stats]
+
+    def get_per_instance_usage(self):
+        """Get information about instance resource usage.
+
+        :returns: dict of  nova uuid => dict of usage info
+        """
+        return {}
+
+    def instance_on_disk(self, instance):
+        """Checks access of instance files on the host.
+
+        :param instance: instance to lookup
+
+        Returns True if files of an instance with the supplied ID accessible on
+        the host, False otherwise.
+
+        .. note::
+            Used in rebuild for HA implementation and required for validation
+            of access to instance shared disk files
+        """
+        return False
+
+    def register_event_listener(self, callback):
+        """Register a callback to receive events.
+
+        Register a callback to receive asynchronous event
+        notifications from hypervisors. The callback will
+        be invoked with a single parameter, which will be
+        an instance of the nova.virt.event.Event class."""
+
+        self._compute_event_callback = callback
+
+    def emit_event(self, event):
+        """Dispatches an event to the compute manager.
+
+        Invokes the event callback registered by the
+        compute manager to dispatch the event. This
+        must only be invoked from a green thread."""
+
+        if not self._compute_event_callback:
+            LOG.debug("Discarding event %s" % str(event))
+            return
+
+        if not isinstance(event, virtevent.Event):
+            raise ValueError(
+                _("Event must be an instance of nova.virt.event.Event"))
+
+        try:
+            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")
+                      % locals())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/files/solariszones/sysconfig.py	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,233 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# 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
+#
+#         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 locale
+
+from lxml import etree
+
+from solaris_install.utils import encrypt_password
+
+
+DTD_URL = '/usr/share/lib/xml/dtd/service_bundle.dtd.1'
+DOCTYPE_STR = '<!DOCTYPE service_bundle SYSTEM "%s">' % DTD_URL
+
+
+def create_ncp_defaultfixed(addrtype, linkname, netid, ip_version, ip=None,
+                            route=None, nameservers=None):
+    """ return an etree object representing fixed (static) networking
+    """
+    svcbundle = etree.Element("service_bundle", type="profile",
+                              name="openstack")
+
+    # create the network/physical service profile
+    physical = etree.SubElement(svcbundle, "service", version="1",
+                                type="service", name="network/physical")
+    instance = etree.SubElement(physical, "instance", enabled="true",
+                                name="default")
+    pg = etree.SubElement(instance, "property_group", type="application",
+                          name="netcfg")
+    etree.SubElement(pg, "propval", type="astring", name="active_ncp",
+                     value="DefaultFixed")
+
+    # create the network/install service profile
+    install = etree.SubElement(svcbundle, "service", version="1",
+                               type="service", name="network/install")
+    instance = etree.SubElement(install, "instance", enabled="true",
+                                name="default")
+
+    if ip_version == 4:
+        pg4 = etree.SubElement(instance, "property_group",
+                               type="ipv4_interface",
+                               name="install_ipv4_interface_%d" % netid)
+        etree.SubElement(pg4, "propval", type="astring", name="address_type",
+                         value=addrtype)
+
+        if addrtype == "static":
+            etree.SubElement(pg4, "propval", type="net_address_v4",
+                             name="static_address", value=ip)
+            etree.SubElement(pg4, "propval", type="astring", name="name",
+                             value="%s/v4" % linkname)
+            etree.SubElement(pg4, "propval", type="net_address_v4",
+                             name="default_route", value=route)
+        else:
+            etree.SubElement(pg4, "propval", type="astring", name="name",
+                             value="%s/dhcp" % linkname)
+    else:
+        if addrtype == "static":
+            link = etree.SubElement(instance, "property_group",
+                                    type="ipv6_interface",
+                                    name="install_ipv6_interface_%d" % netid)
+            etree.SubElement(link, "propval", type="astring",
+                             name="address_type", value="addrconf")
+            etree.SubElement(link, "propval", type="astring",
+                             name="name", value="%s/aconf" % linkname)
+            etree.SubElement(link, "propval", type="astring",
+                             name="stateless", value="no")
+            etree.SubElement(link, "propval", type="astring",
+                             name="stateful", value="no")
+
+            pg6 = etree.SubElement(instance, "property_group",
+                                   type="ipv6_interface",
+                                   name="install_ipv6_interface_%d_1" % netid)
+            etree.SubElement(pg6, "propval", type="astring",
+                             name="address_type", value="static")
+            etree.SubElement(pg6, "propval", type="net_address_v6",
+                             name="static_address", value=ip)
+            etree.SubElement(pg6, "propval", type="astring", name="name",
+                             value="%s/v6" % linkname)
+        else:
+            pg6 = etree.SubElement(instance, "property_group",
+                                   type="ipv6_interface",
+                                   name="install_ipv6_interface_%d" % netid)
+            etree.SubElement(pg6, "propval", type="astring",
+                             name="address_type", value="addrconf")
+            etree.SubElement(pg6, "propval", type="astring", name="name",
+                             value="%s/dhcp" % linkname)
+            etree.SubElement(pg6, "propval", type="astring",
+                             name="stateless", value="yes")
+            etree.SubElement(pg6, "propval", type="astring",
+                             name="stateful", value="yes")
+
+    # create DNS profile for static configurations
+    if addrtype == "static" and nameservers is not None:
+        dns = etree.SubElement(svcbundle, "service", version="1",
+                               type="service", name="network/dns/client")
+        etree.SubElement(dns, "instance", enabled="true", name="default")
+        pg = etree.SubElement(dns, "property_group", type="application",
+                              name="config")
+        prop = etree.SubElement(pg, "property", type="net_address",
+                                name="nameserver")
+        proplist = etree.SubElement(prop, "net_address_list")
+
+        if isinstance(nameservers, str):
+            etree.SubElement(proplist, "value_node", value=nameservers)
+        elif isinstance(nameservers, list):
+            for entry in nameservers:
+                etree.SubElement(proplist, "value_node", value=entry)
+
+        search = etree.SubElement(pg, "property", type="astring",
+                                  name="search")
+        etree.SubElement(search, "astring_list")
+
+    return svcbundle
+
+
+def create_ncp_automatic():
+    """ return an etree object representing dynamic networking
+    """
+    svcbundle = etree.Element("service_bundle", type="profile",
+                              name="openstack")
+
+    # create the network/physical service profile
+    physical = etree.SubElement(svcbundle, "service", version="1",
+                                type="service", name="network/physical")
+    instance = etree.SubElement(physical, "instance", enabled="true",
+                                name="default")
+    pg = etree.SubElement(instance, "property_group", type="application",
+                          name="netcfg")
+    etree.SubElement(pg, "propval", type="astring", name="active_ncp",
+                     value="Automatic")
+
+    return svcbundle
+
+
+def create_default_root_account(expire=None, sshkey=None):
+    """ return an etree object representing the root account
+    """
+    svcbundle = etree.Element("service_bundle", type="profile",
+                              name="openstack")
+    service = etree.SubElement(svcbundle, "service", version="1",
+                               type="service", name="system/config-user")
+    instance = etree.SubElement(service, "instance", enabled="true",
+                                name="default")
+    root_pg = etree.SubElement(instance, "property_group", type="application",
+                               name="root_account")
+    etree.SubElement(root_pg, "propval", type="astring", name="password",
+                     value="NP")
+    etree.SubElement(root_pg, "propval", type="astring", name="type",
+                     value="normal")
+
+    if expire is not None:
+        etree.SubElement(root_pg, "propval", type="astring", name="expire",
+                         value=expire)
+
+    if sshkey is not None:
+        prop = etree.SubElement(root_pg, "property", type="astring",
+                                name="ssh_public_keys")
+        alist = etree.SubElement(prop, "astring_list")
+        etree.SubElement(alist, "value_node", value=sshkey)
+
+    return svcbundle
+
+
+def create_root_ssh_keys(key):
+    """ return an etree object to set a public SSH key for root
+    """
+    svcbundle = etree.Element("service_bundle", type="profile",
+                              name="openstack")
+    service = etree.SubElement(svcbundle, "service", version="1",
+                               type="service", name="system/config-user")
+    instance = etree.SubElement(service, "instance", enabled="true",
+                                name="default")
+    root_pg = etree.SubElement(instance, "property_group", type="application",
+                               name="root_account")
+    prop = etree.SubElement(root_pg, "property", type="astring",
+                            name="ssh_public_keys")
+    alist = etree.SubElement(prop, "astring_list")
+    etree.SubElement(alist, "value_node", value=key)
+    return svcbundle
+
+
+def create_hostname(name):
+    """ return an etree object representing the instance's hostname
+    """
+
+    svcbundle = etree.Element("service_bundle", type="profile",
+                              name="openstack")
+    service = etree.SubElement(svcbundle, "service", version="1",
+                               type="service", name="system/identity")
+    instance = etree.SubElement(service, "instance", enabled="true",
+                                name="node")
+    pg = etree.SubElement(instance, "property_group", type="application",
+                          name="config")
+    etree.SubElement(pg, "propval", type="astring", name="nodename",
+                     value=name)
+
+    return svcbundle
+
+
+def create_sc_profile(path, tree):
+    """ create a file containing the proper XML headers and encoding for a
+    given etree object
+    """
+    encoding = locale.getpreferredencoding()
+    if encoding == "646":
+        # The C locale on Solaris is returned as '646'.  Set it to 'US-ASCII'
+        # instead
+        encoding = 'US-ASCII'
+
+    xml_str = etree.tostring(tree, pretty_print=True, encoding=encoding,
+                             xml_declaration=True, doctype=DOCTYPE_STR)
+
+    # insert a comment just under the doctype line
+    comment = etree.Comment(" Auto-generated by OpenStack Nova ")
+    xml_list = xml_str.split("\n")
+    xml_list.insert(2, etree.tostring(comment))
+    xml_str = "\n".join(xml_list)
+
+    with open(path, "w+") as fh:
+        fh.write(xml_str)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/nova.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,313 @@
+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.
+
+Copyright (c) 2005, the Lawrence Journal-World
+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.
+
+   3. Neither the name of Django 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.
+
+--------------------------------------------------------------------------
+
+Copyright (c) 2006-2010 Mitch Garnaat http://garnaat.org/
+Copyright (c) 2010, Eucalyptus Systems, Inc.
+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, dis-
+tribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the fol-
+lowing 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 MERCHANTABIL-
+ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHOR 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 (c) 2006-2009 Mitch Garnaat http://garnaat.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, dis-
+tribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the fol-
+lowing 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 MERCHANTABIL-
+ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHOR 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.
+http://code.google.com/p/boto
+
+--------------------------------------------------------------------------
+
+Colorizer Code is borrowed from Twisted:
+Copyright (c) 2001-2010 Twisted Matrix Laboratories.
+
+  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/nova/nova.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,607 @@
+#
+# 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) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/nova@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Nova"
+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="Grizzly $(COMPONENT_VERSION)"
+set name=com.oracle.info.description value="Nova, the OpenStack compute service"
+set name=com.oracle.info.tpno value=16245
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/2013/350 value=PSARC/2014/049
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+dir  path=etc/nova owner=nova group=nova mode=0700
+file path=etc/nova/api-paste.ini owner=nova group=nova mode=0644 overlay=allow \
+    preserve=true
+file etc/nova/logging_sample.conf path=etc/nova/logging.conf owner=nova \
+    group=nova mode=0644 overlay=allow preserve=true
+file files/nova.conf path=etc/nova/nova.conf owner=nova group=nova mode=0644 \
+    overlay=allow preserve=true
+file path=etc/nova/policy.json owner=nova group=nova mode=0644 overlay=allow \
+    preserve=true
+file files/release path=etc/nova/release owner=nova group=nova
+file files/nova.auth_attr path=etc/security/auth_attr.d/cloud:openstack:nova \
+    group=sys
+file files/nova.exec_attr path=etc/security/exec_attr.d/cloud:openstack:nova \
+    group=sys
+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 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-objectstore path=lib/svc/method/nova-objectstore
+file files/nova-scheduler path=lib/svc/method/nova-scheduler
+file path=usr/bin/nova-clear-rabbit-queues
+file path=usr/bin/nova-manage pkg.depend.bypass-generate=.*/bpython.*
+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
+file usr/bin/nova-api-os-compute path=usr/lib/nova/nova-api-os-compute mode=0555
+file usr/bin/nova-cells path=usr/lib/nova/nova-cells mode=0555
+file usr/bin/nova-cert path=usr/lib/nova/nova-cert mode=0555
+file usr/bin/nova-compute path=usr/lib/nova/nova-compute mode=0555
+file usr/bin/nova-conductor path=usr/lib/nova/nova-conductor mode=0555
+file usr/bin/nova-console path=usr/lib/nova/nova-console mode=0555
+file usr/bin/nova-consoleauth path=usr/lib/nova/nova-consoleauth mode=0555
+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-spicehtml5proxy path=usr/lib/nova/nova-spicehtml5proxy \
+    mode=0555
+file usr/bin/nova-xvpvncproxy path=usr/lib/nova/nova-xvpvncproxy mode=0555
+file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/nova-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/CA/genrootca.sh
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/CA/openssl.cnf.tmpl
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/ec2utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/faults.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/ec2/inst_state.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/metadata/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/metadata/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/metadata/handler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/metadata/password.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/consoles.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/admin_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/agents.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/aggregates.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_nodes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/cells.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/certificates.py
+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_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_ips.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_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/fixed_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavor_access.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavor_disabled.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavor_rxtx.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavor_swap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavorextradata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavorextraspecs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/flavormanage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/floating_ip_dns.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/floating_ip_pools.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/floating_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/floating_ips_bulk.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/instance_usage_audit_log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/keypairs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/multinic.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/multiple_create.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/scheduler_hints.py
+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_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/services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/simple_tenant_usage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/used_limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/user_data.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/virtual_interfaces.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/contrib/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/flavors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/image_metadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/ips.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/extension.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/extensions.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/flavor.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/flavors.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/flavors_index.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/image.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/images.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/images_index.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/limits.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/metadata.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/server.rng
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/schemas/v1.1/servers.rng
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/addresses.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/flavors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/servers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/compute/views/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/api/openstack/urlmap.py
+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/validator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/availability_zones.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/block_device.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/messaging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/opts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/rpc_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/state.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cells/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cert/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cert/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cert/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cloudpipe/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cloudpipe/bootscript.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cloudpipe/client.ovpn.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/cloudpipe/pipelib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/common/__init__.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/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/instance_actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/instance_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/manager.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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/vm_mode.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/compute/vm_states.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/conductor/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/conductor/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/conductor/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/conductor/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/api.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/xvp.conf.template
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/console/xvp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/consoleauth/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/consoleauth/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/consoleauth/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/crypto.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/db/sqlalchemy/migrate_repo/README
+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/__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/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/filters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/hooks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/glance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/image/s3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/ipv6/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/ipv6/account_identifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/ipv6/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/ipv6/rfc2462.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/loadables.py
+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/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/fr/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/ja/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/nb/LC_MESSAGES/nova.po
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/locale/nova.pot
+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/ru/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/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/zh_CN/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/api_deprecated.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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/l3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/ldapdns.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/linux_net.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/minidns.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/noop_dns_driver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/nova_ipam_lib.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/quantumv2/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/quantumv2/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/rpcapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/network/security_group/__init__.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/quantum_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/sg.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/notifications.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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/README
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/cliutils.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/gettextutils.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/memorycache.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/plugin/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/plugin/callbackplugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/plugin/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/plugin/pluginmanager.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/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/proxy.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/setup.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/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/openstack/common/version.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/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/quota.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/chance.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_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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/availability_zone_filter.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/filters/compute_capabilities_filter.py
+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/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/num_instances_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/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/multi.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/weights/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/scheduler/weights/least_cost.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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/drivers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/drivers/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/drivers/mc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/servicegroup/drivers/zk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/spice/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/storage/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/storage/linuxscsi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/test.py
+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/configdrive.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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/mount/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/mount/loop.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/mount/nbd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/vfs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/vfs/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/disk/vfs/localfs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/driver.py
+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/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/virt/interfaces.template
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/nova/volume/cinder.py
+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 dependency on package delivering archiveadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/archiveadm
+
+# force a dependency on package delivering iscsiadm(1M)
+depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/iscsiadm
+
+# force a dependency on anyjson; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/anyjson-26
+
+# force a dependency on boto; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/boto-26
+
+# force a dependency on cheetah; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/cheetah-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 coverage; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/coverage-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 greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/greenlet-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 kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/kombu-26
+
+# force a dependency on lxml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/lxml-26
+
+# force a dependency on paste; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/paste-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/paste.deploy-26
+
+# force a dependency on pyasn1; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pyasn1-26
+
+# force a dependency on python-ldap; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/python-ldap-26
+
+# force a dependency on quantumclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/quantumclient-26
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/routes-26
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-26
+
+# force a dependency on stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/stevedore-26
+
+# force a dependency on websockify; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/websockify-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
+
+# force a dependency on rad-kstat
+depend type=require fmri=system/management/rad/module/rad-kstat
+
+# force a dependency on rad-zonemgr
+depend type=require fmri=system/management/rad/module/rad-zonemgr
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/01-Solaris-vm_mode.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,17 @@
+In-house patch to enable Solaris Zones specific vm_mode value for use by the
+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 @@
+ XEN = "xen"  # Xen 3.0 paravirtualized
+ UML = "uml"  # User Mode Linux paravirtualized
+ EXE = "exe"  # Executables in containers
++SOL = "solariszones"  # Solaris zones (non-global and kernel)
+ 
+-ALL = [HVM, XEN, UML, EXE]
++ALL = [HVM, XEN, UML, EXE, SOL]
+ 
+ 
+ def get_from_instance(instance):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/02-noamqplib.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,23 @@
+In-house patch to remove amqplib from Nova's requirements files as an alternate
+implementation is used on Solaris.  This patch is Solaris-specific and
+not suitable for upstream.
+
+--- nova-2013.1.4/tools/pip-requires.orig       2013-11-22 08:08:07.506739321 -0700
++++ nova-2013.1.4/tools/pip-requires        2013-11-22 08:08:13.543791383 -0700
+@@ -1,6 +1,5 @@
+ SQLAlchemy>=0.7.8,<0.7.99
+ Cheetah>=2.4.4
+-amqplib>=0.6.1
+ anyjson>=0.2.4
+ argparse
+ boto
+
+--- nova-2013.1.4/nova.egg-info/requires.txt.orig       2013-11-22 08:09:22.863753329 -0700
++++ nova-2013.1.4/nova.egg-info/requires.txt        2013-11-22 08:09:28.573969576 -0700
+@@ -1,6 +1,5 @@
+ SQLAlchemy>=0.7.8,<0.7.99
+ Cheetah>=2.4.4
+-amqplib>=0.6.1
+ anyjson>=0.2.4
+ boto
+ eventlet>=0.9.17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/03-Solaris-flavors.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,86 @@
+In-house patch to update the default flavors for use with Solaris.
+This patch has not yet been submitted upstream.
+
+--- nova-2013.1.4/nova/db/sqlalchemy/migrate_repo/versions/133_folsom.py.orig	2014-02-11 08:54:04.148157965 -0700
++++ nova-2013.1.4/nova/db/sqlalchemy/migrate_repo/versions/133_folsom.py	2014-02-11 08:54:09.036798132 -0700
+@@ -2,6 +2,8 @@
+ 
+ # Copyright 2012 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,17 +38,45 @@
+     return Text().with_variant(dialects.mysql.MEDIUMTEXT(), 'mysql')
+ 
+ 
+-def _populate_instance_types(instance_types_table):
++def _populate_instance_types(instance_types_table, instance_type_extra_specs):
+     default_inst_types = {
+-        'm1.tiny': dict(mem=512, vcpus=1, root_gb=0, eph_gb=0, flavid=1),
+-        'm1.small': dict(mem=2048, vcpus=1, root_gb=20, eph_gb=0, flavid=2),
+-        'm1.medium': dict(mem=4096, vcpus=2, root_gb=40, eph_gb=0, flavid=3),
+-        'm1.large': dict(mem=8192, vcpus=4, root_gb=80, eph_gb=0, flavid=4),
+-        'm1.xlarge': dict(mem=16384, vcpus=8, root_gb=160, eph_gb=0, flavid=5)
++        'Oracle Solaris kernel zone - tiny':
++            dict(mem=2048, vcpus=1, root_gb=10, eph_gb=0, flavid=1,
++                 extra='solaris-kz'),
++        'Oracle Solaris kernel zone - small':
++            dict(mem=4096, vcpus=4, root_gb=20, eph_gb=0, flavid=2,
++                 extra='solaris-kz'),
++        'Oracle Solaris kernel zone - medium':
++            dict(mem=8192, vcpus=8, root_gb=40, eph_gb=0, flavid=3,
++                 extra='solaris-kz'),
++        'Oracle Solaris kernel zone - large':
++            dict(mem=16384, vcpus=16, root_gb=40, eph_gb=0, flavid=4,
++                 extra='solaris-kz'),
++        'Oracle Solaris kernel zone - xlarge':
++            dict(mem=32768, vcpus=32, root_gb=80, eph_gb=0, flavid=5,
++                 extra='solaris-kz'),
++
++        'Oracle Solaris non-global zone - tiny':
++            dict(mem=2048, vcpus=1, root_gb=10, eph_gb=0, flavid=6,
++                 extra='solaris'),
++        'Oracle Solaris non-global zone - small':
++            dict(mem=3072, vcpus=4, root_gb=20, eph_gb=0, flavid=7,
++                 extra='solaris'),
++        'Oracle Solaris non-global zone - medium':
++            dict(mem=4096, vcpus=8, root_gb=40, eph_gb=0, flavid=8,
++                 extra='solaris'),
++        'Oracle Solaris non-global zone - large':
++            dict(mem=8192, vcpus=16, root_gb=40, eph_gb=0, flavid=9,
++                 extra='solaris'),
++        'Oracle Solaris non-global zone - xlarge':
++            dict(mem=16384, vcpus=32, root_gb=80, eph_gb=0, flavid=10,
++                 extra='solaris')
+         }
+ 
+     try:
+         i = instance_types_table.insert()
++        e = instance_type_extra_specs.insert()
++        index = 1
+         for name, values in default_inst_types.iteritems():
+             i.execute({'name': name, 'memory_mb': values["mem"],
+                         'vcpus': values["vcpus"], 'deleted': False,
+@@ -57,6 +87,10 @@
+                         'flavorid': values["flavid"],
+                         'disabled': False,
+                         'is_public': True})
++            e.execute({'instance_type_id': index,
++                       'deleted': 0, 'key': 'zonecfg:brand',
++                       'value': values['extra']})
++            index += 1
+     except Exception:
+         LOG.info(repr(instance_types_table))
+         LOG.exception(_('Exception while seeding instance_types table'))
+@@ -1218,7 +1252,7 @@
+                          name='instance_info_caches_instance_id_key').create()
+ 
+     # populate initial instance types
+-    _populate_instance_types(instance_types)
++    _populate_instance_types(instance_types, instance_type_extra_specs)
+ 
+ 
+ def downgrade(migrate_engine):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/04-CVE-2013-4497.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,152 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2
+
+commit df2ea2e3acdede21b40d47b7adbeac04213d031b
+Author: John Garbutt <[email protected]>
+Date:   Thu Sep 12 18:11:49 2013 +0100
+
+    xenapi: enforce filters after live-migration
+    
+    Currently and network filters, including security groups, are
+    lost after a server has been live-migrated.
+    
+    This partially fixes the issue by ensuring that security groups are
+    re-applied to the VM once it reached the destination, and been started.
+    
+    This leaves a small amount of time during the live-migrate where the VM
+    is not protected. There is a further bug raised to close the rest of
+    this whole, but this helps keep the VM protected for the majority of the
+    time.
+    
+    Fixes bug 1202266
+    
+    (Cherry picked from commit: 5cced7a6dd32d231c606e25dbf762d199bf9cca7)
+    
+    Change-Id: I66bc7af1c6da74e18dce47180af0cb6020ba2c1a
+
+diff --git a/nova/tests/test_xenapi.py b/nova/tests/test_xenapi.py
+index f7fb81d..d4c19a4 100644
+--- a/nova/tests/test_xenapi.py
++++ b/nova/tests/test_xenapi.py
+@@ -2723,7 +2723,27 @@ class XenAPILiveMigrateTestCase(stubs.XenAPITestBase):
+         # ensure method is present
+         stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
+         self.conn = xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)
+-        self.conn.post_live_migration_at_destination(None, None, None, None)
++
++        fake_instance = "instance"
++        fake_network_info = "network_info"
++
++        def fake_fw(instance, network_info):
++            self.assertEquals(instance, fake_instance)
++            self.assertEquals(network_info, fake_network_info)
++            fake_fw.called += 1
++
++        fake_fw.called = 0
++        _vmops = self.conn._vmops
++        self.stubs.Set(_vmops.firewall_driver,
++                       'setup_basic_filtering', fake_fw)
++        self.stubs.Set(_vmops.firewall_driver,
++                       'prepare_instance_filter', fake_fw)
++        self.stubs.Set(_vmops.firewall_driver,
++                       'apply_instance_filter', fake_fw)
++
++        self.conn.post_live_migration_at_destination(None, fake_instance,
++                                                     fake_network_info, None)
++        self.assertEqual(fake_fw.called, 3)
+ 
+     def test_check_can_live_migrate_destination_with_block_migration(self):
+         stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
+diff --git a/nova/virt/xenapi/driver.py b/nova/virt/xenapi/driver.py
+index 128f67f..564c587 100755
+--- a/nova/virt/xenapi/driver.py
++++ b/nova/virt/xenapi/driver.py
+@@ -1,4 +1,3 @@
+-# vim: tabstop=4 shiftwidth=4 softtabstop=4
+ 
+ # Copyright (c) 2010 Citrix Systems, Inc.
+ # Copyright 2010 OpenStack Foundation
+@@ -514,7 +513,8 @@ class XenAPIDriver(driver.ComputeDriver):
+         :params : block_migration: if true, post operation of block_migraiton.
+         """
+         # TODO(JohnGarbutt) look at moving/downloading ramdisk and kernel
+-        pass
++        self._vmops.post_live_migration_at_destination(ctxt, instance_ref,
++                network_info, block_device_info, block_device_info)
+ 
+     def unfilter_instance(self, instance_ref, network_info):
+         """Removes security groups configured for an instance."""
+diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
+index eccf3e0..ae5c697 100644
+--- a/nova/virt/xenapi/vmops.py
++++ b/nova/virt/xenapi/vmops.py
+@@ -1737,6 +1737,24 @@ class VMOps(object):
+                 recover_method(context, instance, destination_hostname,
+                                block_migration)
+ 
++    def post_live_migration_at_destination(self, context, instance,
++                                           network_info, block_migration,
++                                           block_device_info):
++        # FIXME(johngarbutt): we should block all traffic until we have
++        # applied security groups, however this requires changes to XenServer
++        try:
++            self.firewall_driver.setup_basic_filtering(
++                    instance, network_info)
++        except NotImplementedError:
++            # NOTE(salvatore-orlando): setup_basic_filtering might be
++            # empty or not implemented at all, as basic filter could
++            # be implemented with VIF rules created by xapi plugin
++            pass
++
++        self.firewall_driver.prepare_instance_filter(instance,
++                                                     network_info)
++        self.firewall_driver.apply_instance_filter(instance, network_info)
++
+     def get_per_instance_usage(self):
+         """Get usage info about each active instance."""
+         usage = {}
+commit 01de658210fd65171bfbf5450c93673b5ce0bd9e
+Author: John Garbutt <[email protected]>
+Date:   Mon Oct 21 19:34:43 2013 +0100
+
+    xenapi: apply firewall rules in finish_migrate
+    
+    When security groups were added, the rules were not re-applied to
+    servers that have been migrated to a new hypervisor.
+    
+    This change ensures the firewall rules are applied as part of creating
+    the new VM in finish_migrate. This code follows a very similar pattern
+    to the code in spawn, and that is where the cut and paste code comes
+    from. This code duplication was removed in Havana.
+    
+    Fixes bug 1073306
+    
+    Change-Id: I6295a782df328a759e358fb82b76dd3f7bd4b39e
+
+diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
+index eccf3e0..7a96ac2 100644
+--- a/nova/virt/xenapi/vmops.py
++++ b/nova/virt/xenapi/vmops.py
+@@ -277,8 +277,23 @@ class VMOps(object):
+ 
+         self._attach_mapped_block_devices(instance, block_device_info)
+ 
++        try:
++            self.firewall_driver.setup_basic_filtering(
++                    instance, network_info)
++        except NotImplementedError:
++            # NOTE(salvatore-orlando): setup_basic_filtering might be
++            # empty or not implemented at all, as basic filter could
++            # be implemented with VIF rules created by xapi plugin
++            pass
++
++        self.firewall_driver.prepare_instance_filter(instance,
++                                                     network_info)
++
+         # 5. Start VM
+         self._start(instance, vm_ref=vm_ref)
++
++        self.firewall_driver.apply_instance_filter(instance, network_info)
++
+         self._update_instance_progress(context, instance,
+                                        step=5,
+                                        total_steps=RESIZE_TOTAL_STEPS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/05-CVE-2013-4463.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,424 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.1, Icehouse
+
+commit 135faa7b5d9855312bedc19e5e1ecebae34d3d18
+Author: Pádraig Brady <[email protected]>
+Date:   Fri Sep 27 04:07:14 2013 +0100
+
+    ensure we don't boot oversized images
+    
+    Since we can't generally shrink incoming images, add extra checks
+    to ensure oversized images are not allowed through.
+    All cases when populating the libvirt image cache are now handled,
+    including the initial download from glance, where we avoid
+    converting to raw, as that could generate non sparse images
+    much larger than the downloaded image.
+    
+    * nova/virt/libvirt/utils.py (fetch_image): Allow passing through
+    of the max_size parameter.
+    * nova/virt/images.py (fetch_to_raw): Accept the max_size parameter,
+    and use it to discard images with larger (virtual) sizes.
+    * nova/virt/libvirt/imagebackend.py (verify_base_size): A new
+    refactored function to identify and raise exception to oversized images.
+    (Raw.create_image): Pass the max_size to the fetch function.
+    Also enforce virtual image size checking for already fetched images,
+    as this class (despite the name) can be handling qcow files.
+    (Qcow2.create_image): Pass the max_size to the fetch function,
+    or verify the virtual size for the instance as done previously.
+    (Lvm.create_image): Pass the max_size to the fetch function.
+    Also check the size before transferring to the volume to improve
+    efficiency by not even attempting the transfer of oversized images.
+    (Rbd.create_image): Likewise.
+    * nova/tests/fake_libvirt_utils.py: Support max_size arg.
+    * nova/tests/test_libvirt.py (test_fetch_raw_image):
+    Add a case to check oversized images are discarded.
+    * nova/tests/test_imagebackend.py (test_create_image_too_small):
+    Adjust to avoid the fetch size check.
+    
+    Fixes bug: 1177830
+    Fixes bug: 1206081
+    
+    Conflicts:
+    
+    	nova/tests/test_imagebackend.py
+    	nova/virt/libvirt/imagebackend.py
+    
+    Change-Id: Idc35fce580be4f74e23883d1b4bea6475c3f6e30
+
+diff --git a/nova/tests/fake_libvirt_utils.py b/nova/tests/fake_libvirt_utils.py
+index 23b758e..ecf357a 100644
+--- a/nova/tests/fake_libvirt_utils.py
++++ b/nova/tests/fake_libvirt_utils.py
+@@ -193,7 +193,7 @@ def get_fs_info(path):
+             'free': 84 * (1024 ** 3)}
+ 
+ 
+-def fetch_image(context, target, image_id, user_id, project_id):
++def fetch_image(context, target, image_id, user_id, project_id, max_size=0):
+     pass
+ 
+ 
+diff --git a/nova/tests/test_imagebackend.py b/nova/tests/test_imagebackend.py
+index 77446e8..93ed23d 100644
+--- a/nova/tests/test_imagebackend.py
++++ b/nova/tests/test_imagebackend.py
+@@ -189,7 +189,7 @@ class RawTestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH, image_id=None)
++        fn(target=self.TEMPLATE_PATH, max_size=None, image_id=None)
+         imagebackend.libvirt_utils.copy_image(self.TEMPLATE_PATH, self.PATH)
+         self.mox.ReplayAll()
+ 
+@@ -210,7 +210,7 @@ class RawTestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image_extend(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH, image_id=None)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH, image_id=None)
+         imagebackend.libvirt_utils.copy_image(self.TEMPLATE_PATH, self.PATH)
+         imagebackend.disk.extend(self.PATH, self.SIZE)
+         self.mox.ReplayAll()
+@@ -260,7 +260,7 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=None, target=self.TEMPLATE_PATH)
+         imagebackend.libvirt_utils.create_cow_image(self.TEMPLATE_PATH,
+                                                     self.PATH)
+         self.mox.ReplayAll()
+@@ -272,15 +272,12 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image_with_size(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH)
+         self.mox.StubOutWithMock(os.path, 'exists')
+-        self.mox.StubOutWithMock(imagebackend.disk, 'get_disk_size')
+         if self.OLD_STYLE_INSTANCE_PATH:
+             os.path.exists(self.OLD_STYLE_INSTANCE_PATH).AndReturn(False)
+         os.path.exists(self.TEMPLATE_PATH).AndReturn(False)
+         os.path.exists(self.PATH).AndReturn(False)
+-        imagebackend.disk.get_disk_size(self.TEMPLATE_PATH
+-                                       ).AndReturn(self.SIZE)
+         os.path.exists(self.PATH).AndReturn(False)
+         imagebackend.libvirt_utils.create_cow_image(self.TEMPLATE_PATH,
+                                                     self.PATH)
+@@ -294,27 +291,24 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image_too_small(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
+         self.mox.StubOutWithMock(os.path, 'exists')
+         self.mox.StubOutWithMock(imagebackend.disk, 'get_disk_size')
+         if self.OLD_STYLE_INSTANCE_PATH:
+             os.path.exists(self.OLD_STYLE_INSTANCE_PATH).AndReturn(False)
+-        os.path.exists(self.TEMPLATE_PATH).AndReturn(False)
+-        os.path.exists(self.PATH).AndReturn(False)
++        os.path.exists(self.TEMPLATE_PATH).AndReturn(True)
+         imagebackend.disk.get_disk_size(self.TEMPLATE_PATH
+                                        ).AndReturn(self.SIZE)
+         self.mox.ReplayAll()
+ 
+         image = self.image_class(self.INSTANCE, self.NAME)
+-        self.assertRaises(exception.ImageTooLarge, image.create_image, fn,
+-                          self.TEMPLATE_PATH, 1)
++        self.assertRaises(exception.InstanceTypeDiskTooSmall,
++                          image.create_image, fn, self.TEMPLATE_PATH, 1)
+         self.mox.VerifyAll()
+ 
+     def test_generate_resized_backing_files(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH)
+         self.mox.StubOutWithMock(os.path, 'exists')
+-        self.mox.StubOutWithMock(imagebackend.disk, 'get_disk_size')
+         self.mox.StubOutWithMock(imagebackend.libvirt_utils,
+                                  'get_disk_backing_file')
+         if self.OLD_STYLE_INSTANCE_PATH:
+@@ -329,8 +323,6 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+                                               self.QCOW2_BASE)
+         imagebackend.disk.extend(self.QCOW2_BASE, self.SIZE)
+ 
+-        imagebackend.disk.get_disk_size(self.TEMPLATE_PATH
+-                                       ).AndReturn(self.SIZE)
+         os.path.exists(self.PATH).AndReturn(True)
+         self.mox.ReplayAll()
+ 
+@@ -341,9 +333,8 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_qcow2_exists_and_has_no_backing_file(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH)
+         self.mox.StubOutWithMock(os.path, 'exists')
+-        self.mox.StubOutWithMock(imagebackend.disk, 'get_disk_size')
+         self.mox.StubOutWithMock(imagebackend.libvirt_utils,
+                                  'get_disk_backing_file')
+         if self.OLD_STYLE_INSTANCE_PATH:
+@@ -353,8 +344,6 @@ class Qcow2TestCase(_ImageTestCase, test.TestCase):
+ 
+         imagebackend.libvirt_utils.get_disk_backing_file(self.PATH)\
+             .AndReturn(None)
+-        imagebackend.disk.get_disk_size(self.TEMPLATE_PATH
+-                                       ).AndReturn(self.SIZE)
+         os.path.exists(self.PATH).AndReturn(True)
+         self.mox.ReplayAll()
+ 
+@@ -391,7 +380,7 @@ class LvmTestCase(_ImageTestCase, test.TestCase):
+ 
+     def _create_image(self, sparse):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=None, target=self.TEMPLATE_PATH)
+         self.libvirt_utils.create_lvm_image(self.VG,
+                                             self.LV,
+                                             self.TEMPLATE_SIZE,
+@@ -423,7 +412,7 @@ class LvmTestCase(_ImageTestCase, test.TestCase):
+ 
+     def _create_image_resize(self, sparse):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH)
+         self.libvirt_utils.create_lvm_image(self.VG, self.LV,
+                                             self.SIZE, sparse=sparse)
+         self.disk.get_disk_size(self.TEMPLATE_PATH
+@@ -462,7 +451,7 @@ class LvmTestCase(_ImageTestCase, test.TestCase):
+ 
+     def test_create_image_negative(self):
+         fn = self.prepare_mocks()
+-        fn(target=self.TEMPLATE_PATH)
++        fn(max_size=self.SIZE, target=self.TEMPLATE_PATH)
+         self.libvirt_utils.create_lvm_image(self.VG,
+                                             self.LV,
+                                             self.SIZE,
+diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
+index d8c4cf2..e422ec7 100644
+--- a/nova/tests/test_libvirt.py
++++ b/nova/tests/test_libvirt.py
+@@ -4826,7 +4826,8 @@ disk size: 4.4M''', ''))
+         image_id = '4'
+         user_id = 'fake'
+         project_id = 'fake'
+-        images.fetch_to_raw(context, image_id, target, user_id, project_id)
++        images.fetch_to_raw(context, image_id, target, user_id, project_id,
++                            max_size=0)
+ 
+         self.mox.ReplayAll()
+         libvirt_utils.fetch_image(context, target, image_id,
+@@ -4856,20 +4857,27 @@ disk size: 4.4M''', ''))
+                 file_format = path.split('.')[-2]
+             elif file_format == 'converted':
+                 file_format = 'raw'
++
+             if 'backing' in path:
+                 backing_file = 'backing'
+             else:
+                 backing_file = None
+ 
++            if 'big' in path:
++                virtual_size = 2
++            else:
++                virtual_size = 1
++
+             FakeImgInfo.file_format = file_format
+             FakeImgInfo.backing_file = backing_file
++            FakeImgInfo.virtual_size = virtual_size
+ 
+             return FakeImgInfo()
+ 
+         self.stubs.Set(utils, 'execute', fake_execute)
+         self.stubs.Set(os, 'rename', fake_rename)
+         self.stubs.Set(os, 'unlink', fake_unlink)
+-        self.stubs.Set(images, 'fetch', lambda *_: None)
++        self.stubs.Set(images, 'fetch', lambda *_, **__: None)
+         self.stubs.Set(images, 'qemu_img_info', fake_qemu_img_info)
+         self.stubs.Set(utils, 'delete_if_exists', fake_rm_on_errror)
+ 
+@@ -4884,7 +4892,8 @@ disk size: 4.4M''', ''))
+                               't.qcow2.part', 't.qcow2.converted'),
+                              ('rm', 't.qcow2.part'),
+                              ('mv', 't.qcow2.converted', 't.qcow2')]
+-        images.fetch_to_raw(context, image_id, target, user_id, project_id)
++        images.fetch_to_raw(context, image_id, target, user_id, project_id,
++                            max_size=1)
+         self.assertEqual(self.executes, expected_commands)
+ 
+         target = 't.raw'
+@@ -4901,6 +4910,15 @@ disk size: 4.4M''', ''))
+                           context, image_id, target, user_id, project_id)
+         self.assertEqual(self.executes, expected_commands)
+ 
++        target = 'big.qcow2'
++        self.executes = []
++        expected_commands = [('rm', '-f', 'big.qcow2.part')]
++        self.assertRaises(exception.InstanceTypeDiskTooSmall,
++                          images.fetch_to_raw,
++                          context, image_id, target, user_id, project_id,
++                          max_size=1)
++        self.assertEqual(self.executes, expected_commands)
++
+         del self.executes
+ 
+     def test_get_disk_backing_file(self):
+diff --git a/nova/virt/images.py b/nova/virt/images.py
+index b40f566..541779a 100755
+--- a/nova/virt/images.py
++++ b/nova/virt/images.py
+@@ -190,7 +190,7 @@ def convert_image(source, dest, out_format, run_as_root=False):
+     utils.execute(*cmd, run_as_root=run_as_root)
+ 
+ 
+-def fetch(context, image_href, path, _user_id, _project_id):
++def fetch(context, image_href, path, _user_id, _project_id, max_size=0):
+     # TODO(vish): Improve context handling and add owner and auth data
+     #             when it is added to glance.  Right now there is no
+     #             auth checking in glance, so we assume that access was
+@@ -202,9 +202,10 @@ def fetch(context, image_href, path, _user_id, _project_id):
+             image_service.download(context, image_id, image_file)
+ 
+ 
+-def fetch_to_raw(context, image_href, path, user_id, project_id):
++def fetch_to_raw(context, image_href, path, user_id, project_id, max_size=0):
+     path_tmp = "%s.part" % path
+-    fetch(context, image_href, path_tmp, user_id, project_id)
++    fetch(context, image_href, path_tmp, user_id, project_id,
++          max_size=max_size)
+ 
+     with utils.remove_path_on_error(path_tmp):
+         data = qemu_img_info(path_tmp)
+@@ -220,6 +221,23 @@ def fetch_to_raw(context, image_href, path, user_id, project_id):
+             raise exception.ImageUnacceptable(image_id=image_href,
+                 reason=_("fmt=%(fmt)s backed by: %(backing_file)s") % locals())
+ 
++        # We can't generally shrink incoming images, so disallow
++        # images > size of the flavor we're booting.  Checking here avoids
++        # an immediate DoS where we convert large qcow images to raw
++        # (which may compress well but not be sparse).
++        # TODO(p-draigbrady): loop through all flavor sizes, so that
++        # we might continue here and not discard the download.
++        # If we did that we'd have to do the higher level size checks
++        # irrespective of whether the base image was prepared or not.
++        disk_size = data.virtual_size
++        if max_size and max_size < disk_size:
++            msg = _('%(base)s virtual size %(disk_size)s '
++                    'larger than flavor root disk size %(size)s')
++            LOG.error(msg % {'base': path,
++                             'disk_size': disk_size,
++                             'size': max_size})
++            raise exception.InstanceTypeDiskTooSmall()
++
+         if fmt != "raw" and CONF.force_raw_images:
+             staged = "%s.converted" % path
+             LOG.debug("%s was %s, converting to raw" % (image_href, fmt))
+diff --git a/nova/virt/libvirt/imagebackend.py b/nova/virt/libvirt/imagebackend.py
+index e2c7ccf..dc85c97 100755
+--- a/nova/virt/libvirt/imagebackend.py
++++ b/nova/virt/libvirt/imagebackend.py
+@@ -177,6 +177,36 @@ class Image(object):
+                           (CONF.preallocate_images, self.path))
+         return can_fallocate
+ 
++    @staticmethod
++    def verify_base_size(base, size, base_size=0):
++        """Check that the base image is not larger than size.
++           Since images can't be generally shrunk, enforce this
++           constraint taking account of virtual image size.
++        """
++
++        # Note(pbrady): The size and min_disk parameters of a glance
++        #  image are checked against the instance size before the image
++        #  is even downloaded from glance, but currently min_disk is
++        #  adjustable and doesn't currently account for virtual disk size,
++        #  so we need this extra check here.
++        # NOTE(cfb): Having a flavor that sets the root size to 0 and having
++        #  nova effectively ignore that size and use the size of the
++        #  image is considered a feature at this time, not a bug.
++
++        if size is None:
++            return
++
++        if size and not base_size:
++            base_size = disk.get_disk_size(base)
++
++        if size < base_size:
++            msg = _('%(base)s virtual size %(base_size)s '
++                    'larger than flavor root disk size %(size)s')
++            LOG.error(msg % {'base': base,
++                              'base_size': base_size,
++                              'size': size})
++            raise exception.InstanceTypeDiskTooSmall()
++
+     def snapshot_create(self):
+         raise NotImplementedError
+ 
+@@ -217,7 +247,8 @@ class Raw(Image):
+             #Generating image in place
+             prepare_template(target=self.path, *args, **kwargs)
+         else:
+-            prepare_template(target=base, *args, **kwargs)
++            prepare_template(target=base, max_size=size, *args, **kwargs)
++            self.verify_base_size(base, size)
+             if not os.path.exists(self.path):
+                 with utils.remove_path_on_error(self.path):
+                     copy_raw_image(base, self.path, size)
+@@ -257,7 +288,9 @@ class Qcow2(Image):
+ 
+         # Download the unmodified base image unless we already have a copy.
+         if not os.path.exists(base):
+-            prepare_template(target=base, *args, **kwargs)
++            prepare_template(target=base, max_size=size, *args, **kwargs)
++        else:
++            self.verify_base_size(base, size)
+ 
+         legacy_backing_size = None
+         legacy_base = base
+@@ -283,13 +316,6 @@ class Qcow2(Image):
+                     libvirt_utils.copy_image(base, legacy_base)
+                     disk.extend(legacy_base, legacy_backing_size)
+ 
+-        # NOTE(cfb): Having a flavor that sets the root size to 0 and having
+-        #            nova effectively ignore that size and use the size of the
+-        #            image is considered a feature at this time, not a bug.
+-        if size and size < disk.get_disk_size(base):
+-            LOG.error('%s virtual size larger than flavor root disk size %s' %
+-                      (base, size))
+-            raise exception.ImageTooLarge()
+         if not os.path.exists(self.path):
+             with utils.remove_path_on_error(self.path):
+                 copy_qcow2_image(base, self.path, size)
+@@ -348,6 +374,7 @@ class Lvm(Image):
+                                 lock_path=self.lock_path)
+         def create_lvm_image(base, size):
+             base_size = disk.get_disk_size(base)
++            self.verify_base_size(base, size, base_size=base_size)
+             resize = size > base_size
+             size = size if resize else base_size
+             libvirt_utils.create_lvm_image(self.vg, self.lv,
+@@ -365,7 +392,7 @@ class Lvm(Image):
+             with self.remove_volume_on_error(self.path):
+                 prepare_template(target=self.path, *args, **kwargs)
+         else:
+-            prepare_template(target=base, *args, **kwargs)
++            prepare_template(target=base, max_size=size, *args, **kwargs)
+             with self.remove_volume_on_error(self.path):
+                 create_lvm_image(base, size)
+ 
+diff --git a/nova/virt/libvirt/utils.py b/nova/virt/libvirt/utils.py
+index 6972243..4c31fcb 100755
+--- a/nova/virt/libvirt/utils.py
++++ b/nova/virt/libvirt/utils.py
+@@ -592,9 +592,10 @@ def get_fs_info(path):
+             'used': used}
+ 
+ 
+-def fetch_image(context, target, image_id, user_id, project_id):
++def fetch_image(context, target, image_id, user_id, project_id, max_size=0):
+     """Grab image."""
+-    images.fetch_to_raw(context, image_id, target, user_id, project_id)
++    images.fetch_to_raw(context, image_id, target, user_id, project_id,
++                        max_size=max_size)
+ 
+ 
+ def get_instance_path(instance, forceold=False, relative=False):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/06-CVE-2013-6419.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,133 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.1, Icehouse
+
+commit 07006be9165d1008ca0382b6f0ad25b13a676a55
+Author: Aaron Rosen <[email protected]>
+Date:   Mon Oct 7 13:33:31 2013 -0700
+
+    Prevent spoofing instance_id from neutron to nova
+    
+    Previously, one could update a port's device_id in neutron to be
+    that of another tenant's instance_id and then be able to retrieve
+    that instance's metadata. This patch prevents this from occurring by
+    checking that X-Tenant-ID received from the metadata request matches
+    the tenant_id in the nova database.
+    
+    DocImpact - This patch is dependent on another patch in neutron
+                which adds X-Tenant-ID to the request. Therefore to
+                minimize downtime one should upgrade Neutron first (then
+                restart neutron-metadata-agent) and lastly update nova.
+    
+    Change-Id: I93bf662797c3986324ca2099b403833c2e990fb4
+    Closes-Bug: #1235450
+
+diff --git a/nova/api/metadata/handler.py b/nova/api/metadata/handler.py
+index bbaeba5..2b7f659 100644
+--- a/nova/api/metadata/handler.py
++++ b/nova/api/metadata/handler.py
+@@ -144,6 +144,7 @@ class MetadataRequestHandler(wsgi.Application):
+ 
+     def _handle_instance_id_request(self, req):
+         instance_id = req.headers.get('X-Instance-ID')
++        tenant_id = req.headers.get('X-Tenant-ID')
+         signature = req.headers.get('X-Instance-ID-Signature')
+         remote_address = req.headers.get('X-Forwarded-For')
+ 
+@@ -151,8 +152,12 @@ class MetadataRequestHandler(wsgi.Application):
+ 
+         if instance_id is None:
+             msg = _('X-Instance-ID header is missing from request.')
++        elif tenant_id is None:
++            msg = _('X-Tenant-ID header is missing from request.')
+         elif not isinstance(instance_id, basestring):
+             msg = _('Multiple X-Instance-ID headers found within request.')
++        elif not isinstance(tenant_id, basestring):
++            msg = _('Multiple X-Tenant-ID headers found within request.')
+         else:
+             msg = None
+ 
+@@ -188,4 +193,12 @@ class MetadataRequestHandler(wsgi.Application):
+             LOG.error(_('Failed to get metadata for instance id: %s'),
+                       instance_id)
+ 
++        if meta_data.instance['project_id'] != tenant_id:
++            LOG.warning(_("Tenant_id %(tenant_id)s does not match tenant_id "
++                          "of instance %(instance_id)s."),
++                        {'tenant_id': tenant_id,
++                         'instance_id': instance_id})
++            # causes a 404 to be raised
++            meta_data = None
++
+         return meta_data
+diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py
+index 01f274f..51b6f72 100644
+--- a/nova/tests/test_metadata.py
++++ b/nova/tests/test_metadata.py
+@@ -510,6 +510,7 @@ class MetadataHandlerTestCase(test.TestCase):
+             relpath="/2009-04-04/user-data",
+             address="192.192.192.2",
+             headers={'X-Instance-ID': 'a-b-c-d',
++                     'X-Tenant-ID': 'test',
+                      'X-Instance-ID-Signature': signed})
+         self.assertEqual(response.status_int, 200)
+ 
+@@ -522,6 +523,7 @@ class MetadataHandlerTestCase(test.TestCase):
+             fake_get_metadata_by_instance_id=fake_get_metadata,
+             headers={'X-Forwarded-For': '192.192.192.2',
+                      'X-Instance-ID': 'a-b-c-d',
++                     'X-Tenant-ID': 'test',
+                      'X-Instance-ID-Signature': signed})
+ 
+         self.assertEqual(response.status_int, 200)
+@@ -536,10 +538,36 @@ class MetadataHandlerTestCase(test.TestCase):
+             fake_get_metadata_by_instance_id=fake_get_metadata,
+             headers={'X-Forwarded-For': '192.192.192.2',
+                      'X-Instance-ID': 'a-b-c-d',
++                     'X-Tenant-ID': 'test',
+                      'X-Instance-ID-Signature': ''})
+ 
+         self.assertEqual(response.status_int, 403)
+ 
++        # missing X-Tenant-ID from request
++        response = fake_request(
++            self.stubs, self.mdinst,
++            relpath="/2009-04-04/user-data",
++            address="192.192.192.2",
++            fake_get_metadata_by_instance_id=fake_get_metadata,
++            headers={'X-Forwarded-For': '192.192.192.2',
++                     'X-Instance-ID': 'a-b-c-d',
++                     'X-Instance-ID-Signature': signed})
++
++        self.assertEqual(response.status_int, 400)
++
++        # mismatched X-Tenant-ID
++        response = fake_request(
++            self.stubs, self.mdinst,
++            relpath="/2009-04-04/user-data",
++            address="192.192.192.2",
++            fake_get_metadata_by_instance_id=fake_get_metadata,
++            headers={'X-Forwarded-For': '192.192.192.2',
++                     'X-Instance-ID': 'a-b-c-d',
++                     'X-Tenant-ID': 'FAKE',
++                     'X-Instance-ID-Signature': signed})
++
++        self.assertEqual(response.status_int, 404)
++
+         # without X-Forwarded-For
+         response = fake_request(
+             self.stubs, self.mdinst,
+@@ -547,6 +575,7 @@ class MetadataHandlerTestCase(test.TestCase):
+             address="192.192.192.2",
+             fake_get_metadata_by_instance_id=fake_get_metadata,
+             headers={'X-Instance-ID': 'a-b-c-d',
++                     'X-Tenant-ID': 'test',
+                      'X-Instance-ID-Signature': signed})
+ 
+         self.assertEqual(response.status_int, 500)
+@@ -564,6 +593,7 @@ class MetadataHandlerTestCase(test.TestCase):
+             fake_get_metadata_by_instance_id=fake_get_metadata,
+             headers={'X-Forwarded-For': '192.192.192.2',
+                      'X-Instance-ID': 'z-z-z-z',
++                     'X-Tenant-ID': 'test',
+                      'X-Instance-ID-Signature': signed})
+         self.assertEqual(response.status_int, 500)
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/07-CVE-2013-7048.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,36 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.2, Icehouse
+
+commit 9bd7fff8c0160057643cfc37c5e2b1cd3337d6aa
+Author: Xavier Queralt <[email protected]>
+Date:   Wed Nov 27 20:44:36 2013 +0100
+
+    Enforce permissions in snapshots temporary dir
+    
+    Live snapshots creates a temporary directory where libvirt driver
+    creates a new image from the instance's disk using blockRebase.
+    Currently this directory is created with 777 permissions making this
+    directory accessible by all the users in the system.
+    
+    This patch changes the tempdir permissions so they have the o+x
+    flag set, which is what libvirt needs to be able to write in it and
+    
+    Closes-Bug: #1227027
+    Change-Id: I767ff5247b4452821727e92b668276004fc0f84d
+    (cherry picked from commit 8a34fc3d48c467aa196f65eed444ccdc7c02f19f)
+
+diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
+index 6b977cb..4cc85f1 100755
+--- a/nova/virt/libvirt/driver.py
++++ b/nova/virt/libvirt/driver.py
+@@ -1191,9 +1191,8 @@ class LibvirtDriver(driver.ComputeDriver):
+             try:
+                 out_path = os.path.join(tmpdir, snapshot_name)
+                 if live_snapshot:
+-                    # NOTE (rmk): libvirt needs to be able to write to the
+-                    #             temp directory, which is owned nova.
+-                    utils.execute('chmod', '777', tmpdir, run_as_root=True)
++                    # NOTE(xqueralt): libvirt needs o+x in the temp directory
++                    os.chmod(tmpdir, 0o701)
+                     self._live_snapshot(virt_dom, disk_path, out_path,
+                                         image_format)
+                 else:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/patches/08-CVE-2013-7130.patch	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,158 @@
+Upstream patch fixed in Grizzly 2013.1.5, Havana 2013.2.2, Icehouse
+
+commit cbeb5e51886b0296349fc476305bfe3d63c627c3
+Author: Nikola Dipanov <[email protected]>
+Date:   Tue Dec 10 17:43:17 2013 +0100
+
+    libvirt: Fix root disk leak in live mig
+    
+    This patch makes sure that _create_images_and_backing method of the
+    libvirt driver (called in several places, but most problematic one is
+    the call in the pre_live_migration method) creates all the files the
+    instance needs that are not present.
+    
+    Prioir to this patch - the method would only attempt to download the
+    image, and if it did so with the path of the ephemeral drives, it could
+    expose the image to other users as an ephemeral devices. See the related
+    bug for more detaiis.
+    
+    After this patch - we properly distinguish between image, ephemeral and
+    swap files, and make sure that the imagebackend does the correct thing.
+    
+    Closes-bug: #1251590
+    
+    Co-authored-by: Loganathan Parthipan <[email protected]>
+    
+    This patch also includes part of commit
+    65386c91910ee03d947c2b8bcc226a53c30e060a, not cherry-picked as a whole
+    due to the fact that it is a trivial change, and to avoud the
+    proliferation of patches needed to fix this bug.
+    
+    (cherry picked from commit c69a619668b5f44e94a8fe1a23f3d887ba2834d7)
+    
+    Conflicts:
+    	nova/tests/test_libvirt.py
+    	nova/virt/libvirt/driver.py
+    
+    Change-Id: I78aa2f4243899db4f4941e77014a7e18e27fc63e
+
+diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
+index d2ac73b..d9c7405 100644
+--- a/nova/tests/test_libvirt.py
++++ b/nova/tests/test_libvirt.py
+@@ -2346,6 +2346,69 @@ class LibvirtConnTestCase(test.TestCase):
+ 
+         db.instance_destroy(self.context, instance_ref['uuid'])
+ 
++    def test_create_images_and_backing(self):
++        conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
++        self.mox.StubOutWithMock(conn, '_fetch_instance_kernel_ramdisk')
++        self.mox.StubOutWithMock(libvirt_driver.libvirt_utils, 'create_image')
++
++        libvirt_driver.libvirt_utils.create_image(mox.IgnoreArg(),
++                                                  mox.IgnoreArg(),
++                                                  mox.IgnoreArg())
++        conn._fetch_instance_kernel_ramdisk(self.context, self.test_instance)
++        self.mox.ReplayAll()
++
++        self.stubs.Set(os.path, 'exists', lambda *args: False)
++        disk_info_json = jsonutils.dumps([{'path': 'foo', 'type': None,
++                                           'disk_size': 0,
++                                           'backing_file': None}])
++        conn._create_images_and_backing(self.context, self.test_instance,
++                                        "/fake/instance/dir", disk_info_json)
++
++    def test_create_images_and_backing_ephemeral_gets_created(self):
++        conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
++        disk_info_json = jsonutils.dumps(
++            [{u'backing_file': u'fake_image_backing_file',
++              u'disk_size': 10747904,
++              u'path': u'disk_path',
++              u'type': u'qcow2',
++              u'virt_disk_size': 25165824},
++             {u'backing_file': u'ephemeral_1_default',
++              u'disk_size': 393216,
++              u'over_committed_disk_size': 1073348608,
++              u'path': u'disk_eph_path',
++              u'type': u'qcow2',
++              u'virt_disk_size': 1073741824}])
++
++        base_dir = os.path.join(CONF.instances_path, '_base')
++        ephemeral_target = os.path.join(base_dir, 'ephemeral_1_default')
++        image_target = os.path.join(base_dir, 'fake_image_backing_file')
++        self.test_instance.update({'name': 'fake_instance',
++                                   'user_id': 'fake-user',
++                                   'os_type': None,
++                                   'project_id': 'fake-project'})
++
++        self.mox.StubOutWithMock(libvirt_driver.libvirt_utils, 'fetch_image')
++        self.mox.StubOutWithMock(conn, '_create_ephemeral')
++        self.mox.StubOutWithMock(conn, '_fetch_instance_kernel_ramdisk')
++
++        conn._create_ephemeral(
++                target=ephemeral_target,
++                ephemeral_size=self.test_instance['ephemeral_gb'],
++                max_size=mox.IgnoreArg(), os_type=mox.IgnoreArg(),
++                fs_label=mox.IgnoreArg())
++        libvirt_driver.libvirt_utils.fetch_image(context=self.context,
++                image_id=mox.IgnoreArg(),
++                user_id=mox.IgnoreArg(), project_id=mox.IgnoreArg(),
++                max_size=mox.IgnoreArg(), target=image_target)
++        conn._fetch_instance_kernel_ramdisk(
++                self.context, self.test_instance).AndReturn(None)
++
++        self.mox.ReplayAll()
++
++        conn._create_images_and_backing(self.context, self.test_instance,
++                                        "/fake/instance/dir",
++                                        disk_info_json)
++
+     def test_pre_live_migration_works_correctly_mocked(self):
+         # Creating testdata
+         vol = {'block_device_mapping': [
+diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
+index 0f0ea46..6c2a22c 100755
+--- a/nova/virt/libvirt/driver.py
++++ b/nova/virt/libvirt/driver.py
+@@ -3304,19 +3304,32 @@ class LibvirtDriver(driver.ComputeDriver):
+             elif info['backing_file']:
+                 # Creating backing file follows same way as spawning instances.
+                 cache_name = os.path.basename(info['backing_file'])
+-                # Remove any size tags which the cache manages
+-                cache_name = cache_name.split('_')[0]
+ 
+                 image = self.image_backend.image(instance,
+                                                  instance_disk,
+                                                  CONF.libvirt_images_type)
+-                image.cache(fetch_func=libvirt_utils.fetch_image,
+-                            context=ctxt,
+-                            filename=cache_name,
+-                            image_id=instance['image_ref'],
+-                            user_id=instance['user_id'],
+-                            project_id=instance['project_id'],
+-                            size=info['virt_disk_size'])
++                if cache_name.startswith('ephemeral'):
++                    image.cache(fetch_func=self._create_ephemeral,
++                                fs_label=cache_name,
++                                os_type=instance["os_type"],
++                                filename=cache_name,
++                                size=info['virt_disk_size'],
++                                ephemeral_size=instance['ephemeral_gb'])
++                elif cache_name.startswith('swap'):
++                    inst_type = instance_types.extract_instance_type(instance)
++                    swap_mb = inst_type['swap']
++                    image.cache(fetch_func=self._create_swap,
++                                filename="swap_%s" % swap_mb,
++                                size=swap_mb * (1024 ** 2),
++                                swap_mb=swap_mb)
++                else:
++                    image.cache(fetch_func=libvirt_utils.fetch_image,
++                                context=ctxt,
++                                filename=cache_name,
++                                image_id=instance['image_ref'],
++                                user_id=instance['user_id'],
++                                project_id=instance['project_id'],
++                                size=info['virt_disk_size'])
+ 
+         # if image has kernel and ramdisk, just download
+         # following normal way.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/nova/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,18 @@
+install/archive
+library/python-2/eventlet-26
+library/python-2/ipython-26
+library/python-2/netaddr-26
+library/python-2/sqlalchemy-26
+library/python-2/sqlalchemy-migrate-26
+library/python-2/webob-26
+library/python/eventlet-26
+library/python/ipython-26
+library/python/netaddr-26
+library/python/oslo.config-26
+library/python/sqlalchemy-26
+library/python/sqlalchemy-migrate-26
+library/python/webob-26
+runtime/python-26
+service/network/evs
+system/core-os
+system/storage/iscsi/iscsi-initiator
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cinderclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,61 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-cinderclient
+COMPONENT_VERSION=	1.0.7
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:8ad67a35e7370fe1379703738050deeae0da33ad6c1e1466dd0cf51c82d4255b
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/python-cinderclient
+COMPONENT_BUGDB=	service/cinder
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f cinder cinder-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# pyflakes, flake8, hacking, discover, fixtures, python-subunit,
+# sphinx, testtools, testrepository
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cinderclient/cinderclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,144 @@
+#
+# 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, 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/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"
+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=16347
+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/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)
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/extension.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/openstack/common/apiclient/exceptions.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/availability_zones.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/contrib/list_extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/limits.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/qos_specs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/quota_classes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_backups_restore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_encryption_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_transfers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v1/volume_types.py
+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/client.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
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/qos_specs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/quota_classes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/services.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_backups.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_backups_restore.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_encryption_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_transfers.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volume_types.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cinderclient/v2/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_cinderclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+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
+# flush this out.
+depend type=group fmri=library/python/eventlet-$(PYV)
+
+# force a group dependency on the optional simplejson; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/simplejson-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/babel-$(PYV)
+
+# force a dependency on the cinderclient package
+depend type=require \
+    fmri=library/python/cinderclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# 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/prettytable-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/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 stevedore; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/stevedore-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cinderclient/cinderclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,215 @@
+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.
+
+Copyright (c) 2009 Jacob Kaplan-Moss - initial codebase (< v2.1)
+Copyright (c) 2011 Rackspace - OpenStack extensions (>= v2.1)
+All rights reserved.
+
+		                 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/cinderclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/django/django-PYVER.p5m	Sun Mar 16 20:34:14 2014 -0700
+++ b/components/python/django/django-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -57,269 +57,199 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/global_settings.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ar/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ar/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bg/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bg/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bn/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bs/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/bs/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ca/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ca/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cs/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cs/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cy/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/cy/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/da/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/da/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/de/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/de/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/el/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/el/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en_GB/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/en_GB/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_AR/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_AR/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_MX/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_MX/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_NI/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/es_NI/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/et/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/et/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eu/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/eu/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fa/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fa/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fi/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fi/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fr/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fr/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fy_NL/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/fy_NL/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ga/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ga/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/gl/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/gl/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/he/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/he/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hi/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hi/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hr/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hr/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hu/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/hu/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/id/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/id/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/is/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/is/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/it/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/it/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ja/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ja/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ka/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ka/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/km/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/km/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/kn/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ko/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ko/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lt/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lt/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lv/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/lv/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mk/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mk/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ml/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ml/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/mn/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nb/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nb/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nl/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nl/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/nn/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pl/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pl/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt_BR/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/pt_BR/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ro/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ro/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ru/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ru/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sk/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sk/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sl/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sl/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sq/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sq/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr_Latn/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sr_Latn/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sv/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sv/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ta/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ta/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/te/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/te/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/th/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/th/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tr/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tr/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/uk/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/uk/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/vi/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/vi/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_CN/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_CN/formats.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_TW/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/conf/locale/zh_TW/formats.py
 file \
@@ -341,285 +271,145 @@
 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
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fy_NL/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/fy_NL/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_CN/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_CN/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_TW/LC_MESSAGES/djangojs.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/locale/zh_TW/LC_MESSAGES/djangojs.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/options.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/sites.py
@@ -747,145 +537,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admin/widgets.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/admindocs/templates/admin_doc/index.html
@@ -917,145 +637,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/handlers/modpython.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/hashers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/management/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/management/commands/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/auth/management/commands/changepassword.py
@@ -1101,145 +751,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/feeds.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/managers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/comments/moderation.py
@@ -1266,145 +846,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/generic.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/management.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/contenttypes/tests.py
@@ -1440,145 +950,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/fixtures/sample_flatpages.json
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/middleware.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/templatetags/__init__.py
@@ -1597,145 +1037,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/flatpages/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/preview.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/formtools/templates/formtools/form.html
@@ -1889,145 +1259,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/geos/tests/test_io.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/geos/tests/test_mutable_list.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/management/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/management/commands/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/management/commands/inspectdb.py
@@ -2133,145 +1433,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/gis/views.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/templatetags/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/humanize/templatetags/humanize.py
@@ -2364,145 +1594,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/kw/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/kw/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/mk/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/mk/forms.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/localflavor/mk/mk_choices.py
@@ -2573,145 +1733,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/constants.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/context_processors.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/middleware.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/messages/storage/__init__.py
@@ -2730,145 +1820,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/admin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/middleware.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/redirects/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/__init__.py
@@ -2880,145 +1900,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/backends/file.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/backends/signed_cookies.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/middleware.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/models.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sessions/tests.py
@@ -3044,145 +1994,75 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/admin.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fy_NL/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/fy_NL/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/zh_CN/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/zh_CN/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/zh_TW/LC_MESSAGES/django.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/locale/zh_TW/LC_MESSAGES/django.po
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/management.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/managers.py
 file path=usr/lib/python$(PYVER)/vendor-packages/django/contrib/sites/models.py
--- a/components/python/formencode/formencode-PYVER.p5m	Sun Mar 16 20:34:14 2014 -0700
+++ b/components/python/formencode/formencode-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -56,48 +56,27 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/htmlrename.py
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/FormEncode.pot
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/cs/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/cs/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/de/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/de/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/el/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/el/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/es/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/es/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/et/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/et/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/fi/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/fi/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/fr/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/fr/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/it/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/it/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/ja/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/ja/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/lt/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/lt/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/msgfmt.py
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/nb_NO/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/nb_NO/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/nl/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/nl/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pl/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pl/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pt_BR/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pt_BR/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pt_PT/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/pt_PT/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/ru/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/ru/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/sk/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/sk/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/sl/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/sl/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/tr/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/tr/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/zh_CN/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/zh_CN/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/zh_TW/LC_MESSAGES/FormEncode.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/formencode/i18n/zh_TW/LC_MESSAGES/FormEncode.po
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/interfaces.py
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/javascript/ordering.js
 file path=usr/lib/python$(PYVER)/vendor-packages/formencode/national.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glanceclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,60 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-glanceclient
+COMPONENT_VERSION=	0.12.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:d7de76f8ccdd889c9c0cd7d035fc20247fcafb8405295bc6aa1505d5692b2fa3
+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
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f glance glance-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# hacking, discover, mox, sphinx, testrepository, testtools
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glanceclient/glanceclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,120 @@
+#
+# 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, 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/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"
+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=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/2014/007
+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
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/common/__init__.py
+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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v1/__init__.py
+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/schemas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/glanceclient/v2/shell.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
+file path=usr/lib/python$(PYVER)/vendor-packages/python_glanceclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+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/eventlet-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/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/jsonpatch-$(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 netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/netaddr-$(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/prettytable-$(PYV)
+
+# force a dependency on pyopenssl; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pyopenssl-$(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 warlock; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/warlock-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/glanceclient/glanceclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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/glanceclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystoneclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,61 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-keystoneclient
+COMPONENT_VERSION=	0.4.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:bc9b27000e5bbfbb06030a69af81e08ced99568d97fd257972ef80637f6e0704
+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
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f keystone keystone-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# hacking, discover, fixtures, httpretty, keyring, mox3, pycrypto,
+# sphinx, testrepository, testtools
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/keystoneclient/keystoneclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,153 @@
+#
+# 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, 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/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"
+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=16349
+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/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/access.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/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/client.py
+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/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/exceptions.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/locale/keystoneclient.pot
+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/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/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/memorycache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/py3kcompat/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/openstack/common/py3kcompat/urlutils.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/service_catalog.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/__init__.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/tenants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/tokens.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v2_0/users.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/__init__.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/endpoints.py
+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/roles.py
+file path=usr/lib/python$(PYVER)/vendor-packages/keystoneclient/v3/services.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/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/anyjson-$(PYV)
+
+# force a group dependency on the optional eventlet; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/eventlet-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/babel-$(PYV)
+
+# force a dependency on 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 netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/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 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/prettytable-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/requests-$(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/keystoneclient/keystoneclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,216 @@
+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.
+
+Copyright (c) 2009 Jacob Kaplan-Moss - initial codebase (< v2.1)
+Copyright (c) 2011 Rackspace - OpenStack extensions (>= v2.1)
+Copyright (c) 2011 Nebula, Inc - Keystone refactor (>= v2.7)
+All rights reserved.
+
+		                 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/keystoneclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/neutronclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,61 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-neutronclient
+COMPONENT_VERSION=	2.3.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:9497bc036d9ac769f65b989d49b45a122b8d7674bba8cad2480c054b888f8986
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/python-neutronclient
+COMPONENT_BUGDB=	service/neutron
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f neutron neutron-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# hacking, cliff-tablib, discover, fixtures, mox, python-subunit,
+# sphinx, testrepository, testtools
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/neutronclient/neutronclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,140 @@
+#
+# 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, 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/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"
+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=16351
+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/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)
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/clientmanager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/command.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/common/constants.py
+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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/agent.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/agentscheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/credential.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/extension.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/floatingip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/fw/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/fw/firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/fw/firewallpolicy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/fw/firewallrule.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/lb/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/lb/healthmonitor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/lb/member.py
+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/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/nvp_qos_queue.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/nvpnetworkgateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/policyprofile.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/port.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/quota.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/securitygroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/servicetype.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/subnet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/ikepolicy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/neutron/v2_0/vpn/ipsec_site_connection.py
+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/exception.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
+file path=usr/lib/python$(PYVER)/vendor-packages/neutronclient/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_neutronclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+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/anyjson-$(PYV)
+
+# force a dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/babel-$(PYV)
+
+# force a dependency on cliff; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/cliff-$(PYV)
+
+# force a dependency on httplib2; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/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 the neutronclient package
+depend type=require \
+    fmri=library/python/neutronclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# 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)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/neutronclient/neutronclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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/neutronclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/novaclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-novaclient
+COMPONENT_VERSION=	2.15.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:ec18819f1021419d7696705c8d008ca80535bd90577dc0b7708afe51dccee099
+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
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f nova nova-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/novaclient/novaclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,151 @@
+#
+# 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, 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/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"
+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=16352
+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/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)
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/auth_plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/crypto.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/extension.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/openstack/common/gettextutils.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
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/service_catalog.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/agents.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/aggregates.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/availability_zones.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/certs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/cloudpipe.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/assisted_volume_snapshots.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/baremetal.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/cells.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/deferred_delete.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/host_evacuate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/host_servers_migrate.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/instance_action.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/list_extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/metadata_extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/migrations.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/contrib/tenant_networks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/coverage_ext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/fixed_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/flavor_access.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/flavors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/floating_ip_dns.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/floating_ip_pools.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/floating_ips.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/floating_ips_bulk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/fping.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/hosts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/hypervisors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/images.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/keypairs.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/limits.py
+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_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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v1_1/volumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/novaclient/v3/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_novaclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+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 dependency on argparse; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/argparse-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/babel-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on the novaclient package
+depend type=require \
+    fmri=library/python/novaclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+
+# 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/prettytable-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/requests-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/novaclient/novaclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,215 @@
+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.
+
+Copyright (c) 2009 Jacob Kaplan-Moss - initial codebase (< v2.1)
+Copyright (c) 2011 Rackspace - OpenStack extensions (>= v2.1)
+All rights reserved.
+
+		                 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/novaclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- a/components/python/pycountry/pycountry-PYVER.p5m	Sun Mar 16 20:34:14 2014 -0700
+++ b/components/python/pycountry/pycountry-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -48,649 +48,327 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/databases/iso639.xml
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/db.py
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/af/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/af/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/af/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/af/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/am/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/am/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/am/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/am/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ar/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/as/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/as/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/as/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/as/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ast/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ast/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ast/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ast/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/az/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/be/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/be/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/be/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/be/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bg/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn_IN/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn_IN/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn_IN/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bn_IN/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/br/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/bs/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/byn/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/byn/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/byn/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/byn/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ca/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/crh/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cs/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cy/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cy/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cy/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/cy/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/da/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/de/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/dz/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/dz/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/el/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/en/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/en/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eo/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/es/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/et/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/eu/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fa/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fi/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fo/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fo/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/fr/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ga/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gez/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gez/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gez/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gez/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gl/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gu/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gu/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gu/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/gu/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/haw/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/haw/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/he/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hi/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hi/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hi/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hi/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hr/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hu/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hy/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/hy/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ia/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ia/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ia/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ia/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/id/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/is/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/it/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ja/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ka/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ka/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kk/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kk/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/km/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/km/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kn/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kn/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kn/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kn/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ko/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kok/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/kok/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ku/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ku/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lt/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/lv/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mi/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mi/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mi/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mi/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mk/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mk/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mk/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mk/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ml/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mn/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mr/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mr/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mr/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mr/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ms/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ms/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ms/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ms/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mt/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mt/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mt/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/mt/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nb/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ne/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ne/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nl/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nn/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/nso/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/oc/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/or/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/or/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/or/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/or/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pa/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pa/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pa/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pa/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pl/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ps/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ps/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ps/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ps/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/pt_BR/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ro/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ru/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/rw/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/si/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/si/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sk/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sl/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/so/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/so/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sq/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sq/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sr@latin/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sv/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sw/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/sw/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ta/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ta/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ta/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ta/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/te/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/te/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/te/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/te/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/th/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ti/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ti/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ti/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ti/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tig/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tig/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tig/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tig/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tk/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tk/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tl/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tl/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tr/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tt/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tt/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tt/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/tt/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ug/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ug/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/uk/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/ve/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/vi/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wa/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wal/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wal/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wo/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/wo/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/xh/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/xh/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/xh/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/xh/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_CN/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_HK/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso15924.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso15924.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso3166_2.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso3166_2.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso4217.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso4217.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zh_TW/LC_MESSAGES/iso639.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zu/LC_MESSAGES/iso3166.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zu/LC_MESSAGES/iso3166.po
 file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zu/LC_MESSAGES/iso639.mo
-file path=usr/lib/python$(PYVER)/vendor-packages/pycountry/locales/zu/LC_MESSAGES/iso639.po
 license LICENSE.txt license=LGPLv2.1
 
 # force the rename with an optional dependency on the old name
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/quantumclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,60 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-quantumclient
+COMPONENT_VERSION=	2.2.4.3
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:9135e69363db0078a9353d5005d20dd4f82a43fdd31a2dd09bb4f94f9c2fdee9
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/python-quantumclient
+COMPONENT_BUGDB=	service/neutron
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f quantum quantum-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# hacking, discover, fixtures, python-subunit, sphinx, testrepository, testtools
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/quantumclient/quantumclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -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) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/quantumclient-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary \
+    value="Python and command-line clients for the OpenStack Quantum API"
+set name=pkg.description \
+    value="This package provides a compatibility layer for code that was built to require the old Quantum API Client. New code should use the neutronclient module."
+set name=com.oracle.info.description \
+    value="quantumclient, the Python bindings to the OpenStack Network API"
+set name=com.oracle.info.tpno value=15410
+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/2014/007
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+link path=usr/bin/quantum target=quantum-$(PYVER) mediator=python \
+    mediator-version=$(PYVER)
+file path=usr/bin/quantum-$(PYVER)
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/python_quantumclient-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/quantum/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/quantum/v2_0/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/quantum/v2_0/port.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/v2_0/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/v2_0/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/quantumclient/version.py
+license quantumclient.license license="Apache v2.0"
+
+# 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 pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on the quantumclient package
+depend type=require \
+    fmri=library/python/quantumclient@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/quantumclient/quantumclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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/quantumclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,2 @@
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/swiftclient/Makefile	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,60 @@
+#
+# 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, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		python-swiftclient
+COMPONENT_VERSION=	2.0.2
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:bad3902187b0eeb0a7371d54d5789a8e0c745ca2acca5ca4d86961952e37888a
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	http://launchpad.net/python-swiftclient
+COMPONENT_BUGDB=	service/swift
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_POST_INSTALL_ACTION = \
+	(cd $(PROTO_DIR)/usr/bin ; $(MV) -f swift swift-$(PYTHON_VERSION))
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+#
+# Tests require:
+# discover, sphinx, testrepository, testtools
+# which haven't been integrated yet.
+#
+test:		$(NO_TESTS)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/swiftclient/resolve.deps	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,6 @@
+library/python-2/simplejson-26
+library/python-2/simplejson-27
+library/python/simplejson-26
+library/python/simplejson-27
+runtime/python-26
+runtime/python-27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/swiftclient/swiftclient-GENFRAG.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,28 @@
+#
+# 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.*/man/.+ -> default mangler.man.stability uncommitted>
+file doc/manpages/swift.1 path=usr/share/man/man1/swift.1
+license LICENSE license="Apache v2.0"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/swiftclient/swiftclient-PYVER.p5m	Mon Mar 17 09:51:44 2014 -0600
@@ -0,0 +1,74 @@
+#
+# 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, 2014, 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"
+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=16617
+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/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/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
+file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swiftclient/client.py
+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/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 keystoneclient; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/requests-$(PYV)
+
+# force a dependency on setuptools; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/setuptools-$(PYV)
+
+# force a dependency on 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/swiftclient/swiftclient.license	Mon Mar 17 09:51:44 2014 -0600
@@ -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.