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 }