|
7 | 7 | "strings" |
8 | 8 | "time" |
9 | 9 |
|
| 10 | + "github.com/Masterminds/semver" |
| 11 | + |
10 | 12 | configv1 "github.com/openshift/api/config/v1" |
11 | 13 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
12 | 14 | "k8s.io/apimachinery/pkg/util/wait" |
@@ -94,11 +96,37 @@ func TriggerUpgrade(h *helper.H) (*configv1.ClusterVersion, error) { |
94 | 96 | } |
95 | 97 |
|
96 | 98 | // 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 | + } |
101 | 128 | } |
| 129 | + |
102 | 130 | updatedCV, err := cfgClient.ConfigV1().ClusterVersions().Update(cVersion) |
103 | 131 | if err != nil { |
104 | 132 | return updatedCV, fmt.Errorf("couldn't update desired ClusterVersion: %v", err) |
|
0 commit comments