diff --git a/novaclient/v1_1/base.py b/novaclient/v1_1/base.py index 43e54cd9d..85d7141fa 100644 --- a/novaclient/v1_1/base.py +++ b/novaclient/v1_1/base.py @@ -72,6 +72,8 @@ def _boot(self, resource_url, response_key, name, image, flavor, 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 61115144c..c4c530591 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 @@ def test_create_server_userdata_file_object(self): 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)