Skip to content

Commit 317f3de

Browse files
idanovindaSchmaetz
authored andcommitted
func to add or remove annotations
1 parent 4dd6f62 commit 317f3de

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

pkg/cluster/majorversionupgrade.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package cluster
22

33
import (
4+
"context"
5+
"encoding/json"
46
"fmt"
57
"strings"
68

79
"github.com/cybertec-postgresql/cybertec-pg-operator/pkg/spec"
810
"github.com/cybertec-postgresql/cybertec-pg-operator/pkg/util"
911
v1 "k8s.io/api/core/v1"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
"k8s.io/apimachinery/pkg/types"
1014
)
1115

1216
// VersionMap Map of version numbers
@@ -19,6 +23,11 @@ var VersionMap = map[string]int{
1923
"18": 180000,
2024
}
2125

26+
const (
27+
majorVersionUpgradeSuccessAnnotation = "last-major-upgrade-success"
28+
majorVersionUpgradeFailureAnnotation = "last-major-upgrade-failure"
29+
)
30+
2231
// IsBiggerPostgresVersion Compare two Postgres version numbers
2332
func IsBiggerPostgresVersion(old string, new string) bool {
2433
oldN := VersionMap[old]
@@ -55,6 +64,47 @@ func (c *Cluster) isUpgradeAllowedForTeam(owningTeam string) bool {
5564
return util.SliceContains(allowedTeams, owningTeam)
5665
}
5766

67+
func (c *Cluster) annotatePostgresResource(isSuccess bool) error {
68+
annotations := make(map[string]string)
69+
currentTime := metav1.Now().Format("2006-01-02T15:04:05Z")
70+
if isSuccess {
71+
annotations[majorVersionUpgradeSuccessAnnotation] = currentTime
72+
} else {
73+
annotations[majorVersionUpgradeFailureAnnotation] = currentTime
74+
}
75+
patchData, err := metaAnnotationsPatch(annotations)
76+
if err != nil {
77+
c.logger.Errorf("could not form patch for %s postgresql resource: %v", c.Name, err)
78+
return err
79+
}
80+
_, err = c.KubeClient.Postgresqls(c.Namespace).Patch(context.Background(), c.Name, types.MergePatchType, patchData, metav1.PatchOptions{})
81+
if err != nil {
82+
c.logger.Errorf("failed to patch annotations to postgresql resource: %v", err)
83+
return err
84+
}
85+
return nil
86+
}
87+
88+
func (c *Cluster) removeFailuresAnnotation() error {
89+
annotationToRemove := []map[string]string{
90+
{
91+
"op": "remove",
92+
"path": fmt.Sprintf("/metadata/annotations/%s", majorVersionUpgradeFailureAnnotation),
93+
},
94+
}
95+
removePatch, err := json.Marshal(annotationToRemove)
96+
if err != nil {
97+
c.logger.Errorf("could not form removal patch for %s postgresql resource: %v", c.Name, err)
98+
return err
99+
}
100+
_, err = c.KubeClient.Postgresqls(c.Namespace).Patch(context.Background(), c.Name, types.JSONPatchType, removePatch, metav1.PatchOptions{})
101+
if err != nil {
102+
c.logger.Errorf("failed to remove annotations from postgresql resource: %v", err)
103+
return err
104+
}
105+
return nil
106+
}
107+
58108
/*
59109
Execute upgrade when mode is set to manual or full or when the owning team is allowed for upgrade (and mode is "off").
60110

0 commit comments

Comments
 (0)