diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py index e1166450b..830ce53d7 100644 --- a/novaclient/tests/unit/v2/test_shell.py +++ b/novaclient/tests/unit/v2/test_shell.py @@ -1773,8 +1773,11 @@ class ShellTest(utils.TestCase): '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') + ex = self.assertRaises(exceptions.CommandError, self.run_command, cmd, + api_version='2.57') + self.assertIn("Can't open '%(user_data)s': " + "[Errno 2] No such file or directory: '%(user_data)s'" % + {'user_data': invalid_file}, six.text_type(ex)) def test_rebuild_unset_user_data(self): self.run_command('rebuild sample-server %s --user-data-unset' % diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py index 8a1b9a6d4..ae7344bf7 100644 --- a/novaclient/v2/shell.py +++ b/novaclient/v2/shell.py @@ -398,7 +398,8 @@ def _boot(cs, args): for f in args.files: try: dst, src = f.split('=', 1) - files[dst] = open(src) + with open(src) as fo: + files[dst] = fo.read() except IOError as e: raise exceptions.CommandError( _("Can't open '%(src)s': %(exc)s") % @@ -416,7 +417,8 @@ def _boot(cs, args): if args.user_data: try: - userdata = open(args.user_data) + with open(args.user_data) as f: + userdata = f.read() except IOError as e: raise exceptions.CommandError(_("Can't open '%(user_data)s': " "%(exc)s") % @@ -1916,7 +1918,8 @@ def do_rebuild(cs, args): "'--user-data'.")) elif args.user_data: try: - kwargs['userdata'] = open(args.user_data) + with open(args.user_data) as f: + kwargs['userdata'] = f.read() except IOError as e: raise exceptions.CommandError( _("Can't open '%(user_data)s': %(exc)s") % { diff --git a/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml b/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml index 4d5407584..32065a113 100644 --- a/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml +++ b/releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml @@ -1,5 +1,6 @@ --- 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. + The user data argument in the ``nova rebuild`` command was passing + the filename as userdata. Now this passes the contents of the file + as intended.