github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/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/apiserver/params" 11 "github.com/juju/juju/environs/config" 12 ) 13 14 // Client provides methods that the Juju client command uses to interact 15 // with models stored in the Juju Server. 16 type Client struct { 17 base.ClientFacade 18 facade base.FacadeCaller 19 } 20 21 // NewClient creates a new `Client` based on an existing authenticated API 22 // connection. 23 func NewClient(st base.APICallCloser) *Client { 24 frontend, backend := base.NewClientFacade(st, "ModelConfig") 25 return &Client{ClientFacade: frontend, facade: backend} 26 } 27 28 // ModelGet returns all model settings. 29 func (c *Client) ModelGet() (map[string]interface{}, error) { 30 result := params.ModelConfigResults{} 31 err := c.facade.FacadeCall("ModelGet", nil, &result) 32 if err != nil { 33 return nil, errors.Trace(err) 34 } 35 values := make(map[string]interface{}) 36 for name, val := range result.Config { 37 values[name] = val.Value 38 } 39 return values, nil 40 } 41 42 // ModelGetWithMetadata returns all model settings along with extra 43 // metadata like the source of the setting value. 44 func (c *Client) ModelGetWithMetadata() (config.ConfigValues, error) { 45 result := params.ModelConfigResults{} 46 err := c.facade.FacadeCall("ModelGet", nil, &result) 47 if err != nil { 48 return nil, errors.Trace(err) 49 } 50 values := make(config.ConfigValues) 51 for name, val := range result.Config { 52 values[name] = config.ConfigValue{ 53 Value: val.Value, 54 Source: val.Source, 55 } 56 } 57 return values, nil 58 } 59 60 // ModelSet sets the given key-value pairs in the model. 61 func (c *Client) ModelSet(config map[string]interface{}) error { 62 args := params.ModelSet{Config: config} 63 return c.facade.FacadeCall("ModelSet", args, nil) 64 } 65 66 // ModelUnset sets the given key-value pairs in the model. 67 func (c *Client) ModelUnset(keys ...string) error { 68 args := params.ModelUnset{Keys: keys} 69 return c.facade.FacadeCall("ModelUnset", args, nil) 70 } 71 72 // SetSLALevel sets the support level for the given model. 73 func (c *Client) SetSLALevel(level, owner string, creds []byte) error { 74 args := params.ModelSLA{ 75 ModelSLAInfo: params.ModelSLAInfo{ 76 Level: level, 77 Owner: owner, 78 }, 79 Credentials: creds, 80 } 81 return c.facade.FacadeCall("SetSLALevel", args, nil) 82 } 83 84 // SLALevel gets the support level for the given model. 85 func (c *Client) SLALevel() (string, error) { 86 var result params.StringResult 87 err := c.facade.FacadeCall("SLALevel", nil, &result) 88 if err != nil { 89 return "", errors.Trace(err) 90 } 91 return result.Result, nil 92 } 93 94 // Sequences returns all sequence names and next values. 95 func (c *Client) Sequences() (map[string]int, error) { 96 if c.BestAPIVersion() < 2 { 97 return nil, errors.NotSupportedf("Sequences on v1 facade") 98 } 99 var result params.ModelSequencesResult 100 err := c.facade.FacadeCall("Sequences", nil, &result) 101 if err != nil { 102 return nil, errors.Trace(err) 103 } 104 return result.Sequences, nil 105 }