From 3746cbb794901ec802e7336eabd27a625ac06dd7 Mon Sep 17 00:00:00 2001 From: Florent Didier <florent.didier@inria.fr> Date: Fri, 12 Jan 2018 13:52:13 +0100 Subject: [PATCH] [dev] check-network-description: check shell calls for errors --- .../check-network-description.rb | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/generators/input-validators/check-network-description.rb b/generators/input-validators/check-network-description.rb index 7b1a26612a9..cfb2623e344 100644 --- a/generators/input-validators/check-network-description.rb +++ b/generators/input-validators/check-network-description.rb @@ -2,6 +2,8 @@ # coding: utf-8 # This script checks the network description for inconsistencies +# This script needs 'nodeset' and 'dot' programs, which are available +# in clustershell and graphviz debian packages require 'json' require 'pp' @@ -265,7 +267,7 @@ def generate_dot(netnodes, links, site) # group nodeslinks = nodeslinks.group_by { |l| [ l['target_cluster'], l['attachments'] ] }.to_a.map { |e| e[1].map! { |f| f['target_node'] } ; e } # factor - nodeslinks.map! { |e| e[1] = `echo #{e[1].uniq.join(' ')}|nodeset -f`.chomp ; e } + nodeslinks.map! { |e| e[1] = sh("echo #{e[1].uniq.join(' ')}|nodeset -f"); e } header = [] content = [] @@ -316,11 +318,19 @@ def generate_dot(netnodes, links, site) name = "#{site.capitalize}Network" data = [header, content.sort, trailer].flatten.join("\n") IO.write("#{name}.dot", data) - system("dot -Tpdf #{name}.dot -o#{name}.pdf") - system("dot -Tpng #{name}.dot -o#{name}.png") + sh("dot -Tpdf #{name}.dot -o#{name}.pdf") + sh("dot -Tpng #{name}.dot -o#{name}.png") end - +def sh(cmd) + begin + output = `#{cmd}`.chomp + rescue StandardError => e + raise "ERROR: The following command produced an error: #{cmd}\n#{e}" if $?.exitstatus != 0 + end + return output +end + if __FILE__ == $0 require 'optparse' @@ -363,5 +373,13 @@ if __FILE__ == $0 end end.parse! - exit(check_network_description(options)) + ret = 2 + begin + ret = check_network_description(options) + rescue StandardError => e + puts e + ret = 3 + ensure + exit(ret) + end end -- GitLab