Skip to content

Commit

Permalink
Merge pull request #890 from jhadvig/CONSOLE-3943
Browse files Browse the repository at this point in the history
CONSOLE-3943: Default telemetry values
  • Loading branch information
openshift-merge-bot[bot] committed May 6, 2024
2 parents 0120ab8 + 79a86eb commit c758f71
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 20 deletions.
15 changes: 15 additions & 0 deletions manifests/05-telemetry-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: ConfigMap
metadata:
namespace: openshift-console-operator
name: telemetry-config
annotations:
include.release.openshift.io/hypershift: "true"
include.release.openshift.io/ibm-cloud-managed: "true"
include.release.openshift.io/self-managed-high-availability: "true"
include.release.openshift.io/single-node-developer: "true"
capability.openshift.io/name: Console
data:
SEGMENT_API_HOST: console.redhat.com/connections/api/v1
SEGMENT_JS_HOST: console.redhat.com/connections/cdn
SEGMENT_PUBLIC_API_KEY: BnuS1RP39EmLQjP21ko67oDjhbl9zpNU
24 changes: 15 additions & 9 deletions pkg/console/operator/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,13 @@ type consoleOperator struct {
nodeClient coreclientv1.NodesGetter
deploymentClient appsclientv1.DeploymentsGetter
// openshift
configNSConfigMapLister corev1listers.ConfigMapLister //for openshift-config namespace
oauthClientLister oauthlistersv1.OAuthClientLister
consoleOperatorLister operatorlistersv1.ConsoleLister
routeClient routeclientv1.RoutesGetter
routeLister routev1listers.RouteLister
versionGetter status.VersionGetter
operatorNSConfigMapLister corev1listers.ConfigMapLister //for openshift-console-operator namespace
configNSConfigMapLister corev1listers.ConfigMapLister //for openshift-config namespace
oauthClientLister oauthlistersv1.OAuthClientLister
consoleOperatorLister operatorlistersv1.ConsoleLister
routeClient routeclientv1.RoutesGetter
routeLister routev1listers.RouteLister
versionGetter status.VersionGetter
// lister
consolePluginLister listerv1.ConsolePluginLister

Expand Down Expand Up @@ -122,6 +123,7 @@ func NewConsoleOperator(
// plugins
consolePluginInformer consoleinformersv1.ConsolePluginInformer,
// openshift config
operatorNSConfigMapInformer corev1.ConfigMapInformer,
configNSConfigMapInformer corev1.ConfigMapInformer,
configSecretsInformer corev1.SecretInformer,
// openshift config managed
Expand Down Expand Up @@ -162,9 +164,10 @@ func NewConsoleOperator(

configMapClient: corev1Client,

targetNSConfigMapLister: targetNSConfigMapInformer.Lister(),
configNSConfigMapLister: configNSConfigMapInformer.Lister(),
managedNSConfigMapLister: managedNSConfigMapInformer.Lister(),
targetNSConfigMapLister: targetNSConfigMapInformer.Lister(),
operatorNSConfigMapLister: operatorNSConfigMapInformer.Lister(),
configNSConfigMapLister: configNSConfigMapInformer.Lister(),
managedNSConfigMapLister: managedNSConfigMapInformer.Lister(),

serviceClient: corev1Client,
nodeClient: corev1Client,
Expand Down Expand Up @@ -231,6 +234,9 @@ func NewConsoleOperator(
).WithFilteredEventsInformers(
util.IncludeNamesFilter(deployment.ConsoleOauthConfigName),
secretsInformer.Informer(),
).WithFilteredEventsInformers(
util.IncludeNamesFilter(telemetry.TelemetryConfigMapName),
operatorNSConfigMapInformer.Informer(),
).WithFilteredEventsInformers(
util.IncludeNamesFilter(telemetry.TelemeterClientDeploymentName),
monitoringDeploymentInformer.Informer(),
Expand Down
30 changes: 21 additions & 9 deletions pkg/console/operator/sync_v400.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ func (co *consoleOperator) SyncConfigMap(
monitoringSharedConfig = &corev1.ConfigMap{}
}

telemeterConfig, tcErr := co.GetTelemeterConfiguration(ctx, operatorConfig)
telemetryConfig, tcErr := co.GetTelemetryConfiguration(ctx, operatorConfig)
if tcErr != nil {
return nil, false, "FailedGetTelemetryConfig", tcErr
}
Expand Down Expand Up @@ -397,7 +397,7 @@ func (co *consoleOperator) SyncConfigMap(
nodeArchitectures,
nodeOperatingSystems,
copiedCSVsDisabled,
telemeterConfig,
telemetryConfig,
)
if err != nil {
return nil, false, "FailedConsoleConfigBuilder", err
Expand All @@ -416,14 +416,11 @@ func (co *consoleOperator) SyncConfigMap(
// Build telemetry configuration in following order:
// 1. check if the telemetry client is available and set the "TELEMETER_CLIENT_DISABLED" annotation accordingly
// 2. get telemetry annotation from console-operator config
// 3. get CLUSTER_ID from the cluster-version config
// 4. get ORGANIZATION_ID from OCM
func (co *consoleOperator) GetTelemeterConfiguration(ctx context.Context, operatorConfig *operatorv1.Console) (map[string]string, error) {
// 3. get default telemetry value from telemetry-config configmap
// 4. get CLUSTER_ID from the cluster-version config
// 5. get ORGANIZATION_ID from OCM, if ORGANIZATION_ID is not already set
func (co *consoleOperator) GetTelemetryConfiguration(ctx context.Context, operatorConfig *operatorv1.Console) (map[string]string, error) {
telemetryConfig := make(map[string]string)
telemeterClientIsAvailable, err := telemetry.IsTelemeterClientAvailable(co.monitoringDeploymentLister)
if err != nil {
return telemetryConfig, err
}

if len(operatorConfig.Annotations) > 0 {
for k, v := range operatorConfig.Annotations {
Expand All @@ -433,12 +430,27 @@ func (co *consoleOperator) GetTelemeterConfiguration(ctx context.Context, operat
}
}

telemetryConfigMap, err := co.operatorNSConfigMapLister.ConfigMaps(api.OpenShiftConsoleOperatorNamespace).Get(telemetry.TelemetryConfigMapName)
if err != nil {
return telemetryConfig, err
}

if len(telemetryConfigMap.Data) > 0 {
for k, v := range telemetryConfigMap.Data {
telemetryConfig[k] = v
}
}

clusterID, err := telemetry.GetClusterID(co.clusterVersionLister)
if err != nil {
return nil, err
}
telemetryConfig["CLUSTER_ID"] = clusterID

telemeterClientIsAvailable, err := telemetry.IsTelemeterClientAvailable(co.monitoringDeploymentLister)
if err != nil {
return telemetryConfig, err
}
if !telemeterClientIsAvailable {
telemetryConfig["TELEMETER_CLIENT_DISABLED"] = "true"
return telemetryConfig, nil
Expand Down
12 changes: 10 additions & 2 deletions pkg/console/starter/starter.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
informers.WithNamespace(api.OpenShiftConfigNamespace),
)

kubeInformersOperatorConfigNamespaced := informers.NewSharedInformerFactoryWithOptions(
kubeClient,
resync,
informers.WithNamespace(api.OpenShiftConsoleOperatorNamespace),
)

kubeInformersMonitoringNamespaced := informers.NewSharedInformerFactoryWithOptions(
kubeClient,
resync,
Expand Down Expand Up @@ -235,8 +241,9 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
// plugins
consoleInformers.Console().V1().ConsolePlugins(),
// openshift
kubeInformersConfigNamespaced.Core().V1().ConfigMaps(), // openshift-config configMaps
kubeInformersConfigNamespaced.Core().V1().Secrets(), // openshift-config secrets
kubeInformersOperatorConfigNamespaced.Core().V1().ConfigMaps(), // openshift-console-operator configMaps
kubeInformersConfigNamespaced.Core().V1().ConfigMaps(), // openshift-config configMaps
kubeInformersConfigNamespaced.Core().V1().Secrets(), // openshift-config secrets
// openshift managed
kubeInformersManagedNamespaced.Core().V1(), // Managed ConfigMaps
// event handling
Expand Down Expand Up @@ -536,6 +543,7 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
kubeInformersConfigNamespaced,
kubeInformersManagedNamespaced,
kubeInformersMonitoringNamespaced,
kubeInformersOperatorConfigNamespaced,
resourceSyncerInformers,
operatorConfigInformers,
consoleInformers,
Expand Down
1 change: 1 addition & 0 deletions pkg/console/telemetry/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
)

const (
TelemetryConfigMapName = "telemetry-config"
TelemeterClientDeploymentName = "telemeter-client"
TelemetryAnnotationPrefix = "telemetry.console.openshift.io/"
TelemeterClientDeploymentNamespace = "openshift-monitoring"
Expand Down
75 changes: 75 additions & 0 deletions test/e2e/telemetry_config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package e2e

import (
"context"
"fmt"
"testing"
"time"

operatorsv1 "github.com/openshift/api/operator/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait"

"github.com/openshift/console-operator/pkg/api"
"github.com/openshift/console-operator/pkg/console/telemetry"
"github.com/openshift/console-operator/test/e2e/framework"
)

const (
SEGMENT_API_HOST = "SEGMENT_API_HOST"
)

func setupTelemetryConfigTestCase(t *testing.T) (*framework.ClientSet, *operatorsv1.Console) {
return framework.StandardSetup(t)
}

func cleanupTelemetryConfigTestCase(t *testing.T, client *framework.ClientSet) {
framework.StandardCleanup(t, client)
}

func TestTelemetryConfig(t *testing.T) {
client, _ := setupDownloadsTestCase(t)
defer cleanupDownloadsTestCase(t, client)
telemetryConfigMap, err := client.Core.ConfigMaps(api.OpenShiftConsoleOperatorNamespace).Get(context.TODO(), telemetry.TelemetryConfigMapName, v1.GetOptions{})
if err != nil {
t.Fatal(err)
}

if len(telemetryConfigMap.Data) == 0 {
t.Fatal("telemetry-config configmap is empty")
}

// check default value for SEGMENT_API_HOST key
value, ok := telemetryConfigMap.Data[SEGMENT_API_HOST]
if !ok {
t.Fatalf("telemetry-config configmap does not contain SEGMENT_JS_HOST data key. Instead contains: %v", telemetryConfigMap.Data)
}
if value != "console.redhat.com/connections/api/v1" {
t.Fatalf("telemetry-config configmap does not contain SEGMENT_API_HOST key with value 'console.redhat.com/connections/api/v1'. Instead contains: %q", value)
}

// update the defaul value for SEGMENT_API_HOST key
_, err = client.Core.ConfigMaps(api.OpenShiftConsoleOperatorNamespace).Patch(context.TODO(), telemetry.TelemetryConfigMapName, types.MergePatchType, []byte(`{"data": {"SEGMENT_API_HOST": "test"}}`), metav1.PatchOptions{})
if err != nil {
t.Fatal(err)
}

err = wait.Poll(1*time.Second, framework.AsyncOperationTimeout, func() (stop bool, err error) {
telemetryConfigMap, err := client.Core.ConfigMaps(api.OpenShiftConsoleOperatorNamespace).Get(context.TODO(), telemetry.TelemetryConfigMapName, v1.GetOptions{})
if err != nil {
t.Fatal(err)
}
value, ok := telemetryConfigMap.Data[SEGMENT_API_HOST]
if !ok {
return false, fmt.Errorf("updated telemetry-config configmap does not contain SEGMENT_JS_HOST data key. Instead contains: %v", telemetryConfigMap.Data)
}
if value != "test" {
return false, fmt.Errorf("update telemetry-config configmap does not contain SEGMENT_API_HOST key with value 'console.redhat.com/connections/api/v1'. Instead contains: %q", value)
}

return true, nil
})

}

0 comments on commit c758f71

Please sign in to comment.