pythonciscoconfparse

Python ciscoconfparse - build a basic config file


I am trying to create a cisco basic config based in a full config file.

Following some examples of the full file configuration:

    !
    policy-map QOS
     class GOLD
      priority percent 10
     class SILVER
      bandwidth 30
      random-detect
     class default
    !
    interface Loopback1
     description Management
     ip address 9.9.9.9 255.255.255.255
    !
    interface FastEthernet0/0
     description LAN
     ip address 6.6.6.6 255.255.255.0
    !
    ip access-list standard customer_internal
     permit 1.1.1.1
     permit 2.2.2.2
     permit 3.3.3.3
    !

I found out this ciscoconfparse library, and I put the configuration lines blocks into another file, but don´t know how to exclude the blocks to a basic config file.

from ciscoconfparse import CiscoConfParse

full_config_for_parse = file('./fullconfig.txt')
basic_config_file = open('./basic_config.txt', 'w') # This file needs to contain only basic config, like interface, IP, etc...
security_config_file = open('./security_config_file.txt', 'w') # This is the file that was able to send the line blocks

parse = CiscoConfParse(full_config_for_parse)

class_map = parse.find_all_children('class-map')
access_list = parse.find_all_children('ip access-list')

if class_map != ' ':   # If class_map is not empty, it means that the full config file has class-map configuration, so, it needs to be removed or not copied to basic config file
    for line in class_map:
        security_config_file.write(line)  # separating the blocks to another file
        #basic_config_file.write(remove_this_line) I need to delete/not write this line to basic_config_file
    
if access_list != ' ':
    for line in access_list:
        security_config_file.write(line)
        #basic_config_file.write(remove_this_line)


# There is another code part that is copying all the rest of the basic configuration to basic_config_file, that is working OK

files.close()

Anyone knows a better way for deleting or not copying these config blocks to a basic config file?


Solution

  • As far as I can tell, you want to delete policy-map and ip access-list from the configuration at the bottom of my answer, and save the result as basic_config.txt.

    This is the most efficient way to do it...

    from ciscoconfparse import CiscoConfParse
    
    parse = CiscoConfParse('fullconfig.txt')
    
    objs = list()
    objs.extend(parse.find_objects(r'^policy-map'))    # Append policy-map obj
    objs.extend(parse.find_objects(r'ip\saccess-list'))# Append ip access-list obj
    
    for obj in objs:
        # When you delete a parent obj, it recurses through all children
        obj.delete()
    parse.commit()
    
    parse.save_as('basic_config.txt')  # Save the new configuration
    

    When you look at basic_config.txt, it will have the following lines...

    !
    !
    interface Loopback1
     description Management
     ip address 9.9.9.9 255.255.255.255
    !
    interface FastEthernet0/0
     description LAN
     ip address 6.6.6.6 255.255.255.0
    !
    !
    

    File name: fullconfig.txt...

    !
    policy-map QOS
     class GOLD
      priority percent 10
     class SILVER
      bandwidth 30
      random-detect
     class default
    !
    interface Loopback1
     description Management
     ip address 9.9.9.9 255.255.255.255
    !
    interface FastEthernet0/0
     description LAN
     ip address 6.6.6.6 255.255.255.0
    !
    ip access-list standard customer_internal
     permit 1.1.1.1
     permit 2.2.2.2
     permit 3.3.3.3
    !