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