Skip to content

Commit 67203dd

Browse files
Workload status reflects updated supplychain resource order
1 parent 8f543f4 commit 67203dd

File tree

7 files changed

+263
-26
lines changed

7 files changed

+263
-26
lines changed

pkg/controllers/deliverable_reconciler_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ var _ = Describe("DeliverableReconciler", func() {
267267
Name: "my-image-template",
268268
APIVersion: "carto.run/v1alpha1",
269269
},
270-
}, nil, false)
270+
}, 0, nil, false)
271271
resourceStatuses.Add(
272272
&v1alpha1.RealizedResource{
273273
Name: "resource2",
@@ -283,7 +283,7 @@ var _ = Describe("DeliverableReconciler", func() {
283283
Name: "my-config-template",
284284
APIVersion: "carto.run/v1alpha1",
285285
},
286-
}, nil, false)
286+
}, 1, nil, false)
287287

288288
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
289289
statusesVal := reflect.ValueOf(statuses)
@@ -627,7 +627,7 @@ var _ = Describe("DeliverableReconciler", func() {
627627
Name: "my-image-template",
628628
APIVersion: "carto.run/v1alpha1",
629629
},
630-
}, nil, false,
630+
}, 0, nil, false,
631631
)
632632
resourceStatuses.Add(
633633
&v1alpha1.RealizedResource{
@@ -638,7 +638,7 @@ var _ = Describe("DeliverableReconciler", func() {
638638
Name: "my-config-template",
639639
APIVersion: "carto.run/v1alpha1",
640640
},
641-
}, nil, false,
641+
}, 1, nil, false,
642642
)
643643

644644
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
@@ -1587,7 +1587,7 @@ var _ = Describe("DeliverableReconciler", func() {
15871587
Kind: "some-template-kind",
15881588
Name: "some-template-name",
15891589
},
1590-
}, nil, false,
1590+
}, 0, nil, false,
15911591
)
15921592
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
15931593
statusesVal := reflect.ValueOf(statuses)

pkg/controllers/workload_reconciler_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ var _ = Describe("WorkloadReconciler", func() {
267267
Name: "my-image-template",
268268
APIVersion: "carto.run/v1alpha1",
269269
},
270-
}, nil, false,
270+
}, 0, nil, false,
271271
)
272272
resourceStatuses.Add(
273273
&v1alpha1.RealizedResource{
@@ -284,7 +284,7 @@ var _ = Describe("WorkloadReconciler", func() {
284284
Name: "my-config-template",
285285
APIVersion: "carto.run/v1alpha1",
286286
},
287-
}, nil, false,
287+
}, 1, nil, false,
288288
)
289289

290290
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
@@ -628,7 +628,7 @@ var _ = Describe("WorkloadReconciler", func() {
628628
Name: "my-image-template",
629629
APIVersion: "carto.run/v1alpha1",
630630
},
631-
}, nil, false,
631+
}, 0, nil, false,
632632
)
633633
resourceStatuses.Add(
634634
&v1alpha1.RealizedResource{
@@ -639,7 +639,7 @@ var _ = Describe("WorkloadReconciler", func() {
639639
Name: "my-config-template",
640640
APIVersion: "carto.run/v1alpha1",
641641
},
642-
}, nil, false,
642+
}, 1, nil, false,
643643
)
644644

