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 }