From b0ef560af6e2bf86c3b7ee97243eaaf688527597 Mon Sep 17 00:00:00 2001
From: Samir Noir <samir.noir@inria.fr>
Date: Fri, 7 Jan 2022 10:23:04 +0100
Subject: [PATCH] [gen/puppet] add new generator for Oar::Sub::Simplifier
 aliases

---
 Rakefile                                      |  2 +-
 .../gen/puppet/oarsub-simplifier-aliases.rb   | 47 +++++++++++++++++++
 lib/refrepo/gpu_ref.rb                        | 23 +++++++++
 3 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 lib/refrepo/gen/puppet/oarsub-simplifier-aliases.rb

diff --git a/Rakefile b/Rakefile
index e3a35379879..6b5d609f568 100644
--- a/Rakefile
+++ b/Rakefile
@@ -201,7 +201,7 @@ namespace :gen do
 
   namespace :puppet do
 
-    all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k, :kwollectg5k, :network_monitoring, :'refapi-subset', :'oxidizedg5k']
+    all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k, :kwollectg5k, :network_monitoring, :'refapi-subset', :oxidizedg5k, :'sub-simplifier-aliases']
 
     all_puppet_tasks.each { |t|
       generated_desc = (t == :'refapi-subset') ? 'description' : 'configuration'
diff --git a/lib/refrepo/gen/puppet/oarsub-simplifier-aliases.rb b/lib/refrepo/gen/puppet/oarsub-simplifier-aliases.rb
new file mode 100644
index 00000000000..54759e7f2cd
--- /dev/null
+++ b/lib/refrepo/gen/puppet/oarsub-simplifier-aliases.rb
@@ -0,0 +1,47 @@
+# coding: utf-8
+
+require 'refrepo/data_loader'
+require 'refrepo/gpu_ref'
+
+def get_sub_simplifier_default_aliases(options)
+  if not options[:conf_dir]
+    options[:conf_dir] = "#{options[:output_dir]}/platforms/production/generators/sub-simplifier"
+  end
+
+  raise("Error: file #{options[:conf_dir]}/aliases.yaml does not exist. The given configuration path is incorrect") unless Pathname("#{options[:conf_dir]}/aliases.yaml").exist?
+
+  default_aliases = YAML.load(File.read("#{options[:conf_dir]}/aliases.yaml"))
+  default_aliases.merge!(GPURef.get_all_aliases.transform_values { |value| "gpu_model='#{value}'" })
+  mem_multipliers = [24, 32]
+  mem_multipliers.each do |i|
+    while i <= 1024 do
+      default_aliases["#{i}GB"] = "memnode>=#{i*1024}"
+      i *= 2
+    end
+  end
+
+  default_aliases
+end
+
+def generate_puppet_oarsub_simplifier_aliases(options)
+  default_aliases = get_sub_simplifier_default_aliases(options)
+
+  options[:sites].each do |site|
+    output_file = "#{options[:output_dir]}/platforms/production/modules/generated/files/grid5000/oar-sub-simplifier/#{site}-aliases.yaml"
+    gen_aliases_yaml(site, output_file, default_aliases)
+  end
+end
+
+def gen_aliases_yaml(site, output_path, default_aliases)
+  aliases = {}
+  aliases.merge!(default_aliases)
+
+  site_data_hierarchy = load_data_hierarchy
+  site_data_hierarchy['sites'][site]['clusters'].each_key do |cluster|
+    aliases[cluster] = "cluster='#{cluster}'"
+    aliases["#{cluster}-%d"] = "host='#{cluster}-%d.#{site}.grid5000.fr'"
+  end
+
+  output_file = File.new(output_path, 'w')
+  output_file.write(YAML.dump(aliases))
+end
diff --git a/lib/refrepo/gpu_ref.rb b/lib/refrepo/gpu_ref.rb
index 46a24e45512..ec15d8bca16 100644
--- a/lib/refrepo/gpu_ref.rb
+++ b/lib/refrepo/gpu_ref.rb
@@ -6,70 +6,84 @@ class GPURef
       'cores'              => 4352,
       'compute_capability' => '7.5',
       'short_name'         => 'RTX 2080 Ti',
+      'alias'              => 'rtx2080ti',
     },
     'GeForce GTX 1080 Ti' => {
       'cores'              => 3584,
       'compute_capability' => '6.1',
       'short_name'         => 'GTX 1080 Ti',
+      'alias'              => 'gtx1080ti',
     },
     'Tesla P100-PCIE-16GB' => {
       'cores'              => 3584,
       'compute_capability' => '6.0',
       'short_name'         => 'Tesla P100',
+      'alias'              => 'p100-pcie-16',
     },
     'Tesla P100-SXM2-16GB' => {
       'cores'              => 3584,
       'compute_capability' => '6.0',
       'short_name'         => 'Tesla P100',
+      'alias'              => 'p100-sxm2-16',
     },
     'Tesla V100-PCIE-32GB' => {
       'cores'              => 5120,
       'compute_capability' => '7.0',
       'short_name'         => 'Tesla V100',
+      'alias'              => 'v100-pcie-32',
     },
     'Tesla V100-SXM2-32GB' => {
       'cores'              => 5120,
       'compute_capability' => '7.0',
       'short_name'         => 'Tesla V100',
+      'alias'              => 'v100-sxm2-32',
     },
     'Tesla M2075' => {
       'cores'              => 448,
       'compute_capability' => '2.0',
       'short_name'         => 'Tesla M2075',
+      'alias'              => 'm2075',
     },
     'GeForce GTX 980' => {
       'cores'              => 2048,
       'compute_capability' => '5.2',
       'short_name'         => 'GTX 980',
+      'alias'              => 'gtx980',
     },
     'Tesla K40m' => {
       'cores'              => 2880,
       'compute_capability' => '3.5',
       'short_name'         => 'Tesla K40M',
+      'alias'              => 'k40m',
     },
     'Tesla T4' => {
       'cores'              => 2560,
       'compute_capability' => '7.5',
       'short_name'         => 'Tesla T4',
+      'alias'              => 't4',
     },
     'A100-PCIE-40GB' => {
       'cores'              => 6912,
       'compute_capability' => '8.0',
       'short_name'         => 'A100',
+      'alias'              => 'a100-pcie-40',
     },
     'A40' => {
       'cores'              => 10752,
       'compute_capability' => '8.6',
       'short_name'         => 'A40',
+      'alias'              => 'a40',
     },
     'Quadro RTX 6000' => {
       'cores'              => 4608,
       'compute_capability' => '7.5',
       'short_name'         => 'Quadro RTX 6000',
+      'alias'              => 'rtx6000',
     },
     'Radeon Instinct MI50 32GB' => {
       'cores'              => 5120,
       'short_name'         => 'MI50',
+      'alias'              => 'mi50-32',
     },
   }
 
@@ -97,4 +111,13 @@ class GPURef
     end
   end
 
+  def self.get_all_aliases
+    aliases = {}
+    @@gpus.each do |model, data|
+      raise "Fix me: alias is missing for #{model}" unless data['alias']
+      aliases[data['alias']] = model
+    end
+
+    aliases
+  end
 end
-- 
GitLab