github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/rsyslog/rsyslog.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package rsyslog 5 6 import ( 7 "fmt" 8 9 "github.com/juju/juju/api/base" 10 "github.com/juju/juju/api/watcher" 11 "github.com/juju/juju/apiserver/params" 12 "github.com/juju/juju/network" 13 ) 14 15 const rsyslogAPI = "Rsyslog" 16 17 // RsyslogConfig holds the values needed for the rsyslog worker 18 type RsyslogConfig struct { 19 CACert string 20 // Port is only used by state servers as the port to listen on. 21 Port int 22 HostPorts []network.HostPort 23 } 24 25 // State provides access to the Rsyslog API facade. 26 type State struct { 27 facade base.FacadeCaller 28 } 29 30 // NewState creates a new client-side Rsyslog facade. 31 func NewState(caller base.APICaller) *State { 32 return &State{facade: base.NewFacadeCaller(caller, rsyslogAPI)} 33 } 34 35 // SetRsyslogCert sets the rsyslog CA certificate, 36 // which is used by clients to verify the server's 37 // identity and establish a TLS session. 38 func (st *State) SetRsyslogCert(caCert string) error { 39 var result params.ErrorResult 40 args := params.SetRsyslogCertParams{ 41 CACert: []byte(caCert), 42 } 43 err := st.facade.FacadeCall("SetRsyslogCert", args, &result) 44 if err != nil { 45 return err 46 } 47 if result.Error != nil { 48 return result.Error 49 } 50 return nil 51 } 52 53 // WatchForRsyslogChanges returns a new NotifyWatcher. 54 func (st *State) WatchForRsyslogChanges(agentTag string) (watcher.NotifyWatcher, error) { 55 var results params.NotifyWatchResults 56 args := params.Entities{ 57 Entities: []params.Entity{{Tag: agentTag}}, 58 } 59 60 err := st.facade.FacadeCall("WatchForRsyslogChanges", args, &results) 61 if err != nil { 62 // TODO: Not directly tested 63 return nil, err 64 } 65 if len(results.Results) != 1 { 66 // TODO: Not directly tested 67 return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) 68 } 69 result := results.Results[0] 70 if result.Error != nil { 71 // TODO: Not directly tested 72 return nil, result.Error 73 } 74 w := watcher.NewNotifyWatcher(st.facade.RawAPICaller(), result) 75 return w, nil 76 } 77 78 // GetRsyslogConfig returns a RsyslogConfig. 79 func (st *State) GetRsyslogConfig(agentTag string) (*RsyslogConfig, error) { 80 var results params.RsyslogConfigResults 81 args := params.Entities{ 82 Entities: []params.Entity{{Tag: agentTag}}, 83 } 84 err := st.facade.FacadeCall("GetRsyslogConfig", args, &results) 85 if err != nil { 86 return nil, err 87 } 88 result := results.Results[0] 89 if result.Error != nil { 90 // TODO: Not directly tested 91 return nil, result.Error 92 } 93 return &RsyslogConfig{ 94 CACert: result.CACert, 95 Port: result.Port, 96 HostPorts: result.HostPorts, 97 }, nil 98 }