github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/caasmodelconfigmanager/facade.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasmodelconfigmanager 5 6 import ( 7 "github.com/juju/juju/apiserver/common" 8 "github.com/juju/juju/apiserver/facade" 9 "github.com/juju/juju/rpc/params" 10 "github.com/juju/juju/state" 11 "github.com/juju/juju/state/watcher" 12 ) 13 14 //go:generate go run go.uber.org/mock/mockgen -package mocks -destination mocks/context_mock.go github.com/juju/juju/apiserver/facade Authorizer,Context,Resources 15 16 // State provides required state for the Facade. 17 type State interface { 18 WatchControllerConfig() state.NotifyWatcher 19 } 20 21 // Facade allows model config manager clients to watch controller config changes and fetch controller config. 22 type Facade struct { 23 auth facade.Authorizer 24 resources facade.Resources 25 26 ctrlState State 27 controllerConfigAPI *common.ControllerConfigAPI 28 } 29 30 func (f *Facade) ControllerConfig() (params.ControllerConfigResult, error) { 31 return f.controllerConfigAPI.ControllerConfig() 32 } 33 34 func (f *Facade) WatchControllerConfig() (params.NotifyWatchResult, error) { 35 result := params.NotifyWatchResult{} 36 w := f.ctrlState.WatchControllerConfig() 37 if _, ok := <-w.Changes(); ok { 38 result.NotifyWatcherId = f.resources.Register(w) 39 } else { 40 return result, watcher.EnsureErr(w) 41 } 42 return result, nil 43 }