Skip to content

Commit 840d806

Browse files
Merge pull request #749 from alecmerdler/bugzilla-1654977
Emit `InstallSucceeded` Event for CSV
2 parents 25a917e + 662248a commit 840d806

File tree

12 files changed

+110
-53
lines changed

12 files changed

+110
-53
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ require (
1515
github.com/golang/mock v1.1.1
1616
github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f // indirect
1717
github.com/grpc-ecosystem/grpc-gateway v1.7.0 // indirect
18+
github.com/json-iterator/go v1.1.6 // indirect
1819
github.com/maxbrunsfeld/counterfeiter v0.0.0-20181017030959-1aadac120687
1920
github.com/openshift/api v3.9.1-0.20190129160438-bbc4289c54e0+incompatible
2021
github.com/openshift/client-go v0.0.0-20190128154758-1540772775fa
@@ -41,5 +42,5 @@ require (
4142
k8s.io/klog v0.2.0 // indirect
4243
k8s.io/kube-aggregator v0.0.0-20190223015803-f706565beac0
4344
k8s.io/kube-openapi v0.0.0-20181031203759-72693cb1fadd
44-
k8s.io/kubernetes v1.11.9-beta.0.0.20190305054513-b2539d50ae56
45+
k8s.io/kubernetes v1.11.9-beta.0.0.20190311041124-ede55fd57298
4546
)

go.sum

Lines changed: 51 additions & 4 deletions
Large diffs are not rendered by default.

pkg/controller/operators/olm/operator.go

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,6 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
872872
case v1alpha1.CSVPhaseInstallReady:
873873
installer, strategy, _ := a.parseStrategiesAndUpdateStatus(out)
874874
if strategy == nil {
875-
// parseStrategiesAndUpdateStatus sets CSV status
876875
return
877876
}
878877

@@ -897,7 +896,6 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
897896
case v1alpha1.CSVPhaseInstalling:
898897
installer, strategy, _ := a.parseStrategiesAndUpdateStatus(out)
899898
if strategy == nil {
900-
// parseStrategiesAndUpdateStatus sets CSV status
901899
return
902900
}
903901

@@ -907,7 +905,6 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
907905
case v1alpha1.CSVPhaseSucceeded:
908906
installer, strategy, _ := a.parseStrategiesAndUpdateStatus(out)
909907
if strategy == nil {
910-
// parseStrategiesAndUpdateStatus sets CSV status
911908
return
912909
}
913910

@@ -921,30 +918,29 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
921918
met, statuses, err := a.requirementAndPermissionStatus(out)
922919
if err != nil {
923920
logger.Info("invalid install strategy")
924-
out.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err.Error()), now)
921+
out.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err.Error()), now, a.recorder)
925922
return
926923
} else if !met {
927924
out.SetRequirementStatus(statuses)
928-
out.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonRequirementsNotMet, fmt.Sprintf("requirements no longer met"), now)
925+
out.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonRequirementsNotMet, fmt.Sprintf("requirements no longer met"), now, a.recorder)
929926
return
930927
}
931928

932929
// Check if any generated resources are missing
933930
if resErr := a.checkAPIServiceResources(out, certs.PEMSHA256); len(resErr) > 0 {
934-
out.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonAPIServiceResourceIssue, resErr[0].Error(), now)
931+
out.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonAPIServiceResourceIssue, resErr[0].Error(), now, a.recorder)
935932
return
936933
}
937934

938935
// Check if it's time to refresh owned APIService certs
939936
if a.shouldRotateCerts(out) {
940-
out.SetPhase(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonNeedsCertRotation, "owned APIServices need cert refresh", now)
937+
out.SetPhaseWithEvent(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonNeedsCertRotation, "owned APIServices need cert refresh", now, a.recorder)
941938
return
942939
}
943940

