// runUpgradeSteps runs the required upgrade steps for the machine // agent, retrying on failure. The agent's UpgradedToVersion is set // once the upgrade is complete. // // This function conforms to the agent.ConfigMutator type and is // designed to be called via a machine agent's ChangeConfig method. func (c *upgradeWorkerContext) runUpgradeSteps(agentConfig agent.ConfigSetter) error { var upgradeErr error a := c.agent a.setMachineStatus(c.apiState, params.StatusStarted, fmt.Sprintf("upgrading to %v", c.toVersion)) context := upgrades.NewContext(agentConfig, c.apiState, c.st) logger.Infof("starting upgrade from %v to %v for %q", c.fromVersion, c.toVersion, c.tag) targets := jobsToTargets(c.jobs, c.isMaster) attempts := getUpgradeRetryStrategy() for attempt := attempts.Start(); attempt.Next(); { upgradeErr = upgradesPerformUpgrade(c.fromVersion, targets, context) if upgradeErr == nil { break } if cmdutil.ConnectionIsDead(logger, c.apiState) { // API connection has gone away - abort! return &apiLostDuringUpgrade{upgradeErr} } if attempt.HasNext() { c.reportUpgradeFailure(upgradeErr, true) } } if upgradeErr != nil { return upgradeErr } agentConfig.SetUpgradedToVersion(c.toVersion) return nil }
// runUpgradeSteps runs the required upgrade steps for the machine // agent, retrying on failure. The agent's UpgradedToVersion is set // once the upgrade is complete. // // This function conforms to the agent.ConfigMutator type and is // designed to be called via a machine agent's ChangeConfig method. func (w *upgradesteps) runUpgradeSteps(agentConfig agent.ConfigSetter) error { var upgradeErr error w.machine.SetStatus(status.Started, fmt.Sprintf("upgrading to %v", w.toVersion), nil) context := upgrades.NewContext(agentConfig, w.apiConn, w.st) logger.Infof("starting upgrade from %v to %v for %q", w.fromVersion, w.toVersion, w.tag) targets := jobsToTargets(w.jobs, w.isMaster) attempts := getUpgradeRetryStrategy() for attempt := attempts.Start(); attempt.Next(); { upgradeErr = PerformUpgrade(w.fromVersion, targets, context) if upgradeErr == nil { break } if cmdutil.ConnectionIsDead(logger, w.apiConn) { // API connection has gone away - abort! return &apiLostDuringUpgrade{upgradeErr} } if attempt.HasNext() { w.reportUpgradeFailure(upgradeErr, true) } } if upgradeErr != nil { return upgradeErr } agentConfig.SetUpgradedToVersion(w.toVersion) return nil }