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

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package migrationtarget
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/facade"
    12  	"github.com/juju/juju/caas"
    13  	"github.com/juju/juju/core/facades"
    14  	"github.com/juju/juju/environs"
    15  	"github.com/juju/juju/state/stateenvirons"
    16  )
    17  
    18  // Register is called to expose a package of facades onto a given registry.
    19  func Register(requiredMigrationFacadeVersions facades.FacadeVersions) func(registry facade.FacadeRegistry) {
    20  	return func(registry facade.FacadeRegistry) {
    21  		registry.MustRegister("MigrationTarget", 1, func(ctx facade.Context) (facade.Facade, error) {
    22  			return newFacadeV1(ctx)
    23  		}, reflect.TypeOf((*APIV1)(nil)))
    24  		registry.MustRegister("MigrationTarget", 2, func(ctx facade.Context) (facade.Facade, error) {
    25  			return newFacadeV2(ctx)
    26  		}, reflect.TypeOf((*APIV2)(nil)))
    27  		registry.MustRegister("MigrationTarget", 3, func(ctx facade.Context) (facade.Facade, error) {
    28  			return newFacade(ctx, requiredMigrationFacadeVersions)
    29  		}, reflect.TypeOf((*API)(nil)))
    30  	}
    31  }
    32  
    33  // newFacadeV1 is used for APIV1 registration.
    34  func newFacadeV1(ctx facade.Context) (*APIV1, error) {
    35  	api, err := NewAPI(
    36  		ctx,
    37  		stateenvirons.GetNewEnvironFunc(environs.New),
    38  		stateenvirons.GetNewCAASBrokerFunc(caas.New),
    39  		facades.FacadeVersions{},
    40  	)
    41  	if err != nil {
    42  		return nil, errors.Trace(err)
    43  	}
    44  	return &APIV1{API: api}, nil
    45  }
    46  
    47  // newFacadeV2 is used for APIV2 registration.
    48  func newFacadeV2(ctx facade.Context) (*APIV2, error) {
    49  	api, err := NewAPI(
    50  		ctx,
    51  		stateenvirons.GetNewEnvironFunc(environs.New),
    52  		stateenvirons.GetNewCAASBrokerFunc(caas.New),
    53  		facades.FacadeVersions{},
    54  	)
    55  	if err != nil {
    56  		return nil, errors.Trace(err)
    57  	}
    58  	return &APIV2{APIV1: &APIV1{API: api}}, nil
    59  }
    60  
    61  // newFacade is used for API registration.
    62  func newFacade(ctx facade.Context, facadeVersions facades.FacadeVersions) (*API, error) {
    63  	return NewAPI(
    64  		ctx,
    65  		stateenvirons.GetNewEnvironFunc(environs.New),
    66  		stateenvirons.GetNewCAASBrokerFunc(caas.New),
    67  		facadeVersions,
    68  	)
    69  }