diff --git a/generators/lib/g5k_generator.rb b/generators/lib/g5k_generator.rb index 603440628f5abc052fb35c0ca582fae72aabdbca..4535736ca68a430b0914ed399fdac57ce583a3e4 100755 --- a/generators/lib/g5k_generator.rb +++ b/generators/lib/g5k_generator.rb @@ -135,7 +135,60 @@ module G5K raise ArgumentError, "Cannot fetch the values for '#{keys.inspect}' in the input file '#{filename}'. The config files you gave to me are: '#{config.keys.inspect}'." end end - + + # Build snmp_naming_pattern Example: + # '3 2 GigabitEthernet%LINECARD%/%PORT%' -> 'GigabitEthernet3/2' + def get_portname(lc_num,port_num,pattern) + return pattern.sub("%LINECARD%",lc_num.to_s).sub("%PORT%",port_num.to_s) + end + + def net_switch_lookup(site, cluster, node_uid, interface='') + # Build the cluster_node_uid from argv1+argv2 + if interface != "" + node_uid = node_uid+"-"+interface + end + Pathname.glob("generators/input/sites/#{site}/net-links/*.yaml").map { |i| i.basename.to_s.sub!(".yaml","") }.each do |equipment_name| + netlinks = File.open("generators/input/sites/#{site}/net-links/#{equipment_name}.yaml") + tab = YAML::load_stream ( netlinks ) + tab[0][equipment_name]["linecards"].each do |(lc_num,lc_content)| + lc_content["ports"].each do |(port_num,port_content)| + if port_content.is_a?(Hash) + if port_content["uid"] == node_uid + return equipment_name + end + elsif port_content == node_uid + return equipment_name + end + end + end + end + return nil + end + + # Parse network equipment description and print switch port connected to given node + def net_port_lookup(site, cluster, node_uid, interface='') + # Build the cluster_node_uid from argv1+argv2 + if interface != "" + node_uid = node_uid+"-"+interface + end + Pathname.glob("generators/input/sites/#{site}/net-links/*.yaml").map { |i| i.basename.to_s.sub!(".yaml","") }.each do |equipment_name| + netlinks = File.open("generators/input/sites/#{site}/net-links/#{equipment_name}.yaml") + tab = YAML::load_stream ( netlinks ) + tab[0][equipment_name]["linecards"].each do |(lc_num,lc_content)| + lc_content["ports"].each do |(port_num,port_content)| + if port_content.is_a?(Hash) + if port_content["uid"] == node_uid + return get_portname(lc_num,port_num,lc_content["snmp_pattern"]) + end + elsif port_content == node_uid + return get_portname(lc_num,port_num,lc_content["snmp_pattern"]) + end + end + end + end + return nil + end + # This method is used exclusivly for environments. Example: # environment 'squeeze-x64-xen-0.8' do # available_on %w{grenoble lille lyon nancy rennes sophia toulouse}