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

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package environupgrader
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/names/v5"
    10  
    11  	"github.com/juju/juju/apiserver/common"
    12  	"github.com/juju/juju/apiserver/facade"
    13  	"github.com/juju/juju/environs"
    14  )
    15  
    16  // Register is called to expose a package of facades onto a given registry.
    17  func Register(registry facade.FacadeRegistry) {
    18  	registry.MustRegister("EnvironUpgrader", 1, func(ctx facade.Context) (facade.Facade, error) {
    19  		return newStateFacade(ctx)
    20  	}, reflect.TypeOf((*Facade)(nil)))
    21  }
    22  
    23  // newStateFacade provides the signature required for facade registration.
    24  func newStateFacade(ctx facade.Context) (*Facade, error) {
    25  	pool := NewPool(ctx.StatePool())
    26  	registry := environs.GlobalProviderRegistry()
    27  	watcher := common.NewAgentEntityWatcher(
    28  		ctx.State(),
    29  		ctx.Resources(),
    30  		common.AuthFuncForTagKind(names.ModelTagKind),
    31  	)
    32  	statusSetter := common.NewStatusSetter(
    33  		ctx.State(),
    34  		common.AuthFuncForTagKind(names.ModelTagKind),
    35  	)
    36  	return NewFacade(ctx.State(), pool, registry, watcher, statusSetter, ctx.Auth())
    37  }