944941
case v1alpha1.CSVPhaseFailed:
945942
installer, strategy, _ := a.parseStrategiesAndUpdateStatus(out)
946943
if strategy == nil {
947-
// parseStrategiesAndUpdateStatus sets CSV status
948944
return
949945
}
950946

@@ -985,26 +981,26 @@ func (a *Operator) transitionCSVState(in v1alpha1.ClusterServiceVersion) (out *v
985981
met, statuses, err := a.requirementAndPermissionStatus(out)
986982
if err != nil {
987983
logger.Warn("invalid install strategy")
988-
out.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err.Error()), now)
984+
out.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err.Error()), now, a.recorder)
989985
return
990986
} else if !met {
991987
out.SetRequirementStatus(statuses)
992-
out.SetPhase(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonRequirementsNotMet, fmt.Sprintf("requirements not met"), now)
988+
out.SetPhaseWithEvent(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonRequirementsNotMet, fmt.Sprintf("requirements not met"), now, a.recorder)
993989
return
994990
}
995991

996992
// Check if any generated resources are missing
997993
if resErr := a.checkAPIServiceResources(out, certs.PEMSHA256); len(resErr) > 0 {
998994
// Check if API services are adoptable. If not, keep CSV as Failed state
999995
if a.apiServiceResourceErrorsActionable(resErr) {
1000-
out.SetPhase(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonAPIServiceResourcesNeedReinstall, resErr[0].Error(), now)
996+
out.SetPhaseWithEvent(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonAPIServiceResourcesNeedReinstall, resErr[0].Error(), now, a.recorder)
1001997
return
1002998
}
1003999
}
10041000

10051001
// Check if it's time to refresh owned APIService certs
10061002
if a.shouldRotateCerts(out) {
1007-
out.SetPhase(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonNeedsCertRotation, "owned APIServices need cert refresh", now)
1003+
out.SetPhaseWithEvent(v1alpha1.CSVPhasePending, v1alpha1.CSVReasonNeedsCertRotation, "owned APIServices need cert refresh", now, a.recorder)
10081004
return
10091005
}
10101006
case v1alpha1.CSVPhaseReplacing:
@@ -1104,7 +1100,7 @@ func (a *Operator) checkReplacementsAndUpdateStatus(csv *v1alpha1.ClusterService
11041100
if replacement := a.isBeingReplaced(csv, a.csvSet(csv.GetNamespace(), v1alpha1.CSVPhaseAny)); replacement != nil {
11051101
a.Log.Infof("newer ClusterServiceVersion replacing %s, no-op", csv.SelfLink)
11061102
msg := fmt.Sprintf("being replaced by csv: %s", replacement.SelfLink)
1107-
csv.SetPhase(v1alpha1.CSVPhaseReplacing, v1alpha1.CSVReasonBeingReplaced, msg, timeNow())
1103+
csv.SetPhaseWithEvent(v1alpha1.CSVPhaseReplacing, v1alpha1.CSVReasonBeingReplaced, msg, timeNow(), a.recorder)
11081104
metrics.CSVUpgradeCount.Inc()
11091105

11101106
return fmt.Errorf("replacing")
@@ -1120,24 +1116,24 @@ func (a *Operator) updateInstallStatus(csv *v1alpha1.ClusterServiceVersion, inst
11201116
if strategyInstalled && apiServicesInstalled {
11211117
// if there's no error, we're successfully running
11221118
if csv.Status.Phase != v1alpha1.CSVPhaseSucceeded {
1123-
csv.SetPhase(v1alpha1.CSVPhaseSucceeded, v1alpha1.CSVReasonInstallSuccessful, "install strategy completed with no errors", now)
1119+
csv.SetPhaseWithEvent(v1alpha1.CSVPhaseSucceeded, v1alpha1.CSVReasonInstallSuccessful, "install strategy completed with no errors", now, a.recorder)
11241120
}
11251121
return nil
11261122
}
11271123

11281124
// installcheck determined we can't progress (e.g. deployment failed to come up in time)
11291125
if install.IsErrorUnrecoverable(strategyErr) {
1130-
csv.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInstallCheckFailed, fmt.Sprintf("install failed: %s", strategyErr), now)
1126+
csv.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInstallCheckFailed, fmt.Sprintf("install failed: %s", strategyErr), now, a.recorder)
11311127
return strategyErr
11321128
}
11331129

11341130
if apiServiceErr != nil {
1135-
csv.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonAPIServiceInstallFailed, fmt.Sprintf("APIService install failed: %s", apiServiceErr), now)
1131+
csv.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonAPIServiceInstallFailed, fmt.Sprintf("APIService install failed: %s", apiServiceErr), now, a.recorder)
11361132
return apiServiceErr
11371133
}
11381134

