feat(bridges): next generation bridge management
This commit is contained in:
parent
20fad30a06
commit
05285a4ae6
12 changed files with 329 additions and 89 deletions
|
@ -1,6 +1,7 @@
|
|||
import datetime
|
||||
import os
|
||||
from typing import Iterable, Optional, Any, List
|
||||
import sys
|
||||
from typing import Optional, Any, List
|
||||
|
||||
from app import app
|
||||
from app.extensions import db
|
||||
|
@ -21,45 +22,12 @@ class BridgeAutomation(TerraformAutomation):
|
|||
in the templating of the Terraform configuration.
|
||||
"""
|
||||
|
||||
def create_missing(self) -> None:
|
||||
bridgeconfs: Iterable[BridgeConf] = BridgeConf.query.filter(
|
||||
BridgeConf.provider == self.provider,
|
||||
BridgeConf.destroyed.is_(None)
|
||||
).all()
|
||||
for bridgeconf in bridgeconfs:
|
||||
active_bridges = Bridge.query.filter(
|
||||
Bridge.conf_id == bridgeconf.id,
|
||||
Bridge.deprecated.is_(None)
|
||||
).all()
|
||||
if len(active_bridges) < bridgeconf.number:
|
||||
for _idx in range(bridgeconf.number - len(active_bridges)):
|
||||
bridge = Bridge()
|
||||
bridge.conf_id = bridgeconf.id
|
||||
bridge.added = datetime.datetime.utcnow()
|
||||
bridge.updated = datetime.datetime.utcnow()
|
||||
db.session.add(bridge)
|
||||
elif len(active_bridges) > bridgeconf.number:
|
||||
active_bridge_count = len(active_bridges)
|
||||
for bridge in active_bridges:
|
||||
bridge.deprecate(reason="redundant")
|
||||
active_bridge_count -= 1
|
||||
if active_bridge_count == bridgeconf.number:
|
||||
break
|
||||
db.session.commit()
|
||||
max_bridges = sys.maxsize
|
||||
|
||||
def destroy_expired(self) -> None:
|
||||
cutoff = datetime.datetime.utcnow() - datetime.timedelta(days=0)
|
||||
bridges = [b for b in Bridge.query.filter(
|
||||
Bridge.destroyed.is_(None),
|
||||
Bridge.deprecated < cutoff
|
||||
).all() if b.conf.provider == self.provider]
|
||||
for bridge in bridges:
|
||||
bridge.destroy()
|
||||
db.session.commit()
|
||||
# TODO: Only enable providers that have details configured
|
||||
enabled = True
|
||||
|
||||
def tf_prehook(self) -> Optional[Any]: # pylint: disable=useless-return
|
||||
self.create_missing()
|
||||
self.destroy_expired()
|
||||
return None
|
||||
|
||||
def tf_generate(self) -> None:
|
||||
|
@ -103,3 +71,11 @@ class BridgeAutomation(TerraformAutomation):
|
|||
bridge.bridgeline = " ".join(parts)
|
||||
bridge.terraform_updated = datetime.datetime.utcnow()
|
||||
db.session.commit()
|
||||
|
||||
@classmethod
|
||||
def active_bridges_count(self) -> int:
|
||||
active_bridges = Bridge.query.filter(
|
||||
Bridge.provider == self.provider,
|
||||
Bridge.destroyed.is_(None),
|
||||
).all()
|
||||
return len(active_bridges)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue