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  }