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  }