diff --git a/generators/oar-properties/lib/lib-oar-properties.rb b/generators/oar-properties/lib/lib-oar-properties.rb index 6873eaf995d2405540afd6b4f3be2a67f18ccf3b..8f860e20060560142942e00c78e153439364635e 100755 --- a/generators/oar-properties/lib/lib-oar-properties.rb +++ b/generators/oar-properties/lib/lib-oar-properties.rb @@ -200,7 +200,7 @@ def get_ref_disk_properties_internal(site_uid, cluster_uid, node_uid, node) node['storage_devices'].to_a.each_with_index do |v, index| device_uid, device = v disk = [device_uid, node_uid].join('.') - if index > 0 && device['reservation'] + if index > 0 && device['reservation'] # index > 0 is used to exclude sda key = [node_uid, disk] h = {} node_address = [node_uid, site_uid, 'grid5000.fr'].join('.') @@ -293,10 +293,8 @@ end # We detect the type of the property (Fixnum/String) by looking at the existing values def get_property_keys(properties) properties_keys = {} - properties.each do |_site_uid, site_properties| - site_properties.each do |type, type_properties| - properties_keys.merge!(get_property_keys_internal(type, type_properties)) - end + properties.each do |type, type_properties| + properties_keys.merge!(get_property_keys_internal(type, type_properties)) end return properties_keys end diff --git a/generators/oar-properties/oar-properties.rb b/generators/oar-properties/oar-properties.rb index 7337cf6f3c73c241abb4e944665434ca5a454127..61fdc6a58784311cc9c8e6c115d77f3b3bedec1d 100755 --- a/generators/oar-properties/oar-properties.rb +++ b/generators/oar-properties/oar-properties.rb @@ -213,16 +213,11 @@ global_hash = load_yaml_file_hierarchy(File.expand_path('../../input/grid5000/', properties = {} properties['ref'] = get_oar_properties_from_the_ref_repo(global_hash, options) - -# Get the list of property keys from the reference-repo (['ref']) -properties_keys = {} -properties_keys['ref'] = get_property_keys(properties['ref']) +properties['oar'] = get_oar_properties_from_oar(options) ignore_default_keys = ignore_default_keys() # Diff if options[:diff] - properties['oar'] = get_oar_properties_from_oar(options) - # Build the list of nodes that are listed in properties['oar'], # but does not exist in properties['ref'] # We distinguish 'Dead' nodes and 'Alive'/'Absent'/etc. nodes @@ -250,7 +245,6 @@ Those nodes should be marked as 'retired' in the reference-repo.\n" skipped_nodes = [] prev_diff = {} properties['diff'] = {} - properties_keys['oar'] = Set.new [] header = false properties['ref'].each do |site_uid, site_properties| @@ -306,29 +300,6 @@ Those nodes should be marked as 'retired' in the reference-repo.\n" end end - # Get the list of property keys from the OAR scheduler (['oar']) - properties_keys['oar'] = get_property_keys(properties['oar']) - - # Build the list of properties that must be created in the OAR server - properties_keys['diff'] = {} - properties_keys['ref'].each do |k, v_ref| - v_oar = properties_keys['oar'][k] - properties_keys['diff'][k] = v_ref unless v_oar - if v_oar && v_oar != v_ref && v_ref != NilClass && v_oar != NilClass - # Detect inconsistency between the type (String/Fixnum) of properties generated by this script and the existing values on the server. - puts "Error: the OAR property '#{k}' is a '#{v_oar}' on the server and this script uses '#{v_ref}' for this property." - ret = false unless options[:exec] || options[:output] - end - end - - puts "Properties that need to be created on the server: #{properties_keys['diff'].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.join(', ')}" if options[:verbose] && properties_keys['diff'].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.size > 0 - - # Detect unknown properties - unknown_properties = properties_keys['oar'].keys.to_set - properties_keys['ref'].keys.to_set - ignore_default_keys.each do |key| - unknown_properties.delete(key) - end - if options[:verbose] && unknown_properties.size > 0 puts "Properties existing on the server but not managed/known by the generator: #{unknown_properties.to_a.join(', ')}." puts "Hint: you can delete properties with 'oarproperty -d <property>' or add them to the ignore list in lib/lib-oar-properties.rb." @@ -350,8 +321,35 @@ if options[:output] || options[:exec] cmd << oarcmd_script_header cmd << oarcmd_separator + # Get the list of property keys from the reference-repo (['ref']) + properties_keys = {} + properties_keys['ref'] = get_property_keys(properties['ref'][site_uid]) + # Create properties keys - properties_keys[opt].delete_if { |k, _v| ignore_default_keys.include?(k) } + # Get the list of property keys from the OAR scheduler (['oar']) + properties_keys['oar'] = get_property_keys(properties['oar'][site_uid]) + + # Build the list of properties that must be created in the OAR server + properties_keys['diff'] = {} + properties_keys['ref'].each do |k, v_ref| + v_oar = properties_keys['oar'][k] + properties_keys['diff'][k] = v_ref unless v_oar + if v_oar && v_oar != v_ref && v_ref != NilClass && v_oar != NilClass + # Detect inconsistency between the type (String/Fixnum) of properties generated by this script and the existing values on the server. + puts "Error: the OAR property '#{k}' is a '#{v_oar}' on the #{site_uid} server and this script uses '#{v_ref}' for this property." + ret = false unless options[:exec] || options[:output] + end + end + + puts "Properties that need to be created on the #{site_uid} server: #{properties_keys['diff'].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.join(', ')}" if options[:verbose] && properties_keys['diff'].keys.to_a.delete_if { |e| ignore_default_keys.include?(e) }.size > 0 + + # Detect unknown properties + unknown_properties = properties_keys['oar'].keys.to_set - properties_keys['ref'].keys.to_set + ignore_default_keys.each do |key| + unknown_properties.delete(key) + properties_keys[opt].delete(key) + end + unless properties_keys[opt].empty? cmd << oarcmd_create_properties(properties_keys[opt]) + "\n" cmd << oarcmd_separator