PSARC/2016/010 cloudbase-init: Portable cloud image initialization
authorDavid Miner <dave.miner@oracle.com>
Thu, 04 Feb 2016 13:27:58 -0800
changeset 5418 708cabdc9a39
parent 5417 bcb70575c62a
child 5419 0a6df3707968
PSARC/2016/010 cloudbase-init: Portable cloud image initialization 21460057 Add cloudbase-init to Solaris
components/openstack/cloudbase-init/Makefile
components/openstack/cloudbase-init/PKG-INFO
components/openstack/cloudbase-init/cloudbase-init.p5m
components/openstack/cloudbase-init/files/cloudbase-init.conf
components/openstack/cloudbase-init/files/cloudbase-init.xml
components/openstack/cloudbase-init/patches/log.py.patch
components/openstack/cloudbase-init/patches/posix.py.patch
components/openstack/cloudbase-init/patches/requirements.txt.patch
components/openstack/cloudbase-init/patches/setup.py.pbr.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/Makefile	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,65 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		cloudbase-init
+COMPONENT_VERSION=	0.9.9
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:0385c905952132ce944c821ea4f57ccffd660db7965ca8a62f28600939e659c1
+
+COMPONENT_ARCHIVE_URL=	https://github.com/openstack/cloudbase-init/archive/0.9.9.tar.gz
+COMPONENT_PROJECT_URL=	https://github.com/stackforge/cloudbase-init
+COMPONENT_BUGDB=	service/cloudbase-init
+
+TPNO=			26420
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Upstream only supports 3.3 from the Python 3 series
+PYTHON_VERSIONS=	$(PYTHON2_VERSIONS)
+
+PKG_MACROS +=		PYVER=$(PYTHON_VERSIONS)
+PKG_MACROS +=		PYV=$(shell echo $(PYTHON_VERSIONS) | tr -d .)
+
+# Copy the PKG-INFO file to the build root
+COMPONENT_PRE_BUILD_ACTION = \
+	$(CP) $(COMPONENT_DIR)/PKG-INFO $(SOURCE_DIR)
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+# Tests require testr which is not integrated
+test:		$(NO_TESTS)
+
+REQUIRED_PACKAGES += system/network
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/PKG-INFO	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,32 @@
+Metadata-Version: 1.1
+Name: cloudbase-init
+Version: 0.9.9
+Summary: Portable cloud initialization service
+Home-page: http://www.cloudbase.it/
+Author: Cloudbase Solutions Srl
+Author-email: [email protected]
+Description: The main goal of this project is to bring the benefits of 
+        cloud-init to guests running a wide range of OSs.  The first 
+        release provides support for Windows OSs, but due to the modular 
+        and decoupled architecture of the service, plugins for any OS 
+        can be easily added.
+
+        The features available with the first release include HTTP and 
+        ConfigDriveV2 metadata services and plugins for:  hostname, 
+        user creation, group membership, static networking, 
+        SSH user's public keys, user_data custom scripts running in 
+        various shells (CMD.exe / Powershell / bash)
+
+        There's no limitation in the type of supported Hypervisor. This 
+        service can be used on instances running on Hyper-V, KVM, Xen, 
+        ESXi, etc
+
+        Documentation, support and contacts: http://www.cloudbase.it 
+Platform: UNKNOWN
+Classifier: Intended Audience :: System Administrators
+Classifier: License :: OSI Approved :: Apache Software License
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/cloudbase-init.p5m	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,178 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/system/management/cloudbase-init@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Portable OpenStack Cloud Initialization Service"
+set name=pkg.description \
+    value="The cloudbase-init service brings the benefits of cloud-init to guests running a wide range of OSs though the modular and decoupled architecture of the service it provides. The features available include HTTP and ConfigDriveV2 metadata services and plugins for: hostname, user creation, group membership, static networking, SSH user's public keys, and user_data custom scripts running in various shells."
+set name=com.oracle.info.description value="the cloudbase-init service"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value="org.opensolaris.category.2008:System/Administration and Configuration"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream \
+    value="Alessandro Pilotti <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2016/010
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+file files/cloudbase-init.conf path=etc/cloudbase-init.conf
+file files/cloudbase-init.xml \
+    path=lib/svc/manifest/application/cloudbase-init.xml
+file path=usr/bin/cloudbase-init
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbase_init-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/exception.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/init.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/baseopenstackservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/cloudstack.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/configdrive.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/ec2service.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/httpservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/maasservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/opennebulaservice.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/osconfigdrive/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/osconfigdrive/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/osconfigdrive/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/metadata/services/osconfigdrive/windows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/osutils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/osutils/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/osutils/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/osutils/posix.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/osutils/windows.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/createuser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/execcmd.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/fileexecutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/localscripts.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/mtu.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/networkconfig.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/ntpclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/sethostname.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/setuserpassword.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/sshpublickeys.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudboothook.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfig.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/set_hostname.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/set_timezone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/cloudconfigplugins/write_files.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/heat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/multipartmixed.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/parthandler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdataplugins/shellscript.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/common/userdatautils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/createuser.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/extendvolumes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/licensing.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/ntpclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/winrmcertificateauth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/plugins/windows/winrmlistener.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/shell.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/classloader.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/crypt.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/debiface.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/dhcp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/encoding.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/hostname.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/log.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/network.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/cryptoapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/disk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/iphlpapi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/kernel32.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/network.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/privilege.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/security.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/storage/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/storage/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/storage/factory.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/storage/vds_storage_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/storage/wsm_storage_manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/timezone.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/vds.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/vfat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/winrmconfig.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/ws2_32.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/windows/x509.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/utils/x509constants.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cloudbaseinit/version.py
+#
+license LICENSE license="Apache v2.0"
+
+# force a group dependency on the optional netaddr; pkgdepend work is needed to
+# flush this out.
+depend type=group fmri=library/python/netaddr-$(PYV)
+
+# force a dependency on babel; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/babel-$(PYV)
+
+# force a dependency on eventlet; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/eventlet-$(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 netifaces; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/netifaces-$(PYV)
+
+# force a dependency on oauth; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oauthlib-$(PYV)
+
+# force a dependency on oslo.config; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.config-$(PYV)
+
+# force a dependency on oslo.log; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.log-$(PYV)
+
+# force a dependency on pyyaml; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pyyaml-$(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/cloudbase-init/files/cloudbase-init.conf	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,2 @@
+[DEFAULT]
+plugins=cloudbaseinit.plugins.common.userdata.UserDataPlugin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/files/cloudbase-init.xml	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,68 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE:  This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade.  Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="cloudbase-init">
+
+  <service version="1" type="service"
+    name="application/cloudbase-init">
+
+    <dependency name='network' grouping='require_all' restart_on='error'
+      type='service'>
+      <service_fmri value='svc:/milestone/network:default' />
+    </dependency>
+
+    <logfile_attributes permissions='600'/>
+
+    <exec_method timeout_seconds="0" type="method" name="start"
+      exec="/usr/bin/cloudbase-init --debug">
+    </exec_method>
+    <exec_method timeout_seconds="30" type="method" name="stop"
+      exec=":kill"/>
+
+    <property_group name='startd' type='framework'>
+      <propval name='duration' type='astring' value='transient' />
+    </property_group>
+    
+    <instance name='default' enabled='true'>
+      <!-- to start/stop/refresh the service -->
+      <property_group name='general' type='framework'>
+        <propval name='action_authorization' type='astring'
+                 value='solaris.smf.manage.cloudbase-init' />
+        <propval name='value_authorization' type='astring'
+                 value='solaris.smf.value.cloudbase-init' />
+      </property_group>
+    </instance>
+
+    <template>
+      <common_name>
+        <loctext xml:lang="C">
+          Cloud image initialization
+        </loctext>
+      </common_name>
+      <description>
+        <loctext xml:lang="C">
+          cloudbase-init initializes cloud images using external metadata
+        </loctext>
+      </description>
+    </template>
+  </service>
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/patches/log.py.patch	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,15 @@
+Patch out the import of serial, which causes a traceback on initialization of
+cloudbase-init.  Either we import pyserial or some form of restructuring should
+happen upstream as few platforms seem likely to find logging to serial to be
+useful.
+
+--- ORIGINAL/log.py	2016-01-25 16:11:17.453264452 -0800
++++ cloudbase-init-0.9.9/cloudbaseinit/utils/log.py	2016-01-25 16:11:31.787933714 -0800
+@@ -13,7 +13,6 @@
+ #    under the License.
+ 
+ import logging
+-import serial
+ import six
+ 
+ from oslo_config import cfg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/patches/posix.py.patch	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,20 @@
+Needed for cloudbase-init to run on non-Windows systems.  Needs to go upstream.
+
+--- cloudbase-init-0.9.8a/cloudbaseinit/osutils/posix.py	2015-03-19 15:42:23.000000000 -0700
++++ /tmp/posix.py.new	2015-03-19 16:05:45.328238028 -0700
+@@ -17,7 +17,14 @@
+ from cloudbaseinit.osutils import base
+ 
+ 
+-class PosixUtil(base.BaseOSUtils):
++class PosixUtils(base.BaseOSUtils):
+ 
+     def reboot(self):
+         os.system('reboot')
++
++    def get_config_value(self, name, section=None):
++        pass
++
++    def set_config_value(self, name, value, section=None):
++        pass
++
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/patches/requirements.txt.patch	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,19 @@
+Remove platform dependency expressions that require PEP426 support we don't
+have yet.  Not suitable for upstream.
+
+--- ORIGINAL/requirements.txt	2015-12-29 14:23:49.000000000 -0800
++++ cloudbase-init-0.9.9/requirements.txt	2015-12-30 08:13:34.146913324 -0800
+@@ -1,4 +1,4 @@
+-pbr>=1.3
++pbr>=0.8.1
+ iso8601
+ eventlet
+ netaddr>=0.7.6
+@@ -11,7 +11,3 @@
+ netifaces
+ PyYAML
+ requests
+-pywin32;sys_platform=="win32"
+-comtypes;sys_platform=="win32"
+-wmi;sys_platform=="win32"
+-tzlocal;sys_platform=="win32"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cloudbase-init/patches/setup.py.pbr.patch	Thu Feb 04 13:27:58 2016 -0800
@@ -0,0 +1,12 @@
+Patch to downrev the required version of pbr to something we have.
+This patch is not suitable for upstream commitment.
+
+--- cloudbase-init-0.9.7/setup.py.orig	2014-12-22 09:21:29.644355381 -0700
++++ cloudbase-init-0.9.7/setup.py	2014-12-22 09:21:38.592302541 -0700
+@@ -17,5 +17,5 @@
+ import setuptools
+ 
+ setuptools.setup(
+-    setup_requires=['pbr>=1.3'],
++    setup_requires=['pbr>=0.8.1'],
+     pbr=True)