Documentation ¶
Overview ¶
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
Index ¶
Constants ¶
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") )
Variables ¶
var MinDiskSpaceMib = uint64(250)
We'll be conservative and require at least 250MiB of disk space for an upgrade.
Functions ¶
func AreUpgradesDefined ¶
AreUpgradesDefined returns true if there are upgrade operations defined between the version supplied and the running software version.
func PerformUpgrade ¶
PerformUpgrade runs the business logic needed to upgrade the current "from" version to this version of Juju on the "target" type of machine.
Types ¶
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.