diff --git a/pkg/splunk/enterprise/finalizers_test.go b/pkg/splunk/enterprise/finalizers_test.go index 369271200..039fa5b6b 100644 --- a/pkg/splunk/enterprise/finalizers_test.go +++ b/pkg/splunk/enterprise/finalizers_test.go @@ -303,6 +303,7 @@ func splunkDeletionTester(t *testing.T, cr splcommon.MetaObject, delete func(spl {MetaName: "*v1.Secret-test-splunk-test-secret"}, {MetaName: "*v1.ConfigMap-test-splunk-indexer-stack1-configmap"}, {MetaName: "*v4.ClusterManager-test-manager1"}, + {MetaName: "*v4.ClusterManager-test-manager1"}, {MetaName: "*v1.Secret-test-splunk-test-secret"}, {MetaName: "*v1.StatefulSet-test-splunk-stack1-indexer"}, {MetaName: "*v4.IndexerCluster-test-stack1"}, diff --git a/pkg/splunk/enterprise/indexercluster.go b/pkg/splunk/enterprise/indexercluster.go index c9e65e9f3..4c8976c0b 100644 --- a/pkg/splunk/enterprise/indexercluster.go +++ b/pkg/splunk/enterprise/indexercluster.go @@ -131,6 +131,14 @@ func ApplyIndexerClusterManager(ctx context.Context, client splcommon.Controller // check if deletion has been requested if cr.ObjectMeta.DeletionTimestamp != nil { + cmMonitoringConsoleConfigRef, _ := RetrieveCMSpec(ctx, client, cr) + if cmMonitoringConsoleConfigRef != "" { + _, err = ApplyMonitoringConsoleEnvConfigMap(ctx, client, cr.GetNamespace(), cr.GetName(), cmMonitoringConsoleConfigRef, getIndexerExtraEnv(cr, cr.Spec.Replicas), false) + if err != nil { + return result, err + } + } + DeleteOwnerReferencesForResources(ctx, client, cr, SplunkIndexer) terminating, err := splctrl.CheckForDeletion(ctx, cr, client) @@ -287,6 +295,12 @@ func ApplyIndexerClusterManager(ctx context.Context, client splcommon.Controller return result, err } if cmMonitoringConsoleConfigRef != "" { + _, err = ApplyMonitoringConsoleEnvConfigMap(ctx, client, cr.GetNamespace(), cr.GetName(), cmMonitoringConsoleConfigRef, getIndexerExtraEnv(cr, cr.Spec.Replicas), true) + if err != nil { + eventPublisher.Warning(ctx, "ApplyMonitoringConsoleEnvConfigMap", fmt.Sprintf("apply monitoring console environment config map for indexer URLs failed %s", err.Error())) + return result, err + } + namespacedName := types.NamespacedName{Namespace: cr.GetNamespace(), Name: GetSplunkStatefulsetName(SplunkMonitoringConsole, cmMonitoringConsoleConfigRef)} _, err := splctrl.GetStatefulSetByName(ctx, client, namespacedName) //if MC pod already exists @@ -425,6 +439,14 @@ func ApplyIndexerCluster(ctx context.Context, client splcommon.ControllerClient, // check if deletion has been requested if cr.ObjectMeta.DeletionTimestamp != nil { + cmMonitoringConsoleConfigRef, _ := RetrieveCMSpec(ctx, client, cr) + if cmMonitoringConsoleConfigRef != "" { + _, err = ApplyMonitoringConsoleEnvConfigMap(ctx, client, cr.GetNamespace(), cr.GetName(), cmMonitoringConsoleConfigRef, getIndexerExtraEnv(cr, cr.Spec.Replicas), false) + if err != nil { + return result, err + } + } + DeleteOwnerReferencesForResources(ctx, client, cr, SplunkIndexer) terminating, err := splctrl.CheckForDeletion(ctx, cr, client) @@ -581,6 +603,12 @@ func ApplyIndexerCluster(ctx context.Context, client splcommon.ControllerClient, return result, err } if cmMonitoringConsoleConfigRef != "" { + _, err = ApplyMonitoringConsoleEnvConfigMap(ctx, client, cr.GetNamespace(), cr.GetName(), cmMonitoringConsoleConfigRef, getIndexerExtraEnv(cr, cr.Spec.Replicas), true) + if err != nil { + eventPublisher.Warning(ctx, "ApplyMonitoringConsoleEnvConfigMap", fmt.Sprintf("apply monitoring console environment config map for indexer URLs failed %s", err.Error())) + return result, err + } + namespacedName := types.NamespacedName{Namespace: cr.GetNamespace(), Name: GetSplunkStatefulsetName(SplunkMonitoringConsole, cmMonitoringConsoleConfigRef)} _, err := splctrl.GetStatefulSetByName(ctx, client, namespacedName) //if MC pod already exists diff --git a/pkg/splunk/enterprise/util.go b/pkg/splunk/enterprise/util.go index fd7900787..17a8ade10 100644 --- a/pkg/splunk/enterprise/util.go +++ b/pkg/splunk/enterprise/util.go @@ -345,6 +345,16 @@ func getStandaloneExtraEnv(cr splcommon.MetaObject, replicas int32) []corev1.Env } } +// getIndexerExtraEnv returns extra environment variables for indexer cluster peers used by monitoring console +func getIndexerExtraEnv(cr splcommon.MetaObject, replicas int32) []corev1.EnvVar { + return []corev1.EnvVar{ + { + Name: "SPLUNK_INDEXER_URL", + Value: GetSplunkStatefulsetUrls(cr.GetNamespace(), SplunkIndexer, cr.GetName(), replicas, false), + }, + } +} + // getLicenseManagerURL returns URL of license manager func getLicenseManagerURL(cr splcommon.MetaObject, spec *enterpriseApi.CommonSplunkSpec) []corev1.EnvVar { if spec.LicenseManagerRef.Name != "" { diff --git a/pkg/splunk/enterprise/util_test.go b/pkg/splunk/enterprise/util_test.go index 7168e366a..21a8092e4 100644 --- a/pkg/splunk/enterprise/util_test.go +++ b/pkg/splunk/enterprise/util_test.go @@ -3245,6 +3245,29 @@ func TestGetSearchHeadEnv(t *testing.T) { } } +func TestGetIndexerExtraEnv(t *testing.T) { + cr := enterpriseApi.IndexerCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test", + Namespace: "test", + }, + Spec: enterpriseApi.IndexerClusterSpec{ + Replicas: 3, + }, + } + envVar := getIndexerExtraEnv(&cr, cr.Spec.Replicas) + if len(envVar) != 1 { + t.Errorf("Expected 1 env var, got %d", len(envVar)) + } + if envVar[0].Name != "SPLUNK_INDEXER_URL" { + t.Errorf("Expected SPLUNK_INDEXER_URL, got %s", envVar[0].Name) + } + expectedURL := GetSplunkStatefulsetUrls("test", SplunkIndexer, "test", 3, false) + if envVar[0].Value != expectedURL { + t.Errorf("Expected %s, got %s", expectedURL, envVar[0].Value) + } +} + func TestGetLicenseMasterURL(t *testing.T) { cr := enterpriseApi.SearchHeadCluster{ ObjectMeta: metav1.ObjectMeta{