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 }