From 2310fb2cf6b086df49dd85903ec51ca1d10dc549 Mon Sep 17 00:00:00 2001
From: Lucas Nussbaum <lucas.nussbaum@loria.fr>
Date: Wed, 21 Nov 2018 00:15:13 +0100
Subject: [PATCH] [dev] Add rake task for importing g5k-checks files

---
 Rakefile                          |  12 +++
 lib/refrepo/g5kchecks_importer.rb | 127 +++++++++++++-----------------
 2 files changed, 68 insertions(+), 71 deletions(-)

diff --git a/Rakefile b/Rakefile
index 7567cf4286..a1f583cf01 100644
--- a/Rakefile
+++ b/Rakefile
@@ -19,6 +19,18 @@ end
 
 G5K_SITES = RefRepo::Utils::get_sites
 
+desc "Import YAML files generated by g5k-checks to input/ dir -- parameters: SOURCEDIR=directory"
+task "g5k-checks-import" do
+  require 'refrepo/g5kchecks_importer'
+  sourcedir = ENV['SOURCEDIR']
+  if sourcedir.nil?
+    puts "SOURCEDIR= needed. Exiting."
+    exit(1)
+  end
+  g5kchecks_importer(sourcedir)
+end
+
+
 namespace :valid do
 
   desc "Check homogeneity of clusters -- parameters: [SITE={grenoble,..}] [CLUSTER={yeti,..}] [VERBOSE=1]"
diff --git a/lib/refrepo/g5kchecks_importer.rb b/lib/refrepo/g5kchecks_importer.rb
index fef3557a6b..62e0d369a7 100644
--- a/lib/refrepo/g5kchecks_importer.rb
+++ b/lib/refrepo/g5kchecks_importer.rb
@@ -1,87 +1,72 @@
-#!/usr/bin/ruby
-
-# This script does minor edits on the ouput of g5k-checks YAML files and moves the files to the right place in the input/ directory
-#
-# Usage: cd run-g5kcheck; ruby run-g5kchecks.rb; ruby postprocessing.rb
-
-require 'pp'
-require 'erb'
-require 'fileutils'
-require 'pathname'
-require 'yaml'
-require '../lib/hash/hash'
-
-if RUBY_VERSION < "2.1"
-  puts "This script requires ruby >= 2.1"
-  exit
-end
-
-puts 'Postprocessing of output/. Copying files into ../../input/'
+require 'refrepo/hash/hash'
 
-net_adapter_names_mapping = YAML::load_file("net_names_mapping.yaml")
+def g5kchecks_importer(sourcedir)
+  puts "Importing source files from #{sourcedir} into input directory..."
+  net_adapter_names_mapping = YAML::load_file(File.dirname(__FILE__) + "/net_names_mapping.yaml")
 
-if (net_adapter_names_mapping == false)
-  puts "failed to load net adapters mappings 'net_names_mapping.yaml'"
-  exit 1
-end
+  if (net_adapter_names_mapping == false)
+    puts "failed to load net adapters mappings 'net_names_mapping.yaml'"
+    exit 1
+  end
 
