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  }