def test_translate_attrs_for_netbox_vlan_no(netbox_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans="no", backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({
        "switchport_mode":
        "TRUNK",
        "mode":
        "TRUNK",
        "allowed_vlans": ["HQ__111", "HQ__100"]
    })
    assert_baseline
    assert "tagged_vlans" not in params
    assert "untagged_vlan" not in params

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS",
        "access_vlan": "HQ__111"
    })
    assert_baseline
    assert "tagged_vlans" not in params
    assert "untagged_vlan" not in params
Exemple #2
0
def test_translate_attrs_for_nautobot_lag_member(nautobot_api_base):

    parent = NautobotInterface(
        device_name="HQ-CORE-SW01",
        name="ge-0/0/4",
        remote_id="ea085648-5684-4362-a8dd-edfa151faaec")
    nautobot_api_base.add(parent)

    config.load(config_data=dict(
        main=dict(import_vlans=False, backend="nautobot")))
    intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    nautobot_api_base.add(intf)

    params = intf.translate_attrs_for_nautobot({
        "is_lag_member":
        True,
        "parent":
        "HQ-CORE-SW01__ge-0/0/4"
    })
    assert_baseline
    assert "lag" in params
    assert params["lag"] == "ea085648-5684-4362-a8dd-edfa151faaec"

    params = intf.translate_attrs_for_nautobot({
        "is_lag_member":
        False,
        "parent":
        "HQ-CORE-SW01__ge-0/0/4"
    })
    assert_baseline
    assert "lag" in params
    assert params["lag"] is None
def test_translate_attrs_for_netbox_type(netbox_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({
        "is_lag": True,
        "is_virtual": True
    })
    assert_baseline
    assert params["type"] == "lag"

    params = intf.translate_attrs_for_netbox({
        "is_lag": False,
        "is_virtual": True
    })
    assert_baseline
    assert params["type"] == "virtual"

    params = intf.translate_attrs_for_netbox({
        "is_lag": False,
        "is_virtual": False
    })
    assert_baseline
    assert params["type"] == "other"
def test_translate_attrs_for_netbox_lag_member(netbox_api_base):

    parent = NetboxInterface(device_name="HQ-CORE-SW01",
                             name="ge-0/0/4",
                             remote_id=50)
    netbox_api_base.add(parent)

    config.load(config_data=dict(
        main=dict(import_vlans=False, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({
        "is_lag_member": True,
        "parent": "HQ-CORE-SW01__ge-0/0/4"
    })
    assert_baseline
    assert "lag" in params
    assert params["lag"] == 50

    params = intf.translate_attrs_for_netbox({
        "is_lag_member": False,
        "parent": "HQ-CORE-SW01__ge-0/0/4"
    })
    assert_baseline
    assert "lag" in params
    assert params["lag"] is None
def test_cleanup_port(nornir):
    """Validate that we are cleaning up the port from port name."""
    config.load(config_data=dict(main=dict(backend="nautobot"),
                                 network=dict(fqdns=["test.com"])))

    neighbors = Neighbors()
    neighbors.neighbors["intfa"].append(
        Neighbor(hostname="devicea", port="HundredGigE0/0/0/0"))
    neighbors.neighbors["intfb"].append(
        Neighbor(hostname="deviceb", port="TenGigE0/0/0/35/3"))
    neighbors.neighbors["intfc"].append(
        Neighbor(hostname="devicec", port="Xe-0/1/2"))
    neighbors.neighbors["intfd"].append(
        Neighbor(hostname="deviced", port="Ge-0/1/3.400"))
    neighbors.neighbors["intfe"].append(
        Neighbor(hostname="devicee", port="Eth2/10"))
    neighbors.neighbors["intff"].append(
        Neighbor(hostname="deviced", port="Xle-0/1/3:400"))

    results = (nornir.filter(name="houston").with_processors(
        [GetNeighbors()]).run(task=dispatch_get_neighbors,
                              neighbors=neighbors.dict()))

    result = results["houston"][0].result[0].result
    assert "neighbors" in result
    assert result["neighbors"]["intfa"][0]["port"] == "HundredGigE0/0/0/0"
    assert result["neighbors"]["intfb"][0]["port"] == "TenGigE0/0/0/35/3"
    assert result["neighbors"]["intfc"][0]["port"] == "xe-0/1/2"
    assert result["neighbors"]["intfd"][0]["port"] == "ge-0/1/3.400"
    assert result["neighbors"]["intfe"][0]["port"] == "Eth2/10"
    assert result["neighbors"]["intff"][0]["port"] == "xle-0/1/3:400"
Exemple #6
0
def test_load_batfish_intf_no_import_vlans_lag_members(network_importer_base, site_sfo, dev_spine1):

    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)

    config.load(config_data=dict(main=dict(import_vlans=False, backend="nautobot")))
    intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=LAG_MEMBER_1)

    assert isinstance(intf, Interface)
    assert intf.access_vlan is None
    assert intf.allowed_vlans == []
Exemple #7
0
def test_add_batfish_interface_intf_serial(network_importer_base, site_sfo, dev_spine1):

    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)

    config.load(config_data=dict(main=dict(backend="nautobot")))

    intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=SERIAL_1)

    assert isinstance(intf, Interface)
    assert not intf.is_virtual
    assert not intf.is_lag
    assert not intf.is_lag_member
Exemple #8
0
def test_load_batfish_interface_intf_lag(network_importer_base, site_sfo, dev_spine1):

    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)

    config.load(config_data=dict(main=dict(backend="nautobot")))

    intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=LAG_1)

    assert isinstance(intf, Interface)
    assert not intf.is_virtual
    assert intf.is_lag
    assert not intf.is_lag_member
    assert intf.allowed_vlans == ["sfo__10", "sfo__11", "sfo__12", "sfo__40"]
def test_translate_attrs_for_netbox_no_attrs(netbox_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({})

    assert sorted(list(
        params.keys())) == ["description", "device", "lag", "name", "type"]
    assert params["name"] == "ge-0/0/0"
    assert params["device"] == 29
    assert params["type"] == "other"
    assert params["lag"] is None
    assert params["description"] == ""
Exemple #10
0
def test_translate_attrs_for_nautobot_no_attrs(nautobot_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="nautobot")))
    intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    nautobot_api_base.add(intf)

    params = intf.translate_attrs_for_nautobot({})

    assert sorted(list(
        params.keys())) == ["description", "device", "lag", "name", "type"]
    assert params["name"] == "ge-0/0/0"
    assert params["device"] == "e0633a07-c3e2-41b0-a1df-4627392acf0a"
    assert params["type"] == "other"
    assert params["lag"] is None
    assert params["description"] == ""
Exemple #11
0
def test_load_batfish_interface_description(network_importer_base, site_sfo, dev_spine1):
    """Check if the description is properly processed and stripped of whitespaces."""
    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)

    config.load(config_data=dict(main=dict(backend="nautobot")))

    data = LOOPBACK_1
    data["description"] = "  intf1 description  "

    intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=data)

    assert isinstance(intf, Interface)
    assert intf.is_virtual
    assert intf.description == "intf1 description"
def test_base(nornir):
    """Validate that the processor is working as expected with standard inputs."""
    config.load(config_data=dict(main=dict(backend="nautobot")))

    neighbors = Neighbors()
    neighbors.neighbors["intfa"].append(
        Neighbor(hostname="devicea", port="intfa"))
    neighbors.neighbors["intfb"].append(
        Neighbor(hostname="deviceb", port="intfa"))

    results = (nornir.filter(name="houston").with_processors(
        [GetNeighbors()]).run(task=dispatch_get_neighbors,
                              neighbors=neighbors.dict()))

    result = results["houston"][0].result[0].result
    assert "neighbors" in result
    assert "intfa" in result["neighbors"]
Exemple #13
0
def test_load_batfish_interface_intf_ether_sub(network_importer_base, site_sfo, dev_spine1):

    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)

    config.load(config_data=dict(main=dict(backend="nautobot")))

    intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=L3_SUB_INTF_1)

    assert isinstance(intf, Interface)
    assert intf.is_virtual
    assert not intf.is_lag
    assert not intf.is_lag_member
    assert intf.allowed_vlans == ["sfo__201"]

    assert any("sfo__201" == str(obj) for obj in adapter.get_all("vlan"))
def test_cleanup_fqdn(nornir):
    """Validate that we are cleaning up the FQDN from device name."""
    config.load(config_data=dict(main=dict(backend="nautobot"),
                                 network=dict(fqdns=["test.com"])))

    neighbors = Neighbors()
    neighbors.neighbors["intfa"].append(
        Neighbor(hostname="devicea.test.com", port="intfa"))
    neighbors.neighbors["intfb"].append(
        Neighbor(hostname="deviceb", port="intfa"))

    results = (nornir.filter(name="houston").with_processors(
        [GetNeighbors()]).run(task=dispatch_get_neighbors,
                              neighbors=neighbors.dict()))

    result = results["houston"][0].result[0].result
    assert "neighbors" in result
    assert result["neighbors"]["intfa"][0]["hostname"] == "devicea"
def test_cleanup_mac_address(nornir):
    """Validate that we are removing neighbor with a mac address name."""
    config.load(config_data=dict(main=dict(backend="nautobot"),
                                 network=dict(fqdns=["test.com"])))

    neighbors = Neighbors()
    neighbors.neighbors["intfa"].append(
        Neighbor(hostname="devicea.test.com", port="intfa"))
    neighbors.neighbors["intfb"].append(
        Neighbor(hostname="f8:f2:1e:89:3c:61", port="intfa"))

    results = (nornir.filter(name="houston").with_processors(
        [GetNeighbors()]).run(task=dispatch_get_neighbors,
                              neighbors=neighbors.dict()))

    result = results["houston"][0].result[0].result
    assert "neighbors" in result
    assert "intfb" not in result["neighbors"]
