feat: setup cluster trigger authentication objects
This commit is contained in:
@@ -122,6 +122,118 @@ type WaitForPodToExistInput struct {
|
|||||||
LabelSelector string
|
LabelSelector string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// applyKedaClusterTriggerAuthentications applies keda cluster trigger authentications chart to the cluster
|
||||||
|
func applyKedaClusterTriggerAuthentications(ctx context.Context, triggerType string, metadata map[string]string) error {
|
||||||
|
chartDir, err := os.MkdirTemp("", "keda-cluster-trigger-authentications-chart-")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creating keda-cluster-trigger-authentications chart directory: %w", err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(chartDir)
|
||||||
|
|
||||||
|
// create the chart.yaml
|
||||||
|
chart := &Chart{
|
||||||
|
ApiVersion: "v2",
|
||||||
|
AppVersion: "1.0.0",
|
||||||
|
Icon: "https://dokku.com/assets/dokku-logo.svg",
|
||||||
|
Name: fmt.Sprintf("keda-cluster-trigger-authentications-%s", triggerType),
|
||||||
|
Version: "0.0.1",
|
||||||
|
}
|
||||||
|
|
||||||
|
err = writeYaml(WriteYamlInput{
|
||||||
|
Object: chart,
|
||||||
|
Path: filepath.Join(chartDir, "Chart.yaml"),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error writing keda-cluster-trigger-authentications chart: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the values.yaml
|
||||||
|
values := ClusterKedaValues{
|
||||||
|
Secrets: map[string]string{},
|
||||||
|
Type: triggerType,
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range metadata {
|
||||||
|
values.Secrets[key] = base64.StdEncoding.EncodeToString([]byte(value))
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(filepath.Join(chartDir, "templates"), os.FileMode(0755)); err != nil {
|
||||||
|
return fmt.Errorf("Error creating keda-cluster-trigger-authentications chart templates directory: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = writeYaml(WriteYamlInput{
|
||||||
|
Object: values,
|
||||||
|
Path: filepath.Join(chartDir, "values.yaml"),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error writing chart: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
templateFiles := []string{"keda-cluster-trigger-authentication", "keda-cluster-secret"}
|
||||||
|
for _, template := range templateFiles {
|
||||||
|
b, err := templates.ReadFile(fmt.Sprintf("templates/chart/%s.yaml", template))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error reading %s template: %w", template, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
filename := filepath.Join(chartDir, "templates", fmt.Sprintf("%s.yaml", template))
|
||||||
|
err = os.WriteFile(filename, b, os.FileMode(0644))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error writing %s template: %w", template, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if os.Getenv("DOKKU_TRACE") == "1" {
|
||||||
|
common.CatFile(filename)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := templates.ReadFile("templates/chart/_helpers.tpl")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error reading _helpers template: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
helpersFile := filepath.Join(chartDir, "templates", "_helpers.tpl")
|
||||||
|
err = os.WriteFile(helpersFile, b, os.FileMode(0644))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error writing _helpers template: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if os.Getenv("DOKKU_TRACE") == "1" {
|
||||||
|
common.CatFile(helpersFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
// install the chart
|
||||||
|
helmAgent, err := NewHelmAgent("keda", DeployLogPrinter)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creating helm agent: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
chartPath, err := filepath.Abs(chartDir)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error getting chart path: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
timeoutDuration, err := time.ParseDuration("300s")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error parsing deploy timeout duration: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = helmAgent.InstallOrUpgradeChart(ctx, ChartInput{
|
||||||
|
ChartPath: chartPath,
|
||||||
|
Namespace: "keda",
|
||||||
|
ReleaseName: fmt.Sprintf("keda-cluster-trigger-authentications-%s", triggerType),
|
||||||
|
RollbackOnFailure: true,
|
||||||
|
Timeout: timeoutDuration,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error installing keda-cluster-trigger-authentications-%s chart: %w", triggerType, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
common.LogInfo1Quiet(fmt.Sprintf("Applied keda-cluster-trigger-authentications-%s chart", triggerType))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func applyClusterIssuers(ctx context.Context) error {
|
func applyClusterIssuers(ctx context.Context) error {
|
||||||
chartDir, err := os.MkdirTemp("", "cluster-issuer-chart-")
|
chartDir, err := os.MkdirTemp("", "cluster-issuer-chart-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -75,6 +75,19 @@ func CommandAutoscalingAuthSet(appName string, trigger string, metadata map[stri
|
|||||||
return fmt.Errorf("Unable to delete property: %w", err)
|
return fmt.Errorf("Unable to delete property: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if appName == "--global" {
|
||||||
|
helmAgent, err := NewHelmAgent("keda", DeployLogPrinter)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to create helm agent: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseName := fmt.Sprintf("keda-cluster-trigger-authentications-%s", trigger)
|
||||||
|
if err := helmAgent.UninstallChart(releaseName); err != nil {
|
||||||
|
return fmt.Errorf("Unable to uninstall chart: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,6 +96,14 @@ func CommandAutoscalingAuthSet(appName string, trigger string, metadata map[stri
|
|||||||
return fmt.Errorf("Unable to set property: %w", err)
|
return fmt.Errorf("Unable to set property: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if appName == "--global" {
|
||||||
|
err := applyKedaClusterTriggerAuthentications(context.Background(), trigger, metadata)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to install chart: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,14 @@ type ClusterIssuerValues struct {
|
|||||||
ClusterIssuers map[string]ClusterIssuer `yaml:"cluster_issuers"`
|
ClusterIssuers map[string]ClusterIssuer `yaml:"cluster_issuers"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ClusterKedaValues struct {
|
||||||
|
Global struct {
|
||||||
|
Annotations ProcessAnnotations `yaml:"annotations,omitempty"`
|
||||||
|
} `yaml:"global"`
|
||||||
|
Secrets map[string]string `yaml:"secrets"`
|
||||||
|
Type string `yaml:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
type AppValues struct {
|
type AppValues struct {
|
||||||
Global GlobalValues `yaml:"global"`
|
Global GlobalValues `yaml:"global"`
|
||||||
Processes map[string]ProcessValues `yaml:"processes"`
|
Processes map[string]ProcessValues `yaml:"processes"`
|
||||||
|
|||||||
@@ -4,17 +4,13 @@ apiVersion: v1
|
|||||||
kind: Secret
|
kind: Secret
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
|
||||||
dokku.com/managed: "true"
|
dokku.com/managed: "true"
|
||||||
{{- if and $.Values.global.annotations $.Values.global.annotations.keda_secret }}
|
{{ include "print.annotations" (dict "config" $.Values.global "key" "keda_secret") | indent 4 }}
|
||||||
{{- range $k, $v := $.Values.global.annotations.keda_secret }}
|
|
||||||
{{ $k }}: {{ $v | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/instance: {{ $.Values.type }}
|
app.kubernetes.io/instance: {{ $.Values.type }}
|
||||||
app.kubernetes.io/name: {{ $.Values.type }}
|
app.kubernetes.io/name: {{ $.Values.type }}
|
||||||
app.kubernetes.io/part-of: cluster
|
app.kubernetes.io/part-of: cluster
|
||||||
|
{{ include "print.labels" (dict "config" $.Values.global "key" "keda_secret") | indent 4 }}
|
||||||
name: ckta-{{ $.Values.type }}
|
name: ckta-{{ $.Values.type }}
|
||||||
namespace: keda
|
namespace: keda
|
||||||
data:
|
data:
|
||||||
|
|||||||
@@ -4,17 +4,13 @@ apiVersion: keda.sh/v1alpha1
|
|||||||
kind: ClusterTriggerAuthentication
|
kind: ClusterTriggerAuthentication
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
|
||||||
dokku.com/managed: "true"
|
dokku.com/managed: "true"
|
||||||
{{- if and $.Values.global.annotations $.Values.global.annotations.keda_trigger_authentication }}
|
{{ include "print.annotations" (dict "config" $.Values.global "key" "keda_trigger_authentication") | indent 4 }}
|
||||||
{{- range $k, $v := $.Values.global.annotations.keda_trigger_authentication }}
|
|
||||||
{{ $k }}: {{ $v | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/instance: {{ $.Values.type }}
|
app.kubernetes.io/instance: {{ $.Values.type }}
|
||||||
app.kubernetes.io/name: {{ $.Values.type }}
|
app.kubernetes.io/name: {{ $.Values.type }}
|
||||||
app.kubernetes.io/part-of: cluster
|
app.kubernetes.io/part-of: cluster
|
||||||
|
{{ include "print.labels" (dict "config" $.Values.global "key" "keda_trigger_authentication") | indent 4 }}
|
||||||
name: {{ $.Values.type }}
|
name: {{ $.Values.type }}
|
||||||
spec:
|
spec:
|
||||||
secretTargetRef:
|
secretTargetRef:
|
||||||
|
|||||||
@@ -8,20 +8,14 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
||||||
dokku.com/managed: "true"
|
dokku.com/managed: "true"
|
||||||
{{- if and $.Values.global.annotations $.Values.global.annotations.keda_scaled_object }}
|
{{ include "print.annotations" (dict "config" $.Values.global "key" "keda_scaled_object") | indent 4 }}
|
||||||
{{- range $k, $v := $.Values.global.annotations.keda_scaled_object }}
|
{{ include "print.annotations" (dict "config" $config "key" "keda_scaled_object") | indent 4 }}
|
||||||
{{ $k }}: {{ $v | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and $config.annotations $config.annotations.keda_scaled_object }}
|
|
||||||
{{- range $k, $v := $config.annotations.keda_scaled_object }}
|
|
||||||
{{ $k }}: {{ $v | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $processName }}
|
app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $processName }}
|
||||||
app.kubernetes.io/name: {{ $processName }}
|
app.kubernetes.io/name: {{ $processName }}
|
||||||
app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
|
app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
|
||||||
|
{{ include "print.labels" (dict "config" $.Values.global "key" "keda_scaled_object") | indent 4 }}
|
||||||
|
{{ include "print.labels" (dict "config" $config "key" "keda_scaled_object") | indent 4 }}
|
||||||
name: {{ $.Values.global.app_name}}-{{ $processName }}
|
name: {{ $.Values.global.app_name}}-{{ $processName }}
|
||||||
namespace: {{ $.Values.global.namespace }}
|
namespace: {{ $.Values.global.namespace }}
|
||||||
spec:
|
spec:
|
||||||
|
|||||||
@@ -7,15 +7,12 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }}
|
||||||
dokku.com/managed: "true"
|
dokku.com/managed: "true"
|
||||||
{{- if and $.Values.global.annotations $.Values.global.annotations.keda_secret }}
|
{{ include "print.annotations" (dict "config" $.Values.global "key" "keda_secret") | indent 4 }}
|
||||||
{{- range $k, $v := $.Values.global.annotations.keda_secret }}
|
|
||||||
{{ $k }}: {{ $v | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $config.type }}
|
app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $config.type }}
|
||||||
app.kubernetes.io/name: {{ $config.type }}
|
app.kubernetes.io/name: {{ $config.type }}
|
||||||
app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
|
app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
|
||||||
|
{{ include "print.labels" (dict "config" $.Values.global "key" "keda_secret") | indent 4 }}
|
||||||
name: kta-{{ $.Values.global.app_name }}-{{ $config.type }}
|
name: kta-{{ $.Values.global.app_name }}-{{ $config.type }}
|
||||||
namespace: {{ $.Values.global.namespace }}
|
namespace: {{ $.Values.global.namespace }}
|
||||||
data:
|
data:
|
||||||
|
|||||||
Reference in New Issue
Block a user