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
}