~rogpeppe/juju-core/themue-058-debug-log-api

« back to all changes in this revision

Viewing changes to state/apiserver/machine/machiner.go

  • Committer: Frank Mueller
  • Date: 2014-01-21 08:46:24 UTC
  • mfrom: (2152.1.76 juju-core)
  • Revision ID: frank.mueller@canonical.com-20140121084624-rv32dv6ufzul9h1b
debugger: merged trunk and added access to debugger API facade

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
package machine
7
7
 
8
8
import (
 
9
        "launchpad.net/juju-core/errors"
9
10
        "launchpad.net/juju-core/state"
 
11
        "launchpad.net/juju-core/state/api/params"
10
12
        "launchpad.net/juju-core/state/apiserver/common"
11
13
)
12
14
 
17
19
        *common.DeadEnsurer
18
20
        *common.AgentEntityWatcher
19
21
 
20
 
        st   *state.State
21
 
        auth common.Authorizer
 
22
        st           *state.State
 
23
        auth         common.Authorizer
 
24
        getCanModify common.GetAuthFunc
 
25
        getCanRead   common.GetAuthFunc
22
26
}
23
27
 
24
28
// NewMachinerAPI creates a new instance of the Machiner API.
26
30
        if !authorizer.AuthMachineAgent() {
27
31
                return nil, common.ErrPerm
28
32
        }
 
33
        getCanModify := func() (common.AuthFunc, error) {
 
34
                return authorizer.AuthOwner, nil
 
35
        }
29
36
        getCanRead := func() (common.AuthFunc, error) {
30
37
                return authorizer.AuthOwner, nil
31
38
        }
32
39
        return &MachinerAPI{
33
40
                LifeGetter:         common.NewLifeGetter(st, getCanRead),
34
 
                StatusSetter:       common.NewStatusSetter(st, getCanRead),
35
 
                DeadEnsurer:        common.NewDeadEnsurer(st, getCanRead),
 
41
                StatusSetter:       common.NewStatusSetter(st, getCanModify),
 
42
                DeadEnsurer:        common.NewDeadEnsurer(st, getCanModify),
36
43
                AgentEntityWatcher: common.NewAgentEntityWatcher(st, resources, getCanRead),
37
44
                st:                 st,
38
45
                auth:               authorizer,
 
46
                getCanModify:       getCanModify,
39
47
        }, nil
40
48
}
 
49
 
 
50
func (api *MachinerAPI) getMachine(tag string) (*state.Machine, error) {
 
51
        entity, err := api.st.FindEntity(tag)
 
52
        if err != nil {
 
53
                return nil, err
 
54
        }
 
55
        return entity.(*state.Machine), nil
 
56
}
 
57
 
 
58
func (api *MachinerAPI) SetMachineAddresses(args params.SetMachinesAddresses) (params.ErrorResults, error) {
 
59
        results := params.ErrorResults{
 
60
                Results: make([]params.ErrorResult, len(args.MachineAddresses)),
 
61
        }
 
62
        canModify, err := api.getCanModify()
 
63
        if err != nil {
 
64
                return params.ErrorResults{}, err
 
65
        }
 
66
        for i, arg := range args.MachineAddresses {
 
67
                err := common.ErrPerm
 
68
                if canModify(arg.Tag) {
 
69
                        var m *state.Machine
 
70
                        m, err = api.getMachine(arg.Tag)
 
71
                        if err == nil {
 
72
                                err = m.SetMachineAddresses(arg.Addresses)
 
73
                        } else if errors.IsNotFoundError(err) {
 
74
                                err = common.ErrPerm
 
75
                        }
 
76
                }
 
77
                results.Results[i].Error = common.ServerError(err)
 
78
        }
 
79
        return results, nil
 
80
}