pkg/controller/kibana/initcontainer/configmap.go (65 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License 2.0; // you may not use this file except in compliance with the Elastic License 2.0. package initcontainer import ( "context" "reflect" "go.elastic.co/apm/v2" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" kbv1 "github.com/elastic/cloud-on-k8s/v3/pkg/apis/kibana/v1" "github.com/elastic/cloud-on-k8s/v3/pkg/controller/common/reconciler" "github.com/elastic/cloud-on-k8s/v3/pkg/controller/common/tracing" "github.com/elastic/cloud-on-k8s/v3/pkg/controller/common/version" "github.com/elastic/cloud-on-k8s/v3/pkg/controller/common/volume" "github.com/elastic/cloud-on-k8s/v3/pkg/controller/kibana/label" kbvolume "github.com/elastic/cloud-on-k8s/v3/pkg/controller/kibana/volume" "github.com/elastic/cloud-on-k8s/v3/pkg/utils/k8s" "github.com/elastic/cloud-on-k8s/v3/pkg/utils/maps" ) // HardenedSecurityContextSupportedVersion is the version in which a hardened security context is supported. var HardenedSecurityContextSupportedVersion = version.From(7, 10, 0) // NewScriptsConfigMapVolume creates a new volume for the ConfigMap containing scripts used by the Kibana init container. func NewScriptsConfigMapVolume(kbName string) volume.ConfigMapVolume { return volume.NewConfigMapVolumeWithMode( kbv1.ScriptsConfigMap(kbName), kbvolume.ScriptsVolumeName, kbvolume.ScriptsVolumeMountPath, 0755) } // ReconcileScriptsConfigMap reconciles the ConfigMap containing scripts used by the Kibana elastic-internal-init container. func ReconcileScriptsConfigMap(ctx context.Context, c k8s.Client, kb kbv1.Kibana) error { span, ctx := apm.StartSpan(ctx, "reconcile_scripts", tracing.SpanTypeApp) defer span.End() initScript, err := renderInitScript() if err != nil { return err } nsn := types.NamespacedName{Namespace: kb.Namespace, Name: kbv1.ScriptsConfigMap(kb.Name)} scriptsConfigMap := corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: nsn.Name, Namespace: kb.Namespace, Labels: label.NewLabels(nsn), }, Data: map[string]string{ KibanaInitScriptConfigKey: initScript, }, } reconciled := &corev1.ConfigMap{} return reconciler.ReconcileResource( reconciler.Params{ Context: ctx, Client: c, Owner: &kb, Expected: &scriptsConfigMap, Reconciled: reconciled, NeedsUpdate: func() bool { return !reflect.DeepEqual(scriptsConfigMap.Data, reconciled.Data) || !maps.IsSubset(scriptsConfigMap.Labels, reconciled.Labels) || !maps.IsSubset(scriptsConfigMap.Annotations, reconciled.Annotations) }, UpdateReconciled: func() { reconciled.Data = scriptsConfigMap.Data reconciled.Labels = maps.Merge(reconciled.Labels, scriptsConfigMap.Labels) reconciled.Annotations = maps.Merge(reconciled.Annotations, scriptsConfigMap.Annotations) }, }, ) }