645645
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
@@ -1377,7 +1377,7 @@ var _ = Describe("WorkloadReconciler", func() {
13771377
Kind: "some-template-kind",
13781378
Name: "some-template-name",
13791379
},
1380-
}, nil, false,
1380+
}, 0, nil, false,
13811381
)
13821382
rlzr.RealizeStub = func(ctx context.Context, resourceRealizer realizer.ResourceRealizer, deliveryName string, resources []realizer.OwnerResource, statuses statuses.ResourceStatuses) error {
13831383
statusesVal := reflect.ValueOf(statuses)

pkg/realizer/realizer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func (r *realizer) Realize(ctx context.Context, resourceRealizer ResourceRealize
111111
outs := NewOutputs()
112112
var firstError error
113113

114-
for _, resource := range ownerResources {
114+
for resourceIndex, resource := range ownerResources {
115115
log = log.WithValues("resource", resource.Name)
116116
ctx = logr.NewContext(ctx, log)
117117
template, stampedObject, out, isPassThrough, templateName, err := resourceRealizer.Do(ctx, resource, blueprintName, outs, r.mapper)
@@ -168,7 +168,7 @@ func (r *realizer) Realize(ctx context.Context, resourceRealizer ResourceRealize
168168
}
169169
}
170170

171-
resourceStatuses.Add(realizedResource, err, isPassThrough, additionalConditions...)
171+
resourceStatuses.Add(realizedResource, resourceIndex, err, isPassThrough, additionalConditions...)
172172

173173
if slices.Contains(resourceStatuses.ChangedConditionTypes(realizedResource.Name), v1alpha1.ResourceHealthy) {
174174
newStatus := metav1.ConditionUnknown

pkg/realizer/realizer_test.go

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ var _ = Describe("Realize", func() {
518518
previousResources []v1alpha1.ResourceStatus
519519
previousTime metav1.Time
520520
supplyChain *v1alpha1.ClusterSupplyChain
521+
resource2 v1alpha1.SupplyChainResource
521522
)
522523
BeforeEach(func() {
523524
previousTime = metav1.NewTime(time.Now())
@@ -593,7 +594,7 @@ var _ = Describe("Realize", func() {
593594
resource1 := v1alpha1.SupplyChainResource{
594595
Name: "resource1",
595596
}
596-
resource2 := v1alpha1.SupplyChainResource{
597+
resource2 = v1alpha1.SupplyChainResource{
597598
Name: "resource2",
598599
Sources: []v1alpha1.ResourceReference{
599600
{
@@ -691,6 +692,10 @@ var _ = Describe("Realize", func() {
691692
var resource2Status v1alpha1.ResourceStatus
692693
var resource3Status v1alpha1.ResourceStatus
693694

695+
for i := range currentStatuses {
696+
Expect(currentStatuses[i].Name).To(Equal(fmt.Sprintf("resource%d", i+1)))
697+
}
698+
694699
for i := range currentStatuses {
695700
switch currentStatuses[i].Name {
696701
case "resource1":
@@ -743,6 +748,44 @@ var _ = Describe("Realize", func() {
743748
Expect(resourceObj).To(Equal(stampedObj1))
744749
})
745750

751+
Context("the supply chain has changed to have fewer resources", func() {
752+
var currentStatuses []v1alpha1.ResourceStatus
753+
BeforeEach(func() {
754+
supplyChain = &v1alpha1.ClusterSupplyChain{
755+
ObjectMeta: metav1.ObjectMeta{Name: "greatest-supply-chain"},
756+
Spec: v1alpha1.SupplyChainSpec{
757+
Resources: []v1alpha1.SupplyChainResource{resource2},
758+
},
759+
}
760+
761+
template2 := &v1alpha1.ClusterImageTemplate{
762+
TypeMeta: metav1.TypeMeta{},
763+
ObjectMeta: metav1.ObjectMeta{
764+
Name: "my-image-template",
765+
},
766+
}
767+
reader2, err := templates.NewReaderFromAPI(template2)
768+
Expect(err).NotTo(HaveOccurred())
769+
770+
resourceRealizer.DoReturnsOnCall(0, reader2, &unstructured.Unstructured{}, nil, false, resource2.Name, nil)
771+
772+
oldOutput := &templates.Output{
773+
Image: "whatever",
774+
}
775+
resourceRealizer.DoReturnsOnCall(0, reader2, &unstructured.Unstructured{}, oldOutput, false, "", nil)
776+
777+
resourceStatuses := statuses.NewResourceStatuses(previousResources, conditions.AddConditionForResourceSubmittedWorkload)
778+
err = rlzr.Realize(ctx, resourceRealizer, supplyChain.Name, realizer.MakeSupplychainOwnerResources(supplyChain), resourceStatuses)
779+
Expect(err).ToNot(HaveOccurred())
780+
781+
currentStatuses = resourceStatuses.GetCurrent()
782+
})
783+
It("only creates 1 resource status in currentStatuses", func() {
784+
Expect(currentStatuses[0].Name).To(Equal(fmt.Sprintf("resource2")))
785+
Expect(len(currentStatuses)).To(Equal(1))
786+
})
787+
})
788+
746789
Context("there is an error realizing resource 1 and resource 2", func() {
747790
BeforeEach(func() {
748791
resourceRealizer.DoReturnsOnCall(0, nil, nil, nil, false, "", errors.New("im in a bad state"))

pkg/realizer/statuses/resource_statuses.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
type ResourceStatuses interface {
2828
ChangedConditionTypes(realizedResourceName string) []string
2929
GetPreviousResourceStatus(realizedResourceName string) *v1alpha1.ResourceStatus
30-
Add(status *v1alpha1.RealizedResource, err error, isPassThrough bool, furtherConditions ...metav1.Condition)
30+
Add(status *v1alpha1.RealizedResource, resourceIndex int, err error, isPassThrough bool, furtherConditions ...metav1.Condition)
3131
GetCurrent() ResourceStatusList
3232
IsChanged() bool
3333
}
@@ -114,7 +114,7 @@ func (r *resourceStatuses) GetPreviousResourceStatus(realizedResourceName string
114114
return nil
115115
}
116116

117-
func (r *resourceStatuses) Add(realizedResource *v1alpha1.RealizedResource, err error, isPassThrough bool, furtherConditions ...metav1.Condition) {
117+
func (r *resourceStatuses) Add(realizedResource *v1alpha1.RealizedResource, resourceIndex int, err error, isPassThrough bool, furtherConditions ...metav1.Condition) {
118118
name := realizedResource.Name
119119

120120
var existingStatus *resourceStatus
@@ -129,7 +129,9 @@ func (r *resourceStatuses) Add(realizedResource *v1alpha1.RealizedResource, err
129129
existingStatus = &resourceStatus{
130130
name: name,
131131
}
132-
r.statuses = append(r.statuses, existingStatus)
132+
r.statuses = append(r.statuses, &resourceStatus{})
133+
copy(r.statuses[resourceIndex+1:], r.statuses[resourceIndex:len(r.statuses)-1])
134+
r.statuses[resourceIndex] = existingStatus
133135
}
134136

135137
existingStatus.current = &v1alpha1.ResourceStatus{

pkg/realizer/statuses/resource_statuses_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ var _ = Describe("ResourceStatuses", func() {
7777
TemplateRef: nil,
7878
Inputs: nil,
7979
Outputs: nil,
80-
}, nil, false)
80+
}, 0, nil, false)
8181
})
8282

8383
It("the resourceStatuses reports IsChanged is false", func() {
@@ -97,7 +97,7 @@ var _ = Describe("ResourceStatuses", func() {
9797
TemplateRef: nil,
9898
Inputs: nil,
9999
Outputs: nil,
100-
}, nil, false)
100+
}, 1, nil, false)
101101
Expect(resourceStatuses.IsChanged()).To(BeTrue())
102102
})
103103

@@ -108,7 +108,7 @@ var _ = Describe("ResourceStatuses", func() {
108108
TemplateRef: nil,
109109
Inputs: nil,
110110
Outputs: nil,
111-
}, nil, false)
111+
}, 1, nil, false)
112112
Expect(resourceStatuses.ChangedConditionTypes("resource2")).To(ConsistOf(v1alpha1.ResourceSubmitted, v1alpha1.ResourceReady))
113113
})
114114

@@ -119,7 +119,7 @@ var _ = Describe("ResourceStatuses", func() {
119119
TemplateRef: nil,
120120
Inputs: nil,
121121
Outputs: nil,
122-
}, nil, false, metav1.Condition{
122+
}, 1, nil, false, metav1.Condition{
123123
Type: v1alpha1.ResourceHealthy,
124124
Status: "Unknown",
125125
})
@@ -133,7 +133,7 @@ var _ = Describe("ResourceStatuses", func() {
133133
TemplateRef: nil,
134134
Inputs: nil,
135135
Outputs: nil,
136-
}, nil, false, metav1.Condition{
136+
}, 1, nil, false, metav1.Condition{
137137
Type: v1alpha1.ResourceHealthy,
138138
Status: "False",
139139
})
@@ -147,7 +147,7 @@ var _ = Describe("ResourceStatuses", func() {
147147
TemplateRef: nil,
148148
Inputs: nil,
149149
Outputs: nil,
150-
}, nil, false, metav1.Condition{
150+
}, 1, nil, false, metav1.Condition{
151151
Type: v1alpha1.ResourceHealthy,
152152
Status: "True",
153153
})
@@ -168,7 +168,7 @@ var _ = Describe("ResourceStatuses", func() {
168168
TemplateRef: nil,
169169
Inputs: nil,
170170
Outputs: nil,
171-
}, nil, false)
171+
}, 0, nil, false)
172172
Expect(resourceStatuses.IsChanged()).To(BeTrue())
173173
})
174174
})
@@ -181,7 +181,7 @@ var _ = Describe("ResourceStatuses", func() {
181181
TemplateRef: nil,
182182
Inputs: nil,
183183
Outputs: nil,
184-
}, errors.New("has an error"), false)
184+
}, 0, errors.New("has an error"), false)
185185
Expect(resourceStatuses.IsChanged()).To(BeTrue())
186186
})
187187

@@ -192,7 +192,7 @@ var _ = Describe("ResourceStatuses", func() {
192192
TemplateRef: nil,
193193
Inputs: nil,
194194
Outputs: nil,
195-
}, errors.New("has an error"), false)
195+
}, 0, errors.New("has an error"), false)
196196
Expect(resourceStatuses.ChangedConditionTypes("resource1")).To(ConsistOf("Ready", "ResourceSubmitted"))
197197
})
198198
})
@@ -217,7 +217,7 @@ var _ = Describe("ResourceStatuses", func() {
217217
TemplateRef: nil,
218218
Inputs: nil,
219219
Outputs: nil,
220-
}, nil, false)
220+
}, 0, nil, false)
221221
Expect(resourceStatuses.IsChanged()).To(BeTrue())
222222
})
223223
})

0 commit comments

Comments
 (0)