Skip to content

Commit 2dc5354

Browse files
authored
Merge pull request #47 from turkenh/backport-41-to-release-0.2
[release-0.2] Do not remove resources from observed state with regex
2 parents 2e3a050 + 1a4f119 commit 2dc5354

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

fn.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ func (f *Function) RunFunction(_ context.Context, req *fnv1beta1.RunFunctionRequ
113113
currentRegex, _ := getStrictRegex(string(r))
114114
for k := range desiredComposed {
115115
if currentRegex.MatchString(string(k)) {
116+
if _, ok := observedComposed[k]; ok {
117+
// if the resource is already part of the observedComposed, we should not delete it
118+
continue
119+
}
116120
delete(desiredComposed, k)
117121
}
118122
}

fn_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,85 @@ func TestRunFunction(t *testing.T) {
621621
},
622622
},
623623
},
624+
"SequenceRegexObservedAreSkipped": {
625+
reason: "The function should not attempt to remove resources from the desired state when they are already in the observed state",
626+
args: args{
627+
req: &fnv1beta1.RunFunctionRequest{
628+
Input: resource.MustStructObject(&v1beta1.Input{
629+
Rules: []v1beta1.SequencingRule{
630+
{
631+
Sequence: []resource.Name{
632+
"first-.*",
633+
"second-.*",
634+
},
635+
},
636+
},
637+
}),
638+
Observed: &fnv1beta1.State{
639+
Composite: &fnv1beta1.Resource{
640+
Resource: resource.MustStructJSON(xr),
641+
},
642+
Resources: map[string]*fnv1beta1.Resource{
643+
"first-1": {
644+
Resource: resource.MustStructJSON(mr),
645+
Ready: fnv1beta1.Ready_READY_TRUE,
646+
},
647+
"second-1": {
648+
Resource: resource.MustStructJSON(mr),
649+
Ready: fnv1beta1.Ready_READY_TRUE,
650+
},
651+
},
652+
},
653+
Desired: &fnv1beta1.State{
654+
Composite: &fnv1beta1.Resource{
655+
Resource: resource.MustStructJSON(xr),
656+
},
657+
Resources: map[string]*fnv1beta1.Resource{
658+
"first-1": {
659+
Resource: resource.MustStructJSON(mr),
660+
Ready: fnv1beta1.Ready_READY_TRUE,
661+
},
662+
"first-2": {
663+
Resource: resource.MustStructJSON(mr),
664+
},
665+
"second-1": {
666+
Resource: resource.MustStructJSON(mr),
667+
Ready: fnv1beta1.Ready_READY_TRUE,
668+
},
669+
},
670+
},
671+
},
672+
},
673+
want: want{
674+
rsp: &fnv1beta1.RunFunctionResponse{
675+
Meta: &fnv1beta1.ResponseMeta{Ttl: durationpb.New(response.DefaultTTL)},
676+
Results: []*fnv1beta1.Result{
677+
{
678+
Severity: fnv1beta1.Severity_SEVERITY_NORMAL,
679+
Message: "Delaying creation of resource(s) matching \"second-.*\" because \"first-.*\" is not fully ready (1 of 2)",
680+
},
681+
},
682+
Desired: &fnv1beta1.State{
683+
Composite: &fnv1beta1.Resource{
684+
Resource: resource.MustStructJSON(xr),
685+
},
686+
Resources: map[string]*fnv1beta1.Resource{
687+
"first-1": {
688+
Resource: resource.MustStructJSON(mr),
689+
Ready: fnv1beta1.Ready_READY_TRUE,
690+
},
691+
"first-2": {
692+
Resource: resource.MustStructJSON(mr),
693+
},
694+
"second-1": {
695+
Resource: resource.MustStructJSON(mr),
696+
Ready: fnv1beta1.Ready_READY_TRUE,
697+
},
698+
},
699+
},
700+
},
701+
},
702+
},
624703
"SequenceRegexFirstGroupReady": {
625704
reason: "The function should delay the creation of second and fourth resources because the first and third are not ready",
626705
args: args{

0 commit comments

Comments
 (0)