diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-06-20 17:10:45 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2016-06-20 17:10:45 -0400 |
commit | e6b594bf2bf4cd40bbfbe9581c2b62f3b77e9123 (patch) | |
tree | c67eaf601903947d866fe5d2bfdc9e8078927f4d | |
parent | 776b0cfe847f531d8d5a235f52673c3da1f06064 (diff) | |
parent | 4fc10ef3f349e6280e2002d980c4c63e6a741d2f (diff) | |
download | vyos-cloud-init-e6b594bf2bf4cd40bbfbe9581c2b62f3b77e9123.tar.gz vyos-cloud-init-e6b594bf2bf4cd40bbfbe9581c2b62f3b77e9123.zip |
do not render systemd.link files
When fixing bug 1579130, we made cloud-init rename devices itself,
rather than relying on the systemd.link files to do that.
That was necessary to
- rename devices in a container
- rename devices on first boot or in any situation when the
link files in the initramfs were stale.
However, cloud-init was still writing .link files like:
/etc/systemd/network/50-cloud-init-ens2.link
That leads to just a confusing situation as cloud-init will trump
any renaming systemd does in all cases.
Also added here is a header into the rendered ENI file:
/etc/network/interfaces.d/50-cloud-init.cfg
that describes how to disable cloud-init networking.
LP: #1594546
-rw-r--r-- | cloudinit/distros/debian.py | 10 | ||||
-rw-r--r-- | cloudinit/net/__init__.py | 5 | ||||
-rw-r--r-- | cloudinit/net/eni.py | 4 |
3 files changed, 17 insertions, 2 deletions
diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py index 53f3aa4d..5ae9a509 100644 --- a/cloudinit/distros/debian.py +++ b/cloudinit/distros/debian.py @@ -43,6 +43,13 @@ APT_GET_WRAPPER = { 'enabled': 'auto', } +ENI_HEADER = """# This file is generated from information provided by +# the datasource. Changes to it will not persist across an instance. +# To disable cloud-init's network configuration capabilities, write a file +# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: +# network: {config: disabled} +""" + class Distro(distros.Distro): hostname_conf_fn = "/etc/hostname" @@ -59,7 +66,8 @@ class Distro(distros.Distro): self.osfamily = 'debian' self._net_renderer = eni.Renderer({ 'eni_path': self.network_conf_fn, - 'links_prefix_path': self.links_prefix, + 'eni_header': ENI_HEADER, + 'links_prefix_path': None, 'netrules_path': None, }) diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py index 6959ad34..63e54f91 100644 --- a/cloudinit/net/__init__.py +++ b/cloudinit/net/__init__.py @@ -237,6 +237,11 @@ def _get_current_rename_info(check_downable=True): def _rename_interfaces(renames, strict_present=True, strict_busy=True, current_info=None): + + if not len(renames): + LOG.debug("no interfaces to rename") + return + if current_info is None: current_info = _get_current_rename_info() diff --git a/cloudinit/net/eni.py b/cloudinit/net/eni.py index ccd16ba7..e5ed10fd 100644 --- a/cloudinit/net/eni.py +++ b/cloudinit/net/eni.py @@ -303,6 +303,7 @@ class Renderer(renderer.Renderer): if not config: config = {} self.eni_path = config.get('eni_path', 'etc/network/interfaces') + self.eni_header = config.get('eni_header', None) self.links_path_prefix = config.get( 'links_path_prefix', 'etc/systemd/network/50-cloud-init-') self.netrules_path = config.get( @@ -417,7 +418,8 @@ class Renderer(renderer.Renderer): def render_network_state(self, target, network_state): fpeni = os.path.join(target, self.eni_path) util.ensure_dir(os.path.dirname(fpeni)) - util.write_file(fpeni, self._render_interfaces(network_state)) + header = self.eni_header if self.eni_header else "" + util.write_file(fpeni, header + self._render_interfaces(network_state)) if self.netrules_path: netrules = os.path.join(target, self.netrules_path) |