github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/client/modelconfig/modelconfig.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelconfig
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/api/base"
    10  	"github.com/juju/juju/core/constraints"
    11  	"github.com/juju/juju/environs/config"
    12  	"github.com/juju/juju/rpc/params"
    13  )
    14  
    15  // Client provides methods that the Juju client command uses to interact
    16  // with models stored in the Juju Server.
    17  type Client struct {
    18  	base.ClientFacade
    19  	facade base.FacadeCaller
    20  }
    21  
    22  // NewClient creates a new `Client` based on an existing authenticated API
    23  // connection.
    24  func NewClient(st base.APICallCloser) *Client {
    25  	frontend, backend := base.NewClientFacade(st, "ModelConfig")
    26  	return &Client{ClientFacade: frontend, facade: backend}
    27  }
    28  
    29  // ModelGet returns all model settings.
    30  func (c *Client) ModelGet() (map[string]interface{}, error) {
    31  	result := params.ModelConfigResults{}
    32  	err := c.facade.FacadeCall("ModelGet", nil, &result)
    33  	if err != nil {
    34  		return nil, errors.Trace(err)
    35  	}
    36  	values := make(map[string]interface{})
    37  	for name, val := range result.Config {
    38  		values[name] = val.Value
    39  	}
    40  	return values, nil
    41  }
    42  
    43  // ModelGetWithMetadata returns all model settings along with extra
    44  // metadata like the source of the setting value.
    45  func (c *Client) ModelGetWithMetadata() (config.ConfigValues, error) {
    46  	result := params.ModelConfigResults{}
    47  	err := c.facade.FacadeCall("ModelGet", nil, &result)
    48  	if err != nil {
    49  		return nil, errors.Trace(err)
    50  	}
    51  	values := make(config.ConfigValues)
    52  	for name, val := range result.Config {
    53  		values[name] = config.ConfigValue{
    54  			Value:  val.Value,
    55  			Source: val.Source,
    56  		}
    57  	}
    58  	return values, nil
    59  }
    60  
    61  // ModelSet sets the given key-value pairs in the model.
    62  func (c *Client) ModelSet(config map[string]interface{}) error {
    63  	args := params.ModelSet{Config: config}
    64  	return c.facade.FacadeCall("ModelSet", args, nil)
    65  }
    66  
    67  // ModelUnset sets the given key-value pairs in the model.
    68  func (c *Client) ModelUnset(keys ...string) error {
    69  	args := params.ModelUnset{Keys: keys}
    70  	return c.facade.FacadeCall("ModelUnset", args, nil)
    71  }
    72  
    73  // GetModelConstraints returns the constraints for the model.
    74  func (c *Client) GetModelConstraints() (constraints.Value, error) {
    75  	results := new(params.GetConstraintsResults)
    76  	err := c.facade.FacadeCall("GetModelConstraints", nil, results)
    77  	return results.Constraints, err
    78  }
    79  
    80  // SetModelConstraints specifies the constraints for the model.
    81  func (c *Client) SetModelConstraints(constraints constraints.Value) error {
    82  	params := params.SetConstraints{
    83  		Constraints: constraints,
    84  	}
    85  	return c.facade.FacadeCall("SetModelConstraints", params, nil)
    86  }
    87  
    88  // SetSLALevel sets the support level for the given model.
    89  func (c *Client) SetSLALevel(level, owner string, creds []byte) error {
    90  	args := params.ModelSLA{
    91  		ModelSLAInfo: params.ModelSLAInfo{
    92  			Level: level,
    93  			Owner: owner,
    94  		},
    95  		Credentials: creds,
    96  	}
    97  	return c.facade.FacadeCall("SetSLALevel", args, nil)
    98  }
    99  
   100  // SLALevel gets the support level for the given model.
   101  func (c *Client) SLALevel() (string, error) {
   102  	var result params.StringResult
   103  	err := c.facade.FacadeCall("SLALevel", nil, &result)
   104  	if err != nil {
   105  		return "", errors.Trace(err)
   106  	}
   107  	return result.Result, nil
   108  }
   109  
   110  // Sequences returns all sequence names and next values.
   111  func (c *Client) Sequences() (map[string]int, error) {
   112  	var result params.ModelSequencesResult
   113  	err := c.facade.FacadeCall("Sequences", nil, &result)
   114  	if err != nil {
   115  		return nil, errors.Trace(err)
   116  	}
   117  	return result.Sequences, nil
   118  }