@@ -72,23 +72,28 @@ func (s *ResourceSyncer) processRelatedResource(log *zap.SugaredLogger, stateSto
7272 dest = local
7373 }
7474
75+ // to find the source related object, we first need to determine its name/namespace
7576 sourceKey , err := resolveResourceReference (source .object , relRes .Reference )
7677 if err != nil {
7778 return false , fmt .Errorf ("failed to determine related object's source key: %w" , err )
7879 }
7980
81+ // find the source related object
8082 sourceObj := & unstructured.Unstructured {}
81- sourceObj .SetAPIVersion ("v1" )
83+ sourceObj .SetAPIVersion ("v1" ) // we only support ConfigMaps and Secrets, both are in core/v1
8284 sourceObj .SetKind (relRes .Kind )
8385
8486 err = source .client .Get (source .ctx , * sourceKey , sourceObj )
8587 if err != nil {
8688 if apierrors .IsNotFound (err ) {
89+ // the source object doesn't exist yet, so we can just stop
8790 return false , nil
8891 }
92+
8993 return false , fmt .Errorf ("failed to get source object: %w" , err )
9094 }
9195
96+ // do the same to find the destination object
9297 destKey , err := resolveResourceReference (dest .object , relRes .Reference )
9398 if err != nil {
9499 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
237242 if err != nil {
238243 return "" , fmt .Errorf ("invalid pattern %q: %w" , re .Pattern , err )
239244 }
245+ // this does apply some coalescing, like turning numbers into strings
246+ strVal := gval .String ()
240247
241- return expr .ReplaceAllString (gval . String () , re .Replacement ), nil
248+ return expr .ReplaceAllString (strVal , re .Replacement ), nil
242249 }
243250
244251 return gval .String (), nil
0 commit comments