Skip to main content

Network Automation

Project description

Network Automation

An Ansible like Network Automation Framework, Using Python OOP and Netmiko to interface with Cisco IOS, VyOS, EdgeOS network devices.

Usage

Example 1: Getting Basic Device Information from a VyOS Router

Importing the class from the package.

from net_automation import net_automation

Creating an instance of the VyOS class, with specified parameters.

router_1 = net_automation.Vyos(
    "router-1.com",                                                      # Hostname/IP
    "username",                                                          # Username
    "",                                                                  # Password   
    True,                                                                # Boolean switch for using SSH Keys. (password not needed if True)
    "/home/user/.ssh/id_rsa",                                            # SSH Key file location
    "")                                                                  # Secret (left empty, as Cisco Only)

Establishing the SSH connection to "router_1" and getting interfaces.

router_1.init_ssh()                                                      # Creates the SSH connection to the VyOS router

print (router_1.get_interfaces())                                        # Returns Interfaces from the VyOS router

Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             a.b.c.d/23                        u/u  WAN 
lo               127.0.0.1/8                       u/u  dn42-vyos 
                 10.100.100.4/32
                 ::1/128
wg12             172.22.132.170/30                 u/u  p2p_usman 

Getting a traceroute to "8.8.8.8".

print (router_1.get_route("8.8.8.8"))                                   # Returns traceroute to specific IP

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  vlan32.core01.lil01.fr.virtua.systems (185.154.155.1)  0.633 ms  0.483 ms  0.350 ms
 2  po31.core02.lil01.fr.virtua.systems (188.214.24.177)  0.266 ms  0.125 ms  0.145 ms
 3  188.214.24.20 4.866 ms  4.867 ms  4.848 ms
 4  google1.par.franceix.net (37.49.237.172)  8.769 ms  9.160 ms  8.835 ms
 5  108.170.244.161 9.585 ms 108.170.244.225 9.982 ms 108.170.244.161 9.647 ms
 6  216.239.48.43 8.850 ms 142.250.224.197 15.357 ms 216.239.48.45 9.662 ms
 7  dns.google (8.8.8.8)  9.607 ms  8.734 ms  9.453 ms

Storing returned route table and configuration in variables.

configuration = (router_1.get_config())                                
route_table = (router_1.get_route_table())

Example 2: Generating and Deploying Configurations to a VyOS Router.

###.py file

from net_automation import net_automation

net_automation.Vyos.deploy_yaml("router.yml")

Executing the Python script should generate and deploy configs, based on the contents of the YAML file.

router.yml file

routers:
  - name: "vyos-dn42-01"
    SSH_conf:
      hostname: "10.0.0.1"
      username: "username"
      password: ""
      use_keys: True
      key_location: "C:\\Users\\user\\.ssh\\id_rsa"
      secret: ""
    
    firewalls:
      - name: "WAN_Local"
        state: "present"
        default_action: "drop"
        rules:
          - rule_no: "10"
            state: "present"
            action: "accept"
            desc: "accept SSH"
            dest: "port 22"
            source: ""
            protocol: "tcp_udp"

          - rule_no: "30"
            state: "present"
            action: "accept"
            desc: "accept wg 51890"
            dest: "port 51890"
            source: ""
            protocol: "udp"

          - rule_no: "90"
            state: "present"
            action: "accept"
            desc: "allow estab related traffic"
            states:
              - name: "established"
                status: "present"
              - name: "related"
                status: "enabled"

    interfaces:
      - name: "eth0"
        type: "ethernet"
        state: "present"
        ip: "dhcp"
        mask: ""
        desc: "WAN"

      - name: "lo"
        type: "loopback"
        state: "present"
        ip: "10.100.100.4"
        mask: "/32"
        desc: ""

    static:
      - type: "interface-route"
        network: "172.20.16.141/32"
        nexthop: "wg15"
        distance: ""
        state: "present"

    bgpasn: "4242421869"
    bgp_prefixes:
      - prefix: "172.22.132.160"
        mask: "/27"
        address_family: "ipv4-unicast"
        state: "present"

    bgp_peers:
      - ip: "172.20.53.104"
        state: "present"
        remote_as: "4242423914"
        ebgp_multihop: "255"
        desc: "kioubit"

        route_maps:
          - route_map: "DN42-ROA"
            action: "import"
            state: "present"
          - route_map: "DN42-ROA"
            action: "export"
            state: "present"

Example 3: Backing up device configurations.

Creating instances CiscoIOS and EdgeOS classes, for Cisco switches and Ubiquiti switches.

cisco_2960 = net_automation.Cisco_IOS(
    "cisco-2960.lan",
    "usman",
    "password", 
    False, 
    "", 
    "ciscosecret")

cisco_3560 = net_automation.Cisco_IOS(
    "cisco-3560.lan",
    "username",
    "password", 
    False, 
    "", 
    "ciscosecret")

ubiquiti_erx = net_automation.EdgeOS(
    "ubiquiti-erx.lan", 
    "username", 
    "", 
    True, 
    r"C:\Users\Usman\.ssh\id_rsa", 
    "")

ubiquiti_er4 = net_automation.EdgeOS(
    "ubiquit-er4.lan", 
    "usman", 
    "", 
    True, 
    r"C:\Users\Usman\.ssh\id_rsa", 
    "")

For loops that get device configurations and writes them to external files.

cisco_switches = [cisco_2960, cisco_3560]

for device in cisco_switches:                                                               # iterates through the "cisco_switches" array and:
    to_write = Cisco_IOS.get_all_config(device)                                             # stores the outputs from method in the "to_write" variable
    Cisco_IOS.write_file(device, to_write, "")                                              # writes the output to new files                            
ubiquti_routers = [ubiquiti_erx, ubiquiti_er4]

for device in ubiquti_routers:                                                              # iterates through the "ubiquiti_routers" array and:
    to_write = Vyos.get_config(device)                                                      # stores the outputs from method in the "to_write" variable
    Main.write_file(device, to_write, "")                                                   # writes the output to new files                            

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

net-automation-usman-u-0.0.4.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

net_automation_usman_u-0.0.4-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file net-automation-usman-u-0.0.4.tar.gz.

File metadata

File hashes

Hashes for net-automation-usman-u-0.0.4.tar.gz
Algorithm Hash digest
SHA256 c10128e5a9c7178ba47ecb6fc8b84ab98ce0276e7da4b122eb50680bfbf8091f
MD5 73e15f105cceebff40dfd3053c808b3f
BLAKE2b-256 0d2892b776e7cf29115c796412d379fe3c197f24067d7438357f95d6009fb407

See more details on using hashes here.

File details

Details for the file net_automation_usman_u-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for net_automation_usman_u-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 7663e9fa75cabe37ad630ab5749c527f57181ddf744f12597b97d378c8ec6cc1
MD5 0726eaa53028689ef615ef16f37ab233
BLAKE2b-256 bc3c75070cf3da48a22493db1c63465b2a56578f335febba2193664b4ca0c9b6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page