Ejemplo n.º 1
0
def create_network_map(filenames):
    out = {}
    out_uniq = {}
    for files in filenames:
        #print(files)
        f = open("/home/vagrant/my_repo/online-8-oleg-bosyuk/exercises/11_modules/" + files)
        for line in f:
            line.split("\n")
            #print(line.split("\n"))
            if 'cdp' in line:
                local_dev = (line.split('>'))[0]
                #print(local_dev)
            elif 'Eth' in line:
                value_in_line = line.split()
                rem_info = (value_in_line[0], value_in_line[-2] + value_in_line[-1])
                local_info = (local_dev, value_in_line[1] + value_in_line[2])
                out[local_info] = rem_info
    #print(out)
    uniq_out = {}
    for (key, value) in out.items():
        if key not in uniq_out.values() and key not in uniq_out.keys() and value not in uniq_out.keys() and value not in uniq_out.values():
            uniq_out[key] = value
        #elif value not in uniq_out.keys():
        #    uniq_out[key] = [value]
    #print(uniq_out)
    return(uniq_out)
    draw_topology(uniq_out, '/home/vagrant/my_repo/online-8-oleg-bosyuk/exercises/11_modules/1.svg')
Ejemplo n.º 2
0
def main():
    from draw_network_graph import draw_topology
    from task_11_1 import parse_cdp_neighbors
    list_of_files = [
        'sh_cpd_n_r1.txt', 'sh_cpd_n_r2.txt', 'sh_cpd_n_r3.txt',
        'sh_cpd_n_r1.txt'
    ]
    draw_topology(parse_cdp_neighbors('sw1_sh_cdp_neighbors.txt'))
Ejemplo n.º 3
0
def transform_topology(load_file_yaml: str):
    with open(load_file_yaml, 'r') as f:
        read_file = yaml.load(f, Loader=yaml.BaseLoader)
    dict_topology = dict(read_file)
    topology = dict()
    for host, intfs in dict_topology.items():
        for intf, r_device in intfs.items():
            r_device_tuple = tuple(*r_device.items())
            if not (r_device_tuple in topology):
                topology[(host, intf)] = r_device_tuple
    draw_topology(topology, 'topology.svg')
    return topology
Ejemplo n.º 4
0
def transform_topology(file):

    with open(file) as f:
        data = yaml.safe_load(f)
        #pprint (data)

        topology = {}
        for l_id, did_data in data.items():
            for l_port, remote_data in did_data.items():
                for r_id, r_port in remote_data.items():
                    topology[(l_id, l_port)] = (r_id, r_port)

        draw_topology(topology)
Ejemplo n.º 5
0
def create_network_map(filenames):
    full_topology = {}
    result = {}
    for filename in filenames:
        with open(filename, 'r') as f:
            full_topology.update(parse_cdp_neighbors(f.read()))
    # В result записываем только уникальные элементы
    for key, value in full_topology.items():
        if result.get(key) == value or result.get(value) == key:
            continue
        else:
            result[key] = value
    draw_topology(result, output_filename='task_11_2a_topology_my')
    return result
Ejemplo n.º 6
0
def complite_topology_cdp(dict_topology):

    #{('R4', 'Eth0/1'): ('R5', 'Eth0/1'),
    #('R4', 'Eth0/2'): ('R6', 'Eth0/0')}

    #'R6': {'Eth 0/1': {'R2': 'Eth 0/2'}},

    dict_test = dict()
    for key, val in dict_topology.items():
        for sub_key, sub_val in val.items():
            if not tuple(*sub_val.items()) in dict_test:
                dict_test[(key, sub_key)] = tuple(*sub_val.items())

    pprint(dict_test)
    draw_topology(dict_test)
