summaryrefslogtreecommitdiff
path: root/cloudinit/sources
diff options
context:
space:
mode:
authorSankar Tanguturi <stanguturi@vmware.com>2016-09-06 14:51:32 -0700
committerScott Moser <smoser@brickies.net>2017-01-17 11:27:07 -0500
commit8ddb57149281ba2658696f19c1eb96e7769381e4 (patch)
treef635d63c960788eafeb2a0a322462c5f5ba7e369 /cloudinit/sources
parente2274393b882c723ab93189c57e7e68a46e4e10f (diff)
downloadvyos-cloud-init-8ddb57149281ba2658696f19c1eb96e7769381e4.tar.gz
vyos-cloud-init-8ddb57149281ba2658696f19c1eb96e7769381e4.zip
Fixed Misc issues related to VMware customization.
- staticIPV4 property can be either None or a valid Array. Need to check for None before accessing the ip address. - Modified few misc. log messages. - Added a new log message while waiting for the customization config file. - Added support to configure the maximum amount of time to wait for the customization config file. - VMware Customization Support is provided only for DataSourceOVF class and not for any other child classes. Implemented a new variable vmware_customization_supported to check whether the 'VMware Customization' support is available for a specific datasource or not. - Changed the function get_vmware_cust_settings to get_max_wait_from_cfg. - Removed the code that does 'ifdown and iup' in NIC configurator.
Diffstat (limited to 'cloudinit/sources')
-rw-r--r--cloudinit/sources/DataSourceOVF.py37
-rw-r--r--cloudinit/sources/helpers/vmware/imc/config_nic.py24
2 files changed, 39 insertions, 22 deletions
diff --git a/cloudinit/sources/DataSourceOVF.py b/cloudinit/sources/DataSourceOVF.py
index 78928c77..d70784ac 100644
--- a/cloudinit/sources/DataSourceOVF.py
+++ b/cloudinit/sources/DataSourceOVF.py
@@ -48,6 +48,7 @@ class DataSourceOVF(sources.DataSource):
self.environment = None
self.cfg = {}
self.supported_seed_starts = ("/", "file://")
+ self.vmware_customization_supported = True
def __str__(self):
root = sources.DataSource.__str__(self)
@@ -78,7 +79,10 @@ class DataSourceOVF(sources.DataSource):
found.append(seed)
elif system_type and 'vmware' in system_type.lower():
LOG.debug("VMware Virtualization Platform found")
- if not util.get_cfg_option_bool(
+ if not self.vmware_customization_supported:
+ LOG.debug("Skipping the check for "
+ "VMware Customization support")
+ elif not util.get_cfg_option_bool(
self.sys_cfg, "disable_vmware_customization", True):
deployPkgPluginPath = search_file("/usr/lib/vmware-tools",
"libdeployPkgPlugin.so")
@@ -90,17 +94,18 @@ class DataSourceOVF(sources.DataSource):
# copies the customization specification file to
# /var/run/vmware-imc directory. cloud-init code needs
# to search for the file in that directory.
+ max_wait = get_max_wait_from_cfg(self.ds_cfg)
vmwareImcConfigFilePath = util.log_time(
logfunc=LOG.debug,
msg="waiting for configuration file",
func=wait_for_imc_cfg_file,
- args=("/var/run/vmware-imc", "cust.cfg"))
+ args=("/var/run/vmware-imc", "cust.cfg", max_wait))
if vmwareImcConfigFilePath:
- LOG.debug("Found VMware DeployPkg Config File at %s" %
+ LOG.debug("Found VMware Customization Config File at %s",
vmwareImcConfigFilePath)
else:
- LOG.debug("Did not find VMware DeployPkg Config File Path")
+ LOG.debug("Did not find VMware Customization Config File")
else:
LOG.debug("Customization for VMware platform is disabled.")
@@ -206,6 +211,29 @@ class DataSourceOVFNet(DataSourceOVF):
DataSourceOVF.__init__(self, sys_cfg, distro, paths)
self.seed_dir = os.path.join(paths.seed_dir, 'ovf-net')
self.supported_seed_starts = ("http://", "https://", "ftp://")
+ self.vmware_customization_supported = False
+
+
+def get_max_wait_from_cfg(cfg):
+ default_max_wait = 90
+ max_wait_cfg_option = 'vmware_cust_file_max_wait'
+ max_wait = default_max_wait
+
+ if not cfg:
+ return max_wait
+
+ try:
+ max_wait = int(cfg.get(max_wait_cfg_option, default_max_wait))
+ except ValueError:
+ LOG.warn("Failed to get '%s', using %s",
+ max_wait_cfg_option, default_max_wait)
+
+ if max_wait <= 0:
+ LOG.warn("Invalid value '%s' for '%s', using '%s' instead",
+ max_wait, max_wait_cfg_option, default_max_wait)
+ max_wait = default_max_wait
+
+ return max_wait
def wait_for_imc_cfg_file(dirpath, filename, maxwait=180, naplen=5):
@@ -215,6 +243,7 @@ def wait_for_imc_cfg_file(dirpath, filename, maxwait=180, naplen=5):
fileFullPath = search_file(dirpath, filename)
if fileFullPath:
return fileFullPath
+ LOG.debug("Waiting for VMware Customization Config File")
time.sleep(naplen)
waited += naplen
return None
diff --git a/cloudinit/sources/helpers/vmware/imc/config_nic.py b/cloudinit/sources/helpers/vmware/imc/config_nic.py
index d5a7c346..67ac21db 100644
--- a/cloudinit/sources/helpers/vmware/imc/config_nic.py
+++ b/cloudinit/sources/helpers/vmware/imc/config_nic.py
@@ -101,7 +101,11 @@ class NicConfigurator(object):
return lines
# Static Ipv4
- v4 = nic.staticIpv4
+ addrs = nic.staticIpv4
+ if not addrs:
+ return lines
+
+ v4 = addrs[0]
if v4.ip:
lines.append(' address %s' % v4.ip)
if v4.netmask:
@@ -197,22 +201,6 @@ class NicConfigurator(object):
util.subp(["pkill", "dhclient"], rcs=[0, 1])
util.subp(["rm", "-f", "/var/lib/dhcp/*"])
- def if_down_up(self):
- names = []
- for nic in self.nics:
- name = self.mac2Name.get(nic.mac.lower())
- names.append(name)
-
- for name in names:
- logger.info('Bring down interface %s' % name)
- util.subp(["ifdown", "%s" % name])
-
- self.clear_dhcp()
-
- for name in names:
- logger.info('Bring up interface %s' % name)
- util.subp(["ifup", "%s" % name])
-
def configure(self):
"""
Configure the /etc/network/intefaces
@@ -232,6 +220,6 @@ class NicConfigurator(object):
for line in lines:
fp.write('%s\n' % line)
- self.if_down_up()
+ self.clear_dhcp()
# vi: ts=4 expandtab