From 87381f346b4d27abcbbf2f45339db40c28772d4c Mon Sep 17 00:00:00 2001
From: Pierre JACQUOT <pierre.jacquot@inria.fr>
Date: Thu, 13 Jul 2023 15:59:59 +0200
Subject: [PATCH] Don't crash when kadeploy data is missing for clusters not in
 default or production queues.

---
 lib/refrepo/gen/puppet/kadeployg5k.rb | 80 +++++++++++++++------------
 1 file changed, 44 insertions(+), 36 deletions(-)

diff --git a/lib/refrepo/gen/puppet/kadeployg5k.rb b/lib/refrepo/gen/puppet/kadeployg5k.rb
index 30902b409af..254f49b9afe 100644
--- a/lib/refrepo/gen/puppet/kadeployg5k.rb
+++ b/lib/refrepo/gen/puppet/kadeployg5k.rb
@@ -53,6 +53,47 @@ def generate_puppet_kadeployg5k(options)
 
       next unless options[:sites].include?(site_uid)
 
+      #
+      # Generate <cluster_uid>-cluster.conf files
+      #
+
+      # Load 'conf/kadeployg5k.yaml' data and fill up the kadeployg5k.conf.erb template for each cluster
+
+      conf = YAML::load(ERB.new(File.read("#{options[:conf_dir]}/kadeployg5k#{suffix}.yaml")).result(binding))
+      no_config_clusters_uid = []
+
+      site['clusters'].each { |cluster_uid, cluster|
+        defaults = conf['defaults']
+        overrides = conf[site_uid][cluster_uid]
+        if overrides.nil? and ! (cluster['queues'].include?('default') or cluster['queues'].include?('production'))
+            puts "Warning: #{cluster_uid} has no kadeployg5k#{suffix} config, and isn't in default or production queue."
+            puts "Warning: Skipping #{cluster_uid} configuration."
+            no_config_clusters_uid << cluster_uid
+            next
+        end
+        dupes = (defaults.to_a & overrides.to_a)
+        key_dupes = (defaults.to_a.map(&:first) & overrides.to_a.map(&:first))
+        if not dupes.empty?
+          puts "Warning: Overriding default values #{dupes} by the same value for #{cluster_uid}"
+        end
+        if not key_dupes.empty?
+          puts "Info: cluster-specific configuration for #{cluster_uid} overrides default values: #{key_dupes}"
+        end
+        data = defaults.merge(overrides)
+        if data.nil?
+          puts "Warning: configuration not found in #{options[:conf_dir]}/kadeployg5k#{suffix}.yaml for #{cluster_uid}. Skipped"
+          next
+        end
+
+        output = ERB.new(File.read(File.expand_path('templates/kadeployg5k.conf.erb', File.dirname(__FILE__))), trim_mode: '-').result(binding)
+
+        output_file = Pathname("#{options[:output_dir]}//platforms/production/modules/generated/files/grid5000/kadeploy/server#{suffix.tr('-', '_')}/#{site_uid}/#{cluster_uid}-cluster.conf")
+
+        output_file.dirname.mkpath()
+        File.write(output_file, output)
+
+      }
+
       #
       # Generate site/<site_uid>/servers_conf[_dev]/clusters.conf
       #
@@ -61,8 +102,9 @@ def generate_puppet_kadeployg5k(options)
       prefix = cluster_prefix(site['clusters'].keys)
 
       site['clusters'].sort.each { |cluster_uid, cluster|
-
-        # clusters:
+        next if no_config_clusters_uid.include?(cluster_uid)
+ 
+        #  clusters:
         # - name: griffon
         #   prefix: gri
         #   conf_file: /etc/kadeploy3/griffon-cluster.conf
@@ -126,40 +168,6 @@ def generate_puppet_kadeployg5k(options)
       write_yaml(output_file, clusters_conf)
       add_header(output_file)
 
-      #
-      # Generate <cluster_uid>-cluster.conf files
-      #
-
-      # Load 'conf/kadeployg5k.yaml' data and fill up the kadeployg5k.conf.erb template for each cluster
-
-      conf = YAML::load(ERB.new(File.read("#{options[:conf_dir]}/kadeployg5k#{suffix}.yaml")).result(binding))
-
-      site['clusters'].each { |cluster_uid, cluster|
-        defaults = conf['defaults']
-        overrides = conf[site_uid][cluster_uid]
-        dupes = (defaults.to_a & overrides.to_a)
-        key_dupes = (defaults.to_a.map(&:first) & overrides.to_a.map(&:first))
-        if not dupes.empty?
-          puts "Warning: Overriding default values #{dupes} by the same value for #{cluster_uid}"
-        end
-        if not key_dupes.empty?
-          puts "Info: cluster-specific configuration for #{cluster_uid} overrides default values: #{key_dupes}"
-        end
-        data = defaults.merge(overrides)
-        if data.nil?
-          puts "Warning: configuration not found in #{options[:conf_dir]}/kadeployg5k#{suffix}.yaml for #{cluster_uid}. Skipped"
-          next
-        end
-
-        output = ERB.new(File.read(File.expand_path('templates/kadeployg5k.conf.erb', File.dirname(__FILE__))), trim_mode: '-').result(binding)
-
-        output_file = Pathname("#{options[:output_dir]}//platforms/production/modules/generated/files/grid5000/kadeploy/server#{suffix.tr('-', '_')}/#{site_uid}/#{cluster_uid}-cluster.conf")
-
-        output_file.dirname.mkpath()
-        File.write(output_file, output)
-
-      }
-
     }
   }
 end
-- 
GitLab