From 47dc339ab9bb2985d750dae11d0b3b8b2c85d2b2 Mon Sep 17 00:00:00 2001 From: Takashi NATSUME Date: Thu, 4 Oct 2018 12:02:07 +0900 Subject: [PATCH] Follow up "Fix up userdata argument to rebuild" This patch is a follow-up patch for I9752d849aa0e6cf608db0def3ca89565cff4debc. * Add checking a message of an exception in the unit test * Add 'with' statement when opening a file * Fix descriptions in the release note Change-Id: I2c399490f320a202b41a8f8d36710a36621c4853 --- novaclient/tests/unit/v2/test_shell.py | 7 +++++-- novaclient/v2/shell.py | 9 ++++++--- .../notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml | 5 +++-- 3 files changed, 14 insertions(+), 7 deletions(-) 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.