github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/api/networker/networker.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package networker 5 6 import ( 7 "fmt" 8 9 "github.com/juju/juju/environs/network" 10 "github.com/juju/juju/state/api/base" 11 "github.com/juju/juju/state/api/params" 12 ) 13 14 const networkerFacade = "Networker" 15 16 // State provides access to an networker worker's view of the state. 17 type State struct { 18 caller base.Caller 19 } 20 21 func (st *State) call(method string, params, result interface{}) error { 22 return st.caller.Call(networkerFacade, "", method, params, result) 23 } 24 25 // NewState creates a new client-side Machiner facade. 26 func NewState(caller base.Caller) *State { 27 return &State{caller} 28 } 29 30 // MachineNetworkInfo returns information about networks to setup only for a single machine. 31 func (st *State) MachineNetworkInfo(machineTag string) ([]network.Info, error) { 32 args := params.Entities{ 33 Entities: []params.Entity{{Tag: machineTag}}, 34 } 35 var results params.MachineNetworkInfoResults 36 err := st.call("MachineNetworkInfo", args, &results) 37 if err != nil { 38 // TODO: Not directly tested 39 return nil, err 40 } 41 if len(results.Results) != 1 { 42 // TODO: Not directly tested 43 err = fmt.Errorf("expected one result, got %d", len(results.Results)) 44 return nil, err 45 } 46 return results.Results[0].Info, results.Results[0].Error 47 }