get.porter.sh/porter@v1.3.0/pkg/generator/parameters.go (about) 1 package generator 2 3 import ( 4 "errors" 5 "fmt" 6 "sort" 7 "strings" 8 9 "get.porter.sh/porter/pkg/cnab" 10 "get.porter.sh/porter/pkg/storage" 11 ) 12 13 // GenerateParametersOptions are the options to generate a Parameter Set 14 type GenerateParametersOptions struct { 15 GenerateOptions 16 17 // Bundle to generate parameters from 18 Bundle cnab.ExtendedBundle 19 } 20 21 // GenerateParameters will generate a parameter set based on the given options 22 func (opts *GenerateParametersOptions) GenerateParameters() (storage.ParameterSet, error) { 23 if opts.Name == "" { 24 return storage.ParameterSet{}, errors.New("parameter set name is required") 25 } 26 generator := genSurvey 27 if opts.Silent { 28 generator = genEmptySet 29 } 30 pset, err := opts.genParameterSet(generator) 31 if err != nil { 32 return storage.ParameterSet{}, err 33 } 34 35 pset.Labels = opts.Labels 36 return pset, nil 37 } 38 39 func (opts *GenerateParametersOptions) genParameterSet(fn generator) (storage.ParameterSet, error) { 40 pset := storage.NewParameterSet(opts.Namespace, opts.Name) 41 42 if strings.ContainsAny(opts.Name, "./\\") { 43 return pset, fmt.Errorf("parameter set name '%s' cannot contain the following characters: './\\'", opts.Name) 44 } 45 46 var parameterNames []string 47 for name := range opts.Bundle.Parameters { 48 parameterNames = append(parameterNames, name) 49 } 50 51 sort.Strings(parameterNames) 52 53 for _, name := range parameterNames { 54 if opts.Bundle.IsInternalParameter(name) { 55 continue 56 } 57 c, err := fn(name, surveyParameters, withRequired(opts.Bundle.Parameters[name].Required), withDescription(opts.Bundle.Parameters[name].Description)) 58 if err != nil { 59 return pset, err 60 } 61 pset.Parameters = append(pset.Parameters, c) 62 } 63 64 return pset, nil 65 }