예제 #1
0
def test_add_batfish_interface_intf_ether_sub():
    """
    Verify `add_batfish_interface()` is working properly for a sub interface of a physical interface
    """
    config.load_config()

    data = {
        "Interface": "GigabitEthernet0/0/0.201",
        "Active": True,
        "Speed": 1000000000,
        "MTU": 1500,
        "Switchport_Mode": "NONE",
        "Switchport": False,
        "Native_VLAN": None,
        "Encapsulation_VLAN": 201,
        "Description": "my description",
        "Channel_Group_Members": [],
        "Channel_Group": None,
    }

    intf = NetworkImporterInterface(name=data["Interface"], device_name="dev")
    intf.add_batfish_interface(pd.Series(data))

    assert isinstance(intf.local, Interface)
    assert intf.local.is_virtual
    assert intf.local.allowed_vlans == [201]
    assert not intf.local.is_lag
    assert not intf.local.is_lag_member
예제 #2
0
def test_add_batfish_interface_loopback():
    """
    Verify `add_batfish_interface()`  is working properly for a Loopback interface
    """
    config.load_config()

    data = {
        "Interface": "Loopback1",
        "Active": True,
        "Speed": None,
        "MTU": 1500,
        "Switchport_Mode": "NONE",
        "Switchport": False,
        "Native_VLAN": None,
        "Encapsulation_VLAN": None,
        "Description": "intf1 description",
        "Channel_Group_Members": [],
        "Channel_Group": None,
    }

    intf = NetworkImporterInterface(name=data["Interface"], device_name="dev")
    intf.add_batfish_interface(pd.Series(data))

    assert isinstance(intf.local, Interface)
    assert intf.local.is_virtual
    assert not intf.local.is_lag
    assert not intf.local.is_lag_member
예제 #3
0
def test_add_batfish_interface_intf_lag_member():
    """
    Verify `add_batfish_interface()` is working properly for lag member
    """
    config.load_config()

    data = {
        "Interface": "TenGigabitEthernet2/1/3",
        "Active": True,
        "Speed": 10000000000,
        "MTU": 1500,
        "Allowed_VLANs": "10-12,40",
        "Switchport_Mode": "TRUNK",
        "Switchport": True,
        "Native_VLAN": 1,
        "Encapsulation_VLAN": None,
        "Description": "my description",
        "Channel_Group_Members": [],
        "Channel_Group": "Port-Channel111",
    }

    intf = NetworkImporterInterface(name=data["Interface"], device_name="dev")
    intf.add_batfish_interface(pd.Series(data))

    assert isinstance(intf.local, Interface)
    assert not intf.local.is_virtual
    assert not intf.local.is_lag
    assert intf.local.is_lag_member
    assert intf.local.allowed_vlans == [10, 11, 12, 40]
def test_netbox26_properties_long_description():

    config.load_config()
    data = yaml.safe_load(open(f"{HERE}/{FIXTURES}/interface_loopback.json"))
    rem = pynetbox.models.dcim.Interfaces(data, "http://mock", 1)

    intf = Netbox26Interface()
    intf.add(rem)

    intf_prop = Netbox26Interface.get_properties(intf)

    assert len(intf_prop["description"]) == 100
def test_netbox26_properties_interface_lag_trunk():

    config.load_config()
    data = yaml.safe_load(open(f"{HERE}/{FIXTURES}/interface_lag_trunk.json"))
    rem = pynetbox.models.dcim.Interfaces(data, "http://mock", 1)

    intf = Netbox27Interface()
    intf.add(rem)

    intf_prop = Netbox27Interface.get_properties(intf)

    assert intf_prop["mode"] == "tagged"
def test_netbox26_properties_interface_loopback():

    config.load_config()
    data = yaml.safe_load(open(f"{HERE}/{FIXTURES}/interface_loopback.json"))
    rem = pynetbox.models.dcim.Interfaces(data, "http://mock", 1)

    intf = Netbox26Interface()
    intf.add(rem)

    intf_prop = Netbox26Interface.get_properties(intf)

    assert intf_prop["type"] == 0
    assert intf_prop["mode"] == None
    assert intf_prop["enabled"] == True
def test_netbox27_add_interface_no_type():

    config.load_config()
    data = yaml.safe_load(open(f"{HERE}/{FIXTURES}/interface_no_type.json"))
    rem = pynetbox.models.dcim.Interfaces(data, "http://mock", 1)

    intf = Netbox27Interface()
    intf.add(rem)

    assert intf.is_lag == False
    assert intf.is_virtual == False
    assert intf.is_lag_member == None
    assert intf.switchport_mode == "ACCESS"
    assert intf.access_vlan == 300
