@@ -1174,6 +1174,9 @@ func collectReferencedObjects(ctx context.Context, controlClusterClient client.C
11741174 msg := fmt .Sprintf ("Referenced resource: %s %s/%s does not exist" ,
11751175 reference .Kind , reference .Namespace , name )
11761176 logger .V (logs .LogInfo ).Info (msg )
1177+ if reference .Optional {
1178+ continue
1179+ }
11771180 return nil , nil , & NonRetriableError {Message : msg }
11781181 }
11791182 return nil , nil , err
@@ -1917,15 +1920,11 @@ func getValuesFrom(ctx context.Context, c client.Client, clusterSummary *configv
19171920 if valuesFrom [i ].Kind == string (libsveltosv1beta1 .ConfigMapReferencedResourceKind ) {
19181921 configMap , err := getConfigMap (ctx , c , types.NamespacedName {Namespace : namespace , Name : name })
19191922 if err != nil {
1920- msg := fmt .Sprintf ("failed to get ConfigMap %s/%s" , namespace , name )
1921- logger .V (logs .LogInfo ).Info (fmt .Sprintf ("%s: %v" , msg , err ))
1922- if apierrors .IsNotFound (err ) {
1923- msg := fmt .Sprintf ("Referenced resource: %s %s/%s does not exist" ,
1924- libsveltosv1beta1 .ConfigMapReferencedResourceKind , namespace , name )
1925- logger .V (logs .LogInfo ).Info (msg )
1926- return nil , nil , & NonRetriableError {Message : msg }
1923+ err = handleReferenceError (err , valuesFrom [i ].Kind , namespace , name , valuesFrom [i ].Optional , logger )
1924+ if err == nil {
1925+ continue
19271926 }
1928- return nil , nil , fmt . Errorf ( "%s: %w" , msg , err )
1927+ return nil , nil , err
19291928 }
19301929
19311930 if instantiateTemplate (configMap , logger ) {
@@ -1948,15 +1947,11 @@ func getValuesFrom(ctx context.Context, c client.Client, clusterSummary *configv
19481947 } else if valuesFrom [i ].Kind == string (libsveltosv1beta1 .SecretReferencedResourceKind ) {
19491948 secret , err := getSecret (ctx , c , types.NamespacedName {Namespace : namespace , Name : name })
19501949 if err != nil {
1951- msg := fmt .Sprintf ("failed to get Secret %s/%s" , namespace , name )
1952- logger .V (logs .LogInfo ).Info (fmt .Sprintf ("%s: %v" , msg , err ))
1953- if apierrors .IsNotFound (err ) {
1954- msg := fmt .Sprintf ("Referenced resource: %s %s/%s does not exist" ,
1955- libsveltosv1beta1 .SecretReferencedResourceKind , namespace , name )
1956- logger .V (logs .LogInfo ).Info (msg )
1957- return nil , nil , & NonRetriableError {Message : msg }
1950+ err = handleReferenceError (err , valuesFrom [i ].Kind , namespace , name , valuesFrom [i ].Optional , logger )
1951+ if err == nil {
1952+ continue
19581953 }
1959- return nil , nil , fmt . Errorf ( "%s: %w" , msg , err )
1954+ return nil , nil , err
19601955 }
19611956 if instantiateTemplate (secret , logger ) {
19621957 for key , value := range secret .Data {
@@ -1981,6 +1976,24 @@ func getValuesFrom(ctx context.Context, c client.Client, clusterSummary *configv
19811976 return template , nonTemplate , nil
19821977}
19831978
1979+ func handleReferenceError (err error , kind , namespace , name string , optional bool ,
1980+ logger logr.Logger ) error {
1981+
1982+ msg := fmt .Sprintf ("Referenced resource: %s %s/%s" , kind , namespace , name )
1983+
1984+ if apierrors .IsNotFound (err ) {
1985+ msg += " does not exist"
1986+ logger .V (logs .LogInfo ).Info (msg )
1987+ if optional {
1988+ return nil
1989+ }
1990+ return & NonRetriableError {Message : msg }
1991+ }
1992+
1993+ logger .V (logs .LogInfo ).Info (fmt .Sprintf ("%s: %v" , msg , err ))
1994+ return fmt .Errorf ("%s: %w" , msg , err )
1995+ }
1996+
19841997func addToMap (m map [string ]string , key , value string ) {
19851998 // Check if the key exists in the map
19861999 if existingValue , ok := m [key ]; ok {
0 commit comments