From c26fcaa6f3db0d901946f4f7b6f22fde3255d0bb Mon Sep 17 00:00:00 2001
From: Laurent Pouilloux <laurent.pouilloux@inria.fr>
Date: Thu, 23 May 2024 14:08:59 +0200
Subject: [PATCH] [puppet:webfish] sort nodes

---
 lib/refrepo/gen/puppet/webfish.rb | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/lib/refrepo/gen/puppet/webfish.rb b/lib/refrepo/gen/puppet/webfish.rb
index fc57fa7d33f..af5612251bb 100644
--- a/lib/refrepo/gen/puppet/webfish.rb
+++ b/lib/refrepo/gen/puppet/webfish.rb
@@ -96,13 +96,14 @@ def add_credentials(credentials, allBmc)
                 next
             end 
             # bmc password is global for cluster nodes
-            nodeName = uid ? uid.slice(/\w*/) : uid
+            nodeName = n['node'] ? uid.slice(/\w*/) : uid
             begin
                 n['login'], n['password'] = credentials[s_site][nodeName].split() 
             rescue NoMethodError
+                p(uid + " has no password in list " + s_site)
                 n['error'] = "no password defined in console-password.yaml"
             rescue => error
-                p "infra :uid #{uid}, url #{n['url']} mon potentiel password : #{credentials[s_site][uid]}, site #{s_site}, error : #{error.class} error  message: #{error}, nodeName : #{nodeName}"
+                #p "infra :uid #{uid}, url #{n['url']} mon potentiel password : #{credentials[s_site][uid]}, site #{s_site}, error : #{error.class} error  message: #{error}, nodeName : #{nodeName}"
                 n['error'] = error.class
             end
         end
@@ -112,17 +113,21 @@ end
 
 def gen_json_files(allBmc, options)
 
-    allBmc.each do |s_site, _d_array|
-        dir = "#{options[:output_dir]}/platforms/production/modules/generated/files/grid5000/webfish/" + s_site
+    pretty_dict = {}
 
-        if !Dir.exist?(dir)
-            Dir.mkdir(dir)
-        end
-        actualFile = dir+"/webfish.json"
+    dir = "#{options[:output_dir]}/platforms/production/modules/generated/files/grid5000/webfish" 
 
-        File.open(actualFile, "w") do |f|  
-            f.write(JSON.pretty_generate(allBmc[s_site]))   
-        end
+    if !Dir.exist?(dir)
+        Dir.mkdir(dir)
+    end
+    actualFile = dir + "/webfish.json"
+
+    allBmc.each do |s_site, _d_array|
+        pretty_dict[s_site] = allBmc[s_site].sort_by{|k, _| [k[/(\D+)/, 1], k[/(\d+)/, 1].to_i, k[/-(\d+)/, 1].to_i]}.to_h
+    end
+
+    File.open(actualFile, "w") do |f|  
+        f.write(JSON.pretty_generate(pretty_dict))
     end
     
 end
-- 
GitLab