// Process transforms Template object into List object. It generates // Parameter values using the defined set of generators first, and then it // substitutes all Parameter expression occurrences with their corresponding // values (currently in the containers' Environment variables only). func (p *Processor) Process(template *api.Template) fielderrors.ValidationErrorList { templateErrors := fielderrors.ValidationErrorList{} if err := p.GenerateParameterValues(template); err != nil { return append(templateErrors.Prefix("Template"), fielderrors.NewFieldInvalid("parameters", err, "failure to generate parameter value")) } for i, item := range template.Objects { if obj, ok := item.(*runtime.Unknown); ok { // TODO: use runtime.DecodeList when it returns ValidationErrorList obj, err := runtime.UnstructuredJSONScheme.Decode(obj.RawJSON) if err != nil { util.ReportError(&templateErrors, i, *fielderrors.NewFieldInvalid("objects", err, "unable to handle object")) continue } item = obj } newItem, err := p.SubstituteParameters(template.Parameters, item) if err != nil { util.ReportError(&templateErrors, i, *fielderrors.NewFieldNotSupported("parameters", err)) } stripNamespace(newItem) if err := util.AddObjectLabels(newItem, template.ObjectLabels); err != nil { util.ReportError(&templateErrors, i, *fielderrors.NewFieldInvalid("labels", err, "label could not be applied")) } template.Objects[i] = newItem } return templateErrors }
func validateEnv(vars []kapi.EnvVar) fielderrors.ValidationErrorList { allErrs := fielderrors.ValidationErrorList{} for i, ev := range vars { vErrs := fielderrors.ValidationErrorList{} if len(ev.Name) == 0 { vErrs = append(vErrs, fielderrors.NewFieldRequired("name")) } if !util.IsCIdentifier(ev.Name) { vErrs = append(vErrs, fielderrors.NewFieldInvalid("name", ev.Name, "must match regex "+util.CIdentifierFmt)) } allErrs = append(allErrs, vErrs.PrefixIndex(i)...) } return allErrs }