-list_of_yaml_files = Dir['output/*.y*ml'].sort_by { |x| -x.count('/') }
-list_of_yaml_files.each { |filename|
-  begin
-    file     = filename.split("/")[1]
-    node_uid = file.split(".")[0]
-    site_uid = file.split(".")[1]
-    cluster_uid = node_uid.split("-")[0]
-
-    hash = YAML::load_file(filename)
-    if hash == false
-      puts "Unable to load YAML file #{filename}"
-      next
-    end
+  list_of_yaml_files = Dir["#{sourcedir}/*.y*ml"].sort_by { |x| -x.count('/') }
+  list_of_yaml_files.each do |filename|
+    begin
+      file     = File::basename(filename)
+      node_uid = file.split(".")[0]
+      site_uid = file.split(".")[1]
+      cluster_uid = node_uid.split("-")[0]
+
+      hash = YAML::load_file(filename)
+      if hash == false
+        puts "Unable to load YAML file #{filename}"
+        next
+      end
 
-    puts "Post-processing node uid = #{node_uid}"
+      puts "Post-processing node uid = #{node_uid}"
 
-    hash["storage_devices"]  = hash["storage_devices"].sort_by_array(["sda", "sdb", "sdc", "sdd", "sde"])
-    hash["storage_devices"].each {|k, v| v.delete("device") }
+      hash["storage_devices"]  = hash["storage_devices"].sort_by_array(["sda", "sdb", "sdc", "sdd", "sde"])
+      hash["storage_devices"].each {|k, v| v.delete("device") }
 
-    remaped_net_names = []
-    hash['network_adapters'].each { |net_name, net_adapter|
-      net_adapter.delete("enabled")
-      net_adapter.delete("mounted")
-      net_adapter.delete("mountable")
-      net_adapter.delete("rate") if net_adapter["rate"] == 0
+      remaped_net_names = []
+      hash['network_adapters'].each { |net_name, net_adapter|
+        net_adapter.delete("enabled")
+        net_adapter.delete("mounted")
+        net_adapter.delete("mountable")
+        net_adapter.delete("rate") if net_adapter["rate"] == 0
 
-      if (net_adapter_names_mapping[node_uid] && net_adapter_names_mapping[node_uid][net_name])
-        #Priority of node-specific mapping instead of default cluster mapping
-        remaped_net_names << [net_name, net_adapter_names_mapping[node_uid][net_name]]
-      elsif (net_adapter_names_mapping[cluster_uid] && net_adapter_names_mapping[cluster_uid][net_name])
-        remaped_net_names << [net_name, net_adapter_names_mapping[cluster_uid][net_name]]
-      end
-    }
+        if (net_adapter_names_mapping[node_uid] && net_adapter_names_mapping[node_uid][net_name])
+          #Priority of node-specific mapping instead of default cluster mapping
+          remaped_net_names << [net_name, net_adapter_names_mapping[node_uid][net_name]]
+        elsif (net_adapter_names_mapping[cluster_uid] && net_adapter_names_mapping[cluster_uid][net_name])
+          remaped_net_names << [net_name, net_adapter_names_mapping[cluster_uid][net_name]]
+        end
+      }
 
-    # Changing net_adapter key from predictable name to legacy name
-    remaped_net_names.each { |arr|
-      hash['network_adapters'][arr[1]] = hash['network_adapters'][arr[0]]
-      hash['network_adapters'].delete(arr[0])
-    }
+      # Changing net_adapter key from predictable name to legacy name
+      remaped_net_names.each { |arr|
+        hash['network_adapters'][arr[1]] = hash['network_adapters'][arr[0]]
+        hash['network_adapters'].delete(arr[0])
+      }
 
-    hash["network_adapters"] = hash["network_adapters"].sort_by_array(["eth0", "eth1", "eth2", "eth3", "eth4", "eth5", "eth6", "ib0", "ib1", "ib2", "ib3", "bmc"])
+      hash["network_adapters"] = hash["network_adapters"].sort_by_array(["eth0", "eth1", "eth2", "eth3", "eth4", "eth5", "eth6", "ib0", "ib1", "ib2", "ib3", "bmc"])
 
-    hash = {node_uid => hash}
+      hash = {node_uid => hash}
 
-    new_filename = Pathname("../../input/grid5000/sites/#{site_uid}/clusters/#{cluster_uid}/nodes/" + node_uid + ".yaml")
+      new_filename = Pathname("input/grid5000/sites/#{site_uid}/clusters/#{cluster_uid}/nodes/" + node_uid + ".yaml")
 
-    new_filename.dirname.mkpath()
+      new_filename.dirname.mkpath()
 
-    write_yaml(new_filename, hash)
+      write_yaml(new_filename, hash)
 
-    contents = File.read(new_filename)
-    File.open(new_filename, 'w') { |file|
-      file.write("# Generated by g5k-checks (g5k-checks -m api)\n")
-      file.write(contents) 
-    }
+      contents = File.read(new_filename)
+      File.open(new_filename, 'w') { |file|
+        file.write("# Generated by g5k-checks (g5k-checks -m api)\n")
+        file.write(contents) 
+      }
 
-  rescue Exception => e
-    puts "#{node_uid} - #{e.class}: #{e.message}\nError: #{e.backtrace}"
+    rescue Exception => e
+      puts "#{node_uid} - #{e.class}: #{e.message}\nError: #{e.backtrace}"
+    end
   end
-}
+end
-- 
GitLab