def test_add_group(self): connection_options = {"username": "******", "password": "******"} data = {"test_var": "test_value"} defaults = inventory.Defaults(data=data, connection_options=connection_options) g1 = inventory.Group(name="g1") g2 = inventory.Group(name="g2", groups=inventory.ParentGroups([g1])) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups([g1, g2])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups, defaults=defaults) g3_connection_options = inventory.ConnectionOptions( extras={"device_type": "cisco_ios"}) inv.groups["g3"] = inventory.Group( name="g3", username="******", connection_options={"netmiko": g3_connection_options}, defaults=defaults, ) assert "g1" in [i.name for i in inv.groups["g2"].groups] assert "g3" in inv.groups assert (inv.groups["g3"].defaults.connection_options.get("username") == "test_user") assert (inv.groups["g3"].defaults.connection_options.get("password") == "test_pass") assert "test_var" in inv.groups["g3"].defaults.data.keys() assert "test_value" == inv.groups["g3"].defaults.data.get("test_var") assert (inv.groups["g3"].connection_options["netmiko"]. extras["device_type"] == "cisco_ios")
def test_remove_group_from_host(self): data = {"var3": "val3"} orig_data = {"var1": "val1"} g1 = inventory.Group(name="g1", data=orig_data) g2 = inventory.Group(name="g2", groups=inventory.ParentGroups([g1])) g3 = inventory.Group(name="g3", groups=inventory.ParentGroups([g2]), data=data) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups([g1, g2, g3])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups) assert "h1" in inv.hosts assert g3 in inv.hosts["h1"].groups assert h1.get("var3") == "val3" g3.data["var3"] = "newval3" assert h1.get("var3", None) == "newval3" h1.groups.remove(g3) assert g3 not in h1.groups assert h1.get("var3", None) is None assert h1.get("var1", None) == "val1" with pytest.raises(ValueError): h1.groups.remove(g3)
def test_add_host(self): data = {"test_var": "test_value"} defaults = inventory.Defaults(data=data) g1 = inventory.Group(name="g1") g2 = inventory.Group(name="g2", groups=inventory.ParentGroups([g1])) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups([g1, g2])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups, defaults=defaults) h3_connection_options = inventory.ConnectionOptions( extras={"device_type": "cisco_ios"}) inv.hosts["h3"] = inventory.Host( name="h3", groups=[g1], platform="TestPlatform", connection_options={"netmiko": h3_connection_options}, defaults=defaults, ) assert "h3" in inv.hosts assert "g1" in [i.name for i in inv.hosts["h3"].groups] assert "test_var" in inv.hosts["h3"].defaults.data.keys() assert inv.hosts["h3"].defaults.data.get("test_var") == "test_value" assert inv.hosts["h3"].platform == "TestPlatform" assert (inv.hosts["h3"].connection_options["netmiko"]. extras["device_type"] == "cisco_ios")
def test_inventory(self): g1 = inventory.Group(name="g1") g2 = inventory.Group(name="g2", groups=inventory.ParentGroups([g1])) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups([g1, g2])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups) assert "h1" in inv.hosts assert "h2" in inv.hosts assert "g1" in inv.groups assert "g2" in inv.groups assert inv.groups["g1"] in inv.hosts["h1"].groups assert inv.groups["g1"] in inv.groups["g2"].groups
def deserialize( cls, name: str, hostname: Optional[str] = None, port: Optional[int] = None, username: Optional[str] = None, password: Optional[str] = None, platform: Optional[str] = None, groups: Optional[List[str]] = None, data: Optional[Dict[str, Any]] = None, connection_options: Optional[Dict[str, ConnectionOptions]] = None, defaults: inventory.Defaults = None, ) -> Dict[str, Any]: parent_groups = inventory.ParentGroups(groups) connection_options = connection_options or {} conn_opts = { k: inventory.ConnectionOptions(**v) for k, v in connection_options.items() } return { "name": name, "hostname": hostname, "port": port, "username": username, "password": password, "platform": platform, "groups": parent_groups, "data": data, "connection_options": conn_opts, "defaults": defaults, }
def test_add_group(self): connection_options = {"username": "******", "password": "******"} data = {"test_var": "test_value"} defaults = inventory.Defaults(data=data, connection_options=connection_options) g1 = inventory.Group(name="g1") g2 = inventory.Group(name="g2", groups=inventory.ParentGroups(["g1"])) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups(["g1", "g2"])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups, defaults=defaults) g3_connection_options = { "netmiko": { "extras": { "device_type": "cisco_ios" } } } inv.add_group(name="g3", username="******", connection_options=g3_connection_options) assert "g1" in [i.name for i in inv.groups["g2"].groups.refs] assert "g3" in inv.groups assert (inv.groups["g3"].defaults.connection_options.get("username") == "test_user") assert (inv.groups["g3"].defaults.connection_options.get("password") == "test_pass") assert "test_var" in inv.groups["g3"].defaults.data.keys() assert "test_value" == inv.groups["g3"].defaults.data.get("test_var") assert (inv.groups["g3"].connection_options["netmiko"]. extras["device_type"] == "cisco_ios") # Test with one undefined parent group with pytest.raises(KeyError): inv.add_group(name="g4", groups=["undefined"]) # Test with one defined and one undefined parent group with pytest.raises(KeyError): inv.add_group(name="g4", groups=["g1", "undefined"])
def test_add_group_to_host_runtime(self): orig_data = {"var1": "val1"} data = {"var3": "val3"} g1 = inventory.Group(name="g1", data=orig_data) g2 = inventory.Group(name="g2", groups=inventory.ParentGroups([g1])) g3 = inventory.Group(name="g3", groups=inventory.ParentGroups([g2]), data=data) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups([g1, g2])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups) assert "h1" in inv.hosts assert g3 not in inv.hosts["h1"].groups assert h1.get("var3", None) is None h1.groups.add(g3) assert g3 in h1.groups assert h1.get("var3", None) == "val3"
def test_add_host(self): data = {"test_var": "test_value"} defaults = inventory.Defaults(data=data) g1 = inventory.Group(name="g1") g2 = inventory.Group(name="g2", groups=inventory.ParentGroups(["g1"])) h1 = inventory.Host(name="h1", groups=inventory.ParentGroups(["g1", "g2"])) h2 = inventory.Host(name="h2") hosts = {"h1": h1, "h2": h2} groups = {"g1": g1, "g2": g2} inv = inventory.Inventory(hosts=hosts, groups=groups, defaults=defaults) h3_connection_options = { "netmiko": { "extras": { "device_type": "cisco_ios" } } } inv.add_host( name="h3", groups=["g1"], platform="TestPlatform", connection_options=h3_connection_options, ) assert "h3" in inv.hosts assert "g1" in [i.name for i in inv.hosts["h3"].groups.refs] assert "test_var" in inv.hosts["h3"].defaults.data.keys() assert inv.hosts["h3"].defaults.data.get("test_var") == "test_value" assert inv.hosts["h3"].platform == "TestPlatform" assert (inv.hosts["h3"].connection_options["netmiko"]. extras["device_type"] == "cisco_ios") with pytest.raises(KeyError): inv.add_host(name="h4", groups=["not_defined"]) # Test with one good and one undefined group with pytest.raises(KeyError): inv.add_host(name="h5", groups=["g1", "not_defined"])