예제 #1
0
def generate_topology_from_cdp(list_of_files,
                               save_to_file=True,
                               topology_filename='topology.yaml'):
    '''
	Параметрами функции generate_topology_from_cdp:
	* list_of_files - список файлов из которых надо считать вывод команды sh cdp neighbor
	* save_to_file - этот параметр управляет тем, будет ли записан в файл, итоговый словарь
	 * значение по умолчанию - True
	* topology_filename - имя файла, в который сохранится топология.
	 * по умолчанию, должно использоваться имя topology.yaml.
	 * топология сохраняется только, если аргумент save_to_file указан равным True

	Функция возвращает словарь, который описывает топологию.
	Словарь должен быть в том же формате, что и в задании 17.2a.
	'''
    topology = {}
    for file in list_of_files:
        with open(file) as show_command:
            parsed = parse_sh_cdp_neighbors(show_command.read())
            for pk, pv in parsed.items():
                if not pk in topology.values():
                    topology[pk] = pv

        if save_to_file:
            with open(topology_filename, 'w') as f:
                yaml.dump(topology, f, default_flow_style=False)

    print(topology)
예제 #2
0
def test_function_return_value():
    with open('sh_cdp_n_sw1.txt') as f:
        sh_cdp_n_sw1 = f.read()

    correct_return_value = {
        'SW1': {
            'Eth 0/1': {
                'R1': 'Eth 0/0'
            },
            'Eth 0/2': {
                'R2': 'Eth 0/0'
            },
            'Eth 0/3': {
                'R3': 'Eth 0/0'
            },
            'Eth 0/4': {
                'R4': 'Eth 0/0'
            }
        }
    }

    return_value = task_17_2.parse_sh_cdp_neighbors(sh_cdp_n_sw1)
    assert return_value != None, "Функция ничего не возвращает"
    assert type(return_value) == dict, "Функция должна возвращать словарь"
    assert return_value == correct_return_value, "Функция возвращает неправильное значение"
예제 #3
0
def generate_topology_from_cdp(list_of_files, save_to_filename=None):
    topol = {}
    for filee in list_of_files:
        with open(filee) as f:
            topol.update(parse_sh_cdp_neighbors(f.read()))
    if save_to_filename:
        with open(save_to_filename, 'w') as f:
            yaml.dump(topol, f)
    return topol
예제 #4
0
def generate_topology_from_cdp(list_of_files, save_to_filename=None):
    result = {}
    for file in list_of_files:
        with open(file, 'r', encoding='utf-8') as f_source:
            result.update(parse_sh_cdp_neighbors(f_source.read()))
    if save_to_filename:
        with open(save_to_filename, 'w', encoding='utf-8') as f_destination:
            yaml.dump(result, f_destination)
    return result
예제 #5
0
def generate_topology_from_cdp(list_of_files, save_to_filename=None):
    res_dict = {}
    for filek in list_of_files:
        with open(filek) as f:
            res_dict.update(parse_sh_cdp_neighbors(f.read()))
    if save_to_filename:
        with open(save_to_filename, 'w') as f:
            yaml.dump(res_dict, f)
    return res_dict
예제 #6
0
def generate_topology_from_cdp(list_of_files, save_to_filename=None):
    result = {}
    for file in list_of_files:
        with open(file, 'r') as f:
            dic = parse_sh_cdp_neighbors(f.read())
            result.update(dic)
    if save_to_filename:
        with open(save_to_filename, 'w') as dst:
            yaml.dump(result, dst)
    return result
예제 #7
0
def generate_topology_from_cd(list_of_files,
                              save_to_file=True,
                              topology_filename='topology.yaml'):
    topology = {}
    for filename in list_of_files:
        with open(filename) as f:
            topology.update(parse_sh_cdp_neighbors(f.read()))
    if save_to_file:
        with open(topology_filename, 'w') as f:
            yaml.dump(topology, f, default_flow_style=False)
    return topology
예제 #8
0
def generate_topology_from_cdp(list_of_files,
                               save_to_file=True,
                               topology_filename='topology.yaml'):
    topology_dict = {}
    for file_cdp in list_of_files:
        with open(file_cdp) as f:
            topology_dict.update(parse_sh_cdp_neighbors(f.read()))
    if save_to_file:
        with open(topology_filename, 'w') as f:
            yaml.dump(topology_dict, f)
    return topology_dict
예제 #9
0
def generate_topology_from_cdp(list_of_files, save_to_filename = None):
	for item in list_of_files:
		with open(item) as f:
			data = f.read().replace('\n', '')
			temp_dict = parse_sh_cdp_neighbors(data)
			for key in temp_dict:
				final_dict[key] = temp_dict[key]
	if save_to_filename != None:
		with open(save_to_filename, "w+") as f:
			f = yaml.dump(final_dict, f)
		return
	else:
		return final_dict
예제 #10
0
def generate_topology_from_cdp(list_of_files, save_to_file = True, topology_filename = 'topology.yaml'):
	# Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors,
    #в один словарь topology
    topology = {}
    for i in list_of_files:	
        with open(i, 'r') as f:
            topology.update(parse_sh_cdp_neighbors(f.read()))

	# записать его содержимое в файл topology.yaml
    if save_to_file:
        with open(topology_filename, 'w') as f:
            yaml.dump(topology, f)
    
    return topology
예제 #11
0
def generate_topology_from_cdp(list_of_files,
                               save_to_file=True,
                               topology_filename='topology_17_2b.yaml'):
    from task_17_2 import parse_sh_cdp_neighbors
    import yaml
    summary_dict = {}
    for l in list_of_files:
        with open(l, 'r') as f:
            show_out = f.read().rstrip()
        summary_dict.update(parse_sh_cdp_neighbors(show_out))
    if save_to_file:
        with open(topology_filename, 'w') as f:
            yaml.dump(summary_dict, f)
    return summary_dict
예제 #12
0
* sh_cdp_n_r2.txt
* sh_cdp_n_r3.txt
* sh_cdp_n_r4.txt
* sh_cdp_n_r5.txt
* sh_cdp_n_r6.txt

Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors,
в один словарь topology и записать его содержимое в файл topology.yaml.

Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''
from task_17_2 import parse_sh_cdp_neighbors
import glob

sh_cdp = glob.glob('sh_cdp*')

if __name__ == '__main__':
    for file in sh_cdp:
        with open(file) as f:
            print(parse_sh_cdp_neighbors(f.read()))


예제 #13
0
Не копировать код функции parse_sh_cdp_neighbors
'''

from task_17_2 import parse_sh_cdp_neighbors
import yaml

infiles = [
    'sh_cdp_n_sw1.txt', 'sh_cdp_n_r1.txt', 'sh_cdp_n_r2.txt',
    'sh_cdp_n_r3.txt', 'sh_cdp_n_r4.txt', 'sh_cdp_n_r5.txt', 'sh_cdp_n_r6.txt'
]

topology = {}

for file in infiles:
    with open(file) as show_command:
        parsed = parse_sh_cdp_neighbors(show_command.read())
        for pk, pv in parsed.items():
            if not pk in topology.values():
                topology[pk] = pv

print(topology)


def dict_to_yaml(file, indict):
    '''
	ожидает словарь (indict)
	записыват в файл в формате yaml
	'''
    with open(file, 'w') as f:
        yaml.dump(indict, f, default_flow_style=False)
예제 #14
0
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''


def read_file(file_name):
    with open(file_name, 'r') as f:
        show_out = f.read().rstrip()
    return show_out


if __name__ == '__main__':
    from pprint import pprint
    from task_17_2 import parse_sh_cdp_neighbors
    import yaml
    import glob
    summary_dict = {}
    sh_cdp_files = glob.glob('sh_cdp_n_*')
    for f in sh_cdp_files:
        show_out_main = read_file(f)
        summary_dict.update(parse_sh_cdp_neighbors(show_out_main))
    with open('topology.yaml', 'w') as f:
        yaml.dump(summary_dict, f)
    pprint(summary_dict)
예제 #15
0
Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''

from task_17_2 import parse_sh_cdp_neighbors
import glob
import yaml
from pprint import pprint

if __name__ == '__main__':

    files = glob.glob('sh_cdp_n_*.txt')

    topology = {}
    # Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors,
    #в один словарь topology
    for i in files:
        with open(i, 'r') as f:
            topology.update(parse_sh_cdp_neighbors(f.read()))

    # записать его содержимое в файл topology.yaml
    with open('topology.yaml', 'w') as f:
        yaml.dump(topology, f)
예제 #16
0
Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''

sh_version_files = glob.glob('sh_cdp_n_*')

topology = {}

for ff in sh_version_files:
 with open(ff) as f:
  r = pcdp.parse_sh_cdp_neighbors(f.read())
  for k in r.keys():
   topology[k] = r[k]

print(topology)

with open('topology.yaml', 'w') as f:
 y = yaml.dump(topology, f)

'''
./task_17_2a.py 
{'SW1': {'Eth 0/1': {'R1': '2811'}, 'Eth 0/2': {'R2': '2811'}, 'Eth 0/3': {'R3': '2811'}, 'Eth 0/4': {'R4': '2811'}}, 'R1': {'Eth 0/0': {'SW1': 'WS-C3750-'}}, 'R4': {'Eth 0/0': {'SW1': 'WS-C3750-'}, 'Eth 0/1': {'R5': '2811'}}, 'R3': {'Eth 0/0': {'SW1': 'WS-C3750-'}}, 'R5': {'Eth 0/0': {'R2': '2811'}, 'Eth 0/1': {'R4': '2811'}}, 'R6': {'Eth 0/1': {'R2': '2811'}}, 'R2': {'Eth 0/0': {'SW1': 'WS-C3750-'}, 'Eth 0/1': {'R5': '2811'}, 'Eth 0/2': {'R6': '2811'}}}
'''
예제 #17
0
* sh_cdp_n_r6.txt

Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors,
в один словарь topology и записать его содержимое в файл topology.yaml.

Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''


def create_dict_cdp(list_dict):
    dict_cdp = dict()
    for idict in list_dict:
        dict_cdp.update(idict)

    return dict_cdp


if __name__ == "__main__":
    args = glob.glob('sh_cdp*.txt')
    pprint(
        create_dict_cdp(
            [parse_sh_cdp_neighbors(read_file(ifile)) for ifile in args]))
예제 #18
0
파일: task_17_2a.py 프로젝트: dmikos/pyneng
Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors,
в один словарь topology и записать его содержимое в файл topology.yaml.

Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'},
        'Fa0/2': {'R6': 'Fa0/0'}},
 'R5': {'Fa0/1': {'R4': 'Fa0/1'}},
 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}

При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.

Не копировать код функции parse_sh_cdp_neighbors
'''
####
from task_17_2 import parse_sh_cdp_neighbors
import glob
import yaml

sh_cdp_files = glob.glob('sh_cdp_n*')
# print(sh_cdp_files)

if __name__ == "__main__":
    final_dict = {}

    for f_name in sh_cdp_files:
        with open(f_name) as f:
            final_dict.update(parse_sh_cdp_neighbors(f.read()))

    with open('topology.yaml', 'w') as f:
        yaml.dump(final_dict, f)