From dc416551760b042ede6f844537c394316743073d Mon Sep 17 00:00:00 2001 From: guohliu Date: Tue, 23 Jul 2013 18:08:03 +0800 Subject: [PATCH] Fix loguserdata output to file issue Fixes bug #1191685 Change-Id: I2a02b490e45c3cb838243b9dad62cc52b609b336 --- heat/cloudinit/loguserdata.py | 11 ++++++----- heat/tests/test_loguserdata.py | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/heat/cloudinit/loguserdata.py b/heat/cloudinit/loguserdata.py index e55e31d9..eb9797a3 100755 --- a/heat/cloudinit/loguserdata.py +++ b/heat/cloudinit/loguserdata.py @@ -35,14 +35,15 @@ def call(args): def write(self, data): LOG.info(data) - def __getattr__(self, attr): - return getattr(sys.stdout, attr) - LOG.info('%s\n' % ' '.join(args)) try: ls = LogStream() - p = subprocess.Popen(args, stdout=ls, stderr=ls) - p.wait() + p = subprocess.Popen(args, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + data = p.communicate() + if data: + for x in data: + ls.write(x) except OSError as ex: if ex.errno == errno.ENOEXEC: LOG.error('Userdata empty or not executable: %s\n' % str(ex)) diff --git a/heat/tests/test_loguserdata.py b/heat/tests/test_loguserdata.py index 29986308..3de508f1 100644 --- a/heat/tests/test_loguserdata.py +++ b/heat/tests/test_loguserdata.py @@ -34,6 +34,9 @@ class FakePOpen(): def wait(self): pass + def communicate(self, input=None): + pass + class LoguserdataTest(HeatTestCase): -- 2.45.2