Make build_userdata user_data_format aware

Over time different user_data_format values could assemble
different combinations of cloud-init parts.

As the default will remain user_data_format='HEAT_CFNTOOLS',
identical content will be generated for the Instance resource.

The Server resource now passes user_data_format, and no longer
has a get_mime_string method since build_userdata is only ever
called once so cached get_mime_string results is not needed.
Change-Id: I7cfbcffeea24c9b1f013463f9a5fa53b8c699cfe
This commit is contained in:
Steve Baker 2013-11-29 12:02:09 +13:00
parent 3110364647
commit 0c5b970ea4
2 changed files with 12 additions and 13 deletions

View File

@ -126,7 +126,8 @@ def get_keypair(nova_client, key_name):
raise exception.UserKeyPairMissing(key_name=key_name)
def build_userdata(resource, userdata=None, instance_user=None):
def build_userdata(resource, userdata=None, instance_user=None,
user_data_format='HEAT_CFNTOOLS'):
'''
Build multipart data blob for CloudInit which includes user-supplied
Metadata, user data, and the required Heat in-instance configuration.
@ -137,9 +138,14 @@ def build_userdata(resource, userdata=None, instance_user=None):
:type userdata: str or None
:param instance_user: the user to create on the server
:type instance_user: string
:param user_data_format: Format of user data to return
:type user_data_format: string
:returns: multipart mime as a string
'''
if user_data_format == 'RAW':
return userdata
def make_subpart(content, filename, subtype=None):
if subtype is None:
subtype = os.path.splitext(filename)[0]

View File

@ -201,13 +201,6 @@ class Server(resource.Resource):
def __init__(self, name, json_snippet, stack):
super(Server, self).__init__(name, json_snippet, stack)
self.mime_string = None
def get_mime_string(self, userdata):
if not self.mime_string:
self.mime_string = nova_utils.build_userdata(
self, userdata, instance_user=self.properties['admin_user'])
return self.mime_string
def physical_resource_name(self):
name = self.properties.get('name')
@ -220,11 +213,11 @@ class Server(resource.Resource):
security_groups = self.properties.get('security_groups', [])
user_data_format = self.properties.get('user_data_format')
if user_data_format == 'HEAT_CFNTOOLS':
userdata = self.get_mime_string(
self.properties.get('user_data', ''))
else:
userdata = self.properties.get('user_data', '')
userdata = nova_utils.build_userdata(
self,
self.properties.get('user_data', ''),
instance_user=self.properties['admin_user'],
user_data_format=user_data_format)
flavor = self.properties['flavor']
availability_zone = self.properties['availability_zone']