func Interpret()

in pkg/cso/v1/interpreter.go [41:86]


func Interpret(secret *csov1.Secret, templates map[csov1.RingLevel]string, w io.Writer) error {
	// Check arguments
	if secret == nil {
		return fmt.Errorf("unable to interpret nil secret")
	}

	// Retrieve template according to ring level
	tBody, ok := templates[secret.RingLevel]
	if !ok {
		return fmt.Errorf("unable to retrieve temlate")
	}

	// Compile template
	t, err := template.New("interpret").Parse(tBody)
	if err != nil {
		return fmt.Errorf("unable to compile template: %w", err)
	}

	// Merge data
	switch secret.RingLevel {
	case csov1.RingLevel_RING_LEVEL_META:
		err = t.Execute(w, secret.GetMeta())
	case csov1.RingLevel_RING_LEVEL_INFRASTRUCTURE:
		err = t.Execute(w, secret.GetInfrastructure())
	case csov1.RingLevel_RING_LEVEL_PLATFORM:
		err = t.Execute(w, secret.GetPlatform())
	case csov1.RingLevel_RING_LEVEL_PRODUCT:
		err = t.Execute(w, secret.GetProduct())
	case csov1.RingLevel_RING_LEVEL_APPLICATION:
		err = t.Execute(w, secret.GetApplication())
	case csov1.RingLevel_RING_LEVEL_ARTIFACT:
		err = t.Execute(w, secret.GetArtifact())
	case csov1.RingLevel_RING_LEVEL_INVALID, csov1.RingLevel_RING_LEVEL_UNKNOWN:
		err = fmt.Errorf("invalid secret ring %v", secret.RingLevel)
	default:
		err = fmt.Errorf("invalid secret ring %v", secret.RingLevel)
	}

	// Return error
	if err != nil {
		return fmt.Errorf("unable to interpret CSO path: %w", err)
	}

	// No error
	return nil
}