feat: allow proxy provider to reference an outpost to be added to
CI / image check (pull_request) Failing after 6s
CI / install-dependencies (pull_request) Successful in 1m23s
CI / build check (pull_request) Successful in 28s
CI / test (pull_request) Successful in 27s
CI / check lint (pull_request) Successful in 3m7s
CI / check format (pull_request) Successful in 7m40s
CI / image check (pull_request) Failing after 6s
CI / install-dependencies (pull_request) Successful in 1m23s
CI / build check (pull_request) Successful in 28s
CI / test (pull_request) Successful in 27s
CI / check lint (pull_request) Successful in 3m7s
CI / check format (pull_request) Successful in 7m40s
This commit is contained in:
@@ -166,6 +166,12 @@ func (c *ProxyProviderController) reconcileDelete(ctx context.Context, pp *v1alp
|
||||
return fmt.Errorf("error parsing PK: %v", err)
|
||||
}
|
||||
|
||||
err = c.reconcileOutpost(ctx, pp.Spec.Outpost, int32(pk), ReconcileOutpostModeRemove)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error when calling `reconcileOutpost`: %w", err)
|
||||
}
|
||||
|
||||
// Delete ProxyProvider
|
||||
r, err := c.authentik.ProvidersApi.ProvidersProxyDestroy(ctx, int32(pk)).Execute()
|
||||
if err != nil {
|
||||
// This handles an edge-case, where when the ProxyProvider on Authentik has already been deleted, but the finalizer is still present. We just remove the finalizer and return.
|
||||
@@ -225,6 +231,11 @@ func (c *ProxyProviderController) reconcileCreate(ctx context.Context, pp *v1alp
|
||||
return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyCreate`: %w with response %v", err, r)
|
||||
}
|
||||
|
||||
err = c.reconcileOutpost(ctx, pp.Spec.Outpost, resp.Pk, ReconcileOutpostModeAdd)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error when calling `reconcileOutpost`: %w", err)
|
||||
}
|
||||
|
||||
pp.Status.PK = strconv.Itoa(int(resp.Pk))
|
||||
return c.updateProxyProviderStatus(ctx, pp)
|
||||
}
|
||||
@@ -244,3 +255,51 @@ func (c *ProxyProviderController) updateProxyProvider(ctx context.Context, pp *v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ReconcileOutpostMode string
|
||||
|
||||
const (
|
||||
ReconcileOutpostModeAdd ReconcileOutpostMode = "add"
|
||||
ReconcileOutpostModeRemove ReconcileOutpostMode = "remove"
|
||||
)
|
||||
|
||||
func (c *ProxyProviderController) reconcileOutpost(ctx context.Context, outpostId string, providerPk int32, mode ReconcileOutpostMode) error {
|
||||
logger := klog.LoggerWithValues(klog.FromContext(ctx), "outpostId", outpostId, "providerPk", providerPk, "mode", mode)
|
||||
|
||||
outpost, r, err := c.authentik.OutpostsApi.OutpostsInstancesRetrieve(ctx, outpostId).Execute()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error when calling `OutpostsAPI.OutpostsInstancesRetrieve`: %w with response %v", err, r)
|
||||
}
|
||||
updated := false
|
||||
|
||||
switch mode {
|
||||
case ReconcileOutpostModeAdd:
|
||||
if !slices.Contains(outpost.Providers, providerPk) {
|
||||
outpost.Providers = append(outpost.Providers, providerPk)
|
||||
updated = true
|
||||
} else {
|
||||
logger.V(4).Info("Provider already in outpost")
|
||||
}
|
||||
case ReconcileOutpostModeRemove:
|
||||
if slices.Contains(outpost.Providers, providerPk) {
|
||||
outpost.Providers = slices.Delete(outpost.Providers, slices.Index(outpost.Providers, providerPk), 1)
|
||||
updated = true
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("invalid mode: %s", mode)
|
||||
}
|
||||
|
||||
if !updated {
|
||||
return nil
|
||||
}
|
||||
|
||||
outpostPartialUpdateRequest := &authentikapi.PatchedOutpostRequest{
|
||||
Providers: outpost.Providers,
|
||||
}
|
||||
_, r, err = c.authentik.OutpostsApi.OutpostsInstancesPartialUpdate(ctx, outpostId).PatchedOutpostRequest(*outpostPartialUpdateRequest).Execute()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error when calling `OutpostsAPI.OutpostsInstancesPartialUpdate`: %w with response %v", err, r)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user