summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Morrison <sorrison@gmail.com>2018-09-26 16:47:53 +1000
committerMatt Riedemann <mriedem.os@gmail.com>2018-10-24 14:42:56 +0000
commit5610ebd10d18ac6db204d31e8b4341a33a31e327 (patch)
treead0662b2f93ac4b9a68b65203240294da4cfdac3
parente477301c3d06ac8edfc6f4a4b32d415c77ebd95e (diff)
downloadpython-novaclient-5610ebd10d18ac6db204d31e8b4341a33a31e327.tar.gz
Fix up userdata argument to rebuild.
This was using the name of the file as user data as opposed to the content of the file. Change-Id: I9752d849aa0e6cf608db0def3ca89565cff4debc Closes-bug: #1794419 (cherry picked from commit cac7351b0ee9716f1be01e8711d6ed3a237362ca)
-rw-r--r--novaclient/tests/unit/v2/test_shell.py19
-rw-r--r--novaclient/v2/shell.py11
-rw-r--r--releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml5
3 files changed, 29 insertions, 6 deletions
diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py
index c5492514..3d07ade8 100644
--- a/novaclient/tests/unit/v2/test_shell.py
+++ b/novaclient/tests/unit/v2/test_shell.py
@@ -1736,18 +1736,29 @@ class ShellTest(utils.TestCase):
cmd % (FAKE_UUID_1, testfile), api_version='2.57')
def test_rebuild_change_user_data(self):
- self.run_command('rebuild sample-server %s --user-data test' %
- FAKE_UUID_1, api_version='2.57')
- user_data = servers.ServerManager.transform_userdata('test')
+ testfile = os.path.join(os.path.dirname(__file__), 'testfile.txt')
+ with open(testfile) as testfile_fd:
+ data = testfile_fd.read().encode('utf-8')
+ expected_file_data = servers.ServerManager.transform_userdata(data)
+ self.run_command('rebuild sample-server %s --user-data %s' %
+ (FAKE_UUID_1, testfile), api_version='2.57')
self.assert_called('GET', '/servers?name=sample-server', pos=0)
self.assert_called('GET', '/servers/1234', pos=1)
self.assert_called('GET', '/v2/images/%s' % FAKE_UUID_1, pos=2)
self.assert_called('POST', '/servers/1234/action',
{'rebuild': {'imageRef': FAKE_UUID_1,
- 'user_data': user_data,
+ 'user_data': expected_file_data,
'description': None}}, pos=3)
self.assert_called('GET', '/v2/images/%s' % FAKE_UUID_2, pos=4)
+ def test_rebuild_invalid_user_data(self):
+ invalid_file = os.path.join(os.path.dirname(__file__),
+ 'no_such_file')
+ cmd = ('rebuild sample-server %s --user-data %s'
+ % (FAKE_UUID_1, invalid_file))
+ self.assertRaises(exceptions.CommandError, self.run_command, cmd,
+ api_version='2.57')
+
def test_rebuild_unset_user_data(self):
self.run_command('rebuild sample-server %s --user-data-unset' %
FAKE_UUID_1, api_version='2.57')
diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py
index e6a09a61..4f713906 100644
--- a/novaclient/v2/shell.py
+++ b/novaclient/v2/shell.py
@@ -1894,8 +1894,15 @@ def do_rebuild(cs, args):
_("Cannot specify '--user-data-unset' with "
"'--user-data'."))
elif args.user_data:
- kwargs['userdata'] = args.user_data
-
+ try:
+ kwargs['userdata'] = open(args.user_data)
+ except IOError as e:
+ raise exceptions.CommandError(
+ _("Can't open '%(user_data)s': %(exc)s") % {
+ 'user_data': args.user_data,
+ 'exc': e,
+ }
+ )
if cs.api_version >= api_versions.APIVersion('2.54'):
if args.key_unset:
kwargs['key_name'] = None
diff --git a/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml b/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml
new file mode 100644
index 00000000..4d540758
--- /dev/null
+++ b/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ The user data argument to rebuild was passing the filename as is as userdata.
+ Now this passes the contents of the filename as intended.