From 974a9a391dd7c5db7e3c1b8661ffeae8ecda6efc Mon Sep 17 00:00:00 2001
From: David Loup <david.loup@inria.fr>
Date: Thu, 3 Sep 2020 17:47:39 +0200
Subject: [PATCH] [gen/oar-properties] disk properties inherit default
 properties from their node (bug 12144)

---
 lib/refrepo/gen/oar-properties.rb | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/lib/refrepo/gen/oar-properties.rb b/lib/refrepo/gen/oar-properties.rb
index 315468ddb3..3944ed5a2b 100644
--- a/lib/refrepo/gen/oar-properties.rb
+++ b/lib/refrepo/gen/oar-properties.rb
@@ -369,7 +369,7 @@ def get_ref_disk_properties(site_uid, site)
   site['clusters'].each do |cluster_uid, cluster|
     cluster['nodes'].each do |node_uid, node|
       begin
-        properties.merge!(get_ref_disk_properties_internal(site_uid, cluster_uid, node_uid, node))
+        properties.merge!(get_ref_disk_properties_internal(site_uid, cluster_uid, cluster, node_uid, node))
       rescue MissingProperty => e
         puts "Error while processing node #{node_uid}: #{e}"
       end
@@ -576,24 +576,22 @@ end
 #  "diskpath"=>"/dev/disk/by-path/pci-0000:02:00.0-scsi-0:0:1:0",
 #  "cpuset"=>-1},
 #  ["grimoire-1", "sdc.grimoire-1"]=> ...
-def get_ref_disk_properties_internal(site_uid, cluster_uid, node_uid, node)
+def get_ref_disk_properties_internal(site_uid, cluster_uid, cluster, node_uid, node)
   properties = {}
   node['storage_devices'].each_with_index do |device, index|
     disk = [device['device'], node_uid].join('.')
     if index > 0 && device['reservation'] # index > 0 is used to exclude sda
       key = [node_uid, disk]
-      h = {}
+      # Starting from default resources properties, then override with disk properties
+      h = get_ref_node_properties_internal(cluster_uid, cluster, node_uid, node)
       node_address = [node_uid, site_uid, 'grid5000.fr'].join('.')
-      h['cluster'] = cluster_uid
       h['host'] = node_address
       h['network_address'] = ''
       h['available_upto'] = 0
       h['deploy'] = 'YES'
-      h['production'] = get_production_property(node)
-      h['maintenance'] = get_maintenance_property(node)
+      h['max_walltime'] = 0
       h['disk'] = disk
       h['diskpath'] = device['by_path']
-      h['exotic'] = node['exotic'] ? 'YES' : 'NO'
       h['cpuset'] = -1
       properties[key] = h
     end
@@ -685,13 +683,12 @@ def diff_properties(type, properties_oar, properties_ref)
 
   if type == 'default'
     ignore_keys = ignore_keys()
-    ignore_keys.each { |key| properties_oar.delete(key) }
-    ignore_keys.each { |key| properties_ref.delete(key) }
   elsif type == 'disk'
     check_keys = %w(cluster host network_address available_upto deploy production maintenance disk diskpath cpuset)
-    properties_oar.select! { |k, _v| check_keys.include?(k) }
-    properties_ref.select! { |k, _v| check_keys.include?(k) }
+    ignore_keys = ignore_keys() - check_keys #Some key must be ignored for default but not for disks, ex: available_upto
   end
+  ignore_keys.each { |key| properties_oar.delete(key) }
+  ignore_keys.each { |key| properties_ref.delete(key) }
 
   # Ignore the 'state' property only if the node is not 'Dead' according to
   # the reference-repo.
@@ -998,7 +995,7 @@ def do_diff(options, generated_hierarchy, refrepo_properties)
         end
       end
 
-      diagnostic_msgs.push( "Properties that need to be created on the #{site_uid} server: #{properties_keys['diff'][site_uid].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.join(', ')}") if options[:verbose] && properties_keys['diff'][site_uid].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.size > 0
+      diagnostic_msgs.push( "Properties that need to be created on the #{site_uid} server: #{properties_keys['diff'][site_uid].keys.to_a.delete_if { |e| ignore_keys.include?(e) }.join(', ')}") if options[:verbose] && properties_keys['diff'][site_uid].keys.to_a.delete_if { |e| ignore_keys.include?(e) }.size > 0
 
       # Detect unknown properties
       unknown_properties = properties_keys['oar'][site_uid].keys.to_set - properties_keys['ref'][site_uid].keys.to_set
-- 
GitLab