mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package auths
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/formancehq/operator/api/formance.com/v1beta1"
|
|
. "github.com/formancehq/operator/internal/core"
|
|
"github.com/formancehq/operator/internal/resources/applications"
|
|
"github.com/formancehq/operator/internal/resources/databases"
|
|
"github.com/formancehq/operator/internal/resources/gateways"
|
|
"github.com/formancehq/operator/internal/resources/settings"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func createDeployment(ctx Context, stack *v1beta1.Stack, auth *v1beta1.Auth, database *v1beta1.Database,
|
|
configMap *corev1.ConfigMap, image string) error {
|
|
|
|
env := make([]corev1.EnvVar, 0)
|
|
otlpEnv, err := settings.GetOTELEnvVars(ctx, stack.Name, LowerCamelCaseKind(ctx, auth))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
env = append(env, otlpEnv...)
|
|
|
|
gatewayEnv, err := gateways.EnvVarsIfEnabled(ctx, stack.Name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
postgresEnvVar, err := databases.GetPostgresEnvVars(ctx, stack, database)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
env = append(env, gatewayEnv...)
|
|
env = append(env, GetDevEnvVars(stack, auth)...)
|
|
env = append(env, postgresEnvVar...)
|
|
env = append(env, Env("CONFIG", "/config/config.yaml"))
|
|
|
|
authUrl, err := getUrl(ctx, stack.Name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
env = append(env, Env("BASE_URL", authUrl))
|
|
|
|
if auth.Spec.SigningKey != "" && auth.Spec.SigningKeyFromSecret != nil {
|
|
return fmt.Errorf("cannot specify signing key using both .spec.signingKey and .spec.signingKeyFromSecret fields")
|
|
}
|
|
if auth.Spec.SigningKey != "" {
|
|
env = append(env, Env("SIGNING_KEY", auth.Spec.SigningKey))
|
|
}
|
|
if auth.Spec.SigningKeyFromSecret != nil {
|
|
env = append(env, corev1.EnvVar{
|
|
Name: "SIGNING_KEY",
|
|
ValueFrom: &corev1.EnvVarSource{
|
|
SecretKeyRef: auth.Spec.SigningKeyFromSecret,
|
|
},
|
|
})
|
|
}
|
|
if auth.Spec.DelegatedOIDCServer != nil {
|
|
env = append(env,
|
|
Env("DELEGATED_CLIENT_SECRET", auth.Spec.DelegatedOIDCServer.ClientSecret),
|
|
Env("DELEGATED_CLIENT_ID", auth.Spec.DelegatedOIDCServer.ClientID),
|
|
Env("DELEGATED_ISSUER", auth.Spec.DelegatedOIDCServer.Issuer),
|
|
)
|
|
}
|
|
if stack.Spec.Dev || auth.Spec.Dev {
|
|
env = append(env, Env("CAOS_OIDC_DEV", "1"))
|
|
}
|
|
|
|
serviceAccountName, err := settings.GetAWSServiceAccount(ctx, stack.Name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return applications.
|
|
New(auth, &appsv1.Deployment{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "auth",
|
|
},
|
|
Spec: appsv1.DeploymentSpec{
|
|
Template: corev1.PodTemplateSpec{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Annotations: map[string]string{
|
|
"config-hash": HashFromConfigMaps(configMap),
|
|
},
|
|
},
|
|
Spec: corev1.PodSpec{
|
|
Containers: []corev1.Container{{
|
|
Name: "auth",
|
|
Args: []string{"serve"},
|
|
Env: env,
|
|
Image: image,
|
|
VolumeMounts: []corev1.VolumeMount{
|
|
NewVolumeMount("config", "/config", true),
|
|
},
|
|
Ports: []corev1.ContainerPort{applications.StandardHTTPPort()},
|
|
LivenessProbe: applications.DefaultLiveness("http"),
|
|
}},
|
|
Volumes: []corev1.Volume{
|
|
NewVolumeFromConfigMap("config", configMap),
|
|
},
|
|
ServiceAccountName: serviceAccountName,
|
|
},
|
|
},
|
|
},
|
|
}).
|
|
IsEE().
|
|
Install(ctx)
|
|
}
|
|
|
|
func getUrl(ctx Context, stackName string) (string, error) {
|
|
gateway := &v1beta1.Gateway{}
|
|
ok, err := GetIfExists(ctx, stackName, gateway)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if ok {
|
|
return gateways.URL(gateway) + "/api/auth", nil
|
|
}
|
|
|
|
return "http://auth:8080", nil
|
|
}
|