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
|
||||
from flask import current_app
|
||||
from flask import session
|
||||
from time import sleep
|
||||
from os.path import join
|
||||
from subprocess import run
|
||||
@ -51,21 +50,22 @@ class MockHub(VirtualizationInterface):
|
||||
|
||||
class CapsulFlaskHub(VirtualizationInterface):
|
||||
|
||||
def synchronous_operation(self, hosts: List[OnlineHost], payload: str) -> List[HTTPResult]:
|
||||
return self.generic_operation(hosts, payload, True)[1]
|
||||
def synchronous_operation(self, hosts: List[OnlineHost], email: str, payload: str) -> List[HTTPResult]:
|
||||
return self.generic_operation(hosts, email, payload, True)[1]
|
||||
|
||||
def asynchronous_operation(self, hosts: List[OnlineHost], payload: str) -> Tuple[int, List[HTTPResult]]:
|
||||
return self.generic_operation(hosts, payload, False)
|
||||
def asynchronous_operation(self, hosts: List[OnlineHost], email: str, payload: str) -> Tuple[int, List[HTTPResult]]:
|
||||
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"
|
||||
operation_id = None
|
||||
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)
|
||||
url_path = f"/spoke/operation/{operation_id}"
|
||||
|
||||
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)
|
||||
|
||||
@ -123,7 +123,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
def capacity_avaliable(self, additional_ram_bytes):
|
||||
online_hosts = get_model().get_online_hosts()
|
||||
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:
|
||||
try:
|
||||
result_body = json.loads(result.body)
|
||||
@ -140,7 +140,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
host = get_model().host_of_capsul(id)
|
||||
if host is not None:
|
||||
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:
|
||||
try:
|
||||
result_body = json.loads(result.body)
|
||||
@ -154,7 +154,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
def list_ids(self) -> list:
|
||||
online_hosts = get_model().get_online_hosts()
|
||||
payload = json.dumps(dict(type="list_ids"))
|
||||
results = self.synchronous_operation(online_hosts, payload)
|
||||
results = self.synchronous_operation(online_hosts, None, payload)
|
||||
to_return = []
|
||||
for i in range(len(results)):
|
||||
host = online_hosts[i]
|
||||
@ -193,7 +193,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
memory_mb=memory_mb,
|
||||
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]
|
||||
results = op[1]
|
||||
number_of_assigned = 0
|
||||
@ -226,7 +226,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
host = get_model().host_of_capsul(id)
|
||||
if host is not None:
|
||||
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>"
|
||||
for result in results:
|
||||
try:
|
||||
@ -247,7 +247,7 @@ class CapsulFlaskHub(VirtualizationInterface):
|
||||
host = get_model().host_of_capsul(id)
|
||||
if host is not None:
|
||||
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>"
|
||||
for result in results:
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user