From 81475c256b95d8bf9a10bf40e6ad92fb75885ede Mon Sep 17 00:00:00 2001 From: Edison Su Date: Fri, 1 Jul 2011 12:58:05 -0700 Subject: [PATCH] fix user/meta data: if data is empty, return a blank file, not 404 --- .../VirtualRoutingResource.java | 24 +++++++------- scripts/vm/hypervisor/xenserver/vmops | 32 ++++++++++--------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 6e07b1adde5..42b5463bb9d 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -229,19 +229,21 @@ public class VirtualRoutingResource implements Manager { } else { dataBytes = data.getBytes(); } - - try { - tmpFile = File.createTempFile("vmdata_", null); - FileOutputStream outStream = new FileOutputStream(tmpFile); - outStream.write(dataBytes); - outStream.close(); - } catch (IOException e) { - String tmpDir = System.getProperty("java.io.tmpdir"); - s_logger.warn("Failed to create temporary file: is " + tmpDir + " full?", e); - return new Answer(cmd, false, "Failed to create or write to temporary file: is " + tmpDir + " full? " + e.getMessage() ); - } } + try { + tmpFile = File.createTempFile("vmdata_", null); + FileOutputStream outStream = new FileOutputStream(tmpFile); + if (dataBytes != null) + outStream.write(dataBytes); + outStream.close(); + } catch (IOException e) { + String tmpDir = System.getProperty("java.io.tmpdir"); + s_logger.warn("Failed to create temporary file: is " + tmpDir + " full?", e); + return new Answer(cmd, false, "Failed to create or write to temporary file: is " + tmpDir + " full? " + e.getMessage() ); + } + + final Script command = new Script(_vmDataPath, _timeout, s_logger); command.add("-r", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP)); command.add("-v", cmd.getVmIpAddress()); diff --git a/scripts/vm/hypervisor/xenserver/vmops b/scripts/vm/hypervisor/xenserver/vmops index d7a80308ac5..2e3929290ee 100755 --- a/scripts/vm/hypervisor/xenserver/vmops +++ b/scripts/vm/hypervisor/xenserver/vmops @@ -153,23 +153,25 @@ def vm_data(session, args): fd = None tmp_path = None - if (vmDataValue != "none"): - try: - fd,tmp_path = tempfile.mkstemp() - tmpfile = open(tmp_path, 'w') + + try: + fd,tmp_path = tempfile.mkstemp() + tmpfile = open(tmp_path, 'w') - if (vmDataFolder == "userdata"): - vmDataValue = base64.urlsafe_b64decode(vmDataValue) - + if vmDataFolder == "userdata" and vmDataValue != "none": + vmDataValue = base64.urlsafe_b64decode(vmDataValue) + + if vmDataValue != "none": tmpfile.write(vmDataValue) - tmpfile.close() - cmd.append("-d") - cmd.append(tmp_path) - except: - util.SMlog(" vmdata failed to write tempfile " ) - os.close(fd) - os.remove(tmp_path) - return '' + + tmpfile.close() + cmd.append("-d") + cmd.append(tmp_path) + except: + util.SMlog(" vmdata failed to write tempfile " ) + os.close(fd) + os.remove(tmp_path) + return '' try: txt = util.pread2(cmd)