The upgrades package provides infrastructure to upgrade previous Juju deployments to the current Juju version. The upgrade is performed on a per node basis, across all of the running Juju machines.

    Important exported APIs include:

    PerformUpgrade, which is invoked on each node by the machine agent with:
      fromVersion - the Juju version from which the upgrade is occurring
      target      - the type of Juju node being upgraded
      context     - provides API access to Juju controllers



    View Source
    const (
    	// AllMachines applies to any machine.
    	AllMachines = Target("allMachines")
    	// HostMachine is a machine on which units are deployed.
    	HostMachine = Target("hostMachine")
    	// Controller is a machine participating in a Juju controller cluster.
    	Controller = Target("controller")
    	// DatabaseMaster is a Controller that has the master database, and as such
    	// is the only target that should run database schema upgrade steps.
    	DatabaseMaster = Target("databaseMaster")


    View Source
    var MinDiskSpaceMib = uint64(250)

      We'll be conservative and require at least 250MiB of disk space for an upgrade.


      func AreUpgradesDefined

      func AreUpgradesDefined(from version.Number) bool

        AreUpgradesDefined returns true if there are upgrade operations defined between the version supplied and the running software version.

        func PerformUpgrade

        func PerformUpgrade(from version.Number, targets []Target, context Context) error

          PerformUpgrade runs the business logic needed to upgrade the current "from" version to this version of Juju on the "target" type of machine.

          func PreUpgradeSteps

          func PreUpgradeSteps(st *state.State, agentConf agent.Config, isController, isMaster bool) error

            PreUpgradeSteps runs various checks and prepares for performing an upgrade. If any check fails, an error is returned which aborts the upgrade.


            type Context

            type Context interface {
            	// APIState returns an API connection to state.
            	// TODO(mjs) - for 2.0, this should return a base.APICaller
            	// instead of api.Connection once the 1.x upgrade steps have been
            	// removed. Upgrade steps should not be able close the API
            	// connection.
            	APIState() api.Connection
            	// State returns a connection to state. This will be non-nil
            	// only in the context of a controller.
            	State() *state.State
            	// AgentConfig returns the agent config for the machine that is being
            	// upgraded.
            	AgentConfig() agent.ConfigSetter
            	// StateContext returns a new Context suitable for State-based
            	// upgrade steps.
            	StateContext() Context
            	// APIContext returns a new Context suitable for API-based upgrade
            	// steps.
            	APIContext() Context

              Context provides the dependencies used when executing upgrade steps.

              func NewContext

              func NewContext(agentConfig agent.ConfigSetter, api api.Connection, st *state.State) Context

                NewContext returns a new upgrade context.

                type Operation

                type Operation interface {
                	// The Juju version for which this operation is applicable.
                	// Upgrade operations designed for versions of Juju earlier
                	// than we are upgrading from are not run since such steps would
                	// already have been used to get to the version we are running now.
                	TargetVersion() version.Number
                	// Steps to perform during an upgrade.
                	Steps() []Step

                  Operation defines what steps to perform to upgrade to a target version.

                  type Step

                  type Step interface {
                  	// Description is a human readable description of what the upgrade step does.
                  	Description() string
                  	// Targets returns the target machine types for which the upgrade step is applicable.
                  	Targets() []Target
                  	// Run executes the upgrade business logic.
                  	Run(Context) error

                    Step defines an idempotent operation that is run to perform a specific upgrade step.

                    type Target

                    type Target string

                      Target defines the type of machine for which a particular upgrade step can be run.