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 }