~rogpeppe/juju-core/438-local-instance-Addresses

« back to all changes in this revision

Viewing changes to state/unit.go

[r=fwereade],[bug=1234035] Fix upgrade 1.14 -> 1.15

This adds a Tools() API call to provisioner API,
similarly to the upgrader API. Common code factored
out into apiserver/common/tools.go.

SetAgentTools() renamed to SetAgentVersion() in
machine and unit state types. Also renamed a few
types in params to be shorter or better reflect
what are they about. Added DEPRECATE(v1.18) tags
to bits of the API that need cleanup.

Live tested on EC2 - after copying the tools from
/tools/releases/ to /tools/ the upgrade proceeds
and finishes successfully.

https://codereview.appspot.com/14231044/

R=fwereade, jameinel

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
        "launchpad.net/juju-core/state/presence"
24
24
        "launchpad.net/juju-core/tools"
25
25
        "launchpad.net/juju-core/utils"
 
26
        "launchpad.net/juju-core/version"
26
27
)
27
28
 
28
29
var unitLogger = loggo.GetLogger("juju.state.unit")
173
174
        return &tools, nil
174
175
}
175
176
 
176
 
// SetAgentTools sets the tools that the agent is currently running.
177
 
func (u *Unit) SetAgentTools(t *tools.Tools) (err error) {
178
 
        defer utils.ErrorContextf(&err, "cannot set agent tools for unit %q", u)
179
 
        if err = checkToolsValidity(t); err != nil {
 
177
// SetAgentVersion sets the version of juju that the agent is
 
178
// currently running.
 
179
func (u *Unit) SetAgentVersion(v version.Binary) (err error) {
 
180
        defer utils.ErrorContextf(&err, "cannot set agent version for unit %q", u)
 
181
        if err = checkVersionValidity(v); err != nil {
180
182
                return err
181
183
        }
 
184
        tools := &tools.Tools{Version: v}
182
185
        ops := []txn.Op{{
183
186
                C:      u.st.units.Name,
184
187
                Id:     u.doc.Name,
185
188
                Assert: notDeadDoc,
186
 
                Update: D{{"$set", D{{"tools", t}}}},
 
189
                Update: D{{"$set", D{{"tools", tools}}}},
187
190
        }}
188
191
        if err := u.st.runTransaction(ops); err != nil {
189
192
                return onAbort(err, errDead)
190
193
        }
191
 
        tools := *t
192
 
        u.doc.Tools = &tools
 
194
        u.doc.Tools = tools
193
195
        return nil
194
196
}
195
197