add public_ipv4_first_usable_ip, public_ipv4_last_usable_ip
This commit is contained in:
		@ -35,17 +35,10 @@ 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
 | 
			
		||||
      network_start_int = int(ipaddress.ip_address(network["public_ipv4_first_usable_ip"]))
 | 
			
		||||
      network_end_int = int(ipaddress.ip_address(network["public_ipv4_last_usable_ip"]))
 | 
			
		||||
 | 
			
		||||
      ipv4_network = ipaddress.ip_network(network["public_ipv4_cidr_block"], False)
 | 
			
		||||
      network_end_int = -1
 | 
			
		||||
      for ipv4_address in ipv4_network: 
 | 
			
		||||
        network_end_int = int(ipv4_address)
 | 
			
		||||
      
 | 
			
		||||
      network['allocations'] = []
 | 
			
		||||
      network_addresses_width = float((network_end_int-network_start_int)+1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ def init_app(app, is_running_server):
 | 
			
		||||
  hasSchemaVersionTable = False
 | 
			
		||||
  actionWasTaken = False
 | 
			
		||||
  schemaVersion = 0
 | 
			
		||||
  desiredSchemaVersion = 17
 | 
			
		||||
  desiredSchemaVersion = 18
 | 
			
		||||
 | 
			
		||||
  cursor = connection.cursor()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -332,7 +332,9 @@ class DBModel:
 | 
			
		||||
 | 
			
		||||
  def list_hosts_with_networks(self, host_id: str):
 | 
			
		||||
    query = """
 | 
			
		||||
    SELECT hosts.id, hosts.last_health_check, host_network.network_name, host_network.public_ipv4_cidr_block FROM hosts
 | 
			
		||||
    SELECT hosts.id, hosts.last_health_check, host_network.network_name, 
 | 
			
		||||
    host_network.public_ipv4_cidr_block, host_network.public_ipv4_first_usable_ip, host_network.public_ipv4_last_usable_ip
 | 
			
		||||
    FROM hosts
 | 
			
		||||
    JOIN host_network ON host_network.host = hosts.id
 | 
			
		||||
    """
 | 
			
		||||
    if host_id is None: 
 | 
			
		||||
@ -351,7 +353,12 @@ class DBModel:
 | 
			
		||||
      if row[0] not in hosts:
 | 
			
		||||
        hosts[row[0]] = dict(last_health_check=row[1], networks=[])
 | 
			
		||||
 | 
			
		||||
      hosts[row[0]]["networks"].append(dict(network_name=row[2], public_ipv4_cidr_block=row[3]))
 | 
			
		||||
      hosts[row[0]]["networks"].append(dict(
 | 
			
		||||
        network_name=row[2], 
 | 
			
		||||
        public_ipv4_cidr_block=row[3], 
 | 
			
		||||
        public_ipv4_first_usable_ip=row[4], 
 | 
			
		||||
        public_ipv4_last_usable_ip=row[5]
 | 
			
		||||
      ))
 | 
			
		||||
 | 
			
		||||
    return hosts
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -142,14 +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)
 | 
			
		||||
    ipv4_first_usable_ip = network["public_ipv4_first_usable_ip"]
 | 
			
		||||
    ipv4_last_usable_ip = network["public_ipv4_last_usable_ip"]
 | 
			
		||||
        
 | 
			
		||||
    for ipv4_address in ipv4_network: 
 | 
			
		||||
      if int(ipv4_address) > ipv4_network_first_address_int and str(ipv4_address) not in claimed_ipv4s:
 | 
			
		||||
      within_usable_range = ipv4_first_usable_ip <= str(ipv4_address) and str(ipv4_address) <= ipv4_last_usable_ip
 | 
			
		||||
      if within_usable_range and str(ipv4_address) not in claimed_ipv4s:
 | 
			
		||||
        allocated_ipv4_address = str(ipv4_address)
 | 
			
		||||
        break 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ALTER TABLE host_network DROP COLUMN public_ipv4_first_usable_ip;
 | 
			
		||||
ALTER TABLE host_network DROP COLUMN public_ipv4_last_usable_ip;
 | 
			
		||||
 | 
			
		||||
UPDATE schemaversion SET version = 17;
 | 
			
		||||
							
								
								
									
										25
									
								
								capsulflask/schema_migrations/18_up_start_ip_end_ip.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								capsulflask/schema_migrations/18_up_start_ip_end_ip.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ALTER TABLE host_network ADD COLUMN public_ipv4_first_usable_ip TEXT;
 | 
			
		||||
ALTER TABLE host_network ADD COLUMN public_ipv4_last_usable_ip TEXT;
 | 
			
		||||
 | 
			
		||||
-- public1, 69.61.2.162/27
 | 
			
		||||
UPDATE host_network 
 | 
			
		||||
SET public_ipv4_first_usable_ip = '69.61.2.163', public_ipv4_last_usable_ip = '69.61.2.190' 
 | 
			
		||||
WHERE network_name = 'public1';
 | 
			
		||||
 | 
			
		||||
-- public2, 69.61.2.194/26
 | 
			
		||||
UPDATE host_network 
 | 
			
		||||
SET public_ipv4_first_usable_ip = '69.61.2.195', public_ipv4_last_usable_ip = '69.61.2.254' 
 | 
			
		||||
WHERE network_name = 'public2';
 | 
			
		||||
 | 
			
		||||
-- public3, 69.61.38.193/26
 | 
			
		||||
UPDATE host_network 
 | 
			
		||||
SET public_ipv4_first_usable_ip = '69.61.38.194', public_ipv4_last_usable_ip = '69.61.38.254' 
 | 
			
		||||
WHERE network_name = 'public3';
 | 
			
		||||
 | 
			
		||||
ALTER TABLE host_network ALTER COLUMN public_ipv4_first_usable_ip SET NOT NULL;
 | 
			
		||||
ALTER TABLE host_network ALTER COLUMN public_ipv4_last_usable_ip SET NOT NULL;
 | 
			
		||||
 | 
			
		||||
UPDATE schemaversion SET version = 18;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user