diff --git a/nornir/core/inventory.py b/nornir/core/inventory.py index ba0e98f9..a296bb08 100644 --- a/nornir/core/inventory.py +++ b/nornir/core/inventory.py @@ -304,11 +304,23 @@ def __init__( self.defaults = defaults or {} - self.groups = groups or {} - for n, g in self.groups.items(): - if isinstance(g, dict): - g = Group(name=n, nornir=nornir, **g) - self.groups[n] = g + self.groups: Dict[str, Group] = {} + if groups is not None: + for group_name, group_details in groups.items(): + if group_details is None: + group = Group(name=group_name, nornir=nornir) + elif isinstance(group_details, dict): + group = Group(name=group_name, nornir=nornir, **group_details) + elif isinstance(group_details, Group): + group = group_details + else: + raise ValueError( + f"Parsing group {group_name}: " + f"expected dict or Group object, " + f"got {type(group_details)} instead" + ) + + self.groups[group_name] = group for group in self.groups.values(): group.groups = self._resolve_groups(group.groups) diff --git a/tests/core/test_inventory.py b/tests/core/test_inventory.py index 9387ed18..e4ab5e12 100644 --- a/tests/core/test_inventory.py +++ b/tests/core/test_inventory.py @@ -246,6 +246,7 @@ def test_to_dict(self): "groups": ["parent_group"], }, "group_2": {"name": "group_2", "site": "site2"}, + "empty_group": {"name": "empty_group"}, }, } assert inventory.filter(role="www").to_dict() == expected diff --git a/tests/inventory_data/groups.yaml b/tests/inventory_data/groups.yaml index fc8b14ae..b05fc9ed 100644 --- a/tests/inventory_data/groups.yaml +++ b/tests/inventory_data/groups.yaml @@ -17,3 +17,5 @@ group_1: group_2: site: site2 + +empty_group: