From 426e6faab21cd67733cb2266290efc2c408ba810 Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Tue, 14 Mar 2023 10:13:04 +0530 Subject: [PATCH 1/6] Add namespace while creating configmap Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/k8s/core/configmap/configmap.go b/k8s/core/configmap/configmap.go index 432db27e..05331aa1 100644 --- a/k8s/core/configmap/configmap.go +++ b/k8s/core/configmap/configmap.go @@ -23,6 +23,7 @@ func New( lockAttempts uint, v2LockRefreshDuration time.Duration, v2LockK8sLockTTL time.Duration, + nameSpace string, ) (ConfigMap, error) { if data == nil { data = make(map[string]string) @@ -32,11 +33,14 @@ func New( configMapUserLabelKey: TruncateLabel(name), } data[pxOwnerKey] = "" + if nameSpace == "" { + nameSpace = k8sSystemNamespace + } cm := &v1.ConfigMap{ ObjectMeta: meta_v1.ObjectMeta{ Name: name, - Namespace: k8sSystemNamespace, + Namespace: nameSpace, Labels: labels, }, Data: data, From 034eac76ec1a2316fb6d3fb7206ae3fa96eb3f81 Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Tue, 14 Mar 2023 23:28:23 +0530 Subject: [PATCH 2/6] Fix failing test Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap_lock_v1_test.go | 2 +- k8s/core/configmap/configmap_lock_v2_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/k8s/core/configmap/configmap_lock_v1_test.go b/k8s/core/configmap/configmap_lock_v1_test.go index 6bdc703d..1aca683d 100644 --- a/k8s/core/configmap/configmap_lock_v1_test.go +++ b/k8s/core/configmap/configmap_lock_v1_test.go @@ -13,7 +13,7 @@ import ( func TestLock(t *testing.T) { fakeClient := fakek8sclient.NewSimpleClientset() coreops.SetInstance(coreops.New(fakeClient)) - cm, err := New("px-configmaps-test", nil, lockTimeout, 5, 0, 0) + cm, err := New("px-configmaps-test", nil, lockTimeout, 5, 0, 0, "") require.NoError(t, err, "Unexpected error on New") fmt.Println("testLock") diff --git a/k8s/core/configmap/configmap_lock_v2_test.go b/k8s/core/configmap/configmap_lock_v2_test.go index 74955bc6..795c0e5c 100644 --- a/k8s/core/configmap/configmap_lock_v2_test.go +++ b/k8s/core/configmap/configmap_lock_v2_test.go @@ -17,7 +17,7 @@ const ( func TestMultilock(t *testing.T) { fakeClient := fakek8sclient.NewSimpleClientset() coreops.SetInstance(coreops.New(fakeClient)) - cm, err := New("px-configmaps-test", nil, lockTimeout, 3, 0, 0) + cm, err := New("px-configmaps-test", nil, lockTimeout, 3, 0, 0, "") require.NoError(t, err, "Unexpected error on New") fmt.Println("testMultilock") From c697c37dbe66194219afaa2a134f944c7650598a Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Wed, 15 Mar 2023 12:12:52 +0530 Subject: [PATCH 3/6] test commit to trigger build Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap_lock_v2_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/k8s/core/configmap/configmap_lock_v2_test.go b/k8s/core/configmap/configmap_lock_v2_test.go index 795c0e5c..3e4a0440 100644 --- a/k8s/core/configmap/configmap_lock_v2_test.go +++ b/k8s/core/configmap/configmap_lock_v2_test.go @@ -120,7 +120,9 @@ func TestMultilock(t *testing.T) { // Locking again with same owner should not throw error err = cm.LockWithKey(id1, key1) require.NoError(t, err, "Unexpected error in lock") + fmt.Println("time : ", time.Now()) time.Sleep((v2DefaultK8sLockRefreshDuration * 3) + (3 * time.Second)) + fmt.Println("time : ", time.Now()) require.True(t, lockTimedout, "Lock hold timeout not triggered") // Locking again with expired lock should not throw error From b00e06c048653b9768d023a9f42d78f6808dee39 Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Wed, 15 Mar 2023 12:31:02 +0530 Subject: [PATCH 4/6] Remove test logs Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap_lock_v2_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/k8s/core/configmap/configmap_lock_v2_test.go b/k8s/core/configmap/configmap_lock_v2_test.go index 3e4a0440..795c0e5c 100644 --- a/k8s/core/configmap/configmap_lock_v2_test.go +++ b/k8s/core/configmap/configmap_lock_v2_test.go @@ -120,9 +120,7 @@ func TestMultilock(t *testing.T) { // Locking again with same owner should not throw error err = cm.LockWithKey(id1, key1) require.NoError(t, err, "Unexpected error in lock") - fmt.Println("time : ", time.Now()) time.Sleep((v2DefaultK8sLockRefreshDuration * 3) + (3 * time.Second)) - fmt.Println("time : ", time.Now()) require.True(t, lockTimedout, "Lock hold timeout not triggered") // Locking again with expired lock should not throw error From 66a9f2bbfbc93ea254774b96ee6f5a66ee03a3a8 Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Fri, 17 Mar 2023 13:25:15 +0530 Subject: [PATCH 5/6] use custom namespace for all configmap operations Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap.go | 9 +- k8s/core/configmap/configmap_lock_v1.go | 7 +- k8s/core/configmap/configmap_lock_v1_test.go | 2 +- k8s/core/configmap/configmap_lock_v2.go | 6 +- k8s/core/configmap/configmap_test.go | 89 ++++++++++++++++++++ k8s/core/configmap/types.go | 1 + 6 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 k8s/core/configmap/configmap_test.go diff --git a/k8s/core/configmap/configmap.go b/k8s/core/configmap/configmap.go index 05331aa1..d39265dc 100644 --- a/k8s/core/configmap/configmap.go +++ b/k8s/core/configmap/configmap.go @@ -67,13 +67,14 @@ func New( lockAttempts: lockAttempts, lockRefreshDuration: v2LockRefreshDuration, lockK8sLockTTL: v2LockK8sLockTTL, + nameSpace: nameSpace, }, nil } func (c *configMap) Get() (map[string]string, error) { cm, err := core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { return nil, err @@ -85,7 +86,7 @@ func (c *configMap) Get() (map[string]string, error) { func (c *configMap) Delete() error { return core.Instance().DeleteConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) } @@ -97,7 +98,7 @@ func (c *configMap) Patch(data map[string]string) error { for retries := 0; retries < maxConflictRetries; retries++ { cm, err = core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { return err @@ -128,7 +129,7 @@ func (c *configMap) Update(data map[string]string) error { for retries := 0; retries < maxConflictRetries; retries++ { cm, err = core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { return err diff --git a/k8s/core/configmap/configmap_lock_v1.go b/k8s/core/configmap/configmap_lock_v1.go index 2df43ef1..e37c50e9 100644 --- a/k8s/core/configmap/configmap_lock_v1.go +++ b/k8s/core/configmap/configmap_lock_v1.go @@ -1,10 +1,11 @@ package configmap import ( + "time" + "github.com/portworx/sched-ops/k8s/core" corev1 "k8s.io/api/core/v1" k8s_errors "k8s.io/apimachinery/pkg/api/errors" - "time" ) func (c *configMap) Lock(id string) error { @@ -54,7 +55,7 @@ func (c *configMap) Unlock() error { for retries := 0; retries < maxConflictRetries; retries++ { cm, err = core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { // A ConfigMap should always be created. @@ -89,7 +90,7 @@ func (c *configMap) tryLockV1(id string, refresh bool) (string, error) { // Get the existing ConfigMap cm, err := core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { // A ConfigMap should always be created. diff --git a/k8s/core/configmap/configmap_lock_v1_test.go b/k8s/core/configmap/configmap_lock_v1_test.go index 1aca683d..2192da12 100644 --- a/k8s/core/configmap/configmap_lock_v1_test.go +++ b/k8s/core/configmap/configmap_lock_v1_test.go @@ -13,7 +13,7 @@ import ( func TestLock(t *testing.T) { fakeClient := fakek8sclient.NewSimpleClientset() coreops.SetInstance(coreops.New(fakeClient)) - cm, err := New("px-configmaps-test", nil, lockTimeout, 5, 0, 0, "") + cm, err := New("px-configmaps-test", nil, lockTimeout, 5, 0, 0, "test-namespace") require.NoError(t, err, "Unexpected error on New") fmt.Println("testLock") diff --git a/k8s/core/configmap/configmap_lock_v2.go b/k8s/core/configmap/configmap_lock_v2.go index cc817e9d..1081726a 100644 --- a/k8s/core/configmap/configmap_lock_v2.go +++ b/k8s/core/configmap/configmap_lock_v2.go @@ -89,7 +89,7 @@ func (c *configMap) UnlockWithKey(key string) error { for retries := 0; retries < maxConflictRetries; retries++ { cm, err = core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { // A ConfigMap should always be created. @@ -140,7 +140,7 @@ func (c *configMap) IsKeyLocked(key string) (bool, string, error) { // Get the existing ConfigMap cm, err := core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { return false, "", err @@ -174,7 +174,7 @@ func (c *configMap) tryLock(owner string, key string) (string, error) { // Get the existing ConfigMap cm, err := core.Instance().GetConfigMap( c.name, - k8sSystemNamespace, + c.nameSpace, ) if err != nil { // A ConfigMap should always be created. diff --git a/k8s/core/configmap/configmap_test.go b/k8s/core/configmap/configmap_test.go new file mode 100644 index 00000000..6034c334 --- /dev/null +++ b/k8s/core/configmap/configmap_test.go @@ -0,0 +1,89 @@ +package configmap + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + coreops "github.com/portworx/sched-ops/k8s/core" + fakek8sclient "k8s.io/client-go/kubernetes/fake" +) + +func TestGetConfigMap(t *testing.T) { + fakeClient := fakek8sclient.NewSimpleClientset() + coreops.SetInstance(coreops.New(fakeClient)) + + configData := map[string]string{ + "key1": "val1", + } + cm, err := New("px-configmaps-test", configData, lockTimeout, 5, 0, 0, "test-namespace") + require.NoError(t, err, "Unexpected error in creating configmap") + + resultMap, err := cm.Get() + require.NoError(t, err, "Unexpected error in getting configmap") + require.Contains(t, resultMap, "key1") + fmt.Println(resultMap) +} + +func TestDeleteConfigMap(t *testing.T) { + fakeClient := fakek8sclient.NewSimpleClientset() + coreops.SetInstance(coreops.New(fakeClient)) + + configData := map[string]string{ + "key1": "val1", + } + + cm, err := New("px-configmaps-test", configData, lockTimeout, 5, 0, 0, "test-namespace") + require.NoError(t, err, "Unexpected error in creating configmap") + + err = cm.Delete() + require.NoError(t, err, "Unexpected error in delete") + +} + +func TestPatchConfigMap(t *testing.T) { + fakeClient := fakek8sclient.NewSimpleClientset() + coreops.SetInstance(coreops.New(fakeClient)) + + configData := map[string]string{ + "key1": "val1", + } + + cm, err := New("px-configmaps-test", configData, lockTimeout, 5, 0, 0, "test-namespace") + require.NoError(t, err, "Unexpected error in creating configmap") + + dummyData := map[string]string{ + "key2": "val2", + } + + err = cm.Patch(dummyData) + require.NoError(t, err, "Unexpected error in Patch") + resultMap, err := cm.Get() + require.Contains(t, resultMap, "key1") + require.Contains(t, resultMap, "key2") + fmt.Println(resultMap) +} + +func TestUpdateConfigMap(t *testing.T) { + fakeClient := fakek8sclient.NewSimpleClientset() + coreops.SetInstance(coreops.New(fakeClient)) + + configData := map[string]string{ + "key1": "val1", + } + + cm, err := New("px-configmaps-test", configData, lockTimeout, 5, 0, 0, "test-namespace") + require.NoError(t, err, "Unexpected error in creating configmap") + + dummyData := map[string]string{ + "key2": "val2", + } + + err = cm.Update(dummyData) + require.NoError(t, err, "Unexpected error in Update") + resultMap, err := cm.Get() + require.NotContains(t, resultMap, "key1") + require.Contains(t, resultMap, "key2") + fmt.Println(resultMap) +} diff --git a/k8s/core/configmap/types.go b/k8s/core/configmap/types.go index b1f65c9d..0d8b9453 100644 --- a/k8s/core/configmap/types.go +++ b/k8s/core/configmap/types.go @@ -66,6 +66,7 @@ type configMap struct { lockAttempts uint lockRefreshDuration time.Duration lockK8sLockTTL time.Duration + nameSpace string } type k8sLock struct { From 326479785c2fa4161dae0b509ef3e8c73778650c Mon Sep 17 00:00:00 2001 From: Nikita Bhatia Date: Thu, 23 Mar 2023 00:31:43 +0530 Subject: [PATCH 6/6] Fix failing test Signed-off-by: Nikita Bhatia --- k8s/core/configmap/configmap_lock_v1_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/k8s/core/configmap/configmap_lock_v1_test.go b/k8s/core/configmap/configmap_lock_v1_test.go index b6ac5239..798e1402 100644 --- a/k8s/core/configmap/configmap_lock_v1_test.go +++ b/k8s/core/configmap/configmap_lock_v1_test.go @@ -112,7 +112,7 @@ func TestLockWithHoldTimeout(t *testing.T) { customHoldTimeout := defaultHoldTimeout + v1DefaultK8sLockRefreshDuration + 10*time.Second fakeClient := fakek8sclient.NewSimpleClientset() coreops.SetInstance(coreops.New(fakeClient)) - cm, err := New("px-configmaps-test", nil, defaultHoldTimeout, 5, 0, 0) + cm, err := New("px-configmaps-test", nil, defaultHoldTimeout, 5, 0, 0, "") require.NoError(t, err, "Unexpected error on New") fmt.Println("TestLockWithHoldTimeout")