github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/charmhub.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/loggo" 9 10 "github.com/juju/juju/charmhub" 11 "github.com/juju/juju/environs/config" 12 ) 13 14 // ModelGetter defines an interface for getting a model. 15 type ModelGetter interface { 16 Model() (ConfigModel, error) 17 } 18 19 // ConfigModel defines an interface for getting the config of a model. 20 type ConfigModel interface { 21 Config() (*config.Config, error) 22 } 23 24 // CharmhubClient creates a new charmhub Client based on this model's config. 25 func CharmhubClient(mg ModelGetter, httpClient charmhub.HTTPClient, logger loggo.Logger) (*charmhub.Client, error) { 26 model, err := mg.Model() 27 if err != nil { 28 return nil, errors.Trace(err) 29 } 30 modelConfig, err := model.Config() 31 if err != nil { 32 return nil, errors.Trace(err) 33 } 34 url, _ := modelConfig.CharmHubURL() 35 36 client, err := charmhub.NewClient(charmhub.Config{ 37 URL: url, 38 HTTPClient: httpClient, 39 Logger: logger, 40 }) 41 if err != nil { 42 return nil, errors.Trace(err) 43 } 44 return client, nil 45 }