github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/firewaller/register.go (about)

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package firewaller
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/common"
    12  	"github.com/juju/juju/apiserver/common/cloudspec"
    13  	"github.com/juju/juju/apiserver/common/firewall"
    14  	"github.com/juju/juju/apiserver/facade"
    15  )
    16  
    17  // Register is called to expose a package of facades onto a given registry.
    18  func Register(registry facade.FacadeRegistry) {
    19  	registry.MustRegister("Firewaller", 7, func(ctx facade.Context) (facade.Facade, error) {
    20  		return newFirewallerAPIV7(ctx)
    21  	}, reflect.TypeOf((*FirewallerAPI)(nil)))
    22  }
    23  
    24  // newFirewallerAPIV7 creates a new server-side FirewallerAPIv7 facade.
    25  func newFirewallerAPIV7(context facade.Context) (*FirewallerAPI, error) {
    26  	st := context.State()
    27  	m, err := st.Model()
    28  	if err != nil {
    29  		return nil, errors.Trace(err)
    30  	}
    31  	cloudSpecAPI := cloudspec.NewCloudSpecV2(
    32  		context.Resources(),
    33  		cloudspec.MakeCloudSpecGetterForModel(st),
    34  		cloudspec.MakeCloudSpecWatcherForModel(st),
    35  		cloudspec.MakeCloudSpecCredentialWatcherForModel(st),
    36  		cloudspec.MakeCloudSpecCredentialContentWatcherForModel(st),
    37  		common.AuthFuncForTag(m.ModelTag()),
    38  	)
    39  	systemState, err := context.StatePool().SystemState()
    40  	if err != nil {
    41  		return nil, errors.Trace(err)
    42  	}
    43  	controllerConfigAPI := common.NewStateControllerConfig(systemState)
    44  
    45  	stShim := stateShim{st: st, State: firewall.StateShim(st, m)}
    46  	return NewStateFirewallerAPI(stShim, context.Resources(), context.Auth(), cloudSpecAPI, controllerConfigAPI)
    47  }