blueprints: correctly load on fresh install
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
d88ce7a43f
commit
3cd0a782af
|
@ -1,21 +1,51 @@
|
||||||
# Generated by Django 4.0.6 on 2022-07-31 17:35
|
# Generated by Django 4.0.6 on 2022-07-31 17:35
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from glob import glob
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import django.contrib.postgres.fields
|
import django.contrib.postgres.fields
|
||||||
from django.apps.registry import Apps
|
from django.apps.registry import Apps
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
|
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
|
||||||
|
from yaml import load
|
||||||
|
|
||||||
|
from authentik.lib.config import CONFIG
|
||||||
|
|
||||||
|
|
||||||
|
def check_blueprint_v1_file(BlueprintInstance: type["BlueprintInstance"], path: Path):
|
||||||
|
"""Check if blueprint should be imported"""
|
||||||
|
from authentik.blueprints.models import BlueprintInstanceStatus
|
||||||
|
from authentik.blueprints.v1.common import BlueprintLoader
|
||||||
|
|
||||||
|
with open(path, "r", encoding="utf-8") as blueprint_file:
|
||||||
|
raw_blueprint = load(blueprint_file.read(), BlueprintLoader)
|
||||||
|
version = raw_blueprint.get("version", 1)
|
||||||
|
if version != 1:
|
||||||
|
return
|
||||||
|
blueprint_file.seek(0)
|
||||||
|
instance: BlueprintInstance = BlueprintInstance.objects.filter(path=path).first()
|
||||||
|
if not instance:
|
||||||
|
instance = BlueprintInstance(
|
||||||
|
name=path.name,
|
||||||
|
path=str(path),
|
||||||
|
context={},
|
||||||
|
status=BlueprintInstanceStatus.UNKNOWN,
|
||||||
|
enabled=True,
|
||||||
|
managed_models=[],
|
||||||
|
last_applied_hash="",
|
||||||
|
)
|
||||||
|
instance.save()
|
||||||
|
|
||||||
|
|
||||||
def migration_blueprint_import(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
|
def migration_blueprint_import(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
|
||||||
from authentik.blueprints.v1.tasks import blueprints_discover
|
|
||||||
|
|
||||||
BlueprintInstance = apps.get_model("authentik_blueprints", "BlueprintInstance")
|
BlueprintInstance = apps.get_model("authentik_blueprints", "BlueprintInstance")
|
||||||
Flow = apps.get_model("authentik_flows", "Flow")
|
Flow = apps.get_model("authentik_flows", "Flow")
|
||||||
|
|
||||||
db_alias = schema_editor.connection.alias
|
db_alias = schema_editor.connection.alias
|
||||||
blueprints_discover()
|
for folder in CONFIG.y("blueprint_locations"):
|
||||||
|
for file in glob(f"{folder}/**/*.yaml", recursive=True):
|
||||||
|
check_blueprint_v1_file(BlueprintInstance, Path(file))
|
||||||
|
|
||||||
for blueprint in BlueprintInstance.objects.using(db_alias).all():
|
for blueprint in BlueprintInstance.objects.using(db_alias).all():
|
||||||
# If we already have flows (and we should always run before flow migrations)
|
# If we already have flows (and we should always run before flow migrations)
|
||||||
# then this is an existing install and we want to disable all blueprints
|
# then this is an existing install and we want to disable all blueprints
|
||||||
|
|
|
@ -63,7 +63,7 @@ def apply_blueprint(self: MonitoredTask, instance_pk: str):
|
||||||
self.save_on_success = False
|
self.save_on_success = False
|
||||||
try:
|
try:
|
||||||
instance: BlueprintInstance = BlueprintInstance.objects.filter(pk=instance_pk).first()
|
instance: BlueprintInstance = BlueprintInstance.objects.filter(pk=instance_pk).first()
|
||||||
if not instance:
|
if not instance or not instance.enabled:
|
||||||
return
|
return
|
||||||
with open(instance.path, "r", encoding="utf-8") as blueprint_file:
|
with open(instance.path, "r", encoding="utf-8") as blueprint_file:
|
||||||
importer = Importer(blueprint_file.read())
|
importer = Importer(blueprint_file.read())
|
||||||
|
|
Reference in New Issue