Exemple #16
0
def test_load_batfish_ipaddress_w_ip_w_prefix_no_vlan(network_importer_base,
                                                      site_sfo, dev_spine1):

    adapter = network_importer_base
    adapter.add(site_sfo)
    adapter.add(dev_spine1)
    intf1 = Interface(name="et-0/0/0", device_name=dev_spine1.name)

    config.load(config_data=dict(
        main=dict(backend="nautobot", import_ips=True, import_prefixes=True)))

    ipaddr = adapter.load_batfish_ip_address(site=site_sfo,
                                             device=dev_spine1,
                                             interface=intf1,
                                             address="10.10.10.1/24")
    prefix = Prefix(prefix="10.10.10.0/24", site_name="sfo")

    assert isinstance(ipaddr, IPAddress)
    assert adapter.get(IPAddress, identifier=ipaddr.get_unique_id())
    assert adapter.get(Prefix, identifier=prefix.get_unique_id())
def test_translate_attrs_for_netbox_description(netbox_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({})
    assert_baseline
    assert "description" in params
    assert params["description"] == ""

    params = intf.translate_attrs_for_netbox({"description": "my_description"})
    assert_baseline
    assert params["description"] == "my_description"

    params = intf.translate_attrs_for_netbox({"description": None})
    assert_baseline
    assert params["description"] == ""
    assert isinstance(params["description"], str)
def test_translate_attrs_for_netbox_mode(netbox_api_base):

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({})
    assert_baseline
    assert "mode" not in params

    params = intf.translate_attrs_for_netbox({"switchport_mode": "ACCESS"})
    assert_baseline
    assert params["mode"] == "access"

    params = intf.translate_attrs_for_netbox({"switchport_mode": "TRUNK"})
    assert_baseline
    assert params["mode"] == "tagged"

    params = intf.translate_attrs_for_netbox(
        {"switchport_mode": "NOTSUPPORTED"})
    assert_baseline
    assert "mode" not in params
Exemple #19
0
def test_translate_attrs_for_nautobot_vlan(nautobot_api_base):

    vlan = NautobotVlan(vid=100,
                        site_name="HQ",
                        remote_id="601077ce-ac88-4b36-bbc7-23d655dc3958")
    nautobot_api_base.add(vlan)

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="nautobot")))
    intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    nautobot_api_base.add(intf)

    params = intf.translate_attrs_for_nautobot({})
    assert_baseline
    assert "mode" not in params

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS",
        "access_vlan": "HQ__111"
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] == "464a2de3-fd5e-4b65-a58d-e0a2a617c12e"

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS",
        "access_vlan": None
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] is None

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS"
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] is None

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode":
        "TRUNK",
        "mode":
        "TRUNK",
        "allowed_vlans": ["HQ__111", "HQ__100"]
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == [
        "464a2de3-fd5e-4b65-a58d-e0a2a617c12e",
        "601077ce-ac88-4b36-bbc7-23d655dc3958"
    ]

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode": "TRUNK",
        "mode": "TRUNK"
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == []

    params = intf.translate_attrs_for_nautobot({
        "switchport_mode": "TRUNK",
        "mode": "L3_SUB_VLAN"
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == []
def test_translate_attrs_for_netbox_vlan(netbox_api_base):

    vlan = NetboxVlan(vid=100, site_name="HQ", remote_id=30)
    netbox_api_base.add(vlan)

    config.load(config_data=dict(
        main=dict(import_vlans=True, backend="netbox")))
    intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0")
    netbox_api_base.add(intf)

    params = intf.translate_attrs_for_netbox({})
    assert_baseline
    assert "mode" not in params

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS",
        "access_vlan": "HQ__111"
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] == 23

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS",
        "access_vlan": None
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] is None

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "ACCESS",
        "mode": "ACCESS"
    })
    assert_baseline
    assert params["mode"] == "access"
    assert params["untagged_vlan"] is None

    params = intf.translate_attrs_for_netbox({
        "switchport_mode":
        "TRUNK",
        "mode":
        "TRUNK",
        "allowed_vlans": ["HQ__111", "HQ__100"]
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == [23, 30]

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "TRUNK",
        "mode": "TRUNK"
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == []

    params = intf.translate_attrs_for_netbox({
        "switchport_mode": "TRUNK",
        "mode": "L3_SUB_VLAN"
    })
    assert_baseline
    assert params["mode"] == "tagged"
    assert params["tagged_vlans"] == []