diff --git a/generators/bind/bind.rb b/generators/bind/bind.rb index 8b7804c14aca8b145f9271422ee9015603d9cd69..2c2a218b3b7f6763104efbad4e591ae386e2f61a 100644 --- a/generators/bind/bind.rb +++ b/generators/bind/bind.rb @@ -36,7 +36,7 @@ global_hash["sites"].each { |site_uid, site_hash| site_hash.fetch("clusters").sort.each { |cluster_uid, cluster_hash| - cluster_hash.fetch('nodes').sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_hash| + cluster_hash.fetch('nodes').each_sort_by_node_uid { |node_uid, node_hash| network_interfaces = {} node_hash.fetch('network_interfaces').each { |net_uid, net_hash| diff --git a/generators/dhcp/templates/dhcp.erb b/generators/dhcp/templates/dhcp.erb index 74c2c7633106db547e755a30ff6a2f8ac902a93b..1a44ab011795c1a00ae803b612f307ac2dba2ce3 100644 --- a/generators/dhcp/templates/dhcp.erb +++ b/generators/dhcp/templates/dhcp.erb @@ -9,7 +9,7 @@ %> group { <% - data.fetch('nodes').sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_hash| + data.fetch('nodes').each_sort_by_node_uid { |node_uid, node_hash| network_interface != 'bmc' ? node_uid_net = node_uid : node_uid_net = node_uid + '-bmc' # Get ip and mac addresses diff --git a/generators/lib/hash/hash.rb b/generators/lib/hash/hash.rb index 68265a2e85a81381b839a2976660a4ecfdbddb60..730f4e1a1fdc99b5b88d1b3f4350dafac05e4c7c 100644 --- a/generators/lib/hash/hash.rb +++ b/generators/lib/hash/hash.rb @@ -90,4 +90,23 @@ class ::Hash return array.reverse.inject(value) { |a, n| { n => a } } end + # Custom iterator. Same as "each" but it sorts keys by node_uid (ie. graphene-10 after graphene-9) + def each_sort_by_node_uid + self.sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |key, value| + yield key, value + } + end + + # Custom iterator. Only consider entries corresponding to cluster_list and node_list. Sorted by node_uid. + def each_filtered_node_uid(cluster_list, node_list) + self.each_sort_by_node_uid { |node_uid, properties| + cluster_uid = node_uid.split(/-/).first + + if (! cluster_list || cluster_list.include?(cluster_uid)) && + (! node_list || node_list.include?(node_uid)) + yield node_uid, properties + end + } + end + end diff --git a/generators/oar-properties/oar-properties.rb b/generators/oar-properties/oar-properties.rb index a82c7befea028e1c9b2452ed78a85d6ef51c5def..09fae64784d3154443c776a2a306e4166e594241 100755 --- a/generators/oar-properties/oar-properties.rb +++ b/generators/oar-properties/oar-properties.rb @@ -126,27 +126,21 @@ nodelist_properties["to_be_updated"] = {} nodelist_properties["ref"].each { |site_uid, site_properties| - site_properties.sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_properties_ref| - cluster_uid = node_uid.split(/-/).first - - if (! options[:clusters] || options[:clusters].include?(cluster_uid)) && - (! options[:nodes] || options[:nodes].include?(node_uid)) - - node_properties_oar = nodelist_properties["oar"][site_uid][node_uid] + site_properties.each_filtered_node_uid(options[:clusters], options[:nodes]) { |node_uid, node_properties_ref| - diff = diff_node_properties(node_properties_ref, node_properties_oar) - diff_keys = diff.map{ |hashdiff_array| hashdiff_array[1] } - - nodelist_properties["to_be_updated"][node_uid] = node_properties_ref.select { |key, value| diff_keys.include?(key) } + node_properties_oar = nodelist_properties["oar"][site_uid][node_uid] - if (options[:verbose]) - #puts "#{node_uid}: #{diff}" - puts "#{node_uid}: #{diff_keys}" - end - + diff = diff_node_properties(node_properties_ref, node_properties_oar) + diff_keys = diff.map{ |hashdiff_array| hashdiff_array[1] } + + nodelist_properties["to_be_updated"][node_uid] = node_properties_ref.select { |key, value| diff_keys.include?(key) } + + if (options[:verbose]) + #puts "#{node_uid}: #{diff}" + puts "#{node_uid}: #{diff_keys}" end - - } + + } }