summaryrefslogtreecommitdiff
path: root/openstackclient/compute
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-10-24 16:12:06 +0000
committerGerrit Code Review <review@openstack.org>2014-10-24 16:12:06 +0000
commitd140d8940f99f42d0cc9d2953b26726cbc096a5e (patch)
tree84741ce773c40064788686cdec04f59ed8873346 /openstackclient/compute
parent747a62494ca17375b835c54992ea5907e68a9a4f (diff)
parent89217a6557e16872ac1af0e305ac09886a9e1255 (diff)
downloadpython-openstackclient-d140d8940f99f42d0cc9d2953b26726cbc096a5e.tar.gz
Merge "Close files on server create, add tests"
Diffstat (limited to 'openstackclient/compute')
-rw-r--r--openstackclient/compute/v2/server.py17
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(