38 lines
1.0 KiB
Go
38 lines
1.0 KiB
Go
package secrets
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
type AssignmentSecretMergeResult struct {
|
|
Metadata map[string]any
|
|
Keys []string
|
|
}
|
|
|
|
func MergeResourceSecretIntoAssignmentMetadata(metadata map[string]any, payload json.RawMessage) (AssignmentSecretMergeResult, error) {
|
|
if metadata == nil {
|
|
metadata = map[string]any{}
|
|
}
|
|
var secretPayload map[string]any
|
|
if err := json.Unmarshal(payload, &secretPayload); err != nil {
|
|
return AssignmentSecretMergeResult{}, fmt.Errorf("decode resolved resource secret: %w", err)
|
|
}
|
|
resource, _ := metadata["resource"].(map[string]any)
|
|
if resource == nil {
|
|
resource = map[string]any{}
|
|
metadata["resource"] = resource
|
|
}
|
|
resourceMetadata, _ := resource["metadata"].(map[string]any)
|
|
if resourceMetadata == nil {
|
|
resourceMetadata = map[string]any{}
|
|
resource["metadata"] = resourceMetadata
|
|
}
|
|
keys := make([]string, 0, len(secretPayload))
|
|
for key, value := range secretPayload {
|
|
resourceMetadata[key] = value
|
|
keys = append(keys, key)
|
|
}
|
|
return AssignmentSecretMergeResult{Metadata: metadata, Keys: keys}, nil
|
|
}
|