Example #1
0
 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)
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #10
0
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
Example #11
0
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)
Example #12
0
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)
Example #13
0
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
'''
Example #14
0
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}, '
Example #16
0
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)
Example #18
0
    # 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)
Example #19
0
#    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()