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

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package caasmodeloperator
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/facade"
    12  )
    13  
    14  // Register is called to expose a package of facades onto a given registry.
    15  func Register(registry facade.FacadeRegistry) {
    16  	registry.MustRegister("CAASModelOperator", 1, func(ctx facade.Context) (facade.Facade, error) {
    17  		return newAPIFromContext(ctx)
    18  	}, reflect.TypeOf((*API)(nil)))
    19  }
    20  
    21  // newAPIFromContext creates a new controller model facade from the supplied
    22  // context.
    23  func newAPIFromContext(ctx facade.Context) (*API, error) {
    24  	authorizer := ctx.Auth()
    25  	resources := ctx.Resources()
    26  	systemState, err := ctx.StatePool().SystemState()
    27  	if err != nil {
    28  		return nil, errors.Trace(err)
    29  	}
    30  	return NewAPI(authorizer, resources,
    31  		stateShim{systemState},
    32  		stateShim{ctx.State()})
    33  }