Skip to content

Commit a70cc07

Browse files
Merge pull request #400 from venkateshsredhat/OCM-2994
Ocm 2994
2 parents ad263db + 006d75e commit a70cc07

9 files changed

Lines changed: 80 additions & 30 deletions

File tree

apis/addons/v1alpha1/addons_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ type AddOnStatusCondition struct {
382382
StatusType string `json:"status_type"`
383383
StatusValue metav1.ConditionStatus `json:"status_value"`
384384
Reason string `json:"reason"`
385+
Message string `json:"message"`
385386
}
386387

387388
type OCMAddOnStatusHash struct {
@@ -397,6 +398,8 @@ type OCMAddOnStatus struct {
397398
AddonID string `json:"addonID"`
398399
// Correlation ID for co-relating current AddonCR revision and reported status.
399400
CorrelationID string `json:"correlationID"`
401+
// Version of the addon
402+
AddonVersion string `json:"version"`
400403
// Reported addon status conditions
401404
StatusConditions []AddOnStatusCondition `json:"statusConditions"`
402405
// The most recent generation a status update was based on.

cmd/api-mock/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ type addonStatusKey struct {
133133
type addonStatus struct {
134134
AddonID string `json:"addon_id"`
135135
CorrelationID string `json:"correlation_id"`
136+
AddonVersion string `json:"version"`
136137
// We dont care about this unmarshalling this field.
137138
StatusConditions []interface{} `json:"status_conditions"`
138139
}

docs/api-reference/_index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ AddonOperatorStatus defines the observed state of Addon
169169
| status_type | | string | true |
170170
| status_value | | metav1.ConditionStatus | true |
171171
| reason | | string | true |
172+
| message | | string | true |
172173

173174
[Back to Group]()
174175

@@ -421,6 +422,7 @@ Struct used to hash the reported addon status (along with correlationID).
421422
| ----- | ----------- | ------ | -------- |
422423
| addonID | ID of the addon. | string | true |
423424
| correlationID | Correlation ID for co-relating current AddonCR revision and reported status. | string | true |
425+
| version | Version of the addon | string | true |
424426
| statusConditions | Reported addon status conditions | [][AddOnStatusCondition.addons.managed.openshift.io/v1alpha1](#addonstatusconditionaddonsmanagedopenshiftiov1alpha1) | true |
425427
| observedGeneration | The most recent generation a status update was based on. | int64 | true |
426428

integration/ocm_integration_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,17 @@ func (s *integrationTestSuite) TestAddonStatusReporting() {
8484
res, err := integration.OCMClient.GetAddOnStatus(ctx, addon.Name)
8585
s.Require().NoError(err)
8686
s.Require().Equal(addon.Name, res.AddonID)
87+
s.Require().Equal(addon.Spec.Version, res.AddonVersion)
8788
s.Require().Equal(len(res.StatusConditions), 2)
8889

8990
expectedConditions := map[string]string{
9091
addonsv1alpha1.Available: string(metav1.ConditionTrue),
9192
addonsv1alpha1.Installed: string(metav1.ConditionTrue),
9293
}
93-
for _, condition := range res.StatusConditions {
94+
for ind, condition := range res.StatusConditions {
9495
expectedVal, found := expectedConditions[condition.StatusType]
9596
s.Require().True(found && expectedVal == string(condition.StatusValue))
97+
s.Require().Equal(addon.Status.Conditions[ind].Message, condition.Message)
9698
}
9799
})
98100

@@ -115,16 +117,19 @@ func (s *integrationTestSuite) TestAddonStatusReporting() {
115117
res, err := integration.OCMClient.GetAddOnStatus(ctx, addon.Name)
116118
s.Require().NoError(err)
117119
s.Require().Equal(addon.Name, res.AddonID)
120+
s.Require().Equal(addon.Spec.Version, res.AddonVersion)
118121
s.Require().Equal(len(res.StatusConditions), 3)
122+
119123
expectedConditions := map[string]string{
120124
addonsv1alpha1.Available: string(metav1.ConditionTrue),
121125
addonsv1alpha1.Installed: string(metav1.ConditionTrue),
122126
addonsv1alpha1.Paused: string(metav1.ConditionTrue),
123127
}
124128

125-
for _, condition := range res.StatusConditions {
129+
for ind, condition := range res.StatusConditions {
126130
expectedVal, found := expectedConditions[condition.StatusType]
127131
s.Require().True(found && expectedVal == string(condition.StatusValue))
132+
s.Require().Equal(addon.Status.Conditions[ind].Message, condition.Message)
128133
}
129134

130135
// Assert that the addon object correctly updates its status block with the

internal/controllers/addon/status_reporting.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func (r *AddonReconciler) postAddonStatus(ctx context.Context, addon *addonsv1al
4949
statusPayload := ocm.AddOnStatusPostRequest{
5050
AddonID: addon.Name,
5151
CorrelationID: addon.Spec.CorrelationID,
52+
AddonVersion: addon.Spec.Version,
5253
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
5354
}
5455
r.recordAddonServiceRequestDuration(func() {
@@ -79,6 +80,7 @@ func mapToAddonStatusConditions(in []metav1.Condition) []addonsv1alpha1.AddOnSta
7980
StatusType: obj.Type,
8081
StatusValue: obj.Status,
8182
Reason: obj.Reason,
83+
Message: obj.Message,
8284
}
8385
}
8486
return res

internal/controllers/addon/status_reporting_test.go

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,16 @@ func TestHandleAddonStatusReporting(t *testing.T) {
3939
Name: "addon-1",
4040
},
4141
Spec: addonsv1alpha1.AddonSpec{
42+
Version: "2.0.13",
4243
CorrelationID: "123",
4344
},
4445
Status: addonsv1alpha1.AddonStatus{
4546
Conditions: []metav1.Condition{
4647
{
47-
Type: addonsv1alpha1.Available,
48-
Status: metav1.ConditionTrue,
49-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
48+
Type: addonsv1alpha1.Available,
49+
Status: metav1.ConditionTrue,
50+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
51+
Message: "AddonReasonFullyReconciled",
5052
},
5153
},
5254
OCMReportedStatusHash: &addonsv1alpha1.OCMAddOnStatusHash{},
@@ -72,14 +74,16 @@ func TestHandleAddonStatusReporting(t *testing.T) {
7274
Name: "addon-1",
7375
},
7476
Spec: addonsv1alpha1.AddonSpec{
77+
Version: "2.0.13",
7578
CorrelationID: "123",
7679
},
7780
Status: addonsv1alpha1.AddonStatus{
7881
Conditions: []metav1.Condition{
7982
{
80-
Type: addonsv1alpha1.Available,
81-
Status: metav1.ConditionTrue,
82-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
83+
Type: addonsv1alpha1.Available,
84+
Status: metav1.ConditionTrue,
85+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
86+
Message: "AddonReasonFullyReconciled",
8387
},
8488
},
8589
},
@@ -108,14 +112,16 @@ func TestHandleAddonStatusReporting(t *testing.T) {
108112
Name: "addon-1",
109113
},
110114
Spec: addonsv1alpha1.AddonSpec{
115+
Version: "2.0.13",
111116
CorrelationID: "123",
112117
},
113118
Status: addonsv1alpha1.AddonStatus{
114119
Conditions: []metav1.Condition{
115120
{
116-
Type: addonsv1alpha1.Available,
117-
Status: metav1.ConditionTrue,
118-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
121+
Type: addonsv1alpha1.Available,
122+
Status: metav1.ConditionTrue,
123+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
124+
Message: "AddonReasonFullyReconciled",
119125
},
120126
},
121127
},
@@ -125,6 +131,7 @@ func TestHandleAddonStatusReporting(t *testing.T) {
125131
ocmClient.On("PostAddOnStatus", mock.Anything, ocm.AddOnStatusPostRequest{
126132
AddonID: "addon-1",
127133
CorrelationID: "123",
134+
AddonVersion: addon.Spec.Version,
128135
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
129136
}).Return(
130137
ocm.AddOnStatusResponse{},
@@ -163,19 +170,22 @@ func TestHandleAddonStatusReporting(t *testing.T) {
163170
Name: "addon-1",
164171
},
165172
Spec: addonsv1alpha1.AddonSpec{
173+
Version: "2.0.13",
166174
CorrelationID: "1234",
167175
},
168176
Status: addonsv1alpha1.AddonStatus{
169177
Conditions: []metav1.Condition{
170178
{
171-
Type: addonsv1alpha1.Available,
172-
Status: metav1.ConditionTrue,
173-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
179+
Type: addonsv1alpha1.Available,
180+
Status: metav1.ConditionTrue,
181+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
182+
Message: "AddonReasonFullyReconciled",
174183
},
175184
{
176-
Type: addonsv1alpha1.UpgradeStarted,
177-
Status: metav1.ConditionTrue,
178-
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
185+
Type: addonsv1alpha1.UpgradeStarted,
186+
Status: metav1.ConditionTrue,
187+
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
188+
Message: "AddonReasonUpgradeStarted",
179189
},
180190
},
181191
OCMReportedStatusHash: &addonsv1alpha1.OCMAddOnStatusHash{
@@ -189,6 +199,7 @@ func TestHandleAddonStatusReporting(t *testing.T) {
189199
ocmClient.On("PostAddOnStatus", mock.Anything, ocm.AddOnStatusPostRequest{
190200
AddonID: "addon-1",
191201
CorrelationID: addon.Spec.CorrelationID,
202+
AddonVersion: addon.Spec.Version,
192203
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
193204
}).Return(
194205
ocm.AddOnStatusResponse{},
@@ -228,19 +239,22 @@ func TestHandleAddonStatusReporting(t *testing.T) {
228239
Name: "addon-1",
229240
},
230241
Spec: addonsv1alpha1.AddonSpec{
242+
Version: "2.0.13",
231243
CorrelationID: "1234",
232244
},
233245
Status: addonsv1alpha1.AddonStatus{
234246
Conditions: []metav1.Condition{
235247
{
236-
Type: addonsv1alpha1.Available,
237-
Status: metav1.ConditionTrue,
238-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
248+
Type: addonsv1alpha1.Available,
249+
Status: metav1.ConditionTrue,
250+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
251+
Message: "AddonReasonFullyReconciled",
239252
},
240253
{
241-
Type: addonsv1alpha1.UpgradeStarted,
242-
Status: metav1.ConditionTrue,
243-
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
254+
Type: addonsv1alpha1.UpgradeStarted,
255+
Status: metav1.ConditionTrue,
256+
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
257+
Message: "AddonReasonUpgradeStarted",
244258
},
245259
},
246260
OCMReportedStatusHash: &addonsv1alpha1.OCMAddOnStatusHash{},
@@ -254,6 +268,7 @@ func TestHandleAddonStatusReporting(t *testing.T) {
254268
ocmClient.On("PostAddOnStatus", mock.Anything, ocm.AddOnStatusPostRequest{
255269
AddonID: "addon-1",
256270
CorrelationID: addon.Spec.CorrelationID,
271+
AddonVersion: addon.Spec.Version,
257272
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
258273
}).Return(
259274
ocm.AddOnStatusResponse{},
@@ -292,19 +307,22 @@ func TestHandleAddonStatusReporting(t *testing.T) {
292307
Name: "addon-1",
293308
},
294309
Spec: addonsv1alpha1.AddonSpec{
310+
Version: "2.0.13",
295311
CorrelationID: "1234",
296312
},
297313
Status: addonsv1alpha1.AddonStatus{
298314
Conditions: []metav1.Condition{
299315
{
300-
Type: addonsv1alpha1.Available,
301-
Status: metav1.ConditionTrue,
302-
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
316+
Type: addonsv1alpha1.Available,
317+
Status: metav1.ConditionTrue,
318+
Reason: addonsv1alpha1.AddonReasonFullyReconciled,
319+
Message: "AddonReasonFullyReconciled",
303320
},
304321
{
305-
Type: addonsv1alpha1.UpgradeStarted,
306-
Status: metav1.ConditionTrue,
307-
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
322+
Type: addonsv1alpha1.UpgradeStarted,
323+
Status: metav1.ConditionTrue,
324+
Reason: addonsv1alpha1.AddonReasonUpgradeStarted,
325+
Message: "AddonReasonUpgradeStarted",
308326
},
309327
},
310328
OCMReportedStatusHash: &addonsv1alpha1.OCMAddOnStatusHash{
@@ -318,6 +336,7 @@ func TestHandleAddonStatusReporting(t *testing.T) {
318336
ocmClient.On("PostAddOnStatus", mock.Anything, ocm.AddOnStatusPostRequest{
319337
AddonID: "addon-1",
320338
CorrelationID: addon.Spec.CorrelationID,
339+
AddonVersion: addon.Spec.Version,
321340
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
322341
}).Return(
323342
ocm.AddOnStatusResponse{},

internal/controllers/addon/utils.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,7 @@ func HashCurrentAddonStatus(addon *addonsv1alpha1.Addon) string {
557557
ocmAddonStatus := addonsv1alpha1.OCMAddOnStatus{
558558
AddonID: addon.Name,
559559
CorrelationID: addon.Spec.CorrelationID,
560+
AddonVersion: addon.Spec.Version,
560561
StatusConditions: mapToAddonStatusConditions(addon.Status.Conditions),
561562
}
562563
return hashOCMAddonStatus(ocmAddonStatus)

internal/ocm/addon_status.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@ type AddOnStatusPostRequest struct {
1313
AddonID string `json:"addon_id"`
1414
// Correlation ID for co-relating current AddonCR revision and reported status.
1515
CorrelationID string `json:"correlation_id"`
16+
// Addon Version
17+
AddonVersion string `json:"version"`
1618
// Reported addon status conditions
1719
StatusConditions []addonsv1alpha1.AddOnStatusCondition `json:"status_conditions"`
1820
}
1921

2022
type AddOnStatusPatchRequest struct {
2123
// Correlation ID for co-relating current AddonCR revision and reported status.
2224
CorrelationID string `json:"correlation_id"`
25+
// Addon Version
26+
AddonVersion string `json:"version"`
2327
// Reported addon status conditions
2428
StatusConditions []addonsv1alpha1.AddOnStatusCondition `json:"status_conditions"`
2529
}
@@ -31,6 +35,8 @@ type AddOnStatusResponse struct {
3135
AddonID string `json:"addon_id"`
3236
// Correlation ID for co-relating current AddonCR revision and reported status.
3337
CorrelationID string `json:"correlation_id"`
38+
// Addon Version
39+
AddonVersion string `json:"version"`
3440
// Reported addon status conditions
3541
StatusConditions []addonsv1alpha1.AddOnStatusCondition `json:"status_conditions"`
3642
}

internal/ocm/addon_status_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestClient_GetAddOnStatus(t *testing.T) {
2323
"kind": "AddOnStatusResponse",
2424
"addon_id": "addon-1",
2525
"correlation_id": "12345-6789",
26+
"version": "2.0.13",
2627
"status_conditions": []
2728
}`))
2829
require.NoError(t, err, "Error writing response")
@@ -47,6 +48,7 @@ func TestClient_GetAddOnStatus(t *testing.T) {
4748
Kind: "AddOnStatusResponse",
4849
AddonID: "addon-1",
4950
CorrelationID: "12345-6789",
51+
AddonVersion: "2.0.13",
5052
StatusConditions: []addonsv1alpha1.AddOnStatusCondition{},
5153
}
5254

@@ -87,6 +89,7 @@ func TestClient_PostAddOnStatus(t *testing.T) {
8789
"kind": "AddOnStatusResponse",
8890
"addon_id": "addon-1",
8991
"correlation_id": "12345-6789",
92+
"version": "2.0.13",
9093
"status_conditions": []
9194
}`))
9295
require.NoError(t, err, "Error writing response")
@@ -106,6 +109,7 @@ func TestClient_PostAddOnStatus(t *testing.T) {
106109
payload := AddOnStatusPostRequest{
107110
AddonID: "addon-1",
108111
CorrelationID: "12345-6789",
112+
AddonVersion: "2.0.13",
109113
StatusConditions: []addonsv1alpha1.AddOnStatusCondition{},
110114
}
111115

@@ -121,6 +125,7 @@ func TestClient_PostAddOnStatus(t *testing.T) {
121125
Kind: "AddOnStatusResponse",
122126
AddonID: "addon-1",
123127
CorrelationID: "12345-6789",
128+
AddonVersion: "2.0.13",
124129
StatusConditions: []addonsv1alpha1.AddOnStatusCondition{},
125130
}
126131

@@ -161,11 +166,13 @@ func TestClient_PatchAddOnStatus(t *testing.T) {
161166
"kind": "AddOnStatusResponse",
162167
"addon_id": "addon-1",
163168
"correlation_id": "12345-6789",
169+
"version": "2.0.13",
164170
"status_conditions": [
165171
{
166172
"status_type": "Ready",
167173
"status_value": "True",
168-
"reason": "InstallationSuccessful"
174+
"reason": "InstallationSuccessful",
175+
"message": "InstallationSuccessful"
169176
}
170177
]
171178
}`))
@@ -185,11 +192,13 @@ func TestClient_PatchAddOnStatus(t *testing.T) {
185192
// Prepare the payload
186193
payload := AddOnStatusPatchRequest{
187194
CorrelationID: "12345-6789",
195+
AddonVersion: "2.0.13",
188196
StatusConditions: []addonsv1alpha1.AddOnStatusCondition{
189197
{
190198
StatusType: "Ready",
191199
StatusValue: metav1.ConditionTrue,
192200
Reason: "InstallationSuccessful",
201+
Message: "InstallationSuccessful",
193202
},
194203
},
195204
}
@@ -204,11 +213,13 @@ func TestClient_PatchAddOnStatus(t *testing.T) {
204213
Kind: "AddOnStatusResponse",
205214
AddonID: "addon-1",
206215
CorrelationID: "12345-6789",
216+
AddonVersion: "2.0.13",
207217
StatusConditions: []addonsv1alpha1.AddOnStatusCondition{
208218
{
209219
StatusType: "Ready",
210220
StatusValue: metav1.ConditionTrue,
211221
Reason: "InstallationSuccessful",
222+
Message: "InstallationSuccessful",
212223
},
213224
},
214225
}

0 commit comments

Comments
 (0)