Skip to content

Latest commit

 

History

History
327 lines (230 loc) · 6.52 KB

README.md

File metadata and controls

327 lines (230 loc) · 6.52 KB

vSporn_Python

This project was made to modify the configuration of all Juniper devices (e.g. router, switches, firewalls) using JUNOS as OS and build complete topologies in VMware automatically.

Configuration features

  • get current configuration
  • update configuration by using a prepared config file
  • delete selected parts of the configuration

Create topology features

  • build complete virtual topologies based on a YMAL-file
  • create and configure virtual vMX routers
  • generate all network connections
    • management connection
    • internal connection between controlPlane and forwardingPlane
    • external connections between virtual routers
  • upload a custom default configuration
  • each configuration step will be checked for possible errors before the implementation starts
    • exception handling for different events and adequate dynamic reaction
  • every step and every result will be written in the console



How to use ?

start main.py

You will find more examples there




First Step: Connect to the Juniper device

open main.py and specify the device you want to connect with in this format:

Juniper_MOD("<IP>", "<user>", "<password>", "telnet", "23") 


Example:

Juniper_MOD("192.18.10.90", "netconf", "Juniper", "telnet", "23")



Get current configuration

specify the part of the configuration that you want to have displayed:

  • "" (complete configuration)

  • hostname | host-name

  • router-id | id

  • protocol | protocols | ospf | isis | bgp | bfd | mpls | stp | ldp | rsvp | lldp

  • interface | interfaces | ge-0/0/0-9 | lo0 | fxp0

  • policy | policies | my-policy-name

  • firewall | firewalls



Example:

router_01.GET_conf("")
router_01.GET_conf("firewall")



Update configuration

upload configuration from an external file



Example:

router_01.set_conf("./my-junos-config.conf")

my-junos-config.conf
default folder: CONFIG
    interfaces {

        ge-0/0/0 {
            unit 0 {
                family inet {
                    address 7.43.4.2/24;
                }
            }
        }

        lo0 {
            unit 0 {
                family inet {
                    address 1.1.1.1/32;
                }
            }
        }
    }

    protocols {
        ospf {        
            area 0.0.0.0 {
                interface all;
            }
        }
    }




Delete selected parts of the configuration

specify in quotes and keyword "delete" the part of the configuration that you want to delete:

  • delete hostname | delete host-name

  • delete router-id | delete id

  • delete ge-0/0/0-9 | delete fxp0 | delete lo0

  • delete ospf | isis | bgp | bfd | mpls | stp | ldp | rsvp | lldp

  • delete "policy-name"

  • delete "firewall-role"



Example:

router_01.del_conf("delete ge-0/0/0")
router_01.del_conf("delete ospf")





Create virtual topologies

  • build a complete custom topology in VMware by using a YMAL-file

  • creates ressouce pool, virtual machines and all network connections

  • upload a new configuration automatically on each virtual machines and change the management IPs

  • need Juniper vMX templates >>> more informations at the end of this document



Example:

Create_MAIN.Create("./TOPOLOGY/Test_01.yml")
  • the configuration settings of your VMware environment (vcenter_ip, username, password...) are in the connection section of the YMAL-file

  • all names of the new topology will be automatically generated and got the chosen project_name as prefix


test_topology.yaml
default folder: TOPOLOGY
project_name: Test_01

connection:                          # VMware configuration

    vcenter_ip:    
    username:      
    password:      
    host_name:     
    data_center:   
    datastore:     
    vm_folder:     

default_settings_TEMPLATE:

    template_mgmt_IP:   "192.18.10.100"
    default_username:   "netconf"
    default_password:   "Netconf"
    external_interface: "external_network"

devices:                             # router list

    - name: R01                      # router name
      type: vMX
      version: 18.2R1.9          
      mgmt_ip: 192.18.10.101/24      # new management IP
      mgmt_ip_gw: 192.18.10.1        # gateway
      network: 
          - R01-R03                  # network connection between router R01 and router R03 (interface ge-0/0/0)
          - R01-R02                  # network connection between router R01 and router R02 (interface ge-0/0/1)

    - name: R02
      type: vMX
      version: 18.2R1.9
      mgmt_ip: 192.18.10.102/24
      mgmt_ip_gw: 192.18.10.1 
      network: 
          - R02-R03
          - R01-R02

    - name: R03
      type: vMX
      version: 18.2R1.9
      mgmt_ip: 192.18.10.103/24
      mgmt_ip_gw: 192.18.10.1 
      network: 
          - R01-R03
          - R02-R03


Create Juniper vMX templates

  • template VMs are created by using Juniper OVA-files (https://support.juniper.net/support/downloads/?p=vmxeval#sw)

  • created VMs have a default name setting as following:

    • controlPlane: "TEMPLATE_vCP_" + version
    • forwardingPlane: "TEMPLATE_vFPC_" + version
  • delete all network connections on both machines

  • VM configuration of the forwardingPlane has to be changed to 3 CPU-cores and 3 GB RAM

  • the VM of the controlPlane needs a default configuration with an user, access permissions and management IP

  • a management IP is necessary to upload the initial configuration

    • temporary management IP in this example: 192.18.10.100/24

template.conf
folder: CONFIG
system {
    login {
        user netconf {
            uid 2001;
            class super-user;
            authentication {
                encryted-password "" 
            }
        }
    }
    host-name TEMPLATE;
    services {
        ssh {
            root-login allow;
        }
        telnet {
            connection-limit 5;
        }
        netconf {
            ssh;
        }
    }
}

interfaces {
    fxp0 {
        unit 0 {
            family inet {
                address 192.18.10.100/24;
            }
        }
    }
}

routing-options {
    static {
        route 0.0.0.0/0 next-hop 192.18.10.1;
    }
}