diff options
Diffstat (limited to 'cloudinit/sources/helpers/vmware/imc')
8 files changed, 68 insertions, 26 deletions
| diff --git a/cloudinit/sources/helpers/vmware/imc/config.py b/cloudinit/sources/helpers/vmware/imc/config.py index 2eaeff34..7109aef3 100644 --- a/cloudinit/sources/helpers/vmware/imc/config.py +++ b/cloudinit/sources/helpers/vmware/imc/config.py @@ -25,6 +25,8 @@ class Config(object):      SUFFIX = 'DNS|SUFFIX|'      TIMEZONE = 'DATETIME|TIMEZONE'      UTC = 'DATETIME|UTC' +    POST_GC_STATUS = 'MISC|POST-GC-STATUS' +    DEFAULT_RUN_POST_SCRIPT = 'MISC|DEFAULT-RUN-POST-CUST-SCRIPT'      def __init__(self, configFile):          self._configFile = configFile @@ -104,4 +106,28 @@ class Config(object):      def custom_script_name(self):          """Return the name of custom (pre/post) script."""          return self._configFile.get(Config.CUSTOM_SCRIPT, None) + +    @property +    def post_gc_status(self): +        """Return whether to post guestinfo.gc.status VMX property.""" +        postGcStatus = self._configFile.get(Config.POST_GC_STATUS, 'no') +        postGcStatus = postGcStatus.lower() +        if postGcStatus not in ('yes', 'no'): +            raise ValueError('PostGcStatus value should be yes/no') +        return postGcStatus == 'yes' + +    @property +    def default_run_post_script(self): +        """ +        Return enable-custom-scripts default value if enable-custom-scripts +        is absent in VM Tools configuration +        """ +        defaultRunPostScript = self._configFile.get( +            Config.DEFAULT_RUN_POST_SCRIPT, +            'no') +        defaultRunPostScript = defaultRunPostScript.lower() +        if defaultRunPostScript not in ('yes', 'no'): +            raise ValueError('defaultRunPostScript value should be yes/no') +        return defaultRunPostScript == 'yes' +  # vi: ts=4 expandtab diff --git a/cloudinit/sources/helpers/vmware/imc/config_custom_script.py b/cloudinit/sources/helpers/vmware/imc/config_custom_script.py index 9f14770e..2ab22de9 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_custom_script.py +++ b/cloudinit/sources/helpers/vmware/imc/config_custom_script.py @@ -9,6 +9,7 @@ import logging  import os  import stat +from cloudinit import subp  from cloudinit import util  LOG = logging.getLogger(__name__) @@ -61,7 +62,7 @@ class PreCustomScript(RunCustomScript):          """Executing custom script with precustomization argument."""          LOG.debug("Executing pre-customization script")          self.prepare_script() -        util.subp([CustomScriptConstant.CUSTOM_SCRIPT, "precustomization"]) +        subp.subp([CustomScriptConstant.CUSTOM_SCRIPT, "precustomization"])  class PostCustomScript(RunCustomScript): diff --git a/cloudinit/sources/helpers/vmware/imc/config_file.py b/cloudinit/sources/helpers/vmware/imc/config_file.py index 602af078..fc034c95 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_file.py +++ b/cloudinit/sources/helpers/vmware/imc/config_file.py @@ -22,7 +22,6 @@ class ConfigFile(ConfigSource, dict):      def __init__(self, filename):          self._loadConfigFile(filename) -        pass      def _insertKey(self, key, val):          """ diff --git a/cloudinit/sources/helpers/vmware/imc/config_namespace.py b/cloudinit/sources/helpers/vmware/imc/config_namespace.py index 2f29edd4..5899d8f7 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_namespace.py +++ b/cloudinit/sources/helpers/vmware/imc/config_namespace.py @@ -10,6 +10,5 @@ from .config_source import ConfigSource  class ConfigNamespace(ConfigSource):      """Specifies the Config Namespace.""" -    pass  # vi: ts=4 expandtab diff --git a/cloudinit/sources/helpers/vmware/imc/config_nic.py b/cloudinit/sources/helpers/vmware/imc/config_nic.py index 77cbf3b6..3745a262 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_nic.py +++ b/cloudinit/sources/helpers/vmware/imc/config_nic.py @@ -10,6 +10,7 @@ import os  import re  from cloudinit.net.network_state import mask_to_net_prefix +from cloudinit import subp  from cloudinit import util  logger = logging.getLogger(__name__) @@ -73,7 +74,7 @@ class NicConfigurator(object):          The mac address(es) are in the lower case          """          cmd = ['ip', 'addr', 'show'] -        output, _err = util.subp(cmd) +        output, _err = subp.subp(cmd)          sections = re.split(r'\n\d+: ', '\n' + output)[1:]          macPat = r'link/ether (([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2}))' @@ -248,8 +249,8 @@ class NicConfigurator(object):          logger.info('Clearing DHCP leases')          # Ignore the return code 1. -        util.subp(["pkill", "dhclient"], rcs=[0, 1]) -        util.subp(["rm", "-f", "/var/lib/dhcp/*"]) +        subp.subp(["pkill", "dhclient"], rcs=[0, 1]) +        subp.subp(["rm", "-f", "/var/lib/dhcp/*"])      def configure(self, osfamily=None):          """ diff --git a/cloudinit/sources/helpers/vmware/imc/config_passwd.py b/cloudinit/sources/helpers/vmware/imc/config_passwd.py index 8c91fa41..d16a7690 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_passwd.py +++ b/cloudinit/sources/helpers/vmware/imc/config_passwd.py @@ -9,6 +9,7 @@  import logging  import os +from cloudinit import subp  from cloudinit import util  LOG = logging.getLogger(__name__) @@ -56,10 +57,10 @@ class PasswordConfigurator(object):          LOG.info('Expiring password.')          for user in uidUserList:              try: -                util.subp(['passwd', '--expire', user]) -            except util.ProcessExecutionError as e: +                subp.subp(['passwd', '--expire', user]) +            except subp.ProcessExecutionError as e:                  if os.path.exists('/usr/bin/chage'): -                    util.subp(['chage', '-d', '0', user]) +                    subp.subp(['chage', '-d', '0', user])                  else:                      LOG.warning('Failed to expire password for %s with error: '                                  '%s', user, e) diff --git a/cloudinit/sources/helpers/vmware/imc/config_source.py b/cloudinit/sources/helpers/vmware/imc/config_source.py index 2f8ea546..7ec06a9c 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_source.py +++ b/cloudinit/sources/helpers/vmware/imc/config_source.py @@ -8,6 +8,5 @@  class ConfigSource(object):      """Specifies a source for the Config Content.""" -    pass  # vi: ts=4 expandtab diff --git a/cloudinit/sources/helpers/vmware/imc/guestcust_util.py b/cloudinit/sources/helpers/vmware/imc/guestcust_util.py index 3d369d04..d919f693 100644 --- a/cloudinit/sources/helpers/vmware/imc/guestcust_util.py +++ b/cloudinit/sources/helpers/vmware/imc/guestcust_util.py @@ -10,7 +10,7 @@ import os  import re  import time -from cloudinit import util +from cloudinit import subp  from .guestcust_event import GuestCustEventEnum  from .guestcust_state import GuestCustStateEnum @@ -34,7 +34,7 @@ def send_rpc(rpc):      try:          logger.debug("Sending RPC command: %s", rpc) -        (out, err) = util.subp(["vmware-rpctool", rpc], rcs=[0]) +        (out, err) = subp.subp(["vmware-rpctool", rpc], rcs=[0])          # Remove the trailing newline in the output.          if out:              out = out.rstrip() @@ -128,30 +128,46 @@ def get_tools_config(section, key, defaultVal):                    not installed.      """ -    if not util.which('vmware-toolbox-cmd'): +    if not subp.which('vmware-toolbox-cmd'):          logger.debug(              'vmware-toolbox-cmd not installed, returning default value')          return defaultVal -    retValue = defaultVal      cmd = ['vmware-toolbox-cmd', 'config', 'get', section, key]      try: -        (outText, _) = util.subp(cmd) -        m = re.match(r'([^=]+)=(.*)', outText) -        if m: -            retValue = m.group(2).strip() -            logger.debug("Get tools config: [%s] %s = %s", -                         section, key, retValue) -        else: +        (outText, _) = subp.subp(cmd) +    except subp.ProcessExecutionError as e: +        if e.exit_code == 69:              logger.debug( -                "Tools config: [%s] %s is not found, return default value: %s", -                section, key, retValue) -    except util.ProcessExecutionError as e: -        logger.error("Failed running %s[%s]", cmd, e.exit_code) -        logger.exception(e) +                "vmware-toolbox-cmd returned 69 (unavailable) for cmd: %s." +                " Return default value: %s", " ".join(cmd), defaultVal) +        else: +            logger.error("Failed running %s[%s]", cmd, e.exit_code) +            logger.exception(e) +        return defaultVal + +    retValue = defaultVal +    m = re.match(r'([^=]+)=(.*)', outText) +    if m: +        retValue = m.group(2).strip() +        logger.debug("Get tools config: [%s] %s = %s", +                     section, key, retValue) +    else: +        logger.debug( +            "Tools config: [%s] %s is not found, return default value: %s", +            section, key, retValue)      return retValue +# Sets message to the VMX guestinfo.gc.status property to the +# underlying VMware Virtualization Platform. +def set_gc_status(config, gcMsg): +    if config and config.post_gc_status: +        rpc = "info-set guestinfo.gc.status %s" % gcMsg +        return send_rpc(rpc) +    return None + +  # vi: ts=4 expandtab | 
