outposts: ensure embedded outpost is created with integration selected
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
f9382b8458
commit
293c479364
|
@ -1,5 +1,5 @@
|
||||||
"""Managed objects manager"""
|
"""Managed objects manager"""
|
||||||
from typing import Type
|
from typing import Callable, Optional, Type
|
||||||
|
|
||||||
from structlog.stdlib import get_logger
|
from structlog.stdlib import get_logger
|
||||||
|
|
||||||
|
@ -28,14 +28,28 @@ class EnsureOp:
|
||||||
class EnsureExists(EnsureOp):
|
class EnsureExists(EnsureOp):
|
||||||
"""Ensure object exists, with kwargs as given values"""
|
"""Ensure object exists, with kwargs as given values"""
|
||||||
|
|
||||||
|
created_callback: Optional[Callable]
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
obj: Type[ManagedModel],
|
||||||
|
managed_uid: str,
|
||||||
|
created_callback: Optional[Callable] = None,
|
||||||
|
**kwargs,
|
||||||
|
) -> None:
|
||||||
|
super().__init__(obj, managed_uid, **kwargs)
|
||||||
|
self.created_callback = created_callback
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self._kwargs.setdefault("managed", self._managed_uid)
|
self._kwargs.setdefault("managed", self._managed_uid)
|
||||||
self._obj.objects.update_or_create(
|
obj, created = self._obj.objects.update_or_create(
|
||||||
**{
|
**{
|
||||||
"managed": self._managed_uid,
|
"managed": self._managed_uid,
|
||||||
"defaults": self._kwargs,
|
"defaults": self._kwargs,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
if created and self.created_callback is not None:
|
||||||
|
self.created_callback(obj)
|
||||||
|
|
||||||
|
|
||||||
class ObjectManager:
|
class ObjectManager:
|
||||||
|
|
|
@ -2,7 +2,13 @@
|
||||||
from dataclasses import asdict
|
from dataclasses import asdict
|
||||||
|
|
||||||
from authentik.managed.manager import EnsureExists, ObjectManager
|
from authentik.managed.manager import EnsureExists, ObjectManager
|
||||||
from authentik.outposts.models import Outpost, OutpostConfig, OutpostType
|
from authentik.outposts.models import (
|
||||||
|
DockerServiceConnection,
|
||||||
|
KubernetesServiceConnection,
|
||||||
|
Outpost,
|
||||||
|
OutpostConfig,
|
||||||
|
OutpostType,
|
||||||
|
)
|
||||||
|
|
||||||
MANAGED_OUTPOST = "goauthentik.io/outposts/embedded"
|
MANAGED_OUTPOST = "goauthentik.io/outposts/embedded"
|
||||||
|
|
||||||
|
@ -11,10 +17,20 @@ class OutpostManager(ObjectManager):
|
||||||
"""Outpost managed objects"""
|
"""Outpost managed objects"""
|
||||||
|
|
||||||
def reconcile(self):
|
def reconcile(self):
|
||||||
|
def outpost_created(outpost: Outpost):
|
||||||
|
"""When outpost is initially created, and we already have a service connection,
|
||||||
|
auto-assign it."""
|
||||||
|
if KubernetesServiceConnection.objects.exists():
|
||||||
|
outpost.service_connection = KubernetesServiceConnection.objects.first()
|
||||||
|
elif DockerServiceConnection.objects.exists():
|
||||||
|
outpost.service_connection = DockerServiceConnection.objects.first()
|
||||||
|
outpost.save()
|
||||||
|
|
||||||
return [
|
return [
|
||||||
EnsureExists(
|
EnsureExists(
|
||||||
Outpost,
|
Outpost,
|
||||||
MANAGED_OUTPOST,
|
MANAGED_OUTPOST,
|
||||||
|
created_callback=outpost_created,
|
||||||
name="authentik Embedded Outpost",
|
name="authentik Embedded Outpost",
|
||||||
type=OutpostType.PROXY,
|
type=OutpostType.PROXY,
|
||||||
_config=asdict(
|
_config=asdict(
|
||||||
|
|
Reference in New Issue