File encode-user-data-utf8.patch of Package python-novaclient

commit 81c01e535cecc54c2e6e847000638b52fec506af
Author: Vincent Untz <vuntz@suse.com>
Date:   Fri Sep 28 11:48:38 2012 +0200

    Encode user data to utf-8 when creating a server
    
    This is needed for data that we don't read from IO directly, since we're
    base64-encoding the user data, and this requires ther user data to not
    be of the unicode type.
    
    We're being tolerant, as we'll accept user data that is already in a str
    object.
    
    Fixes: bug 1049161
    Change-Id: I4320670de564c8029c7aef14da2492c6f8752efe

diff --git a/novaclient/v1_1/base.py b/novaclient/v1_1/base.py
index 43e54cd..85d7141 100644
--- a/novaclient/v1_1/base.py
+++ b/novaclient/v1_1/base.py
@@ -72,6 +72,8 @@ class BootingManagerWithFind(base.ManagerWithFind):
         if userdata:
             if hasattr(userdata, 'read'):
                 userdata = userdata.read()
+            elif isinstance(userdata, unicode):
+                userdata = userdata.encode('utf-8')
             body["server"]["user_data"] = base64.b64encode(userdata)
         if meta:
             body["server"]["metadata"] = meta
diff --git a/tests/v1_1/test_servers.py b/tests/v1_1/test_servers.py
index 6111514..c4c5305 100644
--- a/tests/v1_1/test_servers.py
+++ b/tests/v1_1/test_servers.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
 import StringIO
 
 from novaclient import exceptions
@@ -59,6 +61,38 @@ class ServersTest(utils.TestCase):
         cs.assert_called('POST', '/servers')
         self.assertTrue(isinstance(s, servers.Server))
 
+    def test_create_server_userdata_unicode(self):
+        s = cs.servers.create(
+            name="My server",
+            image=1,
+            flavor=1,
+            meta={'foo': 'bar'},
+            userdata=u'こんにちは',
+            key_name="fakekey",
+            files={
+                '/etc/passwd': 'some data',                 # a file
+                '/tmp/foo.txt': StringIO.StringIO('data'),   # a stream
+            },
+        )
+        cs.assert_called('POST', '/servers')
+        self.assertTrue(isinstance(s, servers.Server))
+
+    def test_create_server_userdata_utf8(self):
+        s = cs.servers.create(
+            name="My server",
+            image=1,
+            flavor=1,
+            meta={'foo': 'bar'},
+            userdata='こんにちは',
+            key_name="fakekey",
+            files={
+                '/etc/passwd': 'some data',                 # a file
+                '/tmp/foo.txt': StringIO.StringIO('data'),   # a stream
+            },
+        )
+        cs.assert_called('POST', '/servers')
+        self.assertTrue(isinstance(s, servers.Server))
+
     def test_update_server(self):
         s = cs.servers.get(1234)
 
openSUSE Build Service is sponsored by