Skip to content

Commit 63e0a55

Browse files
committed
force image upgrade if present. auto-change channel if different minor versions
1 parent b598f0a commit 63e0a55

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

pkg/upgrade/upgrade.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"strings"
88
"time"
99

10+
"github.com/Masterminds/semver"
11+
1012
configv1 "github.com/openshift/api/config/v1"
1113
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1214
"k8s.io/apimachinery/pkg/util/wait"
@@ -94,11 +96,37 @@ func TriggerUpgrade(h *helper.H) (*configv1.ClusterVersion, error) {
9496
}
9597

9698
// set requested upgrade targets
97-
cVersion.Spec.DesiredUpdate = &configv1.Update{
98-
Version: strings.Replace(h.Upgrade.ReleaseName, "openshift-v", "", -1),
99-
Image: h.Upgrade.Image,
100-
Force: h.Upgrade.Image != "", // Force if we have an image specified
99+
if h.Upgrade.Image != "" {
100+
cVersion.Spec.DesiredUpdate = &configv1.Update{
101+
Version: strings.Replace(h.Upgrade.ReleaseName, "openshift-v", "", -1),
102+
Image: h.Upgrade.Image,
103+
Force: true, // Force if we have an image specified
104+
}
105+
} else {
106+
upgradeVersion := strings.Replace(h.Upgrade.ReleaseName, "openshift-v", "", -1)
107+
installVersion := strings.Replace(state.Instance.Cluster.Version, "openshift-v", "", -1)
108+
109+
upgradeVersionParsed := semver.MustParse(upgradeVersion)
110+
installVersionParsed := semver.MustParse(installVersion)
111+
112+
if upgradeVersionParsed.Minor() > installVersionParsed.Minor() {
113+
// Upgrade the channel
114+
cVersion.Spec.Channel = fmt.Sprintf("fast-%d.%d", upgradeVersionParsed.Major(), upgradeVersionParsed.Minor())
115+
updatedCV, err := cfgClient.ConfigV1().ClusterVersions().Update(cVersion)
116+
if err != nil {
117+
return updatedCV, fmt.Errorf("couldn't update desired release channel: %v", err)
118+
}
119+
120+
// https://github.com/openshift/managed-cluster-config/blob/master/scripts/cluster-upgrade.sh#L258
121+
time.Sleep(15 * time.Second)
122+
}
123+
124+
// Assume CIS has all the information required. Just pass version info.
125+
cVersion.Spec.DesiredUpdate = &configv1.Update{
126+
Version: strings.Replace(h.Upgrade.ReleaseName, "openshift-v", "", -1),
127+
}
101128
}
129+
102130
updatedCV, err := cfgClient.ConfigV1().ClusterVersions().Update(cVersion)
103131
if err != nil {
104132
return updatedCV, fmt.Errorf("couldn't update desired ClusterVersion: %v", err)

0 commit comments

Comments
 (0)