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 }