// buildTemplates converts a set of resolved, valid references into references to template objects. func (c *AppConfig) buildTemplates(components app.ComponentReferences, environment app.Environment) ([]runtime.Object, error) { objects := []runtime.Object{} for _, ref := range components { if !ref.Input().Match.IsTemplate() { continue } tpl := ref.Input().Match.Template glog.V(4).Infof("processing template %s/%s", c.originNamespace, tpl.Name) for _, env := range environment.List() { // only set environment values that match what's expected by the template. if v := template.GetParameterByName(tpl, env.Name); v != nil { v.Value = env.Value v.Generate = "" template.AddParameter(tpl, *v) } else { return nil, fmt.Errorf("unexpected parameter name %q", env.Name) } } result, err := c.osclient.TemplateConfigs(c.originNamespace).Create(tpl) if err != nil { return nil, fmt.Errorf("error processing template %s/%s: %v", c.originNamespace, tpl.Name, err) } errs := runtime.DecodeList(result.Objects, kapi.Scheme) if len(errs) > 0 { err = errors.NewAggregate(errs) return nil, fmt.Errorf("error processing template %s/%s: %v", c.originNamespace, tpl.Name, errs) } objects = append(objects, result.Objects...) } return objects, nil }
// injectUserVars injects user specified variables into the Template func injectUserVars(cmd *cobra.Command, t *api.Template) { values := util.StringList{} values.Set(kcmdutil.GetFlagString(cmd, "value")) for _, keypair := range values { p := strings.SplitN(keypair, "=", 2) if len(p) != 2 { fmt.Fprintf(cmd.Out(), "invalid parameter assignment in %q: %q\n", t.Name, keypair) continue } if v := template.GetParameterByName(t, p[0]); v != nil { v.Value = p[1] v.Generate = "" template.AddParameter(t, *v) } else { fmt.Fprintf(cmd.Out(), "unknown parameter name %q\n", p[0]) } } }