diff options
author | Sam Morrison <sorrison@gmail.com> | 2018-09-26 16:47:53 +1000 |
---|---|---|
committer | Matt Riedemann <mriedem.os@gmail.com> | 2018-10-24 14:42:56 +0000 |
commit | 5610ebd10d18ac6db204d31e8b4341a33a31e327 (patch) | |
tree | ad0662b2f93ac4b9a68b65203240294da4cfdac3 | |
parent | e477301c3d06ac8edfc6f4a4b32d415c77ebd95e (diff) | |
download | python-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.py | 19 | ||||
-rw-r--r-- | novaclient/v2/shell.py | 11 | ||||
-rw-r--r-- | releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml | 5 |
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. |