Files
capsule/pkg/tenant/template.go
T
Oliver BählerandGitHub 99e05220ab feat: implement performance optimizations (#2045)
* feat: implement performance optimizations

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
2026-07-21 16:27:29 +02:00

76 lines
1.8 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package tenant
import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/pkg/runtime/sanitize"
"github.com/projectcapsule/capsule/pkg/utils"
)
// NewTenantContext returns the context for the tenant.
func NewTenantContext(tnt *capsulev1beta2.Tenant, _ *runtime.Scheme, opts sanitize.SanitizeOptions) (map[string]any, error) {
context, err := utils.ToUnstructuredMap(tnt)
if err != nil {
return nil, err
}
sanitize.SanitizeUnstructured(&unstructured.Unstructured{Object: context}, opts)
context["rbac"] = tnt.GetClusterRolesBySubject(nil)
return context, nil
}
// NewTenantNamespaceContext returns the context for the tenant and a given namespace.
func NewTenantNamespaceContext(
tnt *capsulev1beta2.Tenant,
ns *corev1.Namespace,
scheme *runtime.Scheme,
opts sanitize.SanitizeOptions,
) (map[string]any, error) {
context := make(map[string]any)
if tnt != nil {
tCtx, err := NewTenantContext(tnt, scheme, opts)
if err != nil {
return context, err
}
context["tenant"] = tCtx
}
if ns != nil {
nsMap, err := utils.ToUnstructuredMap(ns)
if err != nil {
return context, err
}
sanitize.SanitizeUnstructured(&unstructured.Unstructured{Object: nsMap}, opts)
context["namespace"] = nsMap
}
return context, nil
}
// TemplateForTenantAndNamespace applies templatingto the provided string.
func FastContextForTenantAndNamespace(tnt *capsulev1beta2.Tenant, ns *corev1.Namespace) map[string]string {
values := map[string]string{}
if tnt != nil {
values["tenant.name"] = tnt.Name
}
if ns != nil {
values["namespace"] = ns.Name
}
return values
}