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

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package migrationmaster
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/common/cloudspec"
    12  	"github.com/juju/juju/apiserver/facade"
    13  	"github.com/juju/juju/migration"
    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("MigrationMaster", 3, func(ctx facade.Context) (facade.Facade, error) {
    19  		return newMigrationMasterFacade(ctx) // Adds MinionReportTimeout.
    20  	}, reflect.TypeOf((*API)(nil)))
    21  }
    22  
    23  // newMigrationMasterFacade exists to provide the required signature for API
    24  // registration, converting st to backend.
    25  func newMigrationMasterFacade(ctx facade.Context) (*API, error) {
    26  	pool := ctx.StatePool()
    27  	modelState := ctx.State()
    28  
    29  	controllerState, err := pool.SystemState()
    30  	if err != nil {
    31  		return nil, errors.Trace(err)
    32  	}
    33  
    34  	preCheckBackend, err := migration.PrecheckShim(modelState, controllerState)
    35  	if err != nil {
    36  		return nil, errors.Annotate(err, "creating precheck backend")
    37  	}
    38  
    39  	leadership, err := ctx.LeadershipReader(modelState.ModelUUID())
    40  	if err != nil {
    41  		return nil, errors.Trace(err)
    42  	}
    43  
    44  	return NewAPI(
    45  		controllerState,
    46  		newBacked(modelState),
    47  		preCheckBackend,
    48  		migration.PoolShim(pool),
    49  		ctx.Resources(),
    50  		ctx.Auth(),
    51  		ctx.Presence(),
    52  		cloudspec.MakeCloudSpecGetter(pool),
    53  		leadership,
    54  	)
    55  }