From cf1af4a913776289dcb72f1b80f83c2013eae738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Gaidamour?= <jeremie.gaidamour@inria.fr> Date: Wed, 2 Mar 2016 09:07:33 +0100 Subject: [PATCH] [dev] Custom iterators --- generators/bind/bind.rb | 2 +- generators/dhcp/templates/dhcp.erb | 2 +- generators/lib/hash/hash.rb | 19 +++++++++++++ generators/oar-properties/oar-properties.rb | 30 +++++++++------------ 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/generators/bind/bind.rb b/generators/bind/bind.rb index 8b7804c14ac..2c2a218b3b7 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 74c2c763310..1a44ab01179 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 68265a2e85a..730f4e1a1fd 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 a82c7befea0..09fae64784d 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 - - } + + } } -- GitLab