Ejemplo n.º 7
0
def main():
    key = []
    res_keys = []
    from draw_network_graph import draw_topology
    from task_11_1 import parse_cdp_neighbors
    list_of_files = ['sh_cdp_n_r1.txt','sh_cdp_n_r2.txt','sh_cdp_n_r3.txt','sh_cdp_n_sw1.txt']
    res = {}
    for i in range(len(list_of_files)):
        k = parse_cdp_neighbors(list_of_files[i])
        key = list(k.keys())
        for j in range(len(key)):
            if res.get(k[key[j]],'no') =='no':
                res.update(k)
    print(res)
    draw_topology(res)
Ejemplo n.º 8
0
def create_network_map(filenames):
    '''
    Поочередно открываем каждый файл, обновляем словарь с помощью функции parse_cdp_neighbors
    В цикле проверяем, равен ли ключ значению второго словаря, если нет-добавляем
    '''
    draw_dict = {}
    fin_dict = {}
    for name in filenames:
        with open(name, 'r') as file:
            draw_dict.update(parse_cdp_neighbors(file.read()))
    for key in draw_dict.keys():
        if key not in fin_dict.values():  # Проверяем, нет ли зеркальных строк
            fin_dict[key] = draw_dict[
                key]  # Если нет, добавляем значение в словарь
    draw_topology(fin_dict)
    return fin_dict
def draw_topology_multi_devices(*args):
    files = {}
    for arg in args:
        files.update({
            k: v
            for k, v in parse_cdp_neighbors(arg).items() if files.get(v) != k
        })
    return draw_topology(files)
Ejemplo n.º 10
0
def transform_topology(yaml_topology_file):
    topology_dict = {}
    with open(yaml_topology_file, encoding='UTF-8') as f:
        from_yaml_dict = yaml.safe_load(f)
    for key, value in from_yaml_dict.items():
        topology_dict.update({(key, k): (kk, vv)
                              for k, v in value.items()
                              for kk, vv in v.items()})
    a = set(topology_dict.keys())
    b = set(topology_dict.values())
    c = list(a | b)
    topology_dict_new = {}
    for d in c:
        if d not in topology_dict_new.values():
            topology_dict_new.update({d: topology_dict[d]})
    draw_topology(topology_dict_new)
    return topology_dict
Ejemplo n.º 11
0
def create_network_map(filenames):
    result1 = {}
    result = {}
    for name in filenames:
        with open(name, 'r') as f:
            source = f.read()
            parse = parse_cdp_neighbors(source)
            result1.update(parse)
    keys_result = set(result1.keys())
    key_result = []
    for key in keys_result:
        result2 = {}
        if not (result1[key] in key_result):
            key_result.append(key)
            result2 = {key: result1[key]}
            result.update(result2)   
    draw_topology(result)
    return result
Ejemplo n.º 12
0
def create_network_map(filenames):
    topology_dict_temp = {}
    topology_dict = {}
    key_list = []
    value_list = []
    for item in filenames:
        with open(item) as file:
            show = file.read()
            temp_output = parse_cdp_neighbors(show)
            topology_dict_temp.update(temp_output)
            for key, value in topology_dict_temp.items():
                key_list.append(key)
                value_list.append(value)
                if key in value_list and value in key_list:
                    pass
                else:
                    topology_dict[key] = value
    return topology_dict
    draw_topology(topology_dict)
