@@ -72,23 +72,28 @@ func (s *ResourceSyncer) processRelatedResource(log *zap.SugaredLogger, stateSto
72
72
dest = local
73
73
}
74
74
75
+ // to find the source related object, we first need to determine its name/namespace
75
76
sourceKey , err := resolveResourceReference (source .object , relRes .Reference )
76
77
if err != nil {
77
78
return false , fmt .Errorf ("failed to determine related object's source key: %w" , err )
78
79
}
79
80
81
+ // find the source related object
80
82
sourceObj := & unstructured.Unstructured {}
81
- sourceObj .SetAPIVersion ("v1" )
83
+ sourceObj .SetAPIVersion ("v1" ) // we only support ConfigMaps and Secrets, both are in core/v1
82
84
sourceObj .SetKind (relRes .Kind )
83
85
84
86
err = source .client .Get (source .ctx , * sourceKey , sourceObj )
85
87
if err != nil {
86
88
if apierrors .IsNotFound (err ) {
89
+ // the source object doesn't exist yet, so we can just stop
87
90
return false , nil
88
91
}
92
+
89
93
return false , fmt .Errorf ("failed to get source object: %w" , err )
90
94
}
91
95
96
+ // do the same to find the destination object
92
97
destKey , err := resolveResourceReference (dest .object , relRes .Reference )
93
98
if err != nil {
94
99
return false , fmt .Errorf ("failed to determine related object's destination key: %w" , err )
@@ -237,8 +242,10 @@ func resolveResourceLocator(jsonData string, loc syncagentv1alpha1.ResourceLocat
237
242
if err != nil {
238
243
return "" , fmt .Errorf ("invalid pattern %q: %w" , re .Pattern , err )
239
244
}
245
+ // this does apply some coalescing, like turning numbers into strings
246
+ strVal := gval .String ()
240
247
241
- return expr .ReplaceAllString (gval . String () , re .Replacement ), nil
248
+ return expr .ReplaceAllString (strVal , re .Replacement ), nil
242
249
}
243
250
244
251
return gval .String (), nil
0 commit comments