func()

in pkg/build/inline.go [329:394]


func (n *Inliner) objectTemplateBuilders(ctx context.Context, objects map[string][]*unstructured.Unstructured, ref bundle.ComponentReference) ([]*unstructured.Unstructured, error) {
	var outObj []*unstructured.Unstructured
	for parentPath, objList := range objects {
		for _, obj := range objList {
			if obj.GetKind() != "ObjectTemplateBuilder" {
				// There shouldn't be any non-ObjectTemplateBuilders at this point
				continue
			}
			name := obj.GetName()
			builder := &bundle.ObjectTemplateBuilder{}
			if err := converter.FromUnstructured(obj).ToObject(builder); err != nil {
				return nil, fmt.Errorf("for component %v and object %q: %v", ref, name, err)
			}

			parentURL, err := url.Parse(parentPath)
			if err != nil {
				return nil, err
			}

			furl, err := builder.File.ParsedURL()
			if err != nil {
				return nil, err
			}

			builder.File.URL = makeAbsWithParent(parentURL, furl).String()

			contents, err := n.readFile(ctx, builder.File)
			if err != nil {
				return nil, fmt.Errorf("for component %v and object %q: %v", ref, name, err)
			}

			objTemplate := &bundle.ObjectTemplate{
				TypeMeta: metav1.TypeMeta{
					APIVersion: "bundle.gke.io/v1alpha1",
					Kind:       "ObjectTemplate",
				},
				ObjectMeta:    builder.ObjectMeta,
				OptionsSchema: builder.OptionsSchema,
				Template:      string(contents),
			}
			objTemplate.ObjectMeta.Annotations = make(map[string]string)
			for key, value := range builder.ObjectMeta.Annotations {
				objTemplate.ObjectMeta.Annotations[key] = value
			}
			objTemplate.ObjectMeta.Annotations[string(bundle.InlinePathIdentifier)] = builder.File.URL

			tmplType := bundle.TemplateTypeGo
			if builder.Type != bundle.TemplateTypeUndefined {
				tmplType = builder.Type
			}
			objTemplate.Type = tmplType

			objJSON, err := converter.FromObject(objTemplate).ToJSON()
			if err != nil {
				return nil, fmt.Errorf("for component %v and object %q, while converting back to JSON: %v", ref, name, err)
			}

			unsObj, err := converter.FromJSON(objJSON).ToUnstructured()
			if err != nil {
				return nil, fmt.Errorf("for component %v and object %q, while converting back to Unstructured: %v", ref, name, err)
			}
			outObj = append(outObj, unsObj)
		}
	}
	return outObj, nil
}