yaml switches: cisco1: vendor: cisco model: 2960 ip: 10.0.0.1 cisco2: vendor: cisco model: 3750 ip: 10.0.0.2 hp1: vendor: hp model: 1920 ip: 10.0.0.3
1. Написать Python объект "switches" в YAML формат
yaml switches: cisco1: vendor: cisco model: 2960 ip: 10.0.0.1 cisco2: vendor: cisco model: 3750 ip: 10.0.0.2 hp1: vendor: hp model: 1920 ip: 10.0.0.3
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
- Написать Python объект "switches" в YAML формат
- Преобразовать "switches" так, что в нём остались "cisco" коммутаторы
- В команде standardise_macaddr получить последний адрес хоста в сети "172.16.0.0/28"
- Распарсить "dhcp_snooping_table" в список словарей вида:
dhcp_snooping_table_parsed = [
{
"mac": "00:E9:BC:3F:A6:50",
"ip": "100.1.1.6",
"interface": "FastEthernet0/20",
},
{
"mac": "00:E9:22:11:A6:50",
"ip": "100.1.1.7",
"interface": "FastEthernet0/21",
}
]
- Написать класс "NetworkSubnet" который имеет 2 метода:
- get_subnet - возвращает первую доступную подсеть указанной длины в виде объекта класса IPv4Network
- show_network_pool - возвращает список доступных подсетей
Ответ
yaml switches: cisco1: vendor: cisco model: 2960 ip: 10.0.0.1 cisco2: vendor: cisco model: 3750 ip: 10.0.0.2 hp1: vendor: hp model: 1920 ip: 10.0.0.3
---
# Фильтрация только cisco коммутаторов
```python
import yaml
with open('switches.yaml') as f:
switches = yaml.safe_load(f)
cisco_switches = {k: v for k, v in switches['switches'].items() if v['vendor'] == 'cisco'}
Получение последнего адреса хоста в сети 172.16.0.0/28
import ipaddress
network = ipaddress.IPv4Network('172.16.0.0/28')
last_host = str(list(network.hosts())[-1])
print(last_host) # 172.16.0.14
Парсинг dhcp_snooping_table в список словарей
dhcp_snooping_table = '''
00:E9:BC:3F:A6:50 100.1.1.6 FastEthernet0/20
00:E9:22:11:A6:50 100.1.1.7 FastEthernet0/21
'''
lines = dhcp_snooping_table.strip().split('\n')
dhcp_snooping_table_parsed = []
for line in lines:
mac, ip, interface = line.split()
dhcp_snooping_table_parsed.append({
'mac': mac,
'ip': ip,
'interface': interface
})
Класс NetworkSubnet
import ipaddress
class NetworkSubnet:
def __init__(self, network):
self.network = ipaddress.IPv4Network(network)
self.used_subnets = []
def get_subnet(self, prefixlen):
for subnet in self.network.subnets(new_prefix=prefixlen):
if subnet not in self.used_subnets:
self.used_subnets.append(subnet)
return subnet
return None
def show_network_pool(self):
all_subnets = list(self.network.subnets())
available = [s for s in all_subnets if s not in self.used_subnets]
return available
# Пример использования
net = NetworkSubnet('192.168.0.0/24')
subnet = net.get_subnet(28)
print(subnet) # 192.168.0.0/28
print(net.show_network_pool())