@@ -41,19 +41,25 @@ type PodCounts struct {
4141 Succeeded int
4242}
4343
44- const appWrapperNamespacePlaceholder = "<APPWRAPPER_NAMESPACE>"
45- const appWrapperNamePlaceholder = "<APPWRAPPER_NAME>"
46-
47- // Replace placeholders in map with AppWrapper metadata
44+ // Add labels to metadata for subresources
4845func fixMap (appWrapper * mcadv1beta1.AppWrapper , m map [string ]interface {}) {
49- for k , v := range m {
46+ // assume an object with fields apiVersion, kind, and metadata is a subresource
47+ _ , hasApiVersion := m ["apiVersion" ]
48+ _ , hasKind := m ["kind" ]
49+ metadata , hasMetadata := m ["metadata" ].(map [string ]interface {})
50+ if hasApiVersion && hasKind && hasMetadata {
51+ // inject labels in metadata
52+ labels , hasLabels := metadata ["labels" ].(map [string ]interface {})
53+ if ! hasLabels {
54+ labels = map [string ]interface {}{}
55+ metadata ["labels" ] = labels
56+ }
57+ labels [namespaceLabel ] = appWrapper .Namespace
58+ labels [nameLabel ] = appWrapper .Name
59+ }
60+ // visit submaps and arrays
61+ for _ , v := range m {
5062 switch v := v .(type ) {
51- case string :
52- if strings .HasPrefix (v , appWrapperNamespacePlaceholder ) {
53- m [k ] = strings .Replace (v , appWrapperNamespacePlaceholder , appWrapper .Namespace , 1 )
54- } else if strings .HasPrefix (v , appWrapperNamePlaceholder ) {
55- m [k ] = strings .Replace (v , appWrapperNamePlaceholder , appWrapper .Name , 1 )
56- }
5763 case map [string ]interface {}:
5864 fixMap (appWrapper , v )
5965 case []interface {}:
@@ -62,16 +68,11 @@ func fixMap(appWrapper *mcadv1beta1.AppWrapper, m map[string]interface{}) {
6268 }
6369}
6470
65- // Replace placeholders in array with AppWrapper metadata
71+ // Add labels to metadata for subresources
6672func fixArray (appWrapper * mcadv1beta1.AppWrapper , a []interface {}) {
67- for k , v := range a {
73+ // visit submaps and arrays
74+ for _ , v := range a {
6875 switch v := v .(type ) {
69- case string :
70- if strings .HasPrefix (v , appWrapperNamespacePlaceholder ) {
71- a [k ] = strings .Replace (v , appWrapperNamespacePlaceholder , appWrapper .Namespace , 1 )
72- } else if strings .HasPrefix (v , appWrapperNamePlaceholder ) {
73- a [k ] = strings .Replace (v , appWrapperNamePlaceholder , appWrapper .Name , 1 )
74- }
7576 case map [string ]interface {}:
7677 fixMap (appWrapper , v )
7778 case []interface {}:
0 commit comments