diff --git a/generators/input-validators/check-network-description.rb b/generators/input-validators/check-network-description.rb index 7b1a26612a903c9413e701dcaf2684851cb0a74b..cfb2623e344b7b70bdd1d7fdd4a1821796ef1ad1 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