Skip to content

Commit 809f91b

Browse files
committed
Restore Pre upgrade fucntions
1 parent a09f0cb commit 809f91b

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

pkg/reconciler/shared/tektonconfig/upgrade/pre_upgrade.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import (
2020
"context"
2121
"encoding/json"
2222

23+
"github.com/tektoncd/operator/pkg/reconciler/kubernetes/tektonpruner"
24+
"gopkg.in/yaml.v3"
25+
2326
"github.com/tektoncd/operator/pkg/apis/operator/v1alpha1"
2427
"github.com/tektoncd/operator/pkg/client/clientset/versioned"
2528
tektonresult "github.com/tektoncd/operator/pkg/reconciler/kubernetes/tektonresult"
@@ -115,6 +118,42 @@ func deleteTektonResultsTLSSecret(ctx context.Context, logger *zap.SugaredLogger
115118
return nil
116119
}
117120

121+
// TODO: Remove the preUpgradeTektonPruner upgrade function in next operator release
122+
func preUpgradeTektonPruner(ctx context.Context, logger *zap.SugaredLogger, k8sClient kubernetes.Interface, operatorClient versioned.Interface, restConfig *rest.Config) error {
123+
// get tektonConfig CR
124+
logger.Infof("Performing Preupgrade for TektonPruner")
125+
tc, err := operatorClient.OperatorV1alpha1().TektonConfigs().Get(ctx, v1alpha1.ConfigResourceName, metav1.GetOptions{})
126+
if err != nil {
127+
logger.Errorw("error on getting TektonConfig CR", err)
128+
return err
129+
}
130+
131+
if tc.Spec.TektonPruner.IsDisabled() {
132+
logger.Infof("TektonPruner is disabled, skipping pre-upgrade for TektonPruner")
133+
return nil
134+
}
135+
136+
var prunerConfig v1alpha1.TektonPrunerConfig
137+
cm, err := k8sClient.CoreV1().ConfigMaps(tc.Spec.TargetNamespace).Get(ctx, tektonpruner.PrunerConfigMapName, metav1.GetOptions{})
138+
if err != nil {
139+
if apierrs.IsNotFound(err) {
140+
prunerConfig = v1alpha1.TektonPrunerConfig{}
141+
}
142+
}
143+
key := "global-config"
144+
if cm != nil && cm.Data[key] != "" {
145+
if err := yaml.Unmarshal([]byte(cm.Data[key]), &prunerConfig.GlobalConfig); err != nil {
146+
logger.Errorf("error on Unmarshal TektonPruner ConfigMap data", err)
147+
return err
148+
}
149+
}
150+
151+
tc.Spec.TektonPruner.GlobalConfig = prunerConfig.GlobalConfig
152+
153+
_, err = operatorClient.OperatorV1alpha1().TektonConfigs().Update(ctx, tc, metav1.UpdateOptions{})
154+
return err
155+
}
156+
118157
// preUpgradePipelinesAsCodeArtifacts checks if Pipelines as Code is installed and updates
119158
// the hub catalog settings to use the artifact hub URL. It cleans up hub-catalog-name from:
120159
// 1. TektonConfig CR settings

pkg/reconciler/shared/tektonconfig/upgrade/pre_upgrade_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"encoding/json"
2222
"testing"
2323

24+
"github.com/tektoncd/operator/pkg/reconciler/kubernetes/tektonpruner"
2425
v1 "k8s.io/api/core/v1"
2526
k8sFake "k8s.io/client-go/kubernetes/fake"
2627

@@ -131,6 +132,69 @@ func TestUpgradePipelineProperties(t *testing.T) {
131132
}
132133
}
133134

135+
func TestPreUpgradeTektonPruner(t *testing.T) {
136+
ctx := context.TODO()
137+
operatorClient := operatorFake.NewSimpleClientset()
138+
k8sClient := k8sFake.NewSimpleClientset()
139+
logger := logging.FromContext(ctx).Named("unit-test")
140+
141+
// there is no tektonConfig CR available, returns error
142+
err := preUpgradeTektonPruner(ctx, logger, k8sClient, operatorClient, nil)
143+
assert.Error(t, err)
144+
145+
// create tekconConfig CR
146+
tc := &v1alpha1.TektonConfig{
147+
ObjectMeta: metav1.ObjectMeta{
148+
Name: v1alpha1.ConfigResourceName,
149+
},
150+
Spec: v1alpha1.TektonConfigSpec{
151+
CommonSpec: v1alpha1.CommonSpec{
152+
TargetNamespace: "foo",
153+
},
154+
TektonPruner: v1alpha1.Pruner{
155+
Disabled: ptr.Bool(false),
156+
},
157+
},
158+
}
159+
_, err = operatorClient.OperatorV1alpha1().TektonConfigs().Create(ctx, tc, metav1.CreateOptions{})
160+
assert.NoError(t, err)
161+
162+
// there is no tekton-config configMap, return no error
163+
err = preUpgradeTektonPruner(ctx, logger, k8sClient, operatorClient, nil)
164+
assert.NoError(t, err)
165+
166+
// verify chains existing field, should not be empty
167+
tc, err = operatorClient.OperatorV1alpha1().TektonConfigs().Get(ctx, v1alpha1.ConfigResourceName, metav1.GetOptions{})
168+
assert.NoError(t, err)
169+
assert.Equal(t, false, *tc.Spec.TektonPruner.Disabled)
170+
171+
// create a config map with values
172+
config := &v1.ConfigMap{
173+
ObjectMeta: metav1.ObjectMeta{
174+
Name: tektonpruner.PrunerConfigMapName,
175+
Namespace: tc.Spec.GetTargetNamespace(),
176+
},
177+
Data: map[string]string{
178+
"global-config": "enforcedConfigLevel: global\nttlSecondsAfterFinished: 88\nsuccessfulHistoryLimit: 400\nfailedHistoryLimit: 10\nhistoryLimit: 10\nnamespaces: {}\n",
179+
},
180+
}
181+
_, err = k8sClient.CoreV1().ConfigMaps(tc.Spec.GetTargetNamespace()).Create(ctx, config, metav1.CreateOptions{})
182+
assert.NoError(t, err)
183+
184+
cm, _ := k8sClient.CoreV1().ConfigMaps(tc.Spec.GetTargetNamespace()).Get(ctx, tektonpruner.PrunerConfigMapName, metav1.GetOptions{})
185+
assert.NotNil(t, cm.Data)
186+
187+
// execute chains upgrade
188+
err = preUpgradeTektonPruner(ctx, logger, k8sClient, operatorClient, nil)
189+
assert.NoError(t, err)
190+
191+
// verify chains with new configMap, map values should be updated
192+
tc, err = operatorClient.OperatorV1alpha1().TektonConfigs().Get(ctx, v1alpha1.ConfigResourceName, metav1.GetOptions{})
193+
assert.NoError(t, err)
194+
assert.Equal(t, false, *tc.Spec.TektonPruner.Disabled)
195+
assert.Equal(t, int32(88), *tc.Spec.TektonPruner.GlobalConfig.TTLSecondsAfterFinished)
196+
}
197+
134198
func TestPreUpgradePipelinesAsCodeArtifacts(t *testing.T) {
135199
t.Setenv("PLATFORM", "openshift")
136200

0 commit comments

Comments
 (0)