forked from 3wordchant/capsul-flask
fix http session being used inside hub model
This commit is contained in:
parent
70628039c4
commit
b32db058f0
@ -8,7 +8,6 @@ from typing import List, Tuple
|
|||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from flask import session
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from os.path import join
|
from os.path import join
|
||||||
from subprocess import run
|
from subprocess import run
|
||||||
@ -51,21 +50,22 @@ class MockHub(VirtualizationInterface):
|
|||||||
|
|
||||||
class CapsulFlaskHub(VirtualizationInterface):
|
class CapsulFlaskHub(VirtualizationInterface):
|
||||||
|
|
||||||
def synchronous_operation(self, hosts: List[OnlineHost], payload: str) -> List[HTTPResult]:
|
def synchronous_operation(self, hosts: List[OnlineHost], email: str, payload: str) -> List[HTTPResult]:
|
||||||
return self.generic_operation(hosts, payload, True)[1]
|
return self.generic_operation(hosts, email, payload, True)[1]
|
||||||
|
|
||||||
def asynchronous_operation(self, hosts: List[OnlineHost], payload: str) -> Tuple[int, List[HTTPResult]]:
|
def asynchronous_operation(self, hosts: List[OnlineHost], email: str, payload: str) -> Tuple[int, List[HTTPResult]]:
|
||||||
return self.generic_operation(hosts, payload, False)
|
return self.generic_operation(hosts, email, payload, False)
|
||||||
|
|
||||||
|
def generic_operation(self, hosts: List[OnlineHost], email: str, payload: str, immediate_mode: bool) -> Tuple[int, List[HTTPResult]]:
|
||||||
|
|
||||||
def generic_operation(self, hosts: List[OnlineHost], payload: str, immediate_mode: bool) -> Tuple[int, List[HTTPResult]]:
|
|
||||||
email = session["account"]
|
|
||||||
if not email or email == "":
|
|
||||||
raise ValueError("generic_operation was called but user was not logged in")
|
|
||||||
url_path = "/spoke/operation"
|
url_path = "/spoke/operation"
|
||||||
operation_id = None
|
operation_id = None
|
||||||
if not immediate_mode:
|
if not immediate_mode:
|
||||||
|
if not email or email == "":
|
||||||
|
raise ValueError("can't create_operation in the db cuz no email was provided")
|
||||||
operation_id = get_model().create_operation(hosts, email, payload)
|
operation_id = get_model().create_operation(hosts, email, payload)
|
||||||
url_path = f"/spoke/operation/{operation_id}"
|
url_path = f"/spoke/operation/{operation_id}"
|
||||||
|
|
||||||
authorization_header = f"Bearer {current_app.config['HUB_TOKEN']}"
|
authorization_header = f"Bearer {current_app.config['HUB_TOKEN']}"
|
||||||
results = current_app.config["HTTP_CLIENT"].do_multi_http_sync(hosts, url_path, payload, authorization_header=authorization_header)
|
results = current_app.config["HTTP_CLIENT"].do_multi_http_sync(hosts, url_path, payload, authorization_header=authorization_header)
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
def capacity_avaliable(self, additional_ram_bytes):
|
def capacity_avaliable(self, additional_ram_bytes):
|
||||||
online_hosts = get_model().get_online_hosts()
|
online_hosts = get_model().get_online_hosts()
|
||||||
payload = json.dumps(dict(type="capacity_avaliable", additional_ram_bytes=additional_ram_bytes))
|
payload = json.dumps(dict(type="capacity_avaliable", additional_ram_bytes=additional_ram_bytes))
|
||||||
results = self.synchronous_operation(online_hosts, payload)
|
results = self.synchronous_operation(online_hosts, None, payload)
|
||||||
for result in results:
|
for result in results:
|
||||||
try:
|
try:
|
||||||
result_body = json.loads(result.body)
|
result_body = json.loads(result.body)
|
||||||
@ -140,7 +140,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
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, get_ssh_host_keys=get_ssh_host_keys))
|
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], None, payload)
|
||||||
for result in results:
|
for result in results:
|
||||||
try:
|
try:
|
||||||
result_body = json.loads(result.body)
|
result_body = json.loads(result.body)
|
||||||
@ -154,7 +154,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
def list_ids(self) -> list:
|
def list_ids(self) -> list:
|
||||||
online_hosts = get_model().get_online_hosts()
|
online_hosts = get_model().get_online_hosts()
|
||||||
payload = json.dumps(dict(type="list_ids"))
|
payload = json.dumps(dict(type="list_ids"))
|
||||||
results = self.synchronous_operation(online_hosts, payload)
|
results = self.synchronous_operation(online_hosts, None, payload)
|
||||||
to_return = []
|
to_return = []
|
||||||
for i in range(len(results)):
|
for i in range(len(results)):
|
||||||
host = online_hosts[i]
|
host = online_hosts[i]
|
||||||
@ -193,7 +193,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
memory_mb=memory_mb,
|
memory_mb=memory_mb,
|
||||||
ssh_authorized_keys=ssh_authorized_keys,
|
ssh_authorized_keys=ssh_authorized_keys,
|
||||||
))
|
))
|
||||||
op = self.asynchronous_operation(online_hosts, payload)
|
op = self.asynchronous_operation(online_hosts, email, payload)
|
||||||
operation_id = op[0]
|
operation_id = op[0]
|
||||||
results = op[1]
|
results = op[1]
|
||||||
number_of_assigned = 0
|
number_of_assigned = 0
|
||||||
@ -226,7 +226,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
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="destroy", email=email, id=id))
|
payload = json.dumps(dict(type="destroy", email=email, id=id))
|
||||||
results = self.synchronous_operation([host], payload)
|
results = self.synchronous_operation([host], email, payload)
|
||||||
result_json_string = "<no response from host>"
|
result_json_string = "<no response from host>"
|
||||||
for result in results:
|
for result in results:
|
||||||
try:
|
try:
|
||||||
@ -247,7 +247,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
|||||||
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="vm_state_command", email=email, id=id, command=command))
|
payload = json.dumps(dict(type="vm_state_command", email=email, id=id, command=command))
|
||||||
results = self.synchronous_operation([host], payload)
|
results = self.synchronous_operation([host], email, payload)
|
||||||
result_json_string = "<no response from host>"
|
result_json_string = "<no response from host>"
|
||||||
for result in results:
|
for result in results:
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user