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 == ""
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"])
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 == ""
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"
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")
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 == ""
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
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 == ""
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"]
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"])