summaryrefslogtreecommitdiff
path: root/cloudinit/distros
diff options
context:
space:
mode:
authorRyan McCabe <rmccabe@redhat.com>2017-06-08 13:24:23 -0400
committerScott Moser <smoser@brickies.net>2017-06-12 12:07:26 -0400
commit67bab5bb804e2346673430868935f6bbcdb88f13 (patch)
tree39fb2663a0659411852e86bd220ea2cfe680fa25 /cloudinit/distros
parentb9cd8a82ee41e235df66801a02b2244226bee5ee (diff)
downloadvyos-cloud-init-67bab5bb804e2346673430868935f6bbcdb88f13.tar.gz
vyos-cloud-init-67bab5bb804e2346673430868935f6bbcdb88f13.zip
net: Allow for NetworkManager configuration
In cases where the config json specifies nameserver entries, if there are interfaces configured to use dhcp, NetworkManager, if enabled, will clobber the /etc/resolv.conf that cloud-init has produced, which can break dns. If there are no interfaces configured to use dhcp, NetworkManager could clobber /etc/resolv.conf with an empty file. This patch adds a mechanism for dropping additional configuration into /etc/NetworkManager/conf.d/ and disables management of /etc/resolv.conf by NetworkManager when nameserver information is provided in the config. LP: #1693251 Signed-off-by: Ryan McCabe <rmccabe@redhat.com>
Diffstat (limited to 'cloudinit/distros')
-rw-r--r--cloudinit/distros/parsers/networkmanager_conf.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/cloudinit/distros/parsers/networkmanager_conf.py b/cloudinit/distros/parsers/networkmanager_conf.py
new file mode 100644
index 00000000..ac51f122
--- /dev/null
+++ b/cloudinit/distros/parsers/networkmanager_conf.py
@@ -0,0 +1,23 @@
+# Copyright (C) 2017 Red Hat, Inc.
+#
+# Author: Ryan McCabe <rmccabe@redhat.com>
+#
+# This file is part of cloud-init. See LICENSE file for license information.
+
+import configobj
+
+# This module is used to set additional NetworkManager configuration
+# in /etc/NetworkManager/conf.d
+#
+
+
+class NetworkManagerConf(configobj.ConfigObj):
+ def __init__(self, contents):
+ configobj.ConfigObj.__init__(self, contents,
+ interpolation=False,
+ write_empty_values=False)
+
+ def set_section_keypair(self, section_name, key, value):
+ if section_name not in self.sections:
+ self.main[section_name] = {}
+ self.main[section_name] = {key: value}