blob: 41457a1eb7797b7d16440b3e36e0c8a9ff0b482b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# Copyright (C) 2024 VyOS Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later 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/>.
# This module is used to cleanup ifupdown config that may be left by Cloud-init after its initialization.
# This must be done during each boot to avoid interferring with VyOS CLI config.
import logging
from pathlib import Path
from subprocess import run, DEVNULL
from cloudinit.settings import PER_ALWAYS
LOG = logging.getLogger(__name__)
frequency = PER_ALWAYS
# cleanup network interface config file added by cloud-init
def network_cleanup() -> None:
LOG.debug("Cleaning up network configuration applied by Cloud-Init")
net_config_file = Path("/etc/network/interfaces.d/50-cloud-init")
if net_config_file.exists():
LOG.debug(f"Configuration file {net_config_file} was found")
try:
# get a list of interfaces that need to be deconfigured
configured_ifaces: list[str] = (
run(
["ifquery", "-l", "-X", "lo", "-i", net_config_file],
capture_output=True,
)
.stdout.decode()
.splitlines()
)
if configured_ifaces:
for iface in configured_ifaces:
LOG.debug(f"Deconfiguring interface: {iface}")
run(["ifdown", iface], stdout=DEVNULL)
# delete the file
net_config_file.unlink()
LOG.debug(f"Configuration file {net_config_file} was removed")
except Exception as err:
LOG.error(f"Failed to cleanup network configuration: {err}")
udev_rules_file = Path("/etc/udev/rules.d/70-persistent-net.rules")
if udev_rules_file.exists():
LOG.debug(f"Configuration file {udev_rules_file} was removed")
udev_rules_file.unlink()
def handle(*args) -> None:
LOG.debug('Running "cc_vyos_ifupdown" module')
network_cleanup()
|