diff options
Diffstat (limited to 'cloudinit/sources/helpers')
8 files changed, 372 insertions, 372 deletions
| diff --git a/cloudinit/sources/helpers/vmware/imc/boot_proto.py b/cloudinit/sources/helpers/vmware/imc/boot_proto.py index 204fbcc4..fb53ec1d 100644 --- a/cloudinit/sources/helpers/vmware/imc/boot_proto.py +++ b/cloudinit/sources/helpers/vmware/imc/boot_proto.py @@ -1,25 +1,25 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2015 Canonical Ltd.
 -#    Copyright (C) 2015 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -
 -class BootProtoEnum(object):
 -    """Specifies the NIC Boot Settings."""
 -
 -    DHCP = 'dhcp'
 -    STATIC = 'static'
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2015 Canonical Ltd. +#    Copyright (C) 2015 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +class BootProtoEnum(object): +    """Specifies the NIC Boot Settings.""" + +    DHCP = 'dhcp' +    STATIC = 'static' diff --git a/cloudinit/sources/helpers/vmware/imc/config.py b/cloudinit/sources/helpers/vmware/imc/config.py index 1dcd053a..d645c497 100644 --- a/cloudinit/sources/helpers/vmware/imc/config.py +++ b/cloudinit/sources/helpers/vmware/imc/config.py @@ -1,95 +1,95 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2015 Canonical Ltd.
 -#    Copyright (C) 2015 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -from .nic import Nic
 -
 -
 -class Config(object):
 -    """
 -    Stores the Contents specified in the Customization
 -    Specification file.
 -    """
 -
 -    DNS = 'DNS|NAMESERVER|'
 -    SUFFIX = 'DNS|SUFFIX|'
 -    PASS = 'PASSWORD|-PASS'
 -    TIMEZONE = 'DATETIME|TIMEZONE'
 -    UTC = 'DATETIME|UTC'
 -    HOSTNAME = 'NETWORK|HOSTNAME'
 -    DOMAINNAME = 'NETWORK|DOMAINNAME'
 -
 -    def __init__(self, configFile):
 -        self._configFile = configFile
 -
 -    @property
 -    def host_name(self):
 -        """Return the hostname."""
 -        return self._configFile.get(Config.HOSTNAME, None)
 -
 -    @property
 -    def domain_name(self):
 -        """Return the domain name."""
 -        return self._configFile.get(Config.DOMAINNAME, None)
 -
 -    @property
 -    def timezone(self):
 -        """Return the timezone."""
 -        return self._configFile.get(Config.TIMEZONE, None)
 -
 -    @property
 -    def utc(self):
 -        """Retrieves whether to set time to UTC or Local."""
 -        return self._configFile.get(Config.UTC, None)
 -
 -    @property
 -    def admin_password(self):
 -        """Return the root password to be set."""
 -        return self._configFile.get(Config.PASS, None)
 -
 -    @property
 -    def name_servers(self):
 -        """Return the list of DNS servers."""
 -        res = []
 -        cnt = self._configFile.get_count_with_prefix(Config.DNS)
 -        for i in range(1, cnt + 1):
 -            key = Config.DNS + str(i)
 -            res.append(self._configFile[key])
 -
 -        return res
 -
 -    @property
 -    def dns_suffixes(self):
 -        """Return the list of DNS Suffixes."""
 -        res = []
 -        cnt = self._configFile.get_count_with_prefix(Config.SUFFIX)
 -        for i in range(1, cnt + 1):
 -            key = Config.SUFFIX + str(i)
 -            res.append(self._configFile[key])
 -
 -        return res
 -
 -    @property
 -    def nics(self):
 -        """Return the list of associated NICs."""
 -        res = []
 -        nics = self._configFile['NIC-CONFIG|NICS']
 -        for nic in nics.split(','):
 -            res.append(Nic(nic, self._configFile))
 -
 -        return res
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2015 Canonical Ltd. +#    Copyright (C) 2015 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + +from .nic import Nic + + +class Config(object): +    """ +    Stores the Contents specified in the Customization +    Specification file. +    """ + +    DNS = 'DNS|NAMESERVER|' +    SUFFIX = 'DNS|SUFFIX|' +    PASS = 'PASSWORD|-PASS' +    TIMEZONE = 'DATETIME|TIMEZONE' +    UTC = 'DATETIME|UTC' +    HOSTNAME = 'NETWORK|HOSTNAME' +    DOMAINNAME = 'NETWORK|DOMAINNAME' + +    def __init__(self, configFile): +        self._configFile = configFile + +    @property +    def host_name(self): +        """Return the hostname.""" +        return self._configFile.get(Config.HOSTNAME, None) + +    @property +    def domain_name(self): +        """Return the domain name.""" +        return self._configFile.get(Config.DOMAINNAME, None) + +    @property +    def timezone(self): +        """Return the timezone.""" +        return self._configFile.get(Config.TIMEZONE, None) + +    @property +    def utc(self): +        """Retrieves whether to set time to UTC or Local.""" +        return self._configFile.get(Config.UTC, None) + +    @property +    def admin_password(self): +        """Return the root password to be set.""" +        return self._configFile.get(Config.PASS, None) + +    @property +    def name_servers(self): +        """Return the list of DNS servers.""" +        res = [] +        cnt = self._configFile.get_count_with_prefix(Config.DNS) +        for i in range(1, cnt + 1): +            key = Config.DNS + str(i) +            res.append(self._configFile[key]) + +        return res + +    @property +    def dns_suffixes(self): +        """Return the list of DNS Suffixes.""" +        res = [] +        cnt = self._configFile.get_count_with_prefix(Config.SUFFIX) +        for i in range(1, cnt + 1): +            key = Config.SUFFIX + str(i) +            res.append(self._configFile[key]) + +        return res + +    @property +    def nics(self): +        """Return the list of associated NICs.""" +        res = [] +        nics = self._configFile['NIC-CONFIG|NICS'] +        for nic in nics.split(','): +            res.append(Nic(nic, self._configFile)) + +        return res diff --git a/cloudinit/sources/helpers/vmware/imc/config_namespace.py b/cloudinit/sources/helpers/vmware/imc/config_namespace.py index 7266b699..b28830f5 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_namespace.py +++ b/cloudinit/sources/helpers/vmware/imc/config_namespace.py @@ -1,25 +1,25 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2015 Canonical Ltd.
 -#    Copyright (C) 2015 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -from .config_source import ConfigSource
 -
 -
 -class ConfigNamespace(ConfigSource):
 -    """Specifies the Config Namespace."""
 -    pass
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2015 Canonical Ltd. +#    Copyright (C) 2015 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + +from .config_source import ConfigSource + + +class ConfigNamespace(ConfigSource): +    """Specifies the Config Namespace.""" +    pass diff --git a/cloudinit/sources/helpers/vmware/imc/config_source.py b/cloudinit/sources/helpers/vmware/imc/config_source.py index 8a650871..28ef306a 100644 --- a/cloudinit/sources/helpers/vmware/imc/config_source.py +++ b/cloudinit/sources/helpers/vmware/imc/config_source.py @@ -1,23 +1,23 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2015 Canonical Ltd.
 -#    Copyright (C) 2015 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -
 -class ConfigSource(object):
 -    """Specifies a source for the Config Content."""
 -    pass
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2015 Canonical Ltd. +#    Copyright (C) 2015 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +class ConfigSource(object): +    """Specifies a source for the Config Content.""" +    pass diff --git a/cloudinit/sources/helpers/vmware/imc/guestcust_error.py b/cloudinit/sources/helpers/vmware/imc/guestcust_error.py index 750be1e3..d1546852 100644 --- a/cloudinit/sources/helpers/vmware/imc/guestcust_error.py +++ b/cloudinit/sources/helpers/vmware/imc/guestcust_error.py @@ -1,24 +1,24 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2016 Canonical Ltd.
 -#    Copyright (C) 2016 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -
 -class GuestCustErrorEnum(object):
 -    """Specifies different errors of Guest Customization engine"""
 -
 -    GUESTCUST_ERROR_SUCCESS = 0
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2016 Canonical Ltd. +#    Copyright (C) 2016 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +class GuestCustErrorEnum(object): +    """Specifies different errors of Guest Customization engine""" + +    GUESTCUST_ERROR_SUCCESS = 0 diff --git a/cloudinit/sources/helpers/vmware/imc/guestcust_event.py b/cloudinit/sources/helpers/vmware/imc/guestcust_event.py index e13b791d..ce90c898 100644 --- a/cloudinit/sources/helpers/vmware/imc/guestcust_event.py +++ b/cloudinit/sources/helpers/vmware/imc/guestcust_event.py @@ -1,27 +1,27 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2016 Canonical Ltd.
 -#    Copyright (C) 2016 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -
 -class GuestCustEventEnum(object):
 -    """Specifies different types of Guest Customization Events"""
 -
 -    GUESTCUST_EVENT_CUSTOMIZE_FAILED = 100
 -    GUESTCUST_EVENT_NETWORK_SETUP_FAILED = 101
 -    GUESTCUST_EVENT_ENABLE_NICS = 103
 -    GUESTCUST_EVENT_QUERY_NICS = 104
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2016 Canonical Ltd. +#    Copyright (C) 2016 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +class GuestCustEventEnum(object): +    """Specifies different types of Guest Customization Events""" + +    GUESTCUST_EVENT_CUSTOMIZE_FAILED = 100 +    GUESTCUST_EVENT_NETWORK_SETUP_FAILED = 101 +    GUESTCUST_EVENT_ENABLE_NICS = 103 +    GUESTCUST_EVENT_QUERY_NICS = 104 diff --git a/cloudinit/sources/helpers/vmware/imc/guestcust_state.py b/cloudinit/sources/helpers/vmware/imc/guestcust_state.py index b9ddf513..422a096d 100644 --- a/cloudinit/sources/helpers/vmware/imc/guestcust_state.py +++ b/cloudinit/sources/helpers/vmware/imc/guestcust_state.py @@ -1,25 +1,25 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2016 Canonical Ltd.
 -#    Copyright (C) 2016 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -
 -class GuestCustStateEnum(object):
 -    """Specifies different states of Guest Customization engine"""
 -
 -    GUESTCUST_STATE_RUNNING = 4
 -    GUESTCUST_STATE_DONE = 5
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2016 Canonical Ltd. +#    Copyright (C) 2016 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +class GuestCustStateEnum(object): +    """Specifies different states of Guest Customization engine""" + +    GUESTCUST_STATE_RUNNING = 4 +    GUESTCUST_STATE_DONE = 5 diff --git a/cloudinit/sources/helpers/vmware/imc/guestcust_util.py b/cloudinit/sources/helpers/vmware/imc/guestcust_util.py index 020ab613..c07c5949 100644 --- a/cloudinit/sources/helpers/vmware/imc/guestcust_util.py +++ b/cloudinit/sources/helpers/vmware/imc/guestcust_util.py @@ -1,128 +1,128 @@ -# vi: ts=4 expandtab
 -#
 -#    Copyright (C) 2016 Canonical Ltd.
 -#    Copyright (C) 2016 VMware Inc.
 -#
 -#    Author: Sankar Tanguturi <stanguturi@vmware.com>
 -#
 -#    This program is free software: you can redistribute it and/or modify
 -#    it under the terms of the GNU General Public License version 3, as
 -#    published by the Free Software Foundation.
 -#
 -#    This program is distributed in the hope that it will be useful,
 -#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -#    GNU General Public License for more details.
 -#
 -#    You should have received a copy of the GNU General Public License
 -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -
 -import logging
 -import os
 -import time
 -
 -from cloudinit import util
 -
 -from .guestcust_event import GuestCustEventEnum
 -from .guestcust_state import GuestCustStateEnum
 -
 -logger = logging.getLogger(__name__)
 -
 -
 -CLOUDINIT_LOG_FILE = "/var/log/cloud-init.log"
 -QUERY_NICS_SUPPORTED = "queryNicsSupported"
 -NICS_STATUS_CONNECTED = "connected"
 -
 -
 -# This will send a RPC command to the underlying
 -# VMware Virtualization Platform.
 -def send_rpc(rpc):
 -    if not rpc:
 -        return None
 -
 -    out = ""
 -    err = "Error sending the RPC command"
 -
 -    try:
 -        logger.debug("Sending RPC command: %s", rpc)
 -        (out, err) = util.subp(["vmware-rpctool", rpc], rcs=[0])
 -        # Remove the trailing newline in the output.
 -        if out:
 -            out = out.rstrip()
 -    except Exception as e:
 -        logger.debug("Failed to send RPC command")
 -        logger.exception(e)
 -
 -    return (out, err)
 -
 -
 -# This will send the customization status to the
 -# underlying VMware Virtualization Platform.
 -def set_customization_status(custstate, custerror, errormessage=None):
 -    message = ""
 -
 -    if errormessage:
 -        message = CLOUDINIT_LOG_FILE + "@" + errormessage
 -    else:
 -        message = CLOUDINIT_LOG_FILE
 -
 -    rpc = "deployPkg.update.state %d %d %s" % (custstate, custerror, message)
 -    (out, err) = send_rpc(rpc)
 -    return (out, err)
 -
 -
 -# This will read the file nics.txt in the specified directory
 -# and return the content
 -def get_nics_to_enable(dirpath):
 -    if not dirpath:
 -        return None
 -
 -    NICS_SIZE = 1024
 -    nicsfilepath = os.path.join(dirpath, "nics.txt")
 -    if not os.path.exists(nicsfilepath):
 -        return None
 -
 -    with open(nicsfilepath, 'r') as fp:
 -        nics = fp.read(NICS_SIZE)
 -
 -    return nics
 -
 -
 -# This will send a RPC command to the underlying VMware Virtualization platform
 -# and enable nics.
 -def enable_nics(nics):
 -    if not nics:
 -        logger.warning("No Nics found")
 -        return
 -
 -    enableNicsWaitRetries = 5
 -    enableNicsWaitCount = 5
 -    enableNicsWaitSeconds = 1
 -
 -    for attempt in range(0, enableNicsWaitRetries):
 -        logger.debug("Trying to connect interfaces, attempt %d", attempt)
 -        (out, err) = set_customization_status(
 -            GuestCustStateEnum.GUESTCUST_STATE_RUNNING,
 -            GuestCustEventEnum.GUESTCUST_EVENT_ENABLE_NICS,
 -            nics)
 -        if not out:
 -            time.sleep(enableNicsWaitCount * enableNicsWaitSeconds)
 -            continue
 -
 -        if out != QUERY_NICS_SUPPORTED:
 -            logger.warning("NICS connection status query is not supported")
 -            return
 -
 -        for count in range(0, enableNicsWaitCount):
 -            (out, err) = set_customization_status(
 -                GuestCustStateEnum.GUESTCUST_STATE_RUNNING,
 -                GuestCustEventEnum.GUESTCUST_EVENT_QUERY_NICS,
 -                nics)
 -            if out and out == NICS_STATUS_CONNECTED:
 -                logger.info("NICS are connected on %d second", count)
 -                return
 -
 -            time.sleep(enableNicsWaitSeconds)
 -
 -    logger.warning("Can't connect network interfaces after %d attempts",
 -                   enableNicsWaitRetries)
 +# vi: ts=4 expandtab +# +#    Copyright (C) 2016 Canonical Ltd. +#    Copyright (C) 2016 VMware Inc. +# +#    Author: Sankar Tanguturi <stanguturi@vmware.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + +import logging +import os +import time + +from cloudinit import util + +from .guestcust_event import GuestCustEventEnum +from .guestcust_state import GuestCustStateEnum + +logger = logging.getLogger(__name__) + + +CLOUDINIT_LOG_FILE = "/var/log/cloud-init.log" +QUERY_NICS_SUPPORTED = "queryNicsSupported" +NICS_STATUS_CONNECTED = "connected" + + +# This will send a RPC command to the underlying +# VMware Virtualization Platform. +def send_rpc(rpc): +    if not rpc: +        return None + +    out = "" +    err = "Error sending the RPC command" + +    try: +        logger.debug("Sending RPC command: %s", rpc) +        (out, err) = util.subp(["vmware-rpctool", rpc], rcs=[0]) +        # Remove the trailing newline in the output. +        if out: +            out = out.rstrip() +    except Exception as e: +        logger.debug("Failed to send RPC command") +        logger.exception(e) + +    return (out, err) + + +# This will send the customization status to the +# underlying VMware Virtualization Platform. +def set_customization_status(custstate, custerror, errormessage=None): +    message = "" + +    if errormessage: +        message = CLOUDINIT_LOG_FILE + "@" + errormessage +    else: +        message = CLOUDINIT_LOG_FILE + +    rpc = "deployPkg.update.state %d %d %s" % (custstate, custerror, message) +    (out, err) = send_rpc(rpc) +    return (out, err) + + +# This will read the file nics.txt in the specified directory +# and return the content +def get_nics_to_enable(dirpath): +    if not dirpath: +        return None + +    NICS_SIZE = 1024 +    nicsfilepath = os.path.join(dirpath, "nics.txt") +    if not os.path.exists(nicsfilepath): +        return None + +    with open(nicsfilepath, 'r') as fp: +        nics = fp.read(NICS_SIZE) + +    return nics + + +# This will send a RPC command to the underlying VMware Virtualization platform +# and enable nics. +def enable_nics(nics): +    if not nics: +        logger.warning("No Nics found") +        return + +    enableNicsWaitRetries = 5 +    enableNicsWaitCount = 5 +    enableNicsWaitSeconds = 1 + +    for attempt in range(0, enableNicsWaitRetries): +        logger.debug("Trying to connect interfaces, attempt %d", attempt) +        (out, err) = set_customization_status( +            GuestCustStateEnum.GUESTCUST_STATE_RUNNING, +            GuestCustEventEnum.GUESTCUST_EVENT_ENABLE_NICS, +            nics) +        if not out: +            time.sleep(enableNicsWaitCount * enableNicsWaitSeconds) +            continue + +        if out != QUERY_NICS_SUPPORTED: +            logger.warning("NICS connection status query is not supported") +            return + +        for count in range(0, enableNicsWaitCount): +            (out, err) = set_customization_status( +                GuestCustStateEnum.GUESTCUST_STATE_RUNNING, +                GuestCustEventEnum.GUESTCUST_EVENT_QUERY_NICS, +                nics) +            if out and out == NICS_STATUS_CONNECTED: +                logger.info("NICS are connected on %d second", count) +                return + +            time.sleep(enableNicsWaitSeconds) + +    logger.warning("Can't connect network interfaces after %d attempts", +                   enableNicsWaitRetries) | 
