generated from kyma-project/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 12
/
preventCidrEdit.go
38 lines (33 loc) · 1.43 KB
/
preventCidrEdit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package iprange
import (
"context"
cloudcontrolv1beta1 "github.com/kyma-project/cloud-manager/api/cloud-control/v1beta1"
"github.com/kyma-project/cloud-manager/pkg/composed"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func preventCidrEdit(ctx context.Context, st composed.State) (error, context.Context) {
state := st.(*State)
if len(state.ObjAsIpRange().Status.Cidr) == 0 {
// will be saved from next splitRangeByZones
state.ObjAsIpRange().Status.Cidr = state.ObjAsIpRange().Spec.Cidr
}
if state.ObjAsIpRange().Spec.Cidr != state.ObjAsIpRange().Status.Cidr {
readyCondition := meta.FindStatusCondition(*state.ObjAsIpRange().Conditions(), cloudcontrolv1beta1.ConditionTypeReady)
if readyCondition != nil && readyCondition.Status == metav1.ConditionTrue {
meta.RemoveStatusCondition(state.ObjAsIpRange().Conditions(), cloudcontrolv1beta1.ConditionTypeReady)
meta.SetStatusCondition(state.ObjAsIpRange().Conditions(), metav1.Condition{
Type: cloudcontrolv1beta1.ConditionTypeError,
Status: "True",
Reason: cloudcontrolv1beta1.ReasonCidrCanNotChange,
Message: "Cidr can not change in Ready condition",
})
err := state.UpdateObjStatus(ctx)
if err != nil {
return composed.LogErrorAndReturn(err, "Error updating IpRange status after Cidr change in ready condition", composed.StopWithRequeue, ctx)
}
return composed.StopAndForget, nil
}
}
return nil, nil
}