PSARC/2014/236 OpenStack Heat (OpenStack Orchestration Service) s11u2-sru
authorDrew Fisher <drew.fisher@oracle.com>
Tue, 23 Sep 2014 17:50:12 -0700
branchs11u2-sru
changeset 3327 5abdd1497a6a
parent 3326 030508e3f1bd
child 3328 7d4961ad30d3
PSARC/2014/236 OpenStack Heat (OpenStack Orchestration Service) 19120578 Request to integrate Heat into userland
components/openstack/common/openstack.p5m
components/openstack/heat/Makefile
components/openstack/heat/files/api-paste.ini
components/openstack/heat/files/heat-api-cfn.xml
components/openstack/heat/files/heat-api-cloudwatch.xml
components/openstack/heat/files/heat-api.xml
components/openstack/heat/files/heat-db.xml
components/openstack/heat/files/heat-engine.xml
components/openstack/heat/files/heat-smf-method
components/openstack/heat/files/heat.auth_attr
components/openstack/heat/files/heat.conf
components/openstack/heat/files/heat.exec_attr
components/openstack/heat/files/heat.prof_attr
components/openstack/heat/heat.license
components/openstack/heat/heat.p5m
components/openstack/heat/patches/01-CVE-2014-3801.patch
components/openstack/heat/patches/02-requirements.patch
components/openstack/heat/patches/03-uuid-format.patch
components/openstack/heat/patches/04-nopycrypto.patch
components/openstack/heat/patches/05-neutron-names-required.patch
components/openstack/heat/patches/06-heat-keystone-setup.patch
components/openstack/heat/patches/07-heat-plugin-defaults.patch
components/openstack/heat/resolve.deps
components/openstack/horizon/files/overrides.py
--- a/components/openstack/common/openstack.p5m	Tue Sep 23 17:12:33 2014 -0700
+++ b/components/openstack/common/openstack.p5m	Tue Sep 23 17:50:12 2014 -0700
@@ -41,6 +41,7 @@
 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/heat
 depend type=group fmri=cloud/openstack/horizon
 depend type=group fmri=cloud/openstack/keystone
 depend type=group fmri=cloud/openstack/neutron
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/Makefile	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,66 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		heat
+COMPONENT_CODENAME=	havana
+COMPONENT_VERSION=	2013.2.3
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:5e1f437f75fd831bc6cbd23986d8e60a4008cf7a0a775e7a7405d56b335b1800
+COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
+COMPONENT_PROJECT_URL=	http://www.openstack.org/
+COMPONENT_BUGDB=	service/heat
+IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION) 
+
+TPNO=			18176
+
+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)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# tests require mox, discover, testtools, testrepository,
+# testscenarios, sphinx and oslo.sphinx some of which have not yet
+# integrated
+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/heat/files/api-paste.ini	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,92 @@
+
+# heat-api pipeline
+[pipeline:heat-api]
+pipeline = faultwrap versionnegotiation authtoken context apiv1app
+
+# heat-api pipeline for standalone heat
+# ie. uses alternative auth backend that authenticates users against keystone
+# using username and password instead of validating token (which requires
+# an admin/service token).
+# To enable, in heat.conf:
+#   [paste_deploy]
+#   flavor = standalone
+#
+[pipeline:heat-api-standalone]
+pipeline = faultwrap versionnegotiation authpassword context apiv1app
+
+# heat-api pipeline for custom cloud backends
+# i.e. in heat.conf:
+#   [paste_deploy]
+#   flavor = custombackend
+#
+[pipeline:heat-api-custombackend]
+pipeline = faultwrap versionnegotiation context custombackendauth apiv1app
+
+# heat-api-cfn pipeline
+[pipeline:heat-api-cfn]
+pipeline = cfnversionnegotiation ec2authtoken authtoken context apicfnv1app
+
+# heat-api-cfn pipeline for standalone heat
+# relies exclusively on authenticating with ec2 signed requests
+[pipeline:heat-api-cfn-standalone]
+pipeline = cfnversionnegotiation ec2authtoken context apicfnv1app
+
+# heat-api-cloudwatch pipeline
+[pipeline:heat-api-cloudwatch]
+pipeline = versionnegotiation ec2authtoken authtoken context apicwapp
+
+# heat-api-cloudwatch pipeline for standalone heat
+# relies exclusively on authenticating with ec2 signed requests
+[pipeline:heat-api-cloudwatch-standalone]
+pipeline = versionnegotiation ec2authtoken context apicwapp
+
+[app:apiv1app]
+paste.app_factory = heat.common.wsgi:app_factory
+heat.app_factory = heat.api.openstack.v1:API
+
+[app:apicfnv1app]
+paste.app_factory = heat.common.wsgi:app_factory
+heat.app_factory = heat.api.cfn.v1:API
+
+[app:apicwapp]
+paste.app_factory = heat.common.wsgi:app_factory
+heat.app_factory = heat.api.cloudwatch:API
+
+[filter:versionnegotiation]
+paste.filter_factory = heat.common.wsgi:filter_factory
+heat.filter_factory = heat.api.openstack:version_negotiation_filter
+
+[filter:faultwrap]
+paste.filter_factory = heat.common.wsgi:filter_factory
+heat.filter_factory = heat.api.openstack:faultwrap_filter
+
+[filter:cfnversionnegotiation]
+paste.filter_factory = heat.common.wsgi:filter_factory
+heat.filter_factory = heat.api.cfn:version_negotiation_filter
+
+[filter:cwversionnegotiation]
+paste.filter_factory = heat.common.wsgi:filter_factory
+heat.filter_factory = heat.api.cloudwatch:version_negotiation_filter
+
+[filter:context]
+paste.filter_factory = heat.common.context:ContextMiddleware_filter_factory
+
+[filter:ec2authtoken]
+paste.filter_factory = heat.api.aws.ec2token:EC2Token_filter_factory
+
+# Auth middleware that validates token against keystone
+[filter:authtoken]
+paste.filter_factory = heat.common.auth_token:filter_factory
+auth_uri = http://127.0.0.1:5000/v2.0
+identity_uri = http://127.0.0.1:35357
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+
+# Auth middleware that validates username/password against keystone
+[filter:authpassword]
+paste.filter_factory = heat.common.auth_password:filter_factory
+
+# Auth middleware that validates against custom backend
+[filter:custombackendauth]
+paste.filter_factory = heat.common.custom_backend_auth:filter_factory
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-api-cfn.xml	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,80 @@
+<?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="heat-api-cfn">
+
+  <service version="1" type="service"
+    name="application/openstack/heat/heat-api-cfn">
+
+    <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 heat_db service so the Heat
+         services do not collide when creating the database -->
+    <dependency name='heat_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-db'/>
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/heat-smf-method %m">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </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.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat AWS-style CloudFormation API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-api-cfn is a server daemon that serves the Heat AWS-style
+          CloudFormation API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-api-cloudwatch.xml	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,80 @@
+<?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="heat-api-cloudwatch">
+
+  <service version="1" type="service"
+    name="application/openstack/heat/heat-api-cloudwatch">
+
+    <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 heat_db service so the Heat
+         services do not collide when creating the database -->
+    <dependency name='heat_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-db'/>
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/heat-smf-method %m">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </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.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat AWS-style CloudWatch API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-api-cloudwatch is a server daemon that serves the Heat AWS-style
+          CloudWatch API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-api.xml	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,79 @@
+<?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="heat-api">
+
+  <service version="1" type="service"
+    name="application/openstack/heat/heat-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 heat_db service so the Heat
+         services do not collide when creating the database -->
+    <dependency name='heat_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-db'/>
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/heat-smf-method %m">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </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.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat API Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-api is a server daemon that serves the Heat API.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-db.xml	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,76 @@
+<?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="heat-db">
+
+  <service version="1" type="service" name="application/openstack/heat/heat-db">
+
+    <dependency name='multiuser' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/multi-user:default' />
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/usr/bin/heat-manage db_sync">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </method_context>
+    </exec_method>
+    <exec_method timeout_seconds="60" type="method" name="stop"
+      exec=":true"/>
+
+    <property_group type="framework" name="startd">
+      <propval type="astring" name="duration" value="transient"/>
+    </property_group>
+
+    <instance name='default' enabled='false'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat Database Creation Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-db is a transient service to create the Heat database if
+          required.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-engine.xml	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,80 @@
+<?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="heat-engine">
+
+  <service version="1" type="service"
+    name="application/openstack/heat/heat-engine">
+
+    <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 heat_db service so the Heat
+         services do not collide when creating the database -->
+    <dependency name='heat_db' grouping='optional_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/application/openstack/heat/heat-db'/>
+    </dependency>
+
+    <dependency name='ntp' grouping='optional_all' restart_on='none'
+      type='service'>
+      <service_fmri value='svc:/network/ntp'/>
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="60" type="method" name="start"
+      exec="/lib/svc/method/heat-smf-method %m">
+      <method_context>
+        <method_credential user='heat' group='heat' />
+      </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.heat' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.heat' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          OpenStack Heat Orchestration Engine Service
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          heat-engine is a server daemon that orchestrates the launching of
+          templates and providing events back to the API consumer.
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat-smf-method	Tue Sep 23 17:50:12 2014 -0700
@@ -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 errno
+import os
+import sys
+
+import smf_include
+
+
+def start():
+    # All the Heat services do essentially the same thing, so there's no need
+    # to have different method executables.  Just look at the FMRI and run the
+    # appropriate executable from /usr/lib/heat.
+    fmri = os.environ["SMF_FMRI"]
+    exefile = os.path.basename(fmri.split(":")[1])
+    exepath = os.path.join("/usr/lib/heat", exefile)
+
+    smf_include.smf_subprocess(exepath)
+
+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/heat/files/heat.auth_attr	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,2 @@
+solaris.smf.manage.heat:RO::Manage OpenStack Heat Service States::
+solaris.smf.value.heat:RO::Change Values of OpenStack Heat Properties::
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat.conf	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,753 @@
+[DEFAULT]
+
+#
+# Options defined in heat.common.config
+#
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+sql_connection=sqlite:////var/lib/heat/heat.sqlite
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#sql_idle_timeout=3600
+
+# The default user for new instances (string value)
+#instance_user=ec2-user
+
+# Driver to use for controlling instances (string value)
+#instance_driver=heat.engine.nova
+
+# List of directories to search for Plugins (list value)
+#plugin_dirs=/usr/lib/heat
+
+# The directory to search for environment files (string value)
+#environment_dir=/etc/heat/environment.d
+
+# Select deferred auth method, stored password or trusts
+# (string value)
+#deferred_auth_method=password
+
+# Subset of trustor roles to be delegated to heat (list value)
+#trusts_delegated_roles=heat_stack_owner
+
+# Maximum resources allowed per top-level stack. (integer
+# value)
+#max_resources_per_stack=1000
+
+# Maximum number of stacks any one tenant may have active at
+# one time. (integer value)
+#max_stacks_per_tenant=100
+
+# Controls how many events will be pruned whenever a  stack's
+# events exceed max_events_per_stack. Set this lower to keep
+# more events at the expense of more frequent purges. (integer
+# value)
+#event_purge_batch_size=10
+
+# Maximum events that will be available per stack. Older
+# events will be deleted when this is reached. Set to 0 for
+# unlimited events per stack. (integer value)
+#max_events_per_stack=1000
+
+# Name of the engine node. This can be an opaque identifier.It
+# is not necessarily a hostname, FQDN, or IP address. (string
+# value)
+#host=heat
+
+# seconds between running periodic tasks (integer value)
+#periodic_interval=60
+
+# URL of the Heat metadata server (string value)
+#heat_metadata_server_url=
+
+# URL of the Heat waitcondition server (string value)
+#heat_waitcondition_server_url=
+
+# URL of the Heat cloudwatch server (string value)
+#heat_watch_server_url=
+
+# Instance connection to cfn/cw API via https (string value)
+#instance_connection_is_secure=0
+
+# Instance connection to cfn/cw API validate certs if ssl
+# (string value)
+#instance_connection_https_validate_certificates=1
+
+# Keystone role for heat template-defined users (string value)
+#heat_stack_user_role=heat_stack_user
+
+# Maximum raw byte size of any template. (integer value)
+#max_template_size=524288
+
+# Maximum depth allowed when using nested stacks. (integer
+# value)
+#max_nested_stack_depth=3
+
+
+#
+# Options defined in heat.common.crypt
+#
+
+# Encryption key used for authentication info in database
+# (string value)
+#auth_encryption_key=notgood but just long enough i think
+
+
+#
+# Options defined in heat.common.wsgi
+#
+
+# Maximum raw byte size of JSON request body. Should be larger
+# than max_template_size. (integer value)
+#max_json_body_size=1048576
+
+
+#
+# Options defined in heat.db.api
+#
+
+# The backend to use for db (string value)
+#db_backend=sqlalchemy
+
+
+#
+# Options defined in heat.engine.clients
+#
+
+# Cloud module to use as a backend. Defaults to OpenStack.
+# (string value)
+#cloud_backend=<None>
+
+
+#
+# Options defined in heat.engine.resources.loadbalancer
+#
+
+# Custom template for the built-in loadbalancer nested stack
+# (string value)
+#loadbalancer_template=<None>
+
+
+#
+# Options defined in heat.openstack.common.db.sqlalchemy.session
+#
+
+# the filename to use with sqlite (string value)
+#sqlite_db=heat.sqlite
+
+# If true, use synchronous mode for sqlite (boolean value)
+#sqlite_synchronous=true
+
+
+#
+# Options defined in heat.openstack.common.eventlet_backdoor
+#
+
+# Enable eventlet backdoor.  Acceptable values are 0, <port>,
+# and <start>:<end>, where 0 results in listening on a random
+# tcp port number; <port> results in listening on the
+# specified port number (and not enabling backdoor if that
+# port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range
+# of port numbers.  The chosen port is displayed in the
+# service's log file. (string value)
+#backdoor_port=<None>
+
+
+#
+# Options defined in heat.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 heat.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
+
+# format string to use for log messages with context (string
+# value)
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user)s %(tenant)s] %(instance)s%(message)s
+
+# format string to use for log messages without context
+# (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>
+
+# DEPRECATED. A logging.Formatter log message format string
+# which may use any of the available logging.LogRecord
+# attributes. This option is deprecated.  Please use
+# logging_context_format_string and
+# logging_default_format_string instead. (string value)
+#log_format=<None>
+
+# Format string for %%(asctime)s in log records. Default:
+# %(default)s (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to output to. If no default is
+# set, logging will go to stdout. (string value)
+#log_file=<None>
+
+# (Optional) The base directory used for relative --log-file
+# paths (string value)
+#log_dir=<None>
+
+# Use syslog for logging. (boolean value)
+#use_syslog=false
+
+# syslog facility to receive log lines (string value)
+#syslog_log_facility=LOG_USER
+
+
+#
+# Options defined in heat.openstack.common.notifier.api
+#
+
+# Driver or drivers to handle sending notifications (multi
+# valued)
+#notification_driver=
+
+# Default notification level for outgoing notifications
+# (string value)
+#default_notification_level=INFO
+
+# Default publisher_id for outgoing notifications (string
+# value)
+#default_publisher_id=<None>
+
+
+#
+# Options defined in heat.openstack.common.notifier.list_notifier
+#
+
+# List of drivers to send notifications (multi valued)
+#list_notifier_drivers=heat.openstack.common.notifier.no_op_notifier
+
+
+#
+# Options defined in heat.openstack.common.notifier.rpc_notifier
+#
+
+# AMQP topic used for openstack notifications (list value)
+#notification_topics=notifications
+
+
+#
+# Options defined in heat.openstack.common.policy
+#
+
+# JSON file containing policy (string value)
+#policy_file=policy.json
+
+# Rule enforced when requested rule is not found (string
+# value)
+#policy_default_rule=default
+
+
+#
+# Options defined in heat.openstack.common.rpc
+#
+
+# The messaging module to use, defaults to kombu. (string
+# value)
+#rpc_backend=heat.openstack.common.rpc.impl_kombu
+
+# Size of RPC thread pool (integer value)
+#rpc_thread_pool_size=64
+
+# 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=heat.openstack.common.exception,heat.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 heat.openstack.common.rpc.amqp
+#
+
+# Use durable queues in amqp. (boolean value)
+#amqp_durable_queues=false
+
+# Auto-delete queues in amqp. (boolean value)
+#amqp_auto_delete=false
+
+
+#
+# Options defined in heat.openstack.common.rpc.impl_kombu
+#
+
+# SSL version to use (valid only if SSL enabled). valid values
+# are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some
+# distributions (string value)
+#kombu_ssl_version=
+
+# SSL key file (valid only if SSL enabled) (string value)
+#kombu_ssl_keyfile=
+
+# SSL cert file (valid only if SSL enabled) (string value)
+#kombu_ssl_certfile=
+
+# SSL certification authority file (valid only if SSL enabled)
+# (string value)
+#kombu_ssl_ca_certs=
+
+# The RabbitMQ broker address where a single node is used
+# (string value)
+#rabbit_host=localhost
+
+# The RabbitMQ broker port where a single node is used
+# (integer value)
+#rabbit_port=5672
+
+# RabbitMQ HA cluster host:port pairs (list value)
+#rabbit_hosts=$rabbit_host:$rabbit_port
+
+# connect over SSL for RabbitMQ (boolean value)
+#rabbit_use_ssl=false
+
+# the RabbitMQ userid (string value)
+#rabbit_userid=guest
+
+# the RabbitMQ password (string value)
+#rabbit_password=guest
+
+# the RabbitMQ virtual host (string value)
+#rabbit_virtual_host=/
+
+# how frequently to retry connecting with RabbitMQ (integer
+# value)
+#rabbit_retry_interval=1
+
+# how long to backoff for between retries when connecting to
+# RabbitMQ (integer value)
+#rabbit_retry_backoff=2
+
+# maximum retries with trying to connect to RabbitMQ (the
+# default of 0 implies an infinite retry count) (integer
+# value)
+#rabbit_max_retries=0
+
+# use H/A queues in RabbitMQ (x-ha-policy: all).You need to
+# wipe RabbitMQ database when changing this option. (boolean
+# value)
+#rabbit_ha_queues=false
+
+
+#
+# Options defined in heat.openstack.common.rpc.impl_qpid
+#
+
+# Qpid broker hostname (string value)
+#qpid_hostname=localhost
+
+# Qpid broker port (integer value)
+#qpid_port=5672
+
+# Qpid HA cluster host:port pairs (list value)
+#qpid_hosts=$qpid_hostname:$qpid_port
+
+# Username for qpid connection (string value)
+#qpid_username=
+
+# Password for qpid connection (string value)
+#qpid_password=
+
+# Space separated list of SASL mechanisms to use for auth
+# (string value)
+#qpid_sasl_mechanisms=
+
+# Seconds between connection keepalive heartbeats (integer
+# value)
+#qpid_heartbeat=60
+
+# Transport to use, either 'tcp' or 'ssl' (string value)
+#qpid_protocol=tcp
+
+# Disable Nagle algorithm (boolean value)
+#qpid_tcp_nodelay=true
+
+# The qpid topology version to use.  Version 1 is what was
+# originally used by impl_qpid.  Version 2 includes some
+# backwards-incompatible changes that allow broker federation
+# to work.  Users should update to version 2 when they are
+# able to take everything down, as it requires a clean break.
+# (integer value)
+#qpid_topology_version=1
+
+
+#
+# Options defined in heat.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=heat.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=heat
+
+
+#
+# Options defined in heat.openstack.common.rpc.matchmaker
+#
+
+# Heartbeat frequency (integer value)
+#matchmaker_heartbeat_freq=300
+
+# Heartbeat time-to-live. (integer value)
+#matchmaker_heartbeat_ttl=600
+
+
+[ssl]
+
+#
+# Options defined in heat.openstack.common.sslutils
+#
+
+# CA certificate file to use to verify connecting clients
+# (string value)
+#ca_file=<None>
+
+# Certificate file to use when starting the server securely
+# (string value)
+#cert_file=<None>
+
+# Private key file to use when starting the server securely
+# (string value)
+#key_file=<None>
+
+
+[database]
+
+#
+# Options defined in heat.openstack.common.db.api
+#
+
+# The backend to use for db (string value)
+#backend=sqlalchemy
+
+# Enable the experimental use of thread pooling for all DB API
+# calls (boolean value)
+#use_tpool=false
+
+
+#
+# Options defined in heat.openstack.common.db.sqlalchemy.session
+#
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+connection=sqlite:////var/lib/heat/heat.sqlite
+
+# The SQLAlchemy connection string used to connect to the
+# slave database (string value)
+#slave_connection=
+
+# timeout before idle sql connections are reaped (integer
+# value)
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+#max_pool_size=<None>
+
+# maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+#max_retries=10
+
+# interval between retries of opening a sql connection
+# (integer value)
+#retry_interval=10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+#connection_debug=0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+#connection_trace=false
+
+# If set, use this value for pool_timeout with sqlalchemy
+# (integer value)
+#pool_timeout=<None>
+
+
+[paste_deploy]
+
+#
+# Options defined in heat.common.config
+#
+
+# The flavor to use (string value)
+#flavor=<None>
+
+# The API paste config file to use (string value)
+#api_paste_config=api-paste.ini
+
+
+[rpc_notifier2]
+
+#
+# Options defined in heat.openstack.common.notifier.rpc_notifier2
+#
+
+# AMQP topic(s) used for openstack notifications (list value)
+#topics=notifications
+
+
+[ec2authtoken]
+
+#
+# Options defined in heat.api.aws.ec2token
+#
+
+# Authentication Endpoint URI (string value)
+#auth_uri=<None>
+
+# Allow orchestration of multiple clouds (boolean value)
+#multi_cloud=false
+
+# Allowed keystone endpoints for auth_uri when multi_cloud is
+# enabled. At least one endpoint needs to be specified. (list
+# value)
+#allowed_auth_uris=
+
+
+[heat_api_cloudwatch]
+
+#
+# Options defined in heat.common.wsgi
+#
+
+# Address to bind the server.  Useful when selecting a
+# particular network interface. (string value)
+#bind_host=0.0.0.0
+
+# The port on which the server will listen. (integer value)
+#bind_port=8003
+
+# Number of backlog requests to configure the socket with
+# (integer value)
+#backlog=4096
+
+# Location of the SSL Certificate File to use for SSL mode
+# (string value)
+#cert_file=<None>
+
+# Location of the SSL Key File to use for enabling SSL mode
+# (string value)
+#key_file=<None>
+
+# Number of workers for Heat service (integer value)
+#workers=0
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs (integer value)
+#max_header_line=16384
+
+
+[heat_api]
+
+#
+# Options defined in heat.common.wsgi
+#
+
+# Address to bind the server.  Useful when selecting a
+# particular network interface. (string value)
+#bind_host=0.0.0.0
+
+# The port on which the server will listen. (integer value)
+#bind_port=8004
+
+# Number of backlog requests to configure the socket with
+# (integer value)
+#backlog=4096
+
+# Location of the SSL Certificate File to use for SSL mode
+# (string value)
+#cert_file=<None>
+
+# Location of the SSL Key File to use for enabling SSL mode
+# (string value)
+#key_file=<None>
+
+# Number of workers for Heat service (integer value)
+#workers=0
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs (integer value)
+#max_header_line=16384
+
+
+[heat_api_cfn]
+
+#
+# Options defined in heat.common.wsgi
+#
+
+# Address to bind the server.  Useful when selecting a
+# particular network interface. (string value)
+#bind_host=0.0.0.0
+
+# The port on which the server will listen. (integer value)
+#bind_port=8000
+
+# Number of backlog requests to configure the socket with
+# (integer value)
+#backlog=4096
+
+# Location of the SSL Certificate File to use for SSL mode
+# (string value)
+#cert_file=<None>
+
+# Location of the SSL Key File to use for enabling SSL mode
+# (string value)
+#key_file=<None>
+
+# Number of workers for Heat service (integer value)
+#workers=0
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated by the Keystone v3 API
+# with big service catalogs (integer value)
+#max_header_line=16384
+
+
+[auth_password]
+
+#
+# Options defined in heat.common.config
+#
+
+# Allow orchestration of multiple clouds (boolean value)
+#multi_cloud=false
+
+# Allowed keystone endpoints for auth_uri when multi_cloud is
+# enabled. At least one endpoint needs to be specified. (list
+# value)
+#allowed_auth_uris=
+
+
+[matchmaker_ring]
+
+#
+# Options defined in heat.openstack.common.rpc.matchmaker_ring
+#
+
+# Matchmaker ring file (JSON) (string value)
+#ringfile=/etc/oslo/matchmaker_ring.json
+
+
+[matchmaker_redis]
+
+#
+# Options defined in heat.openstack.common.rpc.matchmaker_redis
+#
+
+# Host to locate redis (string value)
+#host=127.0.0.1
+
+# Use this port to connect to redis host. (integer value)
+#port=6379
+
+# Password for Redis server. (optional) (string value)
+#password=<None>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat.exec_attr	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,1 @@
+OpenStack Orchestration:solaris:cmd:RO::/usr/bin/heat-manage:uid=heat;gid=heat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/files/heat.prof_attr	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,10 @@
+OpenStack Orchestration:RO::\
+Manage OpenStack Heat:\
+auths=solaris.admin.edit/etc/heat/api-paste.ini,\
+solaris.admin.edit/etc/heat/heat.conf,\
+solaris.admin.edit/etc/heat/policy.json,\
+solaris.smf.manage.heat,\
+solaris.smf.value.heat;\
+defaultpriv={file_dac_read}\:/var/svc/log/application-openstack-*
+
+OpenStack Management:RO:::profiles=OpenStack Orchestration
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/heat.license	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,211 @@
+The following applies to all products licensed under the Apache 2.0 License:
+
+You may not use the identified files except in compliance with the Apache License, Version 2.0 (the "License.")
+ 
+You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.  A copy of the license is also reproduced below.
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and limitations under the License.
+
+		                   Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/heat.p5m	Tue Sep 23 17:50:12 2014 -0700
@@ -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) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/cloud/openstack/heat@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Heat (Orchestration Service)"
+set name=pkg.description \
+    value="OpenStack Heat is a service to orchestrate multiple composite cloud applications using templates, through both an OpenStack-native ReST API and a CloudFormation-compatible Query API."
+set name=pkg.human-version value="Havana $(COMPONENT_VERSION)"
+set name=com.oracle.info.description \
+    value="Heat, the OpenStack orchestration service"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration" \
+    value="org.opensolaris.category.2008:System/Enterprise Management" \
+    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/236
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+dir  path=etc/heat owner=heat group=heat mode=0700
+file files/api-paste.ini path=etc/heat/api-paste.ini owner=heat group=heat \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/heat/environment.d/default.yaml owner=heat group=heat mode=0644 \
+    overlay=allow preserve=renamenew
+file files/heat.conf path=etc/heat/heat.conf owner=heat group=heat mode=0644 \
+    overlay=allow preserve=renamenew
+file path=etc/heat/policy.json owner=heat group=heat mode=0644 overlay=allow \
+    preserve=renamenew
+file path=etc/heat/templates/AWS_CloudWatch_Alarm.yaml owner=heat group=heat \
+    mode=0644 overlay=allow preserve=renamenew
+file path=etc/heat/templates/AWS_RDS_DBInstance.yaml owner=heat group=heat \
+    mode=0644 overlay=allow preserve=renamenew
+file files/heat.auth_attr path=etc/security/auth_attr.d/cloud:openstack:heat \
+    group=sys
+file files/heat.exec_attr path=etc/security/exec_attr.d/cloud:openstack:heat \
+    group=sys
+file files/heat.prof_attr path=etc/security/prof_attr.d/cloud:openstack:heat \
+    group=sys
+file files/heat-api-cfn.xml \
+    path=lib/svc/manifest/application/openstack/heat-api-cfn.xml
+file files/heat-api-cloudwatch.xml \
+    path=lib/svc/manifest/application/openstack/heat-api-cloudwatch.xml
+file files/heat-api.xml path=lib/svc/manifest/application/openstack/heat-api.xml
+file files/heat-db.xml path=lib/svc/manifest/application/openstack/heat-db.xml
+file files/heat-engine.xml \
+    path=lib/svc/manifest/application/openstack/heat-engine.xml
+file files/heat-smf-method path=lib/svc/method/heat-smf-method
+file path=usr/bin/heat-manage
+file usr/bin/heat-keystone-setup \
+    path=usr/demo/openstack/keystone/heat-keystone-setup mode=0555
+file usr/bin/heat-api path=usr/lib/heat/heat-api mode=0555
+file usr/bin/heat-api-cfn path=usr/lib/heat/heat-api-cfn mode=0555
+file usr/bin/heat-api-cloudwatch path=usr/lib/heat/heat-api-cloudwatch mode=0555
+file usr/bin/heat-engine path=usr/lib/heat/heat-engine mode=0555
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/heat-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/aws/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/aws/ec2token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/aws/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/aws/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cfn/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cfn/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cfn/v1/signal.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cfn/v1/stacks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cfn/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cloudwatch/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cloudwatch/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/cloudwatch/watch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/fault.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/middleware/version_negotiation.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/actions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/events.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/resources.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/stacks.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/v1/util.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/api/openstack/versions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/boothook.sh
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/config
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/loguserdata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cloudinit/part_handler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cmd/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/cmd/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/auth_password.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/auth_token.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/crypt.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/custom_backend_auth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/environment_format.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/heat_keystoneclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/identifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/plugin_loader.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/short_id.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/template_format.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/urlfetch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/common/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/README
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/manage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/migrate.cfg
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/016_timeout_nullable.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/017_event_state_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/018_resource_id_uuid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/019_resource_action_status.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/020_stack_action.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/021_resource_data.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/022_stack_event_soft_delete.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/023_raw_template_mysql_longtext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/024_event_resource_name.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/025_user_creds_drop_service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/026_user_creds_drop_aws.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/027_user_creds_trusts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/028_text_mysql_longtext.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migrate_repo/versions/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/mutable.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/sync.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/db/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/doc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/doc/resources.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/attributes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/clients.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/components.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/dependencies.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/environment.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/event.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/hot.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/parameters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/parser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/properties.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/autoscaling.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/ceilometer/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/ceilometer/alarm.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/cloud_watch.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/eip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/instance.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/internet_gateway.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/loadbalancer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/network_interface.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/firewall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/floatingip.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/loadbalancer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/net.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/neutron.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/port.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/router.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/subnet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/neutron/vpnservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/nova_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/route_table.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/s3.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/security_group.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/stack.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/subnet.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/swift.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/template_resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/user.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/volume.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/vpc.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/resources/wait_condition.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/scheduler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/signal_responder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/stack_resource.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/template.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/timestamp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/update.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/engine/watchrule.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/bs/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/cs/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/da/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/de/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_AU/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_GB/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/en_US/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/es/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/fr/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/it/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ja/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ko/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/pt_BR/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/ru/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/tl/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/tr/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/uk/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/zh_CN/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/locale/zh_TW/LC_MESSAGES/heat.po
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/README
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/config/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/config/generator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/context.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/migration.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/models.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/session.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/db/sqlalchemy/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/eventlet_backdoor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/excutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/fileutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/gettextutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/importutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/jsonutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/local.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/lockutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/loopingcall.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/network_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/list_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/log_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/no_op_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rabbit_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rpc_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/rpc_notifier2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/notifier/test_notifier.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/policy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/processutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/amqp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/dispatcher.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_fake.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_kombu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_qpid.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/impl_zmq.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker_redis.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/matchmaker_ring.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/proxy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/securemessage.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/serializer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/rpc/zmq_receiver.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/sslutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/threadgroup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/timeutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/openstack/common/uuidutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/api.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/rpc/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/heat/version.py
+dir  path=var/lib/heat owner=heat group=heat mode=0700
+dir  path=var/log/heat owner=heat group=heat mode=0700
+#
+group groupname=heat gid=87
+user username=heat ftpuser=false gcos-field="OpenStack Heat" group=heat \
+    home-dir=/var/lib/heat uid=87
+license heat.license license="Apache v2.0"
+
+# force a group dependency on the optional anyjson; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python-2/anyjson-$(PYV)
+
+# force a group dependency on the optional ceilometerclient; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/ceilometerclient-$(PYV)
+
+# force a group dependency on the optional cinderclient; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/cinderclient-$(PYV)
+
+# force a group dependency on the optional neutronclient; pkgdepend work is
+# needed to flush this out.
+depend type=group fmri=library/python/neutronclient-$(PYV)
+
+# force a group dependency on the optional swiftclient; pkgdepend work is needed
+# to flush this out.
+depend type=group fmri=library/python/swiftclient-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/babel-$(PYV)
+
+# force a dependency on greenlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/greenlet-$(PYV)
+
+# force a dependency on kombu; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/kombu-$(PYV)
+
+# force a dependency on lxml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/lxml-$(PYV)
+
+# force a dependency on netaddr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/netaddr-$(PYV)
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/paste.deploy-$(PYV)
+
+# force a dependency on pyyaml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/pyyaml-$(PYV)
+
+# force a dependency on requests; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/requests-$(PYV)
+
+# force a dependency on routes; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/routes-$(PYV)
+
+# force a dependency on sqlalchemy; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/sqlalchemy-$(PYV)
+
+# force a dependency on webob; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python-2/webob-$(PYV)
+
+# force a dependency on iso8601; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/iso8601-$(PYV)
+
+# force a dependency on keystoneclient; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/keystoneclient-$(PYV)
+
+# force a dependency on novaclient; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/novaclient-$(PYV)
+
+# force a dependency on pbr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pbr-$(PYV)
+
+# force a dependency on six; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/six-$(PYV)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/01-CVE-2014-3801.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,54 @@
+Patch for Upstream bug 1311223.  This addresses CVE-2014-3801.  It has
+been fixed in Icehouse 2014.1.1 and Havana 2013.2.4.
+
+From 7e114a38712da8947ee7ad93eabda34f5e4aa65a Mon Sep 17 00:00:00 2001
+From: Angus Salkeld <[email protected]>
+Date: Thu, 1 May 2014 11:20:55 +1000
+Subject: Don't dynamically create provider types in the global env
+
+Only support this in user environments.
+Note: this is only when you have the following in your template
+resources:
+  thingy:
+    type: http://example.com/foo.template
+
+Doing this will avoid tenant-specific provider template URLs being
+shown globally in the resource-type listing.
+
+Co-Authored-By: Angus Salkeld <[email protected]>
+Closes-Bug: #1311223
+Change-Id: Ifa18108afacbda390b19b46a8f41bc4f018e95d6
+(cherry picked from commit a02ff20509171346d2a1d2a9df7c81aada134c52)
+
+diff --git a/heat/engine/environment.py b/heat/engine/environment.py
+index 6dd73f0..db9f2e2 100644
+--- a/heat/engine/environment.py
++++ b/heat/engine/environment.py
+@@ -187,7 +187,10 @@ class ResourceRegistry(object):
+         registry[name] = info
+ 
+     def iterable_by(self, resource_type, resource_name=None):
+-        if resource_type.endswith(('.yaml', '.template')):
++        is_templ_type = resource_type.endswith(('.yaml', '.template'))
++        if self.global_registry is not None and is_templ_type:
++            # we only support dynamic resource types in user environments
++            # not the global environment.
+             # resource with a Type == a template
+             # we dynamically create an entry as it has not been registered.
+             if resource_type not in self._registry:
+diff --git a/heat/tests/test_provider_template.py b/heat/tests/test_provider_template.py
+index 500cc59..e2af880 100644
+--- a/heat/tests/test_provider_template.py
++++ b/heat/tests/test_provider_template.py
+@@ -398,6 +398,8 @@ class ProviderTemplateTest(HeatTestCase):
+             self.assertIn(attrib, templ_resource.attributes)
+         for k, v in json_snippet.get("Properties").items():
+             self.assertEqual(v, templ_resource.properties[k])
++        self.assertNotIn('WordPress_Single_Instance.yaml',
++                         resources.global_env().registry._registry)
+ 
+     def test_system_template_retrieve_by_file(self):
+         # make sure that a TemplateResource defined in the global environment
+-- 
+cgit v0.10.1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/02-requirements.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,41 @@
+In-house patch to remove unnecessary dependencies from Heat's
+requirements files. The specific reasons are as follows:
+
+argparse	No longer applicable
+
+httplib2	No longer applicable
+
+pycrypto	Not applicable to Solaris (M2Crypto used instead)
+
+--- heat-2013.2.3/heat.egg-info/requires.txt.orig	2014-04-03 11:47:55.000000000 -0700
++++ heat-2013.2.3/heat.egg-info/requires.txt	2014-07-07 03:03:36.128102921 -0700
+@@ -1,8 +1,6 @@
+ pbr>=0.5.21,<1.0
+-pycrypto>=2.6
+ eventlet>=0.13.0
+ greenlet>=0.3.2
+-httplib2
+ iso8601>=0.1.8
+ kombu>=2.4.8
+ lxml>=2.3
+@@ -22,4 +20,4 @@
+ PyYAML>=3.1.0
+ paramiko>=1.8.0
+ Babel>=1.3
+-oslo.config>=1.2.0
+\ No newline at end of file
++oslo.config>=1.2.0
+--- heat-2013.2.3/requirements.txt.orig	2014-04-03 11:44:49.000000000 -0700
++++ heat-2013.2.3/requirements.txt	2014-07-07 03:03:32.472531751 -0700
+@@ -1,11 +1,8 @@
+ pbr>=0.5.21,<1.0
+-pycrypto>=2.6
+ eventlet>=0.13.0
+ greenlet>=0.3.2
+-httplib2
+ iso8601>=0.1.8
+ kombu>=2.4.8
+-argparse
+ lxml>=2.3
+ netaddr
+ six>=1.4.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/03-uuid-format.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,19 @@
+In-house patch to force the conversion of UUIDs to UUID version 4.
+libuuid in Solaris does not set the version of UUID correctly (bug
+15391420).
+--- heat-2013.2.3/heat/common/short_id.py.orig	2014-06-26 11:03:04.050413825 -0600
++++ heat-2013.2.3/heat/common/short_id.py	2014-06-26 11:04:48.397644826 -0600
+@@ -38,9 +38,10 @@
+     The supplied UUID must be a version 4 UUID object.
+     '''
+     if isinstance(source_uuid, basestring):
+-        source_uuid = uuid.UUID(source_uuid)
+-    if source_uuid.version != 4:
+-        raise ValueError('Invalid UUID version (%d)' % source_uuid.version)
++        try:
++            source_uuid = uuid.UUID(source_uuid, version=4)
++        except ValueError:
++            raise ValueError('Invalid UUID: %s' % source_uuid)
+ 
+     # The "time" field of a v4 UUID contains 60 random bits
+     # (see RFC4122, Section 4.4)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/04-nopycrypto.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,47 @@
+In-house removal of PyCrypto dependency in Heat. This patch is
+Solaris-specific and not suitable for upstream.
+
+Convert encrypt() and decrypt() to use M2Crypto instead of PyCrypto.
+
+--- heat-2013.2.3/heat/common/crypt.py.~1~	2014-04-03 11:44:49.000000000 -0700
++++ heat-2013.2.3/heat/common/crypt.py	2014-07-07 03:26:19.115102209 -0700
+@@ -14,9 +14,9 @@
+ #    under the License.
+ 
+ import base64
+-from Crypto.Cipher import AES
+ from os import urandom
+ 
++from M2Crypto.EVP import Cipher
+ from oslo.config import cfg
+ 
+ from heat.openstack.common import log as logging
+@@ -36,9 +36,12 @@
+ def encrypt(auth_info):
+     if auth_info is None:
+         return None
+-    iv = urandom(AES.block_size)
+-    cipher = AES.new(cfg.CONF.auth_encryption_key[:32], AES.MODE_CFB, iv)
+-    res = base64.b64encode(iv + cipher.encrypt(auth_info))
++    iv = urandom(16)
++    cipher = Cipher(alg='aes_256_cfb', key=cfg.CONF.auth_encryption_key[:32],
++                    iv=iv, op=1)
++    padded = cipher.update(auth_info)
++    padded = padded + cipher.final()
++    res = base64.b64encode(iv + padded)
+     return res
+ 
+ 
+@@ -46,7 +49,9 @@
+     if auth_info is None:
+         return None
+     auth = base64.b64decode(auth_info)
+-    iv = auth[:AES.block_size]
+-    cipher = AES.new(cfg.CONF.auth_encryption_key[:32], AES.MODE_CFB, iv)
+-    res = cipher.decrypt(auth[AES.block_size:])
++    iv = auth[:16]
++    cipher = Cipher(alg='aes_256_cfb', key=cfg.CONF.auth_encryption_key[:32],
++                    iv=iv, op=0)
++    padded = cipher.update(auth[16:])
++    res = padded + cipher.final()
+     return res
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/05-neutron-names-required.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,26 @@
+In-house patch to change the name of Neutron objects to use underscores
+instead of hyphens on Solaris.  This patch has not yet been submitted
+upstream.
+
+--- heat-2013.2.3/heat/engine/resources/neutron/neutron.py.orig     2014-07-22 18:07:26.583195123 -0600
++++ heat-2013.2.3/heat/engine/resources/neutron/neutron.py  2014-07-22 18:08:49.115350165 -0600
+@@ -13,6 +13,8 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+
++import platform
++
+ from neutronclient.common.exceptions import NeutronClientException
+
+ from heat.common import exception
+@@ -147,3 +149,10 @@
+                     else:
+                         raise
+         return seclist
++
++    def physical_resource_name(self):
++        name = super(NeutronResource, self).physical_resource_name()
++        if platform.uname()[0] == "SunOS":
++            # EVS can not use hyphen characters
++            name = name.replace("-", "_")
++        return name
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/06-heat-keystone-setup.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,61 @@
+In-house patch to the heat-keystone-setup script installed in
+/usr/demo/openstack/keystone in order to use the standard Solaris UNIX
+commands rather than the GNU ones. It also includes a corrected fix for
+Launchpad bug 1260556. This is a Solaris-specific patch and is not
+suitable for the upstream.
+
+--- heat-2013.2.3/bin/heat-keystone-setup.~1~	2014-04-03 11:44:49.000000000 -0700
++++ heat-2013.2.3/bin/heat-keystone-setup	2014-07-16 20:28:16.316132723 -0700
+@@ -2,12 +2,14 @@
+ 
+ set +e
+ 
++PATH=/usr/bin
++
+ KEYSTONE_CONF=${KEYSTONE_CONF:-/etc/keystone/keystone.conf}
+ 
+ # 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
+ 
+ SERVICE_TOKEN=${SERVICE_TOKEN:-$CONFIG_SERVICE_TOKEN}
+@@ -35,7 +37,7 @@
+     shift 3
+ 
+     echo $("$@" | \
+-           awk -F'|' \
++           nawk -F'|' \
+                "! /^\+/ && \$${match_column} ~ \"^ *${regex} *\$\" \
+                 { print \$${output_column} }")
+ }
+@@ -47,7 +49,7 @@
+ get_column_num() {
+     local name=$1
+     shift
+-    $@ | awk -F'|' "NR == 2 { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1) }"
++    $@ | nawk -F'|' "/^\|/ { for (i=2; i<NF; i++) if (\$i ~ \"^ *${name} *\$\") print (i - 1); exit }"
+ }
+ 
+ get_user() {
+@@ -137,7 +139,7 @@
+ 
+     local url=$(get_data 1 "${service_type}[.]publicURL" 2 \
+                 get_endpoint $service_type 2>/dev/null | \
+-                sed -r "s/[a-f0-9]{32}/$urlsuffix/")
++                sed "s/[a-f0-9]\{32\}/$urlsuffix/")
+ 
+     if [ -n "$url" ]; then
+         local endpoints=$(get_data 3 $url 1 keystone endpoint-list)
+@@ -199,7 +201,7 @@
+ 
+     ADMIN_ROLE=$(get_data 2 admin 1 keystone role-list)
+     SERVICE_TENANT=$(get_data 2 service 1 keystone tenant-list)
+-    SERVICE_PASSWORD=${SERVICE_PASSWORD:-$OS_PASSWORD}
++    SERVICE_PASSWORD=${SERVICE_PASSWORD:-heat}
+     SERVICE_HOST=${SERVICE_HOST:-localhost}
+ 
+     if [[ "$SERVICE_PASSWORD" == "$OS_PASSWORD" ]]; then
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/patches/07-heat-plugin-defaults.patch	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,15 @@
+In-house patch to remove /usr/lib64/heat from the default list of
+plugin directories searched by Heat.  This patch is Solaris specific
+and not suitable for upstream contribution.
+
+--- heat-2013.2.3/heat/common/config.py.orig	2014-07-17 12:48:08.249427463 -0600
++++ heat-2013.2.3/heat/common/config.py	2014-07-17 12:48:31.499385628 -0600
+@@ -85,7 +85,7 @@
+                default='heat.engine.nova',
+                help='Driver to use for controlling instances'),
+     cfg.ListOpt('plugin_dirs',
+-                default=['/usr/lib64/heat', '/usr/lib/heat'],
++                default=['/usr/lib/heat'],
+                 help='List of directories to search for Plugins'),
+     cfg.StrOpt('environment_dir',
+                default='/etc/heat/environment.d',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/heat/resolve.deps	Tue Sep 23 17:50:12 2014 -0700
@@ -0,0 +1,7 @@
+library/python-2/eventlet-26
+library/python-2/setuptools-26
+library/python-2/sqlalchemy-migrate-26
+library/python/oslo.config-26
+runtime/python-26
+shell/bash
+system/core-os
--- a/components/openstack/horizon/files/overrides.py	Tue Sep 23 17:12:33 2014 -0700
+++ b/components/openstack/horizon/files/overrides.py	Tue Sep 23 17:50:12 2014 -0700
@@ -54,6 +54,8 @@
     NetworksTable as projectNetworksTable
 from openstack_dashboard.dashboards.project.networks.workflows import \
     CreateNetworkInfoAction, CreateSubnetDetailAction, CreateSubnetInfoAction
+from openstack_dashboard.dashboards.project.stacks.tabs import \
+    StackDetailTabs, StackEventsTab, StackOverviewTab, StackResourcesTab
 
 # Remove 'PostCreationStep' from Project/Instances/Launch Instance
 create_instance.LaunchInstance.default_steps = (
@@ -149,3 +151,6 @@
 base_fields = CreateSubnetDetailAction.base_fields
 base_fields['allocation_pools'].widget.attrs['readonly'] = 'readonly'
 base_fields['host_routes'].widget.attrs['readonly'] = 'readonly'
+
+# Remove 'StackTopologyTab' from Project/Stacks/StackDetailTabs
+StackDetailTabs.tabs = (StackOverviewTab, StackResourcesTab, StackEventsTab)