Skip to content

Commit b098d4d

Browse files
committed
fix(operatorgroups): use copied csv for update status
- Uses the copied csv when updating its own status to comply with checks on UID.
1 parent e462bec commit b098d4d

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

pkg/controller/operators/olm/operatorgroup.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,10 @@ func (a *Operator) copyCsvToTargetNamespace(csv *v1alpha1.ClusterServiceVersion,
348348

349349
if !reflect.DeepEqual(fetchedCSV.Status, newCSV.Status) {
350350
logger.Debug("updating status")
351-
newCSV.SetNamespace(ns)
352-
newCSV.Status.LastUpdateTime = timeNow()
353-
if _, err := a.client.OperatorsV1alpha1().ClusterServiceVersions(ns).UpdateStatus(newCSV); err != nil {
351+
// Must use fetchedCSV because UpdateStatus(...) checks resource UID.
352+
fetchedCSV.Status = newCSV.Status
353+
fetchedCSV.Status.LastUpdateTime = timeNow()
354+
if _, err := a.client.OperatorsV1alpha1().ClusterServiceVersions(ns).UpdateStatus(fetchedCSV); err != nil {
354355
logger.WithError(err).Error("status update for target CSV failed")
355356
return err
356357
}

test/e2e/operator_groups_e2e_test.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func TestOperatorGroup(t *testing.T) {
111111
// (Verify that the operator can operate in the target namespace)
112112
// Update CSV to support no InstallModes
113113
// Verify the CSV transitions to FAILED
114+
// Verify the copied CSV transitions to FAILED
114115
// Delete CSV
115116
// Verify copied CVS is deleted
116117

@@ -401,20 +402,29 @@ func TestOperatorGroup(t *testing.T) {
401402
require.Equal(t, viewPolicyRules, viewRole.Rules)
402403

403404
// Unsupport all InstallModes
405+
t.Log("unsupporting all csv installmodes")
404406
fetchedCSV, err := crc.OperatorsV1alpha1().ClusterServiceVersions(opGroupNamespace).Get(csvName, metav1.GetOptions{})
405407
require.NoError(t, err, "could not fetch csv")
406408
fetchedCSV.Spec.InstallModes = []v1alpha1.InstallMode{}
407409
_, err = crc.OperatorsV1alpha1().ClusterServiceVersions(fetchedCSV.GetNamespace()).Update(fetchedCSV)
408410
require.NoError(t, err, "could not update csv installmodes")
411+
412+
// Ensure CSV fails
409413
_, err = fetchCSV(t, crc, csvName, opGroupNamespace, csvFailedChecker)
410414
require.NoError(t, err, "csv did not transition to failed as expected")
411415

416+
// Ensure Failed status was propagated to copied CSV
417+
_, err = fetchCSV(t, crc, csvName, otherNamespaceName, func(csv *v1alpha1.ClusterServiceVersion) bool {
418+
return csvFailedChecker(csv) && csv.Status.Reason == v1alpha1.CSVReasonCopied
419+
})
420+
require.NoError(t, err, "csv failed status did not propagate to copied csv")
421+
412422
// ensure deletion cleans up copied CSV
413-
t.Log("Deleting CSV")
423+
t.Log("deleting parent csv")
414424
err = crc.OperatorsV1alpha1().ClusterServiceVersions(opGroupNamespace).Delete(csvName, &metav1.DeleteOptions{})
415425
require.NoError(t, err)
416426

417-
t.Log("Waiting for orphaned CSV to be deleted")
427+
t.Log("waiting for orphaned csv to be deleted")
418428
err = waitForDelete(func() error {
419429
_, err = crc.OperatorsV1alpha1().ClusterServiceVersions(otherNamespaceName).Get(csvName, metav1.GetOptions{})
420430
return err

0 commit comments

Comments
 (0)