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  }