11391135
if !apiServicesInstalled {
1140-
csv.SetPhase(requeuePhase, requeueConditionReason, fmt.Sprintf("APIServices not installed"), now)
1136+
csv.SetPhaseWithEvent(requeuePhase, requeueConditionReason, fmt.Sprintf("APIServices not installed"), now, a.recorder)
11411137
err := a.csvQueueSet.Requeue(csv.GetName(), csv.GetNamespace())
11421138
if err != nil {
11431139
a.Log.Warn(err.Error())
@@ -1147,7 +1143,7 @@ func (a *Operator) updateInstallStatus(csv *v1alpha1.ClusterServiceVersion, inst
11471143
}
11481144

11491145
if strategyErr != nil {
1150-
csv.SetPhase(requeuePhase, requeueConditionReason, fmt.Sprintf("installing: %s", strategyErr), now)
1146+
csv.SetPhaseWithEvent(requeuePhase, requeueConditionReason, fmt.Sprintf("installing: %s", strategyErr), now, a.recorder)
11511147
return strategyErr
11521148
}
11531149

@@ -1158,7 +1154,7 @@ func (a *Operator) updateInstallStatus(csv *v1alpha1.ClusterServiceVersion, inst
11581154
func (a *Operator) parseStrategiesAndUpdateStatus(csv *v1alpha1.ClusterServiceVersion) (install.StrategyInstaller, install.Strategy, install.Strategy) {
11591155
strategy, err := a.resolver.UnmarshalStrategy(csv.Spec.InstallStrategy)
11601156
if err != nil {
1161-
csv.SetPhase(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err), timeNow())
1157+
csv.SetPhaseWithEvent(v1alpha1.CSVPhaseFailed, v1alpha1.CSVReasonInvalidStrategy, fmt.Sprintf("install strategy invalid: %s", err), timeNow(), a.recorder)
11621158
return nil, nil, nil
11631159
}
11641160

test/e2e/csv_e2e_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,9 +1508,9 @@ func TestUpdateCSVWithOwnedAPIService(t *testing.T) {
15081508
require.NoError(t, err)
15091509
defer cleanupCSV()
15101510

1511-
fetched, err := fetchCSV(t, crc, csv.Name, testNamespace, csvFailedChecker)
1511+
fetched, err := fetchCSV(t, crc, csv.Name, testNamespace, buildCSVReasonChecker(v1alpha1.CSVReasonOwnerConflict))
15121512
require.NoError(t, err)
1513-
require.Equal(t, fetched.Status.Reason, v1alpha1.CSVReasonOwnerConflict)
1513+
require.Equal(t, string(v1alpha1.CSVPhaseFailed), string(fetched.Status.Phase))
15141514
}
15151515

15161516
func TestCreateSameCSVWithOwnedAPIServiceMultiNamespace(t *testing.T) {

vendor/github.com/json-iterator/go/README.md

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/json-iterator/go/any.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/json-iterator/go/iter_float.go

Lines changed: 6 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/json-iterator/go/iter_skip_strict.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/json-iterator/go/reflect_extension.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/json-iterator/go/reflect_map.go

Lines changed: 14 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)