~rogpeppe/juju-core/azure

« back to all changes in this revision

Viewing changes to state/api/deployer/machine.go

[r=dimitern] state/api: Deployer client-side facade.

Implemented all the necessary API calls for the
deployer worker. This is the last step needed
before the deployer can be refactored to use
only the API to talk to state.

Also fixed the StringsWatcher client implementation
(I initially got it wrong, but since nobody was using
it yet it got undetected).

Few other minor issues discovered and fixed in state,
adding tests as needed.

https://codereview.appspot.com/11342043/

R=fwereade, themue

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2012, 2013 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package deployer
 
5
 
 
6
import (
 
7
        "fmt"
 
8
 
 
9
        "launchpad.net/juju-core/state/api/params"
 
10
        "launchpad.net/juju-core/state/api/watcher"
 
11
)
 
12
 
 
13
// Machine represents a juju machine as seen by the deployer worker.
 
14
type Machine struct {
 
15
        tag    string
 
16
        dstate *Deployer
 
17
}
 
18
 
 
19
// WatchUnits starts a StringsWatcher to watch all units deployed to
 
20
// the machine, in order to track which ones should be deployed or
 
21
// recalled.
 
22
func (m *Machine) WatchUnits() (*watcher.StringsWatcher, error) {
 
23
        var results params.StringsWatchResults
 
24
        args := params.Entities{
 
25
                Entities: []params.Entity{{Tag: m.tag}},
 
26
        }
 
27
        err := m.dstate.caller.Call("Deployer", "", "WatchUnits", args, &results)
 
28
        if err != nil {
 
29
                return nil, err
 
30
        }
 
31
        if len(results.Results) != 1 {
 
32
                return nil, fmt.Errorf("expected one result, got %d", len(results.Results))
 
33
        }
 
34
        result := results.Results[0]
 
35
        if result.Error != nil {
 
36
                return nil, result.Error
 
37
        }
 
38
        w := watcher.NewStringsWatcher(m.dstate.caller, result)
 
39
        return w, nil
 
40
}