diff --git a/generators/input-validators/check-network-description.rb b/generators/input-validators/check-network-description.rb index 7a383eb1f74adaf1659ba2f7a023363e8888fd6a..25aeffe4bfae7c288fec886743fec4521cc12d9d 100644 --- a/generators/input-validators/check-network-description.rb +++ b/generators/input-validators/check-network-description.rb @@ -78,7 +78,7 @@ def check_network_description(options) if mynetnodes.length == 1 # on n'en a trouvé qu'un seul, c'est donc forcément le bon mynetnodes.first['found'] += 1 - links << [ eq['uid'], mynetnodes.first['nickname'] ].sort + links << { 'nicknames' => [ eq['uid'], mynetnodes.first['nickname'] ].sort, 'switch' => eq['uid'], 'target' => mynetnodes.first['nickname'], 'rate' => lc['rate'] } elsif mynetnodes.length > 1 # il y en a plusieurs... if port['port'].nil? @@ -91,7 +91,7 @@ def check_network_description(options) if mynetnodes.length == 1 # on n'en a trouvé qu'un seul, c'est donc forcément le bon mynetnodes.first['found'] += 1 - links << [ eq['uid'], mynetnodes.first['nickname'] ].sort + links << { 'nicknames' => [ eq['uid'], mynetnodes.first['nickname'] ].sort, 'switch' => eq['uid'], 'target' => mynetnodes.first['nickname'], 'rate' => lc['rate'] } elsif mynetnodes.length > 1 puts "ERROR: port specification matches several network nodes. port=#{port} ; network nodes matched=#{mynetnodes}" ok = false @@ -111,7 +111,7 @@ def check_network_description(options) if mynetnodes.length == 1 # on n'en a trouvé qu'un seul, c'est donc forcément le bon mynetnodes.first['found'] += 1 - links << [ eq['uid'], mynetnodes.first['nickname'] ].sort + links << { 'nicknames' => [ eq['uid'], mynetnodes.first['nickname'] ].sort, 'switch' => eq['uid'], 'target' => mynetnodes.first['nickname'], 'rate' => lc['rate'] } elsif mynetnodes.length > 1 puts "ERROR: port specification matches several network nodes. port=#{port} ; network nodes matched=#{mynetnodes}" ok = false @@ -124,7 +124,7 @@ def check_network_description(options) mynetnodes = netnodes.select { |n| n.values_at('kind', 'uid', 'port') == port.values_at('kind', 'uid', 'port') } if mynetnodes.length == 1 mynetnodes.first['found'] += 1 - links << [ eq['uid'], mynetnodes.first['nickname'] ].sort + links << { 'nicknames' => [ eq['uid'], mynetnodes.first['nickname'] ].sort, 'switch' => eq['uid'], 'target' => mynetnodes.first['nickname'], 'rate' => lc['rate'] } else puts "ERROR: this port is connected to a node that does not exist: #{port}" ok = false @@ -134,7 +134,7 @@ def check_network_description(options) mynetnodes = netnodes.select { |n| n.values_at('kind', 'uid') == port.values_at('kind', 'uid') } if mynetnodes.length == 1 mynetnodes.first['found'] += 1 - links << [ eq['uid'], mynetnodes.first['nickname'] ].sort + links << { 'nicknames' => [ eq['uid'], mynetnodes.first['nickname'] ].sort, 'switch' => eq['uid'], 'target' => mynetnodes.first['nickname'], 'rate' => lc['rate'] } else puts "ERROR: this port is connected to a switch or router that does not exist: #{port}" ok = false @@ -167,19 +167,20 @@ def check_network_description(options) ok = false end - links.uniq.each do |l| + linknicks = links.map { |l| l['nicknames'] } + linknicks.uniq.each do |l| n0 = netnodes.select { |n| n['nickname'] == l[0] }.first n1 = netnodes.select { |n| n['nickname'] == l[1] }.first if ['router','switch'].include?(n0['kind']) and ['router','switch'].include?(n1['kind']) next if HPC_SWITCHES.include?(n0['nickname']) or HPC_SWITCHES.include?(n1['nickname']) # FIXME we ignore problems with HPC switches for now # this is a link between network equipment - if links.count(l) % 2 != 0 - puts "ERROR: link between two network equipments should have 2 instances (or 4, 6, 8 in case of aggregation): #{l} (actual count: #{links.count(l)})" + if linknicks.count(l) % 2 != 0 + puts "ERROR: link between two network equipments should have 2 instances (or 4, 6, 8 in case of aggregation): #{l} (actual count: #{linknicks.count(l)})" ok = false end else - if links.count(l) != 1 - puts "ERROR: duplicate link : #{l} (actual count: #{links.count(l)})" + if linknicks.count(l) != 1 + puts "ERROR: duplicate link : #{l} (actual count: #{linknicks.count(l)})" ok = false end end