summaryrefslogtreecommitdiff
path: root/cloudinit/sources/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/sources/helpers')
-rw-r--r--cloudinit/sources/helpers/azure.py2
-rw-r--r--cloudinit/sources/helpers/digitalocean.py64
-rw-r--r--cloudinit/sources/helpers/openstack.py2
-rw-r--r--cloudinit/sources/helpers/vmware/imc/config_file.py8
4 files changed, 40 insertions, 36 deletions
diff --git a/cloudinit/sources/helpers/azure.py b/cloudinit/sources/helpers/azure.py
index f32dac9a..6e01aa47 100644
--- a/cloudinit/sources/helpers/azure.py
+++ b/cloudinit/sources/helpers/azure.py
@@ -289,7 +289,7 @@ class WALinuxAgentShim(object):
LOG.debug("Unable to find endpoint in dhclient logs. "
" Falling back to check lease files")
if fallback_lease_file is None:
- LOG.warn("No fallback lease file was specified.")
+ LOG.warning("No fallback lease file was specified.")
value = None
else:
LOG.debug("Looking for endpoint in lease file %s",
diff --git a/cloudinit/sources/helpers/digitalocean.py b/cloudinit/sources/helpers/digitalocean.py
index 72f7bde4..257989e8 100644
--- a/cloudinit/sources/helpers/digitalocean.py
+++ b/cloudinit/sources/helpers/digitalocean.py
@@ -23,11 +23,8 @@ def assign_ipv4_link_local(nic=None):
"""
if not nic:
- for cdev in sorted(cloudnet.get_devicelist()):
- if cloudnet.is_physical(cdev):
- nic = cdev
- LOG.debug("assigned nic '%s' for link-local discovery", nic)
- break
+ nic = get_link_local_nic()
+ LOG.debug("selected interface '%s' for reading metadata", nic)
if not nic:
raise RuntimeError("unable to find interfaces to access the"
@@ -57,6 +54,13 @@ def assign_ipv4_link_local(nic=None):
return nic
+def get_link_local_nic():
+ nics = [f for f in cloudnet.get_devicelist() if cloudnet.is_physical(f)]
+ if not nics:
+ return None
+ return min(nics, key=lambda d: cloudnet.read_sys_net_int(d, 'ifindex'))
+
+
def del_ipv4_link_local(nic=None):
"""Remove the ip4LL address. While this is not necessary, the ip4LL
address is extraneous and confusing to users.
@@ -107,15 +111,12 @@ def convert_network_configuration(config, dns_servers):
}
"""
- def _get_subnet_part(pcfg, nameservers=None):
+ def _get_subnet_part(pcfg):
subpart = {'type': 'static',
'control': 'auto',
'address': pcfg.get('ip_address'),
'gateway': pcfg.get('gateway')}
- if nameservers:
- subpart['dns_nameservers'] = nameservers
-
if ":" in pcfg.get('ip_address'):
subpart['address'] = "{0}/{1}".format(pcfg.get('ip_address'),
pcfg.get('cidr'))
@@ -124,27 +125,31 @@ def convert_network_configuration(config, dns_servers):
return subpart
- all_nics = []
- for k in ('public', 'private'):
- if k in config:
- all_nics.extend(config[k])
-
- macs_to_nics = cloudnet.get_interfaces_by_mac()
nic_configs = []
+ macs_to_nics = cloudnet.get_interfaces_by_mac()
+ LOG.debug("nic mapping: %s", macs_to_nics)
- for nic in all_nics:
+ for n in config:
+ nic = config[n][0]
+ LOG.debug("considering %s", nic)
mac_address = nic.get('mac')
+ if mac_address not in macs_to_nics:
+ raise RuntimeError("Did not find network interface on system "
+ "with mac '%s'. Cannot apply configuration: %s"
+ % (mac_address, nic))
+
sysfs_name = macs_to_nics.get(mac_address)
nic_type = nic.get('type', 'unknown')
- # Note: the entry 'public' above contains a list, but
- # the list will only ever have one nic inside it per digital ocean.
- # If it ever had more than one nic, then this code would
- # assign all 'public' the same name.
- if_name = NIC_MAP.get(nic_type, sysfs_name)
- LOG.debug("mapped %s interface to %s, assigning name of %s",
- mac_address, sysfs_name, if_name)
+ if_name = NIC_MAP.get(nic_type, sysfs_name)
+ if if_name != sysfs_name:
+ LOG.debug("Found %s interface '%s' on '%s', assigned name of '%s'",
+ nic_type, mac_address, sysfs_name, if_name)
+ else:
+ msg = ("Found interface '%s' on '%s', which is not a public "
+ "or private interface. Using default system naming.")
+ LOG.debug(msg, mac_address, sysfs_name)
ncfg = {'type': 'physical',
'mac_address': mac_address,
@@ -157,13 +162,8 @@ def convert_network_configuration(config, dns_servers):
continue
sub_part = _get_subnet_part(raw_subnet)
- if nic_type == 'public' and 'anchor' not in netdef:
- # add DNS resolvers to the public interfaces only
- sub_part = _get_subnet_part(raw_subnet, dns_servers)
- else:
- # remove the gateway any non-public interfaces
- if 'gateway' in sub_part:
- del sub_part['gateway']
+ if netdef in ('private', 'anchor_ipv4', 'anchor_ipv6'):
+ del sub_part['gateway']
subnets.append(sub_part)
@@ -171,6 +171,10 @@ def convert_network_configuration(config, dns_servers):
nic_configs.append(ncfg)
LOG.debug("nic '%s' configuration: %s", if_name, ncfg)
+ if dns_servers:
+ LOG.debug("added dns servers: %s", dns_servers)
+ nic_configs.append({'type': 'nameserver', 'address': dns_servers})
+
return {'version': 1, 'config': nic_configs}
diff --git a/cloudinit/sources/helpers/openstack.py b/cloudinit/sources/helpers/openstack.py
index 61cd36bd..26f3168d 100644
--- a/cloudinit/sources/helpers/openstack.py
+++ b/cloudinit/sources/helpers/openstack.py
@@ -21,7 +21,7 @@ from cloudinit import sources
from cloudinit import url_helper
from cloudinit import util
-# For reference: http://tinyurl.com/laora4c
+# See https://docs.openstack.org/user-guide/cli-config-drive.html
LOG = logging.getLogger(__name__)
diff --git a/cloudinit/sources/helpers/vmware/imc/config_file.py b/cloudinit/sources/helpers/vmware/imc/config_file.py
index 14293f3c..602af078 100644
--- a/cloudinit/sources/helpers/vmware/imc/config_file.py
+++ b/cloudinit/sources/helpers/vmware/imc/config_file.py
@@ -43,9 +43,9 @@ class ConfigFile(ConfigSource, dict):
# "sensitive" settings shall not be logged
if canLog:
- logger.debug("ADDED KEY-VAL :: '%s' = '%s'" % (key, val))
+ logger.debug("ADDED KEY-VAL :: '%s' = '%s'", key, val)
else:
- logger.debug("ADDED KEY-VAL :: '%s' = '*****************'" % key)
+ logger.debug("ADDED KEY-VAL :: '%s' = '*****************'", key)
self[key] = val
@@ -60,7 +60,7 @@ class ConfigFile(ConfigSource, dict):
Keyword arguments:
filename - The full path to the config file.
"""
- logger.info('Parsing the config file %s.' % filename)
+ logger.info('Parsing the config file %s.', filename)
config = configparser.ConfigParser()
config.optionxform = str
@@ -69,7 +69,7 @@ class ConfigFile(ConfigSource, dict):
self.clear()
for category in config.sections():
- logger.debug("FOUND CATEGORY = '%s'" % category)
+ logger.debug("FOUND CATEGORY = '%s'", category)
for (key, value) in config.items(category):
self._insertKey(category + '|' + key, value)