func renderSuffix()

in pkg/bundle/template/visitor/secretbuilder/helpers.go [108:160]


func renderSuffix(templateContext engine.Context, secretPath string, item *bundlev1.SecretSuffix, data interface{}) (map[string]interface{}, error) {
	// Check input
	if types.IsNil(templateContext) {
		return nil, errors.New("unable to process with nil context")
	}
	if item == nil {
		return nil, fmt.Errorf("unable to process nil item")
	}
	if len(item.Content) == 0 && item.Template == "" {
		return nil, fmt.Errorf("content or template property must be defined")
	}

	kv := map[string]interface{}{}

	if item.Template != "" {
		payload, err := engine.RenderContextWithData(templateContext, item.Template, data)
		if err != nil {
			return nil, fmt.Errorf("unable to render suffix template: %w", err)
		}

		// Parse generated JSON
		if !json.Valid([]byte(payload)) {
			return nil, fmt.Errorf("unable to validate generated json for secret path '%s': %s", secretPath, payload)
		}

		// Extract payload as K/V
		if err := json.Unmarshal([]byte(payload), &kv); err != nil {
			return nil, fmt.Errorf("unable to assemble secret package for secret path '%s': %w", secretPath, err)
		}
	}

	if len(item.Content) > 0 {
		for filename, content := range item.Content {
			// Render filename
			renderedFilename, err := engine.RenderContextWithData(templateContext, filename, data)
			if err != nil {
				return nil, fmt.Errorf("unable to render filename template: %w", err)
			}

			// Render content
			payload, err := engine.RenderContextWithData(templateContext, content, data)
			if err != nil {
				return nil, fmt.Errorf("unable to render file content template: %w", err)
			}

			// Assign result
			kv[renderedFilename] = payload
		}
	}

	// No error
	return kv, nil
}