github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/machiner/machine.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package machiner 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/names" 9 10 "github.com/juju/juju/api/common" 11 "github.com/juju/juju/api/watcher" 12 "github.com/juju/juju/apiserver/params" 13 "github.com/juju/juju/network" 14 ) 15 16 // Machine represents a juju machine as seen by a machiner worker. 17 type Machine struct { 18 tag names.MachineTag 19 life params.Life 20 st *State 21 } 22 23 // Tag returns the machine's tag. 24 func (m *Machine) Tag() names.Tag { 25 return m.tag 26 } 27 28 // Life returns the machine's lifecycle value. 29 func (m *Machine) Life() params.Life { 30 return m.life 31 } 32 33 // Refresh updates the cached local copy of the machine's data. 34 func (m *Machine) Refresh() error { 35 life, err := m.st.machineLife(m.tag) 36 if err != nil { 37 return err 38 } 39 m.life = life 40 return nil 41 } 42 43 // SetStatus sets the status of the machine. 44 func (m *Machine) SetStatus(status params.Status, info string, data map[string]interface{}) error { 45 var result params.ErrorResults 46 args := params.SetStatus{ 47 Entities: []params.EntityStatusArgs{ 48 {Tag: m.tag.String(), Status: status, Info: info, Data: data}, 49 }, 50 } 51 err := m.st.facade.FacadeCall("SetStatus", args, &result) 52 if err != nil { 53 return err 54 } 55 return result.OneError() 56 } 57 58 // SetMachineAddresses sets the machine determined addresses of the machine. 59 func (m *Machine) SetMachineAddresses(addresses []network.Address) error { 60 var result params.ErrorResults 61 args := params.SetMachinesAddresses{ 62 MachineAddresses: []params.MachineAddresses{ 63 {Tag: m.Tag().String(), Addresses: params.FromNetworkAddresses(addresses)}, 64 }, 65 } 66 err := m.st.facade.FacadeCall("SetMachineAddresses", args, &result) 67 if err != nil { 68 return err 69 } 70 return result.OneError() 71 } 72 73 // EnsureDead sets the machine lifecycle to Dead if it is Alive or 74 // Dying. It does nothing otherwise. 75 func (m *Machine) EnsureDead() error { 76 var result params.ErrorResults 77 args := params.Entities{ 78 Entities: []params.Entity{{Tag: m.tag.String()}}, 79 } 80 err := m.st.facade.FacadeCall("EnsureDead", args, &result) 81 if err != nil { 82 return err 83 } 84 return result.OneError() 85 } 86 87 // Watch returns a watcher for observing changes to the machine. 88 func (m *Machine) Watch() (watcher.NotifyWatcher, error) { 89 return common.Watch(m.st.facade, m.tag) 90 } 91 92 // Jobs returns a list of jobs for the machine. 93 func (m *Machine) Jobs() (*params.JobsResult, error) { 94 var results params.JobsResults 95 args := params.Entities{ 96 Entities: []params.Entity{{Tag: m.Tag().String()}}, 97 } 98 err := m.st.facade.FacadeCall("Jobs", args, &results) 99 if err != nil { 100 return nil, errors.Annotate(err, "error from FacadeCall") 101 } 102 if len(results.Results) != 1 { 103 return nil, errors.Errorf("expected 1 result, got %d", len(results.Results)) 104 } 105 result := results.Results[0] 106 if result.Error != nil { 107 return nil, result.Error 108 } 109 return &result, nil 110 }