Skip to content

Commit

Permalink
Set config default timeout
Browse files Browse the repository at this point in the history
Signed-off-by: Arnon Gilboa <[email protected]>
  • Loading branch information
arnongilboa committed Mar 19, 2024
1 parent 45ca3f9 commit 2ef9411
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 14 deletions.
40 changes: 30 additions & 10 deletions pkg/internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,52 @@
package config

import (
"errors"

kconfig "github.com/kiagnose/kiagnose/kiagnose/config"
kconfigmap "github.com/kiagnose/kiagnose/kiagnose/configmap"

"github.com/kiagnose/kubevirt-storage-checkup/pkg/internal/client"
"github.com/kiagnose/kiagnose/kiagnose/types"
"k8s.io/client-go/kubernetes"
)

// FIXME: pass something here - maybe golden image ns?
type Config struct {
}

func New(c *client.Client, baseConfig kconfig.Config) (Config, error) {
func New(baseConfig kconfig.Config) (Config, error) {
newConfig := Config{}
err := signConfigMap(c, baseConfig)
return newConfig, err
return newConfig, nil
}

func signConfigMap(c *client.Client, baseConfig kconfig.Config) error {
cm, err := kconfigmap.Get(c, baseConfig.ConfigMapNamespace, baseConfig.ConfigMapName)
// ReadWithDefaults inits the configmap with defaults where needed before reading it by kiagnose config infra
func ReadWithDefaults(client kubernetes.Interface, rawEnv map[string]string) (kconfig.Config, error) {
cmNamespace := rawEnv[kconfig.ConfigMapNamespaceEnvVarName]
cmName := rawEnv[kconfig.ConfigMapNameEnvVarName]
if cmNamespace == "" || cmName == "" {
return kconfig.Config{}, errors.New("no environment variables set for configmap namespace and name")
}

cm, err := kconfigmap.Get(client, cmNamespace, cmName)
if err != nil {
return err
return kconfig.Config{}, err
}

if cm.Labels == nil {
cm.Labels = map[string]string{}
}
cm.Labels["kiagnose/checkup-type"] = "kubevirt-vm-storage"
_, err = kconfigmap.Update(c, cm)

return err
if cm.Data == nil {
cm.Data = make(map[string]string)
}
_, exists := cm.Data[types.TimeoutKey]
if !exists {
cm.Data[types.TimeoutKey] = "10m"
}

if _, err = kconfigmap.Update(client, cm); err != nil {
return kconfig.Config{}, err
}

return kconfig.Read(client, rawEnv)
}
79 changes: 79 additions & 0 deletions pkg/internal/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,82 @@
*/

package config_test

import (
"testing"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes/fake"

kconfig "github.com/kiagnose/kiagnose/kiagnose/config"
kconfigmap "github.com/kiagnose/kiagnose/kiagnose/configmap"
"github.com/kiagnose/kiagnose/kiagnose/types"

"github.com/kiagnose/kubevirt-storage-checkup/pkg/internal/config"

"github.com/stretchr/testify/assert"
)

const (
testNamespace = "target-ns"
testConfigMapName = "storage-checkup-config"
testPodName = "test-pod"
)

var testEnv = map[string]string{
kconfig.ConfigMapNamespaceEnvVarName: testNamespace,
kconfig.ConfigMapNameEnvVarName: testConfigMapName,
kconfig.PodNameEnvVarName: testPodName,
}

func TestInitConfigMapShouldFailWhenNoConfigMap(t *testing.T) {
fakeClient := fake.NewSimpleClientset()
_, err := config.ReadWithDefaults(fakeClient, testEnv)
assert.ErrorContains(t, err, "not found")
}

func TestInitConfigMapShouldFailWhenNoEnvVars(t *testing.T) {
fakeClient := fake.NewSimpleClientset(newConfigMap())
emptyEnv := map[string]string{}
_, err := config.ReadWithDefaults(fakeClient, emptyEnv)
assert.ErrorContains(t, err, "no environment variables")
}

func TestInitConfigMapShouldSucceed(t *testing.T) {
fakeClient := fake.NewSimpleClientset(newConfigMap())
_, err := config.ReadWithDefaults(fakeClient, testEnv)
assert.NoError(t, err)

cm, err := kconfigmap.Get(fakeClient, testNamespace, testConfigMapName)
assert.NoError(t, err)
assert.NotNil(t, cm.Labels)
assert.Equal(t, "kubevirt-vm-storage", cm.Labels["kiagnose/checkup-type"])
assert.NotNil(t, cm.Data)
assert.Equal(t, "10m", cm.Data[types.TimeoutKey])
}

func TestInitConfigMapShouldNotUpdateTimeout(t *testing.T) {
cm := newConfigMap()
cm.Data[types.TimeoutKey] = "15m"
fakeClient := fake.NewSimpleClientset(cm)
_, err := config.ReadWithDefaults(fakeClient, testEnv)
assert.NoError(t, err)

cm, err = kconfigmap.Get(fakeClient, testNamespace, testConfigMapName)
assert.NoError(t, err)
assert.NotNil(t, cm.Labels)
assert.Equal(t, "kubevirt-vm-storage", cm.Labels["kiagnose/checkup-type"])
assert.NotNil(t, cm.Data)
assert.Equal(t, "15m", cm.Data[types.TimeoutKey])
}

func newConfigMap() *corev1.ConfigMap {
return &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: testConfigMapName,
Namespace: testNamespace,
},
Data: map[string]string{},
}
}
6 changes: 2 additions & 4 deletions pkg/mainflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ package pkg
import (
"context"

kconfig "github.com/kiagnose/kiagnose/kiagnose/config"

"github.com/kiagnose/kubevirt-storage-checkup/pkg/internal/checkup"
"github.com/kiagnose/kubevirt-storage-checkup/pkg/internal/client"
"github.com/kiagnose/kubevirt-storage-checkup/pkg/internal/config"
Expand All @@ -37,12 +35,12 @@ func Run(rawEnv map[string]string, namespace string) error {
return err
}

baseConfig, err := kconfig.Read(c, rawEnv)
baseConfig, err := config.ReadWithDefaults(c, rawEnv)
if err != nil {
return err
}

cfg, err := config.New(c, baseConfig)
cfg, err := config.New(baseConfig)
if err != nil {
return err
}
Expand Down

0 comments on commit 2ef9411

Please sign in to comment.