diff --git a/heat/cloudinit/loguserdata.py b/heat/cloudinit/loguserdata.py index e51c85c5de..12ebf2b331 100755 --- a/heat/cloudinit/loguserdata.py +++ b/heat/cloudinit/loguserdata.py @@ -17,6 +17,7 @@ from distutils import version import errno import logging import os +import re import subprocess import sys @@ -28,9 +29,20 @@ LOG = logging.getLogger('heat-provision') def chk_ci_version(): - v = version.LooseVersion( - pkg_resources.get_distribution('cloud-init').version) - return v >= version.LooseVersion('0.6.0') + try: + v = version.LooseVersion( + pkg_resources.get_distribution('cloud-init').version) + return v >= version.LooseVersion('0.6.0') + except Exception: + pass + data = subprocess.Popen(['cloud-init', '--version'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE).communicate() + if data[0]: + raise Exception() + # data[1] has such format: 'cloud-init 0.7.5\n', need to parse version + v = re.split(' |\n', data[1])[1].split('.') + return tuple(v) >= tuple('0', '6', '0') def init_logging(): @@ -74,11 +86,15 @@ def call(args): def main(): - if not chk_ci_version(): - # pre 0.6.0 - user data executed via cloudinit, not this helper - LOG.error('Unable to log provisioning, need a newer version of ' - 'cloud-init') - return -1 + try: + if not chk_ci_version(): + # pre 0.6.0 - user data executed via cloudinit, not this helper + LOG.error('Unable to log provisioning, need a newer version of ' + 'cloud-init') + return -1 + except Exception: + LOG.warning('Can not determine the version of cloud-init. It is ' + 'possible to get errors while logging provisioning.') userdata_path = os.path.join(VAR_PATH, 'cfn-userdata') os.chmod(userdata_path, int("700", 8))