1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

lib: addon: translate aliases to attribute name (fixes #133)

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2020-02-07 13:40:31 +01:00
parent 7050c6fc73
commit 09a6a3fd46
2 changed files with 42 additions and 0 deletions

View File

@@ -10,6 +10,7 @@
import re
import os
import logging
import itertools
import traceback
import pprint
@@ -1484,8 +1485,21 @@ class ifupdownMain:
# continue reading
pass
def _schedule_addon_translate(self):
merged_ifaceobjs = list(itertools.chain.from_iterable(self.ifaceobjdict.values()))
for addon in self.modules.values():
try:
addon.translate(merged_ifaceobjs)
except AttributeError:
pass
def _sched_ifaces(self, ifacenames, ops, skipupperifaces=False,
followdependents=True, sort=False):
self._schedule_addon_translate()
self.logger.debug('scheduling \'%s\' for %s'
%(str(ops), str(ifacenames)))
self._pretty_print_ordered_dict('dependency graph',

View File

@@ -24,6 +24,8 @@
import logging
from collections import OrderedDict
try:
from ifupdown2.lib.io import IO
from ifupdown2.lib.sysfs import Sysfs
@@ -52,3 +54,29 @@ class Addon(Netlink, Cache):
self.sysfs = Sysfs
self.iproute2 = IPRoute2()
self.requirements = Requirements()
self.__alias_to_attribute = {}
for attribute_name, attribute_object in self.__get_modinfo().get("attrs", {}).items():
for alias in attribute_object.get("aliases", []):
self.__alias_to_attribute[alias] = attribute_name
def __get_modinfo(self) -> dict:
try:
return self._modinfo
except AttributeError:
return {}
def translate(self, ifaceobjs):
"""
Replace attribute aliases from user configuration with real attribute name
"""
for ifaceobj in ifaceobjs:
ifaceobj.config = OrderedDict(
[
(self.__alias_to_attribute[user_attr], user_value)
if user_attr in self.__alias_to_attribute
else (user_attr, user_value)
for user_attr, user_value in ifaceobj.config.items()
]
)