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

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package agenttools
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/facade"
    12  	"github.com/juju/juju/environs"
    13  	"github.com/juju/juju/state/stateenvirons"
    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("AgentTools", 1, func(ctx facade.Context) (facade.Facade, error) {
    19  		return newFacade(ctx)
    20  	}, reflect.TypeOf((*AgentToolsAPI)(nil)))
    21  }
    22  
    23  // newFacade is used to register the facade.
    24  func newFacade(ctx facade.Context) (*AgentToolsAPI, error) {
    25  	st := ctx.State()
    26  	model, err := st.Model()
    27  	if err != nil {
    28  		return nil, errors.Trace(err)
    29  	}
    30  	newEnviron := func() (environs.Environ, error) {
    31  		newEnviron := stateenvirons.GetNewEnvironFunc(environs.New)
    32  		return newEnviron(model)
    33  	}
    34  	return NewAgentToolsAPI(st, newEnviron, findTools, envVersionUpdate, ctx.Auth())
    35  }