Optimize DHCP API requests

This commit is contained in:
Maël Kervella 2018-05-24 22:59:34 +00:00
parent 93c596c38e
commit 7ce469585b
2 changed files with 20 additions and 27 deletions

39
main.py
View file

@ -12,38 +12,31 @@ hostname = config.get('Re2o', 'hostname')
password = config.get('Re2o', 'password') password = config.get('Re2o', 'password')
username = config.get('Re2o', 'username') username = config.get('Re2o', 'username')
host_mac_ip = {}
api_client = Re2oAPIClient(hostname, username, password) api_client = Re2oAPIClient(hostname, username, password)
domains = api_client.list_domains()
extensions = api_client.list_extensions() for hmi in api_client.list_hostmacip(params={'page_size': 'all'}):
if hmi['extension'] not in host_mac_ip.keys():
host_mac_ip[hmi['extension']] = []
host_mac_ip[hmi['extension']].append((hmi['hostname'],
hmi['mac_address'],
hmi['ipv4']))
for extension in extensions: template = ("host {hostname}{extension} {{\n"
" hardware ethernet {mac_address};\n"
host_mac_ip = []
for domain in domains:
if domain['interface_parent'] is not None and \
api_client.get(domain['extension'])['name'] == extension['name']:
interface = api_client.get(domain['interface_parent'])
if interface['active']:
host_mac_ip.append((
domain['name'],
interface['mac_address'],
api_client.get(interface['ipv4'])['ipv4']
))
template = ("host {hostname}{extension} {{\n"
" hardware ethernet {mac};\n"
" fixed-address {ipv4};\n" " fixed-address {ipv4};\n"
"}}") "}}")
for extension, hmi_list in host_mac_ip.items():
dhcp_leases_content = '\n\n'.join(template.format( dhcp_leases_content = '\n\n'.join(template.format(
hostname=hostname, hostname=hostname,
extension=extension['name'], extension=extension,
mac=mac, mac_address=mac_address,
ipv4=ip ipv4=ipv4
) for hostname, mac, ip in host_mac_ip) ) for hostname, mac_address, ipv4 in hmi_list)
filename = 'dhcp-{extension}.list'.format(extension=extension['name'][1:]) filename = 'dhcp{extension}.list'.format(extension=extension)
with open(filename, 'w+') as f: with open(filename, 'w+') as f:
f.write(dhcp_leases_content) f.write(dhcp_leases_content)

@ -1 +1 @@
Subproject commit f151d483dc1c9bd59b18ea283ab734c91a72e18c Subproject commit de759e417d1046306372bf47a12f513b112dc6de