func (s *upgradeSuite) TestUpgradeOperationsOrdered(c *gc.C) { var previous version.Number for i, utv := range (*upgrades.UpgradeOperations)() { vers := utv.TargetVersion() if i > 0 { c.Check(previous.Compare(vers), gc.Equals, -1) } previous = vers } }
func checkUpgradeInfoSanity(st *State, machineId string, previousVersion, targetVersion version.Number) (bson.D, error) { if previousVersion.Compare(targetVersion) != -1 { return nil, errors.Errorf("cannot sanely upgrade from %s to %s", previousVersion, targetVersion) } controllerInfo, err := st.ControllerInfo() if err != nil { return nil, errors.Annotate(err, "cannot read controllers") } validIds := set.NewStrings(controllerInfo.MachineIds...) if !validIds.Contains(machineId) { return nil, errors.Errorf("machine %q is not a controller", machineId) } return assertExpectedVersions(previousVersion, targetVersion), nil }
// Newest returns the greatest version in src, and the tools with that version. func (src List) Newest() (version.Number, List) { var result List var best version.Number for _, tools := range src { if best.Compare(tools.Version.Number) < 0 { // Found new best number; reset result list. best = tools.Version.Number result = append(result[:0], tools) } else if tools.Version.Number == best { result = append(result, tools) } } return best, result }
func newOpsIterator(from, to version.Number, ops []Operation) *opsIterator { // If from is not known, it is 1.16. if from == version.Zero { from = version.MustParse("1.16.0") } // Clear the version tag of the target release to ensure that all // upgrade steps for the release are run for alpha and beta // releases. // ...but only do this if the agent version has actually changed, // lest we trigger upgrade mode unnecessarily for non-final // versions. if from.Compare(to) != 0 { to.Tag = "" } return &opsIterator{ from: from, to: to, allOps: ops, current: -1, } }
func isCompatibleVersion(v1, v2 version.Number) bool { v1.Build = 0 v2.Build = 0 return v1.Compare(v2) == 0 }
// IsDev returns whether the version represents a development version. A // version with a tag or a nonzero build component is considered to be a // development version. Versions older than or equal to 1.19.3 (the switch // over time) check for odd minor versions. func IsDev(v semversion.Number) bool { if v.Compare(switchOverVersion) <= 0 { return isOdd(v.Minor) || v.Build > 0 } return v.Tag != "" || v.Build > 0 }