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:
@@ -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',
|
||||
|
@@ -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()
|
||||
]
|
||||
)
|
||||
|
Reference in New Issue
Block a user