diff --git a/capsulflask/admin.py b/capsulflask/admin.py index 511c94d..49c685f 100644 --- a/capsulflask/admin.py +++ b/capsulflask/admin.py @@ -35,17 +35,16 @@ def index(): display_host = dict(name=host_id, networks=value['networks']) for network in display_host['networks']: + public_ipv4_cidr_block_split = network["public_ipv4_cidr_block"].split("/") + if len(public_ipv4_cidr_block_split) != 2: + raise ValueError(f"network {network['network_name']} has invalid cidr block {network['public_ipv4_cidr_block']}") + + network_start_int = int(ipaddress.ip_address(public_ipv4_cidr_block_split[0]))+1 + ipv4_network = ipaddress.ip_network(network["public_ipv4_cidr_block"], False) - network_start_int = -1 network_end_int = -1 - i = 0 for ipv4_address in ipv4_network: - i += 1 - if i > 2: - if network_start_int == -1: - network_start_int = int(ipv4_address) - - network_end_int = int(ipv4_address) + network_end_int = int(ipv4_address) network['allocations'] = [] network_addresses_width = float((network_end_int-network_start_int)) diff --git a/capsulflask/hub_api.py b/capsulflask/hub_api.py index 4d7e9cb..3482cf9 100644 --- a/capsulflask/hub_api.py +++ b/capsulflask/hub_api.py @@ -142,11 +142,14 @@ def can_claim_create(payload, host_id) -> (str, str): for vm in vms: claimed_ipv4s[vm['public_ipv4']] = True + public_ipv4_cidr_block_split = network["public_ipv4_cidr_block"].split("/") + if len(public_ipv4_cidr_block_split) != 2: + raise ValueError(f"network {network['network_name']} has invalid cidr block {network['public_ipv4_cidr_block']}") + + ipv4_network_first_address_int = int(ipaddress.ip_address(public_ipv4_cidr_block_split[0])) ipv4_network = ipaddress.ip_network(network["public_ipv4_cidr_block"], False) - i = 0 for ipv4_address in ipv4_network: - i += 1 - if i > 2 and str(ipv4_address) not in claimed_ipv4s: + if int(ipv4_address) > ipv4_network_first_address_int and str(ipv4_address) not in claimed_ipv4s: allocated_ipv4_address = str(ipv4_address) break