github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/application/trust.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package application 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/schema" 9 "gopkg.in/juju/environschema.v1" 10 ) 11 12 // TrustConfigOptionName is the option name used to set trust level in application configuration. 13 const TrustConfigOptionName = "trust" 14 const defaultTrustLevel = false 15 16 var trustFields = environschema.Fields{ 17 TrustConfigOptionName: { 18 Description: "Does this application have access to trusted credentials", 19 Type: environschema.Tbool, 20 Group: environschema.JujuGroup, 21 }, 22 } 23 24 var trustDefaults = schema.Defaults{ 25 TrustConfigOptionName: defaultTrustLevel, 26 } 27 28 // AddTrustSchemaAndDefaults adds trust schema fields and defaults to an existing set of schema fields and defaults. 29 func AddTrustSchemaAndDefaults(schema environschema.Fields, defaults schema.Defaults) (environschema.Fields, schema.Defaults, error) { 30 newSchema, err := addTrustSchema(schema) 31 newDefaults := addTrustDefaults(defaults) 32 return newSchema, newDefaults, err 33 } 34 35 func addTrustDefaults(defaults schema.Defaults) schema.Defaults { 36 newDefaults := make(schema.Defaults) 37 for key, value := range trustDefaults { 38 newDefaults[key] = value 39 } 40 for key, value := range defaults { 41 newDefaults[key] = value 42 } 43 return newDefaults 44 } 45 46 // [TODO](externalreality): This is copied from CAAS configuration code. This is 47 // a generic builder pattern and can likely be generalized to all application 48 // schema fields. 49 func addTrustSchema(extra environschema.Fields) (environschema.Fields, error) { 50 fields := make(environschema.Fields) 51 for name, field := range trustFields { 52 fields[name] = field 53 } 54 for name, field := range extra { 55 if _, ok := trustFields[name]; ok { 56 return nil, errors.Errorf("config field %q clashes with common config", name) 57 } 58 fields[name] = field 59 } 60 return fields, nil 61 }