def test_netbox26_add_interface_loopback():

    config.load_config()
    data = yaml.safe_load(open(f"{HERE}/{FIXTURES}/interface_loopback.json"))
    rem = pynetbox.models.dcim.Interfaces(data, "http://mock", 1)

    intf = Netbox26Interface()
    intf.add(rem)

    assert intf.is_lag == False
    assert intf.is_virtual == True
    assert intf.is_lag_member == None
    assert intf.switchport_mode == "NONE"
    assert intf.access_vlan == None
    assert intf.allowed_vlans == None
예제 #9
0
def test_config_nev_verify_ssl():

    os.environ["NETBOX_ADDRESS"] = "http://fromenv"
    os.environ["NETBOX_TOKEN"] = "fromenv"  # nosec
    os.environ["NETWORK_DEVICE_LOGIN"] = "******"
    os.environ["NETWORK_DEVICE_PWD"] = "fromenv"  # nosec
    os.environ["NETBOX_VERIFY_SSL"] = "false"
    os.environ["NETBOX_CACERT"] = "fromenv"

    config.load_config(f"{HERE}/fixtures/config_env_var.toml")
    assert config.netbox["address"] == "http://fromenv"
    assert config.netbox["token"] == "fromenv"
    assert config.netbox["cacert"] == "fromenv"
    assert config.netbox["verify_ssl"] == False

    assert config.network["login"] == "fromenv"
    assert config.network["password"] == "fromenv"  # nosec
예제 #10
0
def test_config_env_var_no_file():

    os.environ["NETBOX_ADDRESS"] = "http://envvar"
    os.environ["NETBOX_TOKEN"] = "mytoken"  # nosec
    os.environ["NETWORK_DEVICE_LOGIN"] = "******"
    os.environ["NETWORK_DEVICE_PWD"] = "pypwd"  # nosec
    os.environ["NETBOX_VERIFY_SSL"] = "1"
    os.environ["NETBOX_CACERT"] = "mycert"

    config.load_config()
    assert config.netbox["address"] == "http://envvar"
    assert config.netbox["token"] == "mytoken"
    assert config.netbox["cacert"] == "mycert"
    assert config.netbox["verify_ssl"] == True

    assert config.network["login"] == "mylogin"
    assert config.network["password"] == "pypwd"
예제 #11
0
def main(config_file, limit, diff, apply, check, debug, update_configs):

    config.load_config(config_file)
    perf.init()

    # ------------------------------------------------------------
    # Setup Logging
    # ------------------------------------------------------------
    logging.getLogger("pybatfish").setLevel(logging.ERROR)
    logging.getLogger("netaddr").setLevel(logging.ERROR)

    if config.logs["level"] != "debug":
        logging.getLogger("paramiko.transport").setLevel(logging.CRITICAL)
        logging.getLogger("nornir.core.task").setLevel(logging.CRITICAL)

    logging.basicConfig(
        stream=sys.stdout, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    )

    if config.logs["level"] == "debug":
        logger.setLevel(logging.DEBUG)
    elif config.logs["level"] == "warning":
        logger.setLevel(logging.WARNING)
    else:
        logger.setLevel(logging.INFO)

    # TODO add code to set config.main["hostvars_directory"] based on options.output
    # TODO add code to set config.main["configs_directory"] based on options.configs

    ni = NetworkImporter()

    if update_configs:
        ni.build_inventory(limit=limit)
        ni.update_configurations()

    ni.init(limit=limit)

    ni.import_devices_from_configs()
    ni.import_devices_from_cmds()

    ni.import_cabling()

    ni.check_data_consistency()

    # ------------------------------------------------------------------------------------
    # Update Remote if apply is enabled
    # ------------------------------------------------------------------------------------
    if apply:
        ni.update_remote()

    elif check:
        ni.diff_local_remote()

    if config.logs["performance_log"]:
        perf.TIME_TRACKER.set_nbr_devices(len(ni.devs.inventory.hosts.keys()))
        perf.TIME_TRACKER.print_all()

    if config.netbox["status_update"] and apply:
        ni.update_devices_status()

    if diff:
        ni.print_diffs()

    logger.info(
        f"Execution finished, processed {perf.TIME_TRACKER.nbr_devices} device(s) "
    )
    if debug:
        pdb.set_trace()
예제 #12
0
def test_config_no_config():

    config.load_config()
    assert config.netbox["address"] == "http://localhost"