diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-10-24 16:12:06 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-10-24 16:12:06 +0000 |
| commit | d140d8940f99f42d0cc9d2953b26726cbc096a5e (patch) | |
| tree | 84741ce773c40064788686cdec04f59ed8873346 /openstackclient/compute | |
| parent | 747a62494ca17375b835c54992ea5907e68a9a4f (diff) | |
| parent | 89217a6557e16872ac1af0e305ac09886a9e1255 (diff) | |
| download | python-openstackclient-d140d8940f99f42d0cc9d2953b26726cbc096a5e.tar.gz | |
Merge "Close files on server create, add tests"
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 355774c3..a6d645b9 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -17,6 +17,7 @@ import argparse import getpass +import io import logging import os import six @@ -296,7 +297,7 @@ class CreateServer(show.ShowOne): for f in parsed_args.file: dst, src = f.split('=', 1) try: - files[dst] = open(src) + files[dst] = io.open(src, 'rb') except IOError as e: raise exceptions.CommandError("Can't open '%s': %s" % (src, e)) @@ -313,7 +314,7 @@ class CreateServer(show.ShowOne): userdata = None if parsed_args.user_data: try: - userdata = open(parsed_args.user_data) + userdata = io.open(parsed_args.user_data) except IOError as e: msg = "Can't open '%s': %s" raise exceptions.CommandError(msg % (parsed_args.user_data, e)) @@ -368,7 +369,17 @@ class CreateServer(show.ShowOne): self.log.debug('boot_args: %s', boot_args) self.log.debug('boot_kwargs: %s', boot_kwargs) - server = compute_client.servers.create(*boot_args, **boot_kwargs) + + # Wrap the call to catch exceptions in order to close files + try: + server = compute_client.servers.create(*boot_args, **boot_kwargs) + finally: + # Clean up open files - make sure they are not strings + for f in files: + if hasattr(f, 'close'): + f.close() + if hasattr(userdata, 'close'): + userdata.close() if parsed_args.wait: if utils.wait_for_status( |
