diff --git a/module_utils/network_lsr/argument_validator.py b/module_utils/network_lsr/argument_validator.py index 38169d2..f52488b 100644 --- a/module_utils/network_lsr/argument_validator.py +++ b/module_utils/network_lsr/argument_validator.py @@ -337,11 +337,14 @@ class ArgValidatorDict(ArgValidator): default_value=None, all_missing_during_validate=False, ): - ArgValidator.__init__(self, name, required, default_value) if nested is not None: - self.nested = dict([(v.name, v) for v in nested]) + nested = dict([(v.name, v) for v in nested]) else: - self.nested = {} + nested = {} + if default_value is ArgValidator.DEFAULT: + default_value = self.generate_default + ArgValidator.__init__(self, name, required, default_value) + self.nested = nested self.all_missing_during_validate = all_missing_during_validate def _validate_impl(self, value, name): @@ -378,6 +381,18 @@ class ArgValidatorDict(ArgValidator): result[setting] = default return result + @staticmethod + def generate_default_from_nested(nested): + result = {} + for name, validator in nested.items(): + default = validator.get_default_value() + if default is not ArgValidator.MISSING: + result[name] = default + return result + + def generate_default(self): + return ArgValidatorDict.generate_default_from_nested(self.nested) + class ArgValidatorList(ArgValidator): def __init__(self, name, nested, default_value=None):