// LatestVersion returns latest version for specific package func (m *Manifest) LatestVersion(log log.T, context *updateutil.InstanceContext, packageName string) (result string, err error) { var version = minimumVersion var compareResult = 0 for _, p := range m.Packages { if p.Name == packageName { for _, f := range p.Files { if f.Name == context.FileName(packageName) { for _, v := range f.AvailableVersions { if compareResult, err = updateutil.VersionCompare(v.Version, version); err != nil { return version, err } if compareResult > 0 { version = v.Version } } } } } } if version == minimumVersion { log.Debugf("Filename: %v", context.FileName(packageName)) log.Debugf("Package Name: %v", packageName) log.Debugf("Manifest: %v", m) return version, fmt.Errorf("cannot find the latest version for package %v", packageName) } return version, nil }
// updateRoot returns the platform specific path to update artifacts func updateRoot(detail *processor.UpdateDetail) error { compareResult, err := updateutil.VersionCompare(detail.SourceVersion, firstAgentWithNewUpdaterPath) if err != nil { return err } // New versions that with new binary locations if compareResult >= 0 { detail.UpdateRoot = appconfig.UpdaterArtifactsRoot } else { detail.UpdateRoot = legacyUpdaterArtifactsRoot } return nil }
// resolveUpdateDetail decides which UpdaterRoot to use and if uninstall is required for the agent func resolveUpdateDetail(detail *processor.UpdateDetail) error { compareResult, err := updateutil.VersionCompare(detail.SourceVersion, detail.TargetVersion) if err != nil { return err } // if performing a downgrade if compareResult > 0 { detail.RequiresUninstall = true } if err := updateRoot(detail); err != nil { return err } return nil }
// validateUpdateVersion validates target version number base on the current platform // to avoid accidentally downgrade agent to the earlier version that doesn't support current platform func validateUpdateVersion(log log.T, detail *UpdateDetail, instanceContext *updateutil.InstanceContext) (err error) { compareResult := 0 minimumVersions := getMinimumVSupportedVersions() // check if current platform has minimum supported version if val, ok := (*minimumVersions)[instanceContext.Platform]; ok { // compare current agent version with minimum supported version if compareResult, err = updateutil.VersionCompare(detail.TargetVersion, val); err != nil { return err } if compareResult < 0 { return fmt.Errorf("Agent version %v is unsupported on current platform", detail.TargetVersion) } } return nil }