forked from 3wordchant/capsul-flask
hub allocate capsul IP addr when the create operation is being claimed
create.sh will now be passed two extra arguments from the web app: network_name and public_ipv4_address network_name will be virbr1 or virbr2 or whatever the network is called and public_ipv4_address will be an ipv4 from that network which is not currently being used
This commit is contained in:
@ -115,14 +115,29 @@ def handle_create(operation_id, request_body):
|
||||
return abort(400, f"bad request; {error_message}")
|
||||
|
||||
# only one host should create the vm, so we first race to assign this create operation to ourselves.
|
||||
# only one host will win this race
|
||||
# only one host will win this race.
|
||||
authorization_header = f"Bearer {current_app.config['SPOKE_HOST_TOKEN']}"
|
||||
url = f"{current_app.config['HUB_URL']}/hub/claim-operation/{operation_id}/{current_app.config['SPOKE_HOST_ID']}"
|
||||
result = current_app.config['HTTP_CLIENT'].do_http_sync(url, body=None, authorization_header=authorization_header)
|
||||
|
||||
assignment_status = ""
|
||||
if result.status_code == 200:
|
||||
try:
|
||||
assignment_info = json.loads(result.body)
|
||||
if not isinstance(assignment_info, dict):
|
||||
return abort(503, f"hub at '{url}' returned 200, but did not return assignment_info json object")
|
||||
if 'network_name' not in assignment_info:
|
||||
return abort(503, f"hub at '{url}' returned 200, but the returned assignment_info object did not include network_name")
|
||||
if 'public_ipv4_address' not in assignment_info:
|
||||
return abort(503, f"hub at '{url}' returned 200, but the returned assignment_info object did not include public_ipv4_address")
|
||||
|
||||
request_body['network_name'] = assignment_info['network_name']
|
||||
request_body['public_ipv4_address'] = assignment_info['public_ipv4_address']
|
||||
except:
|
||||
return abort(503, f"hub at '{url}' returned 200, but did not return valid json")
|
||||
|
||||
assignment_status = "assigned"
|
||||
|
||||
elif result.status_code == 409:
|
||||
assignment_status = "assigned_to_other_host"
|
||||
else:
|
||||
@ -138,6 +153,8 @@ def handle_create(operation_id, request_body):
|
||||
vcpus=request_body['vcpus'],
|
||||
memory_mb=request_body['memory_mb'],
|
||||
ssh_authorized_keys=request_body['ssh_authorized_keys'],
|
||||
network_name=request_body['network_name'],
|
||||
public_ipv4_address=request_body['public_ipv4_address'],
|
||||
)
|
||||
except:
|
||||
error_message = my_exec_info_message(sys.exc_info())
|
||||
@ -147,7 +164,11 @@ def handle_create(operation_id, request_body):
|
||||
params= f"{params} vcpus='{request_body['vcpus'] if 'vcpus' in request_body else 'KeyError'}', "
|
||||
params= f"{params} memory_mb='{request_body['memory_mb'] if 'memory_mb' in request_body else 'KeyError'}', "
|
||||
params= f"{params} ssh_authorized_keys='{request_body['ssh_authorized_keys'] if 'ssh_authorized_keys' in request_body else 'KeyError'}', "
|
||||
params= f"{params} network_name='{request_body['network_name'] if 'network_name' in request_body else 'KeyError'}', "
|
||||
params= f"{params} public_ipv4_address='{request_body['public_ipv4_address'] if 'public_ipv4_address' in request_body else 'KeyError'}', "
|
||||
|
||||
current_app.logger.error(f"spoke_model.create({params}) failed: {error_message}")
|
||||
|
||||
return jsonify(dict(assignment_status=assignment_status, error_message=error_message))
|
||||
|
||||
return jsonify(dict(assignment_status=assignment_status))
|
||||
|
Reference in New Issue
Block a user