github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/maas/config.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package maas
     5  
     6  import (
     7  	"github.com/juju/schema"
     8  	"gopkg.in/juju/environschema.v1"
     9  
    10  	"github.com/juju/juju/environs/config"
    11  )
    12  
    13  var configSchema = environschema.Fields{}
    14  
    15  var configFields = func() schema.Fields {
    16  	fs, _, err := configSchema.ValidationSchema()
    17  	if err != nil {
    18  		panic(err)
    19  	}
    20  	return fs
    21  }()
    22  
    23  var configDefaults = schema.Defaults{}
    24  
    25  type maasModelConfig struct {
    26  	*config.Config
    27  	attrs map[string]interface{}
    28  }
    29  
    30  func (prov MaasEnvironProvider) newConfig(cfg *config.Config) (*maasModelConfig, error) {
    31  	validCfg, err := prov.Validate(cfg, nil)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	result := new(maasModelConfig)
    36  	result.Config = validCfg
    37  	result.attrs = validCfg.UnknownAttrs()
    38  	return result, nil
    39  }
    40  
    41  // Schema returns the configuration schema for an environment.
    42  func (MaasEnvironProvider) Schema() environschema.Fields {
    43  	fields, err := config.Schema(configSchema)
    44  	if err != nil {
    45  		panic(err)
    46  	}
    47  	return fields
    48  }
    49  
    50  // ConfigSchema returns extra config attributes specific
    51  // to this provider only.
    52  func (p MaasEnvironProvider) ConfigSchema() schema.Fields {
    53  	return configFields
    54  }
    55  
    56  // ConfigDefaults returns the default values for the
    57  // provider specific config attributes.
    58  func (p MaasEnvironProvider) ConfigDefaults() schema.Defaults {
    59  	return configDefaults
    60  }
    61  
    62  func (prov MaasEnvironProvider) Validate(cfg, oldCfg *config.Config) (*config.Config, error) {
    63  	// Validate base configuration change before validating MAAS specifics.
    64  	err := config.Validate(cfg, oldCfg)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  	validated, err := cfg.ValidateUnknownAttrs(configFields, configDefaults)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  	envCfg := &maasModelConfig{
    73  		Config: cfg,
    74  		attrs:  validated,
    75  	}
    76  	return cfg.Apply(envCfg.attrs)
    77  }