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  }