示例#1
0
def test_class1_ex3():
    base_path = "../class1/exercises/exercise3/"
    cmd_list = ["python", "exercise3.py"]

    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    assert len(nr.inventory.hosts) == 2
    for host_name, host_obj in nr.inventory.hosts.items():
        assert host_obj.hostname is not None
        assert len(host_obj.groups) == 1
        assert host_obj.groups[0].name == "ios"
        assert host_obj.platform == "cisco_ios"
        assert host_obj.username == "pyclass"
        assert host_obj.password == "cisco123"
        assert host_obj.port == 22

    my_group = nr.inventory.groups["ios"]
    assert my_group.hostname is None
    assert my_group.platform == "cisco_ios"
    assert my_group.port == 22

    defaults = nr.inventory.defaults
    assert defaults.username == "pyclass"
    assert defaults.password == "cisco123"

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert "cisco3" in std_out
    assert "cisco_ios" in std_out
    assert std_err == ""
示例#2
0
def remove_vlan():
    nornir_inventory = gen_inventory_dict("~/nornir_inventory/")
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    ex3_hosts = nr.filter(
        F(groups__contains="eos") | F(groups__contains="nxos"))

    ex3_hosts.run(task=netmiko_send_config, config_commands=["no vlan 123"])
示例#3
0
def test_runner_collateral(test_case_dir, inventory_check):

    # Needed for ansible-vault test
    os.environ["VAULT_PASSWORD"] = "******"

    path_obj = Path(test_case_dir)
    script = path_obj.name
    script_dir = path_obj.parents[0]

    # Inventory Checks
    if inventory_check is None:
        pass
    else:
        nornir_inventory = gen_inventory_dict(script_dir)
        nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
        assert isinstance(nr, nornir.core.Nornir)
        assert isinstance(nr.inventory.hosts, nornir.core.inventory.Hosts)
        if inventory_check == "all":
            assert nr.inventory.hosts
            assert nr.inventory.groups
            assert nr.inventory.defaults
        elif inventory_check == "hosts":
            assert nr.inventory.hosts
        elif inventory_check == "hosts-groups":
            assert nr.inventory.hosts
            assert nr.inventory.groups

    # Script Check
    cmd_list = ["python", script]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=script_dir)
    assert return_code == 0
    assert std_err == ""
示例#4
0
def test_class1_ex1():
    base_path = "../class1/exercises/exercise1/"
    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    assert isinstance(nr, nornir.core.Nornir)
    assert isinstance(nr.inventory.hosts, nornir.core.inventory.Hosts)
    assert isinstance(nr.inventory.hosts["my_host"],
                      nornir.core.inventory.Host)
    assert nr.inventory.hosts["my_host"].hostname == "localhost"
示例#5
0
def remove_ex2_flash_files():
    # prep to ensure test files do not exist on devices
    nornir_inventory = gen_inventory_dict("~/nornir_inventory/")
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    eos = nr.filter(F(groups__contains="eos"))

    # remove test files from eos flash
    eos.run(task=netmiko_send_command, command_string="terminal dont-ask")
    eos.run(task=netmiko_send_command,
            command_string="delete flash:arista_zzzzz.txt")
示例#6
0
def test_class2_ex1a():
    base_path = "../class2/exercises/exercise1/"
    cmd_list = ["python", "exercise1a.py"]

    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)  # noqa
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert "20" in std_out
    assert std_err == ""
示例#7
0
def test_runner_collateral_inv(test_case_dir, inventory_check):
    path_obj = Path(test_case_dir)
    script_dir = path_obj.parents[0]
    nornir_inventory = gen_inventory_dict(script_dir)
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    assert isinstance(nr, nornir.core.Nornir)
    assert isinstance(nr.inventory.hosts, nornir.core.inventory.Hosts)
    if inventory_check == "all":
        assert nr.inventory.hosts
        assert nr.inventory.groups
        assert nr.inventory.defaults
    elif inventory_check == "hosts":
        assert nr.inventory.hosts
示例#8
0
def test_class2_ex1d():
    base_path = "../class2/exercises/exercise1/"
    cmd_list = ["python", "exercise1d.py"]

    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(
        inventory=nornir_inventory,
        logging=NORNIR_LOGGING,
        config_file=f"{base_path}/config.yaml",
    )
    options = nr.config.runner.options
    assert options["num_workers"] == 5
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert "15" in std_out
    assert std_err == ""
示例#9
0
def test_class2_ex1c():
    base_path = "../class2/exercises/exercise1/"
    cmd_list = ["python", "exercise1c.py"]

    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(
        inventory=nornir_inventory,
        logging=NORNIR_LOGGING,
        config_file=f"{base_path}/config1c.yaml",
    )
    assert nr.config.runner.options == {}
    os.environ["NORNIR_RUNNER_OPTIONS"] = '{"num_workers": 100}'
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert "100" in std_out
    assert std_err == ""
    del os.environ["NORNIR_RUNNER_OPTIONS"]
示例#10
0
def remove_loopback():
    nornir_inventory = gen_inventory_dict("~/nornir_inventory/")
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    ex5_host = nr.filter(name="arista4")
    ex5_host.run(task=netmiko_send_config,
                 config_commands=["no interface loopback 123"])