forked from 3wordchant/capsul-flask
implement ensure_vms_and_db_are_synced in cron task and add default
sender to readme
This commit is contained in:
parent
2f55ce904e
commit
e2c51d067e
@ -40,6 +40,7 @@ nano .env
|
|||||||
Enter your SMTP credentials like this:
|
Enter your SMTP credentials like this:
|
||||||
```
|
```
|
||||||
MAIL_USERNAME=forest@nullhex.com
|
MAIL_USERNAME=forest@nullhex.com
|
||||||
|
MAIL_DEFAULT_SENDER=forest@nullhex.com
|
||||||
MAIL_PASSWORD=**************
|
MAIL_PASSWORD=**************
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ app.config.from_mapping(
|
|||||||
SECRET_KEY=os.environ.get("SECRET_KEY", default="dev"),
|
SECRET_KEY=os.environ.get("SECRET_KEY", default="dev"),
|
||||||
VIRTUALIZATION_MODEL=os.environ.get("VIRTUALIZATION_MODEL", default="mock"),
|
VIRTUALIZATION_MODEL=os.environ.get("VIRTUALIZATION_MODEL", default="mock"),
|
||||||
LOG_LEVEL=os.environ.get("LOG_LEVEL", default="INFO"),
|
LOG_LEVEL=os.environ.get("LOG_LEVEL", default="INFO"),
|
||||||
|
ADMIN_EMAIL_ADDRESSES=os.environ.get("ADMIN_EMAIL_ADDRESSES", default="ops@cyberia.club"),
|
||||||
|
|
||||||
DATABASE_URL=os.environ.get("DATABASE_URL", default="sql://postgres:dev@localhost:5432/postgres"),
|
DATABASE_URL=os.environ.get("DATABASE_URL", default="sql://postgres:dev@localhost:5432/postgres"),
|
||||||
DATABASE_SCHEMA=os.environ.get("DATABASE_SCHEMA", default="public"),
|
DATABASE_SCHEMA=os.environ.get("DATABASE_SCHEMA", default="public"),
|
||||||
|
@ -243,5 +243,36 @@ def notify_users_about_account_balance():
|
|||||||
|
|
||||||
|
|
||||||
def ensure_vms_and_db_are_synced():
|
def ensure_vms_and_db_are_synced():
|
||||||
db_ids = get_model().all_vm_ids()
|
db_ids = get_model().all_non_deleted_vm_ids()
|
||||||
#virt_ids = current_app.config["VIRTUALIZATION_MODEL"].
|
virt_ids = current_app.config["VIRTUALIZATION_MODEL"].list_ids()
|
||||||
|
|
||||||
|
db_ids_dict = dict()
|
||||||
|
virt_ids_dict = dict()
|
||||||
|
|
||||||
|
for id in db_ids:
|
||||||
|
db_ids_dict[id] = True
|
||||||
|
|
||||||
|
for id in virt_ids:
|
||||||
|
virt_ids_dict[id] = True
|
||||||
|
|
||||||
|
errors = list()
|
||||||
|
|
||||||
|
for id in db_ids_dict:
|
||||||
|
if id not in virt_ids_dict:
|
||||||
|
errors.append(f"{id} is in the database but not in the virtualization model")
|
||||||
|
|
||||||
|
for id in virt_ids_dict:
|
||||||
|
if id not in db_ids_dict:
|
||||||
|
errors.append(f"{id} is in the virtualization model but not in the database")
|
||||||
|
|
||||||
|
if len(errors) > 0:
|
||||||
|
email_addresses_raw = current_app.config['ADMIN_EMAIL_ADDRESSES'].split(",")
|
||||||
|
email_addresses = list(filter(lambda x: len(x) > 6, map(lambda x: x.strip(), email_addresses_raw ) ))
|
||||||
|
current_app.config["FLASK_MAIL_INSTANCE"].send(
|
||||||
|
Message(
|
||||||
|
"Capsul Consistency Check Failed",
|
||||||
|
body="\n".join(errors),
|
||||||
|
recipients=email_addresses
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ from flask import session
|
|||||||
from flask import render_template
|
from flask import render_template
|
||||||
from flask import redirect
|
from flask import redirect
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from flask_mail import Message
|
|
||||||
from werkzeug.exceptions import abort
|
from werkzeug.exceptions import abort
|
||||||
from nanoid import generate
|
from nanoid import generate
|
||||||
|
|
||||||
|
@ -33,8 +33,8 @@ class DBModel:
|
|||||||
return email
|
return email
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def all_vm_ids(self,):
|
def all_non_deleted_vm_ids(self,):
|
||||||
self.cursor.execute("SELECT id FROM vms")
|
self.cursor.execute("SELECT id FROM vms WHERE deleted IS NULL")
|
||||||
return list(map(lambda x: x[0], self.cursor.fetchall()))
|
return list(map(lambda x: x[0], self.cursor.fetchall()))
|
||||||
|
|
||||||
def operating_systems_dict(self,):
|
def operating_systems_dict(self,):
|
||||||
|
@ -43,7 +43,7 @@ class MockVirtualization(VirtualizationInterface):
|
|||||||
return VirtualMachine(id, ipv4="1.1.1.1")
|
return VirtualMachine(id, ipv4="1.1.1.1")
|
||||||
|
|
||||||
def list_ids(self) -> list:
|
def list_ids(self) -> list:
|
||||||
return get_model().all_vm_ids()
|
return get_model().all_non_deleted_vm_ids()
|
||||||
|
|
||||||
def create(self, email: str, id: str, template_image_file_name: str, vcpus: int, memory_mb: int, ssh_public_keys: list):
|
def create(self, email: str, id: str, template_image_file_name: str, vcpus: int, memory_mb: int, ssh_public_keys: list):
|
||||||
validate_capsul_id(id)
|
validate_capsul_id(id)
|
||||||
|
Loading…
Reference in New Issue
Block a user