def main() -> None: clean_up = "rm -r ospfdiff ospf-current" os.system(clean_up) os.system(clear_command) nr = InitNornir(config_file="config.yaml") output = nr.run(task=clean_ospf) print_title("REVERSING OSPF CONFIGURATION BACK INTO DESIRED STATE") print_result(output)
def get_juniper(): print_title("running show juniper facts") all_juniper = nr.filter(type="juniper") show_juniper_facts = all_juniper.run(task=get_cards_jnp, severity_level=logging.INFO) for i in show_juniper_facts.keys(): if i not in show_juniper_facts.failed_hosts.keys(): try: all_cards.append(show_juniper_facts[i][0].result) except Exception as e: pass
def get_huawei(): print_title("runing display version and display device pic-status") all_xr = nr.filter(type="huawei") show_platform_xr = all_xr.run(task=huawei_multiple) for i in show_platform_xr.keys(): if i not in show_platform_xr.failed_hosts.keys(): try: df = get_cards_huawei(show_platform_xr[i][0].result) df["router_name"] = i all_cards.append(df) except Exception as e: print(e) pass
def get_cisco_xr(): print_title("running show cisco XR facts") show_facts = all_cisco_xr.run(task=napalm_get, getters=["facts"], severity_level=logging.INFO) for i in show_facts.keys(): if i not in show_facts.failed_hosts.keys(): try: version = show_facts[i][0].result["facts"]["os_version"] model = show_facts[i][0].result["facts"]["model"].upper() update_routers_sqlite3("Routers", i, version, model, "cisco-xr") except Exception as e: pass
def get_juniper(): print_title("getting interfaces for JNP") all_juniper = nr.filter(type="juniper") show_juniper_optics = all_juniper.run(task=napalm_get, getters=["optics", "interfaces"], severity_level=logging.INFO) for i in show_juniper_optics.keys(): if i not in show_juniper_optics.failed_hosts.keys(): try: all_interfaces.append( get_interfaces_jnp(i, show_juniper_optics[i][0].result)) except Exception as e: pass
def get_cisco_xr_genie(): print_title("Find XR model and version using Genie") show_facts = all_cisco_xr.run(task=collect_xr_multiple, on_failed=True, severity_level=logging.INFO) for i in show_facts.keys(): if i not in show_facts.failed_hosts.keys(): try: version = show_facts[i][2].result["software_version"] model = show_facts[i][1].result["module_name"]["Rack 0"]["pid"] update_routers_sqlite3("Routers", i, version, model, "cisco-xr") except Exception as e: pass
def get_cisco_ios(): print_title("running show cisco IOS facts") show_ios_facts = all_cisco_ios.run(task=napalm_get, getters=["facts"], severity_level=logging.INFO) for i in show_ios_facts.keys(): if i not in show_ios_facts.failed_hosts.keys(): try: version = show_ios_facts[i][0].result["facts"]["os_version"] version = version.split("Version")[1].split(",")[0].strip() model = show_ios_facts[i][0].result["facts"]["model"] update_routers_sqlite3("Routers", i, version, model, "cisco-ios") except Exception as e: pass
def get_huawei(): print_title("running show huawei facts") # commands = ['NO','display version | incl VRP|HUAWEI'] show_huawei_facts = all_huawei.run( task=netmiko_send_command, command_string="display version | incl VRP|HUAWEI", severity_level=logging.INFO, ) # show_huawei_facts = all_huawei.run(task=netmiko_send_command,command_string=commands) for i in show_huawei_facts.keys(): if i not in show_huawei_facts.failed_hosts.keys(): try: version, model = huawei_parse_show_version( show_huawei_facts[i].result) update_routers_sqlite3("Routers", i, version, model, "huawei") except Exception as e: pass
def get_cisco_xr(): print_title("runing show platform XR") all_xr = nr.filter(type="cisco-xr") show_platform_xr = all_xr.run( task=netmiko_send_command, command_string=f"admin show platform", use_textfsm=True, severity_level=logging.INFO, ) # print(show_platform_xr) for i in show_platform_xr.keys(): if i not in show_platform_xr.failed_hosts.keys(): try: all_cards.append(get_cards_xr(i, show_platform_xr[i][0].result)) except Exception as e: pass
def BGP_Configuration(): #Fucţie care configurează BGP rezultat = [] #Lista pentru salvarea mesajelor valide BGP error = [] #Listă pentru stocarea mesajelor de eroare try: def config( task): # definirea funcţiei de configurare cu parametrul task r = task.run( task=template_file, #Definirea task-ului name="BGP configuration", #numele task-ului template="bgp_peerings.j2", #Template-ul jinja2 pentru config path=f"Jinja2/{task.host['protocol']}") #calea către template task.host["config"] = r.result.splitlines( ) #Iniţiarea task-ului pt host-uri task.run( task=netmiko_send_config, # definirea task-ului name="BGP peerings configuration", #numele task-ului config_commands=task.host["config"]) #Comenzile trimise nornir.data.dry_run = False print_title("Performing some cool network automation !!!") result = nornir.run(task=config) #Salvarea rezultatelor print_result(result) rezultat.append( 'BGP configartion was succesful') #salvarea mesajului in listă except: # Excepţii care pot apărea NornirExecutionError error.append('Cannot execute this , some device failed...') for ip in range(1, 6): # Descoperirea ruterelor care sunt down target = '1.1.1.' + str(ip) response = os.system("ping -c1 " + target + "> /dev/null") if response != 0: error.append('Failed ' + target) error.append('Fix connection to this devices and try again ') nornir.close_connections() #inchiderea conexiunilor return rezultat, error # Returnarea celor 2 liste
from nornir import InitNornir from nornir_netmiko import netmiko_send_command, netmiko_send_config from nornir_utils.plugins.functions import print_result, print_title nr = InitNornir(config_file="config.yaml") def config(cisco): cisco.run(task=netmiko_send_config, config_file='commands.cfg') cisco.run(task=netmiko_send_command, command_string='show vlan brief') print_title('正在配置VLAN999') results = nr.run(task=config) print_result(results)
from nornir import InitNornir from nornir_netmiko.tasks import netmiko_send_config, netmiko_send_command from nornir_jinja2.plugins.tasks import template_file from nornir_utils.plugins.functions import print_title, print_result nr = InitNornir(config_file="config.yml") def basic_configuration(task): r = task.run(template_file, template="InterfaceIP-ospf.j2", path=f"templates/") output = r.result send = output.splitlines() task.run(netmiko_send_config, config_commands=send) task.run(netmiko_send_command, command_string='show ip ospf neighbor') print_title("Runbook to configure the interface") result = nr.run(task=basic_configuration) print_result(result)
from nornir_jinja2.plugins.tasks.template_file import template_file from nornir_utils.plugins.functions import print_title, print_result def configuration(task): r = task.run(task=template_file, name="Generate configuration", template="config.j2", path=f"_templates/{task.host.platform}") task.host["config"] = r.result nr = InitNornir(config_file="_config.yaml", dry_run=True) #core = nr.filter(F(name="vMX1")) core = nr.filter(F(platform="junos")) print(core.inventory.hosts.keys()) # from nornir.core.filter import F # Junos_devices = nr.filter(F(platform="junos")) print_title("Playbook to configure the network") result = core.run(task=configuration) print_result(result) ''' # to check if a task failed: result.failed result["vMX1"].failed result["vMX1"][2] result["vMX1"][2].failed '''
def helper_function(device): # helper function for concurent ip_list = df["r_ip"].loc[df["source"] == device].tolist() print_title(f"run collect_latency with {device} and {ip_list}") result = collect_latency(device, ip_list) return result
f'IP Address: {task.host.hostname}) - SUCCESS! '.center( 80, '*') + '\n') for task_index, device_task in enumerate(task.results, start=1): device_log_file.write( f'---- TASK-{task_index}: [{device_task.name}] '.ljust( 80, '-') + '\n') device_log_file.write(str(device_task.result) + '\n') tqdm.write(f'{task.host}: Completed Successfully!') def custom_filter(host): return True print_title('Playbook to setup basic configs') hosts = nr.filter(filter_func=custom_filter) with tqdm( total=len(nr.inventory.hosts), desc='Running tasks...', ) as progress_bar: multi_result = hosts.run(task=grouped_tasks, progressbar=progress_bar) print_result(multi_result) failed_hosts_inv = dict() with open('logs/extended_nornir.log', 'a' if os.path.isfile('logs/extended_nornir.log') else 'w') as f: for device_name, result, in multi_result.items(): if not result.failed: f.write(f'**** PLAY on Device: (Name: {device_name}, '
from nornir import InitNornir from nornir_utils.plugins.functions import print_result, print_title from nornir_netmiko.tasks import netmiko_send_command nr = InitNornir(config_file="../config.yaml") def show_output(task): task.run(task=netmiko_send_command, command_string="show ip int br") results = nr.run(task=show_output) print_title("DEPLOYING AUTOMATED BASELINE CONFIGURATIONS") print_result(results)
from nornir import InitNornir from nornir_utils.plugins.functions import print_result, print_title from nornir_netmiko import netmiko_send_command, netmiko_send_config from nornir.core.filter import F nr = InitNornir(config_file="config.yml") def config(push): push.run(task=netmiko_send_config, config_file="push-config.txt") push.run(task=netmiko_send_command, command_string="sh run | begin line ") push.run(task=netmiko_send_command, command_string="wr mem") devices = nr.filter(F(groups__any=["AS65000", "ISP", "EIGRP700"])) results = devices.run(task=config) print_title("Deploying Configuration") print_result(results)
# Extracting the Router's "ID" from it's IP address pos = str(f"{task.host.hostname}").rfind('.') id = str(f"{task.host.hostname}")[pos + 1:] loopback_ip = "1.1.1." + str(id) # Router's Loopback Configuration loopback_commands = [ "interface loopback0", "ip address " + loopback_ip + " 255.255.255.255", "ip ospf 1 area 0" ] deploy_loopback = task.run(netmiko_send_config, config_commands=loopback_commands) # Configuration of the OSPF ospf_commands = ["router ospf 1", "router-id " + loopback_ip] deploy_ospf = task.run(netmiko_send_config, config_commands=ospf_commands) # General config deploy_general = task.run(netmiko_send_config, config_file="general_config") # Save configuration to the NVRAM save_config = task.run(netmiko_save_config) site_prototype = nr.filter(F(groups__contains="site_prototype")) results = site_prototype.run(task=ospf_internal) print_title("DEPLOYING CONFIGURATIONS") print_result(results)
# import ipdb # ipdb.set_trace() def basic_config(task): r = task.run(task=template_file, template="ntp.j2", path=f"templates/{task.host.platform}/") output = r.result task.run(task=napalm_configure, configuration=output) def get_facts(task): task.run(task=napalm_get, getters="get_arp_table") def config(task): task.run(task=napalm_configure, filename="ntp-config.txt") def config_cli(task): task.run(task=napalm_cli, commands=["show run | sec ntp"]) print_title("RUNBOOK TO CONFIGURE NTP") result = cisco_group.run(task=load_vars) print_result(result) #import ipdb #ipdb.set_trace()