github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/lxd/config.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lxd 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/schema" 9 "gopkg.in/juju/environschema.v1" 10 11 "github.com/juju/juju/environs/config" 12 ) 13 14 var ( 15 configSchema = environschema.Fields{} 16 configFields, configDefaults = func() (schema.Fields, schema.Defaults) { 17 fields, defaults, err := configSchema.ValidationSchema() 18 if err != nil { 19 panic(err) 20 } 21 return fields, defaults 22 }() 23 ) 24 25 type environConfig struct { 26 *config.Config 27 attrs map[string]interface{} 28 } 29 30 // newConfig builds a new environConfig from the provided Config and 31 // returns it. 32 func newConfig(cfg *config.Config) *environConfig { 33 return &environConfig{ 34 Config: cfg, 35 attrs: cfg.UnknownAttrs(), 36 } 37 } 38 39 // newValidConfig builds a new environConfig from the provided Config 40 // and returns it. This includes applying the provided defaults 41 // values, if any. The resulting config values are validated. 42 func newValidConfig(cfg *config.Config) (*environConfig, error) { 43 // Ensure that the provided config is valid. 44 if err := config.Validate(cfg, nil); err != nil { 45 return nil, errors.Trace(err) 46 } 47 48 // Build the config. 49 ecfg := newConfig(cfg) 50 51 // Do final (more complex, provider-specific) validation. 52 if err := ecfg.validate(); err != nil { 53 return nil, errors.Trace(err) 54 } 55 56 return ecfg, nil 57 } 58 59 // validate validates LXD-specific configuration. 60 func (c *environConfig) validate() error { 61 _, err := c.ValidateUnknownAttrs(configFields, configDefaults) 62 if err != nil { 63 return errors.Trace(err) 64 } 65 // There are currently no known extra fields for LXD 66 return nil 67 }