1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"launchpad.net/juju-core/instance"
10
"launchpad.net/juju-core/state"
11
"launchpad.net/juju-core/worker"
14
type updaterWorker struct {
18
observer *environObserver
21
// NewWorker returns a worker that keeps track of
22
// the machines in the state and polls their instance
23
// addresses periodically to keep them up to date.
24
func NewWorker(st *state.State) worker.Worker {
28
// wait for environment
36
func (u *updaterWorker) Kill() {
40
func (u *updaterWorker) Wait() error {
44
func (u *updaterWorker) loop() (err error) {
45
u.observer, err = newEnvironObserver(u.st, u.tomb.Dying())
50
obsErr := worker.Stop(u.observer)
55
return watchMachinesLoop(u, u.st.WatchEnvironMachines())
58
func (u *updaterWorker) newMachineContext() machineContext {
62
func (u *updaterWorker) getMachine(id string) (machine, error) {
63
return u.st.Machine(id)
66
func (u *updaterWorker) dying() <-chan struct{} {
70
func (u *updaterWorker) killAll(err error) {
74
func (u *updaterWorker) addresses(id instance.Id) ([]instance.Address, error) {
75
env := u.observer.Environ()
76
insts, err := env.Instances([]instance.Id{id})
80
return insts[0].Addresses()