@@ -278,8 +278,40 @@ func (r *KCLRunReconciler) Reconcile(ctx context.Context, req ctrl.Request) (res
278278 conditions .MarkFalse (& obj , meta .ReadyCondition , meta .ArtifactFailedReason , "%s" , err )
279279 return ctrl.Result {}, err
280280 }
281+ vars := make (map [string ]string )
282+ for _ , reference := range obj .Spec .ArgumentsReferences {
283+ namespacedName := types.NamespacedName {Namespace : obj .GetNamespace (), Name : reference .Name }
284+ switch reference .Kind {
285+ case "ConfigMap" :
286+ cm := & corev1.ConfigMap {}
287+ if err := r .Client .Get (ctx , namespacedName , cm ); err != nil {
288+ if reference .Optional && apierrors .IsNotFound (err ) {
289+ // If optional, skip the not found error.
290+ continue
291+ } else {
292+ return ctrl.Result {}, fmt .Errorf ("config reference from 'ConfigMap/%s' error: %w" , reference .Name , err )
293+ }
294+ }
295+ for k , v := range cm .Data {
296+ vars [k ] = strings .ReplaceAll (v , "\n " , "" )
297+ }
298+ case "Secret" :
299+ secret := & corev1.Secret {}
300+ if err := r .Client .Get (ctx , namespacedName , secret ); err != nil {
301+ if reference .Optional && apierrors .IsNotFound (err ) {
302+ // If optional, skip the not found error.
303+ continue
304+ } else {
305+ return ctrl.Result {}, fmt .Errorf ("config reference from 'Secret/%s' error: %w" , reference .Name , err )
306+ }
307+ }
308+ for k , v := range secret .Data {
309+ vars [k ] = strings .ReplaceAll (string (v ), "\n " , "" )
310+ }
311+ }
312+ }
281313 // Compile the KCL source code into the Kubernetes manifests
282- res , err := kcl .CompileKclPackage (& obj , dirPath )
314+ res , err := kcl .CompileKclPackage (& obj , dirPath , vars )
283315 if err != nil {
284316 conditions .MarkFalse (& obj , meta .ReadyCondition , "FetchFailed" , err .Error ())
285317 log .Error (err , "failed to compile the KCL source code" )
0 commit comments