Ejemplo n.º 13
0
def create_network_map(filenames):
    '''
    Функция create_network_map обрабатывает вывод команды show cdp neighbors
    из нескольких файлов и объединяет его в одну общую топологию.

    У функции должен быть один параметр filenames (вместо него *args),
    который ожидает как аргумент список с именами файлов, в которых находится
    вывод команды show cdp neighbors.

    С помощью функции draw_topology из файла draw_network_graph.py рисуем схему на основании
    топологии, полученной с помощью функции create_network_map.

    Результат помещается в 'img/topology'
    '''

    map = {}

    key_list = []

    # открываем каждый файл как строку, формируем общий словарь из всех файлов-аргументов
    # с помощью функции parse_cdp_neighbors()
    for file in filenames:
        with open(file) as f:
            f_line = f.read()
            a = parse_cdp_neighbors(f_line)
            map.update(a)
    # проверяем полученный словарь на дублирование ключей и значений, исключаем дубли
    # всё, что дублируется, помещаем в список key_list
    for key in map.keys():
        for value in map.values():
            if key == value:
                key_list.append(key)
    # теперь удаляем из списка key_list первую половину значений (например, первые 3 из списка из 6 значений)
    # т.к. нужно удалить только дублирующиеся значения, а не все повторяющиеся
    for i in range(0, int((len(key_list)) / 2)):
        key_list.pop(0)
    for key1 in key_list:
        del map[key1]
    # рисуем топологию в 'img/topology'
    draw_topology(map)
    return map
Ejemplo n.º 14
0
def transform_topology(inputYamlFile):
	with open(inputYamlFile) as f:
		dict_topology = yaml.safe_load(f)
		#pprint (dict_topology)
		
		for key, value in dict_topology.items():
			#print (value)
			
			for sub_key1, sub_value1 in value.items():
				tuple_key = (key, sub_key1)
				#print (tuple_key)
				
				for sub_key2, sub_value2 in sub_value1.items():
					tuple_value = (sub_key2, sub_value2)
					
					if tuple_key not in final_dict.values():
						#print (tuple_value)
						final_dict[tuple_key] = tuple_value
	 
	#pprint (final_dict)
	draw_topology(final_dict)
	return final_dict
Ejemplo n.º 15
0
def create_network_map(filenames):
    from task_11_1 import parse_cdp_neighbors
    from draw_network_graph import draw_topology

    dictionary = {}
    for file in filenames:
        with open(file) as f:
            dictionary.update(parse_cdp_neighbors(f.read()))
            #print(dictionary)
    clean_dict = {}
    for key, value in dictionary.items() or dictionary.keys():
        if value in clean_dict.keys():
            pass
        elif key in clean_dict.items():
            pass
        else:
            clean_dict[key] = value
    #print(clean_dict)
    #draw_topology(clean_dict)
    return(draw_topology(clean_dict))
Ejemplo n.º 16
0
сгенерировать топологию, которая соответствует выводу
команды sh cdp neighbor в файле sw1_sh_cdp_neighbors.txt

Не копировать код функций parse_cdp_neighbors и draw_topology.

В итоге, должен быть сгенерировано изображение топологии.
Результат должен выглядеть так же, как схема в файле task_11_2_topology.svg

При этом:
* Интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.
* Расположение устройств на схеме может быть другим
* Соединения должны соответствовать схеме

Ограничение: Все задания надо выполнять используя только пройденные темы.
'''

from task_11_1 import parse_cdp_neighbors
from draw_network_graph import draw_topology

input = open('input2.txt')

topology_dict = (parse_cdp_neighbors(input))

#if __name__ == '__main__':
#    print (parse_cdp_neighbors(input))

print(topology_dict)
draw_topology(topology_dict)

input.close()
Ejemplo n.º 17
0
> apt-get install graphviz
> И модуль python для работы с graphviz:
> pip install graphviz
'''


def create_network_map(filenames):
    d = {}
    for file in filenames:
        with open(file) as src:
            d.update(parse_cdp_neighbors(src.read()))
    dd = d.copy()
    ddd = d.copy()
    for key, value in d.items():
        is_dubl = False
        for key1, value1 in dd.items():
            if key == value1 and value == key1:
                is_dubl = True
                break
        if key in dd: del dd[key]
        if is_dubl:
            del dd[value]
            del ddd[value]
    return ddd


files = [
    'sh_cdp_n_sw1.txt', 'sh_cdp_n_r1.txt', 'sh_cdp_n_r2.txt', 'sh_cdp_n_r3.txt'
]
draw_topology(create_network_map(files))
Ejemplo n.º 18
0
    with open(yaml_filename) as f:
        templates = yaml.safe_load(f)
    
    for device, link in templates.items():
        for local_intf, remote in link.items():
            result.update({(device, local_intf): list(remote.items())[0]})
    
    for key, value in result.copy().items():
        if result.get(value) == key:
            del result[key]
        
    return result
    
if __name__ == "__main__":
    #pprint(transform_topology('topology.yaml'))
    draw_topology(transform_topology('topology.yaml'))

"""
Натальино решение - заполнять пустой словарь, проверяя нет ли в нем уже вносимых данных
def transform_topology(topology_filename):
    with open(topology_filename) as f:
        raw_topology = yaml.load(f)
    
    formatted_topology = {}
    for l_device, peer in raw_topology.items():
        for l_intf, remote in peer.items():
            r_device, r_intf = list(remote.items())[0]
            if not (r_device, r_intf) in formatted_topology:
                formatted_topology[(l_device, l_intf)] = (r_device, r_intf)
                
    return formatted_topology
Ejemplo n.º 19
0
Результат должен выглядеть так же, как схема в файле task_17_2b_topology.svg

При этом:
* Интерфейсы должны быть записаны с пробелом Fa 0/0
* Расположение устройств на схеме может быть другим
* Соединения должны соответствовать схеме
* На схеме не должно быть дублирующихся линков


> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

'''

with open('topology.yaml', 'r') as f: 
        topology = yaml.safe_load(f) 
def transform_topology(i_topology):
    result = {} 
    for m_key in i_topology.keys(): 
        for intf_key in i_topology[m_key].keys(): 
            for re_host, re_port in i_topology[m_key][intf_key].items(): 
                if (re_host, re_port) not in result.keys():
                    result[(m_key, intf_key)] = (re_host, re_port)
    return result
#print(transform_topology(topology))
draw_topology(transform_topology(topology))
Ejemplo n.º 20
0
Не копировать код функций parse_cdp_neighbors и draw_topology.

В итоге, должен быть сгенерировано изображение топологии.
Результат должен выглядеть так же, как схема в файле task_11_2_topology.svg

При этом:
* Интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.
* Расположение устройств на схеме может быть другим
* Соединения должны соответствовать схеме

Ограничение: Все задания надо выполнять используя только пройденные темы.

> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

'''

from draw_network_graph import draw_topology
from task_11_1 import parse_cdp_neighbors

with open('sw1_sh_cdp_neighbors.txt') as file:
    oneline = file.read()

    cdp_dict = parse_cdp_neighbors(oneline)

draw_topology(cdp_dict)
Ejemplo n.º 21
0
					remote_device.append(line[0])
					#local_interface.append(local_device + ', ' + ''.join(map(str, line[1:3])))
					#remote_interface.append(str(line[0]) + ', ' + ''.join(map(str, line[-2:])))
					local_interface1 = (local_device + ' ' + ''.join(map(str, line[1:3])))
					#print(tuple(local_interface.split()))
					local_interface2 = tuple(local_interface1.split())
					remote_interface1 = (str(line[0]) + ' ' + ''.join(map(str, line[-2:])))
					#print(tuple(remote_interface.split()))
					remote_interface2 = tuple(remote_interface1.split())
					local_interface.append(local_interface2)
					remote_interface.append(remote_interface2)

	#local_interface1 = []
	#remote_interface1 = []
	#for i in local_interface:
	#	local_interface1.append(tuple(i.split()))
	#for j in remote_interface:
	#	remote_interface1.append(tuple(j.split()))
	cdp_dict = dict(zip(local_interface, remote_interface))
	#print(cdp_dict)
	return cdp_dict
	

#parse_cdp_neighbors('sh_cdp_n_sw1.txt')
cdp = parse_cdp_neighbors('sh_cdp_n_sw1.txt')
#cdp = {('sw1', 'eth0/1'): ('r1', 'eth0/0'), ('sw1', 'eth0/2'): ('r2', 'eth0/0'), ('sw1', 'eth0/3'): ('r3', 'eth0/0'), ('sw1', 'eth0/5'): ('r6', 'eth0/1')}
print(cdp)
#for key, item in cdp.items():
#	print(type(key), type(item))
draw_topology(cdp)
Ejemplo n.º 22
0
Результат должен выглядеть так же, как схема в файле task_11_2_topology.svg

При этом:
* Интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.
* Расположение устройств на схеме может быть другим
* Соединения должны соответствовать схеме

Ограничение: Все задания надо выполнять используя только пройденные темы.

> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

'''

from sys import argv
from task_11_1 import parse_cdp_neighbors
from draw_network_graph import draw_topology

if __name__ == '__main__':
    in_file_name = argv[1].strip()
    result_dict = {}

    f = open(in_file_name, 'r')
    result_dict = parse_cdp_neighbors(f.read())
    f.close()

    draw_topology(result_dict)
Ejemplo n.º 23
0
* На схеме не должно быть "дублирующихся" линков


> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

"""
import yaml
from draw_network_graph import draw_topology


def transform_topology(topology_filename):
    with open(topology_filename) as f:
        raw_topology = yaml.safe_load(f)

    formatted_topology = {}
    for l_device, peer in raw_topology.items():
        for l_int, remote in peer.items():
            r_device, r_int = list(remote.items())[0]
            if not (r_device, r_int) in formatted_topology:
                formatted_topology[(l_device, l_int)] = (r_device, r_int)
    return formatted_topology


if __name__ == "__main__":
    formatted_topology = transform_topology("topology.yaml")
    draw_topology(formatted_topology)
Ejemplo n.º 24
0

> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

"""

import yaml
from pprint import pprint
from draw_network_graph import draw_topology


def transform_topology(yfile):
    res = {}
    with open(yfile) as f:
        topo = yaml.safe_load(f)
    for lh, nei0 in topo.items():
        for lp, nei1 in nei0.items():
            for rp, rh in nei1.items():
                if res.get((rp, rh)) == None:
                    res[(lh, lp)] = (rp, rh)
    return (res)


if __name__ == '__main__':
    topo = transform_topology('topology.yaml')
    draw_topology(topo, 'topo')
Ejemplo n.º 25
0
            'Eth 0/1': {'R5': 'Eth 0/0'},
            'Eth 0/2': {'R6': 'Eth 0/1'}},
     ...
We need to convert it to smth like this:
    ('R1', 'Eth 0/0'):('SW1', 'Eth 0/1')
    ('R2', 'Eth 0/0'):('SW1', 'Eth 0/2')
    ('R2', 'Eth 0/1'):('R5', 'Eth 0/0')
    ...
'''
topology_dict = {}
for local_host, topo in from_yaml.items():
    for local_interface, remote in topo.items():
        for remote_host, remote_interface in remote.items():
            topology_dict[(local_host, local_interface)] = (remote_host,
                                                            remote_interface)
'''
topology_dict has duplicates
{('R1', 'Eth 0/0'): ('SW1', 'Eth 0/1'),
...
('SW1', 'Eth 0/1'): ('R1', 'Eth 0/0'),

We need to clear them. 
Form a new dictionary, if key is not in values in new dict, add this key-value pair to new dict.
'''
topology_cleared = {}
for key, value in topology_dict.items():
    if key not in topology_cleared.values():
        topology_cleared[key] = value

draw_topology(topology_cleared)
Ejemplo n.º 26
0
# рисоваться топология (после вызова функции)

import draw_network_graph as dng
from task_11_1 import parse_cdp_neighbors


def create_network_map(filenames):
    topol = dict()
    for file in filenames:
        with open(file) as f:
            topol.update(parse_cdp_neighbors(f.read()))
    for item in dict(topol):
        if item[0] in [val[0] for val in topol.values()] and topol[item][0] in [key[0] for key in topol.keys()]:
            topol.pop(item)
    print(topol)
    return topol


if __name__ == "__main__":
    infiles = [
        "sh_cdp_n_sw1.txt",
        "sh_cdp_n_r1.txt",
        "sh_cdp_n_r2.txt",
        "sh_cdp_n_r3.txt",
    ]

    topology = create_network_map(infiles)
    dng.draw_topology(topology)
    # рисуем топологию:
    # draw_topology(topology)
Ejemplo n.º 27
0
# эти заготовки написаны чтобы показать в какой момент должна
# рисоваться топология (после вызова функции)
from pprint import pprint
from draw_network_graph import draw_topology
from task_11_1 import parse_cdp_neighbors


def create_network_map(filenames):
    neighbors = []
    slovar = {}

    for chek in filenames:
        with open(chek) as files:
            parse_cdp_neighbors(files.read())
    pass

    print(slovar)


if __name__ == "__main__":
    infiles = [
        "sh_cdp_n_sw1.txt",
        "sh_cdp_n_r1.txt",
        "sh_cdp_n_r2.txt",
        "sh_cdp_n_r3.txt",
    ]

    topology = create_network_map(infiles)
    # рисуем топологию:
    draw_topology(topology)
Ejemplo n.º 28
0
* Соединения должны соответствовать схеме
* На схеме не должно быть дублирующихся линков


> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

'''
import yaml
from pprint import pprint
from draw_network_graph import draw_topology


def transform_topology(yaml_filename):
    draw_dict = {}
    with open(yaml_filename) as top:
        topology = yaml.safe_load(top)
        for k1, v1 in topology.items():
            for k2, v2 in v1.items():
                if not set(v2.items()) & set(draw_dict.keys()):
                    draw_dict.update({(k1, k2): (k3, v3)
                                      for k3, v3 in v2.items()})
    return draw_dict


pprint(transform_topology('topology.yaml'))
draw_topology(transform_topology('topology.yaml'),
              out_filename='my_17b_topology')
Ejemplo n.º 29
0
Ограничение: Все задания надо выполнять используя только пройденные темы.

> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

'''


def create_network_map(filenames):
    result_dict = {}

    for filename in filenames:
        with open(filename) as f:

            for key, value in parse_cdp_neighbors(f.read()).items():
                if not value in result_dict.keys():
                    result_dict.update({key: value})

    return result_dict


files = [
    'sh_cdp_n_sw1.txt', 'sh_cdp_n_r1.txt', 'sh_cdp_n_r2.txt', 'sh_cdp_n_r3.txt'
]
dict = create_network_map(files)
pprint(dict)
draw_topology(dict)
Ejemplo n.º 30
0
> Для выполнения этого задания, должен быть установлен graphviz:
> apt-get install graphviz

> И модуль python для работы с graphviz:
> pip install graphviz

R2 {'Eth 0/0': {'SW1': 'Eth 0/2'}, 'Eth 0/1': {'R5': 'Eth 0/0'}, 'Eth 0/2': {'R6': 'Eth 0/1'}}
R4 {'Eth 0/0': {'SW1': 'Eth 0/4'}, 'Eth 0/1': {'R5': 'Eth 0/1'}}
R6 {'Eth 0/1': {'R2': 'Eth 0/2'}}

"""
import yaml
from draw_network_graph import draw_topology

def transform_topology(fname):
    with open(fname) as f:
        raw=yaml.safe_load(f)
    dict1={}
    for dev,neigh in raw.items():
        #print(dev,neigh)
        for l_intf,remote in neigh.items():
            #print(l_intf,remote)
            r_dev, r_intf = list(remote.items())[0]
            if not (r_dev,r_intf) in dict1:
                dict1[(dev,l_intf)] = (r_dev,r_intf)
    return dict1

if __name__ == '__main__':
    a=transform_topology('topology.yaml')
    draw_topology(a)