github.com/kubeshop/testkube@v1.17.23/pkg/repository/config/configmap.go (about)

     1  package config
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strconv"
     7  
     8  	"github.com/pkg/errors"
     9  
    10  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    11  	"github.com/kubeshop/testkube/pkg/configmap"
    12  	"github.com/kubeshop/testkube/pkg/telemetry"
    13  )
    14  
    15  // NewConfigMapConfig is a constructor for configmap config
    16  func NewConfigMapConfig(name, namespace string) (*ConfigMapConfig, error) {
    17  	client, err := configmap.NewClient(namespace)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	return &ConfigMapConfig{
    23  		name:   name,
    24  		client: client,
    25  	}, nil
    26  }
    27  
    28  // ConfigMapConfig contains configmap config properties
    29  type ConfigMapConfig struct {
    30  	name   string
    31  	client *configmap.Client
    32  }
    33  
    34  // GetUniqueClusterId gets unique cluster based ID
    35  func (c *ConfigMapConfig) GetUniqueClusterId(ctx context.Context) (clusterId string, err error) {
    36  	config, err := c.Get(ctx)
    37  	// generate new cluster Id
    38  	if config.ClusterId == "" {
    39  		return fmt.Sprintf("cluster%s", telemetry.GetMachineID()), err
    40  	}
    41  
    42  	return config.ClusterId, nil
    43  }
    44  
    45  // GetTelemetryEnabled get telemetry enabled
    46  func (c *ConfigMapConfig) GetTelemetryEnabled(ctx context.Context) (ok bool, err error) {
    47  	config, err := c.Get(ctx)
    48  	if err != nil {
    49  		return true, err
    50  	}
    51  
    52  	return config.EnableTelemetry, nil
    53  }
    54  
    55  // Get config
    56  func (c *ConfigMapConfig) Get(ctx context.Context) (result testkube.Config, err error) {
    57  	data, err := c.client.Get(ctx, c.name)
    58  	if err != nil {
    59  		return result, errors.Wrap(err, "reading config map error")
    60  	}
    61  
    62  	result.ClusterId = data["clusterId"]
    63  	if enableTelemetry, ok := data["enableTelemetry"]; ok {
    64  		result.EnableTelemetry, err = strconv.ParseBool(enableTelemetry)
    65  		if err != nil {
    66  			return result, errors.Wrap(err, "parsing enable telemetry error")
    67  		}
    68  	}
    69  
    70  	return
    71  }
    72  
    73  // Upsert inserts record if not exists, updates otherwise
    74  func (c *ConfigMapConfig) Upsert(ctx context.Context, result testkube.Config) (updated testkube.Config, err error) {
    75  	data := map[string]string{
    76  		"clusterId":       result.ClusterId,
    77  		"enableTelemetry": fmt.Sprint(result.EnableTelemetry),
    78  	}
    79  	if err = c.client.Apply(ctx, c.name, data); err != nil {
    80  		return result, errors.Wrap(err, "writing config map error")
    81  	}
    82  
    83  	return result, err
    84  }