From 7ce469585b77a7b5c2ff215dfabe490e1e3afedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Thu, 24 May 2018 22:59:34 +0000 Subject: [PATCH] Optimize DHCP API requests --- main.py | 47 ++++++++++++++++++++--------------------------- re2oapi | 2 +- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/main.py b/main.py index da3dc16..f211888 100644 --- a/main.py +++ b/main.py @@ -12,38 +12,31 @@ hostname = config.get('Re2o', 'hostname') password = config.get('Re2o', 'password') username = config.get('Re2o', 'username') + +host_mac_ip = {} api_client = Re2oAPIClient(hostname, username, password) -domains = api_client.list_domains() - -extensions = api_client.list_extensions() - -for extension in extensions: - - 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" - "}}") + +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'])) +template = ("host {hostname}{extension} {{\n" + " hardware ethernet {mac_address};\n" + " fixed-address {ipv4};\n" + "}}") + +for extension, hmi_list in host_mac_ip.items(): dhcp_leases_content = '\n\n'.join(template.format( hostname=hostname, - extension=extension['name'], - mac=mac, - ipv4=ip - ) for hostname, mac, ip in host_mac_ip) + extension=extension, + mac_address=mac_address, + ipv4=ipv4 + ) 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: f.write(dhcp_leases_content) diff --git a/re2oapi b/re2oapi index f151d48..de759e4 160000 --- a/re2oapi +++ b/re2oapi @@ -1 +1 @@ -Subproject commit f151d483dc1c9bd59b18ea283ab734c91a72e18c +Subproject commit de759e417d1046306372bf47a12f513b112dc6de