forked from 3wordchant/capsul-flask
manually merging in the sshkeys to the spoke model/hub model interface
This commit is contained in:
parent
44ee42764c
commit
cc164dce01
@ -21,8 +21,17 @@ class MockHub(VirtualizationInterface):
|
|||||||
def capacity_avaliable(self, additional_ram_bytes):
|
def capacity_avaliable(self, additional_ram_bytes):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get(self, id):
|
def get(self, id, get_ssh_host_keys):
|
||||||
validate_capsul_id(id)
|
validate_capsul_id(id)
|
||||||
|
|
||||||
|
if get_ssh_host_keys:
|
||||||
|
ssh_host_keys = json.loads("""[
|
||||||
|
{"key_type":"ED25519", "content":"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN8cna0zeKSKl/r8whdn/KmDWhdzuWRVV0GaKIM+eshh", "sha256":"V4X2apAF6btGAfS45gmpldknoDX0ipJ5c6DLfZR2ttQ"},
|
||||||
|
{"key_type":"RSA", "content":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvotgzgEP65JUQ8S8OoNKy1uEEPEAcFetSp7QpONe6hj4wPgyFNgVtdoWdNcU19dX3hpdse0G8OlaMUTnNVuRlbIZXuifXQ2jTtCFUA2mmJ5bF+XjGm3TXKMNGh9PN+wEPUeWd14vZL+QPUMev5LmA8cawPiU5+vVMLid93HRBj118aCJFQxLgrdP48VPfKHFRfCR6TIjg1ii3dH4acdJAvlmJ3GFB6ICT42EmBqskz2MPe0rIFxH8YohCBbAbrbWYcptHt4e48h4UdpZdYOhEdv89GrT8BF2C5cbQ5i9qVpI57bXKrj8hPZU5of48UHLSpXG8mbH0YDiOQOfKX/Mt", "sha256":"ghee6KzRnBJhND2kEUZSaouk7CD6o6z2aAc8GPkV+GQ"},
|
||||||
|
{"key_type":"ECDSA", "content":"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLLgOoATz9R4aS2kk7vWoxX+lshK63t9+5BIHdzZeFE1o+shlcf0Wji8cN/L1+m3bi0uSETZDOAWMP3rHLJj9Hk=", "sha256":"aCYG1aD8cv/TjzJL0bi9jdabMGksdkfa7R8dCGm1yYs"}
|
||||||
|
]""")
|
||||||
|
return VirtualMachine(id, current_app.config["SPOKE_HOST_ID"], ipv4="1.1.1.1", ssh_host_keys=ssh_host_keys)
|
||||||
|
|
||||||
return VirtualMachine(id, current_app.config["SPOKE_HOST_ID"], ipv4="1.1.1.1")
|
return VirtualMachine(id, current_app.config["SPOKE_HOST_ID"], ipv4="1.1.1.1")
|
||||||
|
|
||||||
def list_ids(self) -> list:
|
def list_ids(self) -> list:
|
||||||
@ -123,17 +132,17 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def get(self, id) -> VirtualMachine:
|
def get(self, id, get_ssh_host_keys) -> VirtualMachine:
|
||||||
validate_capsul_id(id)
|
validate_capsul_id(id)
|
||||||
host = get_model().host_of_capsul(id)
|
host = get_model().host_of_capsul(id)
|
||||||
if host is not None:
|
if host is not None:
|
||||||
payload = json.dumps(dict(type="get", id=id))
|
payload = json.dumps(dict(type="get", id=id, get_ssh_host_keys=get_ssh_host_keys))
|
||||||
results = self.synchronous_operation([host], payload)
|
results = self.synchronous_operation([host], payload)
|
||||||
for result in results:
|
for result in results:
|
||||||
try:
|
try:
|
||||||
result_body = json.loads(result.body)
|
result_body = json.loads(result.body)
|
||||||
if isinstance(result_body, dict) and ('ipv4' in result_body or 'ipv6' in result_body):
|
if isinstance(result_body, dict) and ('ipv4' in result_body or 'ipv6' in result_body):
|
||||||
return VirtualMachine(id, host=host, ipv4=result_body['ipv4'], ipv6=result_body['ipv6'])
|
return VirtualMachine(id, host=host, ipv4=result_body['ipv4'], ipv6=result_body['ipv6'], ssh_host_keys=result_body['ssh_host_keys'])
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ def operation_with_id(operation_id: int):
|
|||||||
def operation_without_id():
|
def operation_without_id():
|
||||||
return operation_impl(None)
|
return operation_impl(None)
|
||||||
|
|
||||||
def operation_impl(operation_id: int):
|
def operation_impl(operation_id: int|None):
|
||||||
if authorized_as_hub(request.headers):
|
if authorized_as_hub(request.headers):
|
||||||
request_body_json = request.json
|
request_body_json = request.json
|
||||||
request_body = json.loads(request_body_json)
|
request_body = json.loads(request_body_json)
|
||||||
@ -89,9 +89,9 @@ def handle_get(operation_id, request_body):
|
|||||||
current_app.logger.error(f"/hosts/operation returned 400: id is required for get")
|
current_app.logger.error(f"/hosts/operation returned 400: id is required for get")
|
||||||
return abort(400, f"bad request; id is required for get")
|
return abort(400, f"bad request; id is required for get")
|
||||||
|
|
||||||
vm = current_app.config['SPOKE_MODEL'].get(request_body['id'])
|
vm = current_app.config['SPOKE_MODEL'].get(request_body['id'], request_body['get_ssh_host_keys'])
|
||||||
|
|
||||||
return jsonify(dict(assignment_status="assigned", id=vm.id, host=vm.host, ipv4=vm.ipv4, ipv6=vm.ipv6))
|
return jsonify(dict(assignment_status="assigned", id=vm.id, host=vm.host, ipv4=vm.ipv4, ipv6=vm.ipv6, ssh_host_keys=vm.ssh_host_keys))
|
||||||
|
|
||||||
def handle_list_ids(operation_id, request_body):
|
def handle_list_ids(operation_id, request_body):
|
||||||
return jsonify(dict(assignment_status="assigned", ids=current_app.config['SPOKE_MODEL'].list_ids()))
|
return jsonify(dict(assignment_status="assigned", ids=current_app.config['SPOKE_MODEL'].list_ids()))
|
||||||
|
Loading…
Reference in New Issue
Block a user