Mentions légales du service

Skip to content
Snippets Groups Projects
Commit c57a4e7f authored by Gaetan SIMO's avatar Gaetan SIMO
Browse files

[Rakefile] Organized files structure to ease generation by sites/cluster +...

[Rakefile] Organized files structure to ease generation by sites/cluster + environments + network api. All features on 'rake -T'
parent 89b7c0e7
Branches dev
Tags
No related merge requests found
Showing
with 218 additions and 4835 deletions
require 'rubygems'
require 'fileutils'
require 'json'
require 'logger'
require 'yaml'
require 'pp'
require 'restfully'
ROOT_DIR = File.expand_path File.dirname(__FILE__)
LIB_DIR = File.join(ROOT_DIR, "generators", "lib")
$LOAD_PATH.unshift(LIB_DIR) unless $LOAD_PATH.include?(LIB_DIR)
EXTRA_DIR = File.join(ROOT_DIR, "extra", "lib")
$LOAD_PATH.unshift(EXTRA_DIR) unless $LOAD_PATH.include?(EXTRA_DIR)
Rake.application.options.trace = true
require 'grid5000'
#require 'naming-pattern'
task :environment do
Dir.chdir(ROOT_DIR)
@logger = Logger.new(STDERR)
@logger.level = Logger.const_get((ENV['DEBUG'] || 'INFO').upcase)
end
task :api_sites do
api_logger = Logger.new("/dev/null")
api_logger.level = Logger::FATAL
@api = Restfully::Session.new(:configuration_file => File.expand_path("~/.restfully/api.grid5000.fr.yml"),:logger => api_logger)
@api_sites = if ENV['SITE']
[@api.root.sites[ENV['SITE'].to_sym]]
else
@api.root.sites
end
end
task :hosts do
# HOSTS=gw.lille
# HOSTS=*.lille
......@@ -40,305 +44,64 @@ task :hosts do
@host = host
end
namespace :netlinks do
desc "Probe a remote network equipement and retrieve its neighbors in a yaml file. HOST is its grid5000 FQDN."
task :probe => [:environment,:hosts] do
# Scan the site net-links yaml file to find properties about this host (snmp community,...)
# These properties are going to be used to probe the given host
namespace :g5k do
desc "Generates the JSON files based on the generators, for all sites.\nUse SITE=<SITE-NAME> if you wish to restrict the generation to a specific site.\nUse DRY=1 to simulate the execution."
task :generate => [:environment,:hosts] do
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
dirs = Dir.glob("generators/input/#{site}/")
if dirs.empty?
@logger.error "Failed to find a directory containing the net-links yaml file for your site '#{site}'"
next
end
message = []
dirs.each do |dir|
site = File.basename(dir)
net_links_file = File.join(dir,"net-links.yaml")
net_links_dir = File.join(dir,"net-links")
probes = []
root_dir_input = "#{ROOT_DIR}/generators/input/sites"
command = File.join(ROOT_DIR, "generators", "grid5000")
command += " " + File.join(root_dir_input, site,"#{site}.rb")
command += " " + File.join(root_dir_input, site,"clusters","#{host}.rb")
command += " " + File.join(root_dir_input, site,"clusters","#{host}.yaml")
command << " -s" if ENV['DRY'] == "yes"
# puts command
sh command
end
end
net_links = YAML::load_file(net_links_file)
net_links.each do |host_uid,properties|
next if host_uid.match(Regexp.new(host.gsub(/\*/,'\S+'))).nil?
# gather information about this host
probes.push({:uid=>host_uid, :snmp_community => properties["snmp_community"]})
end
if probes.empty?
@logger.warn "Failed to find any host described within the file #{net_links_file}."
else
# copy the 'extra' dir on the site,
# execute all the probing on all hosts
# retrieve the result from all hosts
prober = "weathermap.#{site}.grid5000.fr"
sh "rsync -av extra #{prober}:"
sh "ssh #{prober} 'cd extra && bundle install'"
# rake deadnodes:reasons
# rake deadnodes:tofix
namespace :deadnodes do
probes.each do |info|
sh "ssh #{prober} 'cd extra && ./bin/net-links.rb --host #{info[:uid]} --community #{info[:snmp_community]} --logger stdout:warn'"
end
probes.each do |info|
sh "rsync -av #{prober}:/tmp/#{info[:uid]}.yaml #{net_links_dir}/"
message.push "* #{net_links_dir}/#{info[:uid]}.yaml"
end
end
end
# Print the result on a pretty message
if message.empty?
@logger.warn "No host net-link has been download locally. Please correct warnings first."
else
message.unshift "Network links were saved into the following files : "
message_size = message.max{|a,b|a.size <=> b.size}.size
puts "+-#{"-" * message_size}-+"
puts message.map{|m| "| #{m} "}.join("\n")
puts "+-#{"-" * message_size}-+"
end
desc "List all dead nodes and the reason why they are dead. (SITE=)"
task :reasons => [:environment,:api_sites] do
@logger.level = Logger::INFO
@reasons = true
Rake::Task["deadnodes:browse"].execute
end
def format_vlan(coord,raw_port,linecards)
# puts "Vlan : #{coord.inspect} #{raw_port.inspect}"
desc "List all nodes which have they state not in synch with they comment. (SITE=)"
task :tofix => [:environment,:api_sites] do
@logger.level = Logger::ERROR
@tofix = true
Rake::Task["deadnodes:browse"].execute
end
def format_channel(coord,raw_port,linecards)
# puts "Channel : #{coord.inspect} #{raw_port.inspect}"
end
def format_port(coord,raw_port,linecards)
# puts "#{coord.inspect} #{raw_port.inspect}"
neighbor,site = nil
if raw_port.has_key? :fqdn
neighbor,site = raw_port[:fqdn].scan(/([^.]+)\.([^.]+)\.grid5000\.fr/).flatten
elsif raw_port.has_key? :uid
neighbor,site = raw_port[:uid].scan(/([^.]+)\.([^.]+)\.grid5000\.fr/).flatten
neighbor = raw_port[:uid] if neighbor.nil?
end
return if neighbor.nil?
l = (coord["linecard"]||0)
p = coord["port"]
linecards[l] = {"ports"=>{}} unless linecards.has_key? l
ports = linecards[l]["ports"]
formated_port = ports[p]
if formated_port.nil?
ports[p] = neighbor
elsif formated_port.is_a? Hash
ports[p]["uid"] = neighbor
else
ports[p] = neighbor
end
end
def browse_naming_patterns(dico,patterns,&block)
dico.each do |key,value|
if value.is_a? Hash
browse_naming_patterns(value,patterns,&block)
else
if key == "naming_pattern"
pattern = value
if patterns.has_key? pattern
@logger.warn "Naming Pattern already defined '#{pattern}'. Skipping this redefinition."
task :browse do
def comment_ok?(comment)
# comment.nil? or comment == "OK"
comment == "OK"
end
@api_sites.each do |site|
site.status["nodes"].each do |uid,status|
comment = status["comment"]
state = status["hard"].downcase
if comment_ok?(comment)
if state == "dead"
@logger.error "Node '#{uid}' of state '#{state}' should not have comment '#{comment}'" if @tofix
else
patterns[pattern] = block
# nothing, good state
end
end
end
end
end
desc "Updated formated net-links with the raw information gathered from network equipments."
task :format => [:environment,:hosts] do
# Read the network links fresh out of network equipment
# Read the configuration formated
# update the formated configuration with raw information from the net-links yaml file
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
dirs = Dir.glob("generators/input/#{site}/")
if dirs.empty?
@logger.error "Failed to find a directory containing the net-links yaml file for your site '#{site}'"
next
end
message = []
dirs.each do |dir|
site = File.basename(dir)
net_links_file = File.join(dir,"net-links.yaml")
net_links_dir = File.join(dir,"net-links")
net_links = YAML::load_file(net_links_file)
hosts = {}
net_links.each do |uid,properties|
hosts[uid] = properties unless uid.match(Regexp.new(host.gsub(/\*/,'\S+'))).nil?
end
if hosts.empty?
@logger.warn "Failed to find any host described within the file #{net_links_file}."
else
# Read the network links fresh out of network equipment
# Read the configuration formated
# update the formated configuration with raw information from the net-links yaml file
hosts.each do |uid,properties|
raw_file = File.join(net_links_dir,"#{uid}.yaml")
raw = YAML::load_file(raw_file)
# Go through all formated config, and register a call back that will encode the naming_pattern
patterns = {}
browse_naming_patterns(properties["vlans"],patterns) do |dict,raw_port|
format_vlan(dict,raw_port,properties["vlans"])
end
browse_naming_patterns(properties["channels"],patterns) do |dict,raw_port|
format_channel(dict,raw_port,properties["channels"])
end
browse_naming_patterns(properties["linecards"],patterns) do |dict,raw_port|
format_port(dict,raw_port,properties["linecards"])
end
# Go through all ports to find they linecard and port index,
raw.each do |port|
ifname = port[:ifname]
next if ifname.nil?
# find the naming_pattern that correspond to this ifname
patterns.each do |np,cb|
# scan the ifname with each naming_pattern
dict = NamingPattern.encode(np,ifname)
unless dict.empty?
# Found the naming_pattern for this ifname
# So Place it where it belongs
cb.call(dict,port)
break
end
end
#
end
end
# When all net links in a site are formated, we write them in they file.
File.open(net_links_file,'w'){|f| YAML::dump(net_links,f)}
message.push "#{net_links_file} hosts=#{hosts.keys.inspect}"
end
end
# Print the result on a pretty message
if message.empty?
@logger.warn "No host net-link has been formated. Please correct warnings and your cli parameters."
else
message.map!{|m| "* #{m}"}
message.unshift "Formated Network links were saved into the following files : "
message_size = message.max{|a,b|a.size <=> b.size}.size
puts "+-#{"-" * message_size}-+"
puts message.map{|m| "| #{m} "}.join("\n")
puts "+-#{"-" * message_size}-+"
end
end
desc "Update net-links.yaml with the kavlan like config file."
task :kavlan => [:environment,:hosts] do
config_file = ENV['CONF']
abort "You must provide a CONF=, which is the path to the kavlan like config file." if config_file.nil?
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
dirs = Dir.glob("generators/input/#{site}/")
if dirs.empty?
@logger.error "Failed to find a directory containing the net-links yaml file for your site '#{site}'"
next
end
message = []
dirs.each do |dir|
site = File.basename(dir)
net_links_file = File.join(dir,"net-links.yaml")
net_links_dir = File.join(dir,"net-links")
net_links = YAML::load_file(net_links_file)
net_links.keep_if do |uid,properties|
uid.match(Regexp.new(host.gsub(/\*/,'\S+'))) != nil
end
if net_links.empty?
@logger.warn "Failed to find any host described within the file #{net_links_file}."
else
# parse the kavlan like config file
config = {}
File.read(config_file).lines.each do |line|
if ((scan = line.strip.scan(/^([^.]+)\.([^.]+)\.grid5000\.fr\s+(\S+)\s+(\S+)$/)).size > 0)
uid,site,ifname,router = scan.flatten
router = router.downcase
config[router] = [] unless config.has_key? router
# if ((scan = uid.scan(/^(\S+-\d+)-(\S+)$/)).size > 0)
# uid,port = scan.flatten
# config[router].push({:uid=>uid,:ifname=>ifname,:port=>port})
# else
config[router].push({:uid=>uid,:ifname=>ifname})
# end
end
end
updated = []
# Update the net-links with kavlan config file
net_links.each do |uid,properties|
router = config[uid]
next if router.nil?
updated.push uid
# register interfaces naming patterns
patterns = {}
browse_naming_patterns(properties["linecards"],patterns) do |dict,raw_port|
format_port(dict,raw_port,properties["linecards"])
end
# parse the ifname
router.each do |neighbor|
ifname = neighbor[:ifname]
# find the naming_pattern that correspond to this ifname
patterns.each do |np,cb|
# scan the ifname with each naming_pattern
dict = NamingPattern.encode(np,ifname)
unless dict.empty?
# Found the naming_pattern for this ifname
# So Place it where it belongs
cb.call(dict,neighbor)
break
end
end
else
if state == "dead"
@logger.info "Node '#{uid}' is dead because '#{comment}'" if @reasons
else
@logger.error "Node '#{uid}' should have the not-dead-comment 'OK', since its state is '#{state}'. Instead, it has comment '#{comment}'." if @tofix
end
end
# When all net links in a site are formated, we write them in they file.
File.open(net_links_file,'w'){|f| YAML::dump(net_links,f)}
message.push "#{net_links_file} hosts=#{updated.inspect}"
end
end
# Print the result on a pretty message
if message.empty?
@logger.warn "No host net-link has been formated. Please correct warnings and/or your cli parameters."
else
message.map!{|m| "* #{m}"}
message.unshift "Formated Network links were saved into the following files : "
message_size = message.max{|a,b|a.size <=> b.size}.size
puts "+-#{"-" * message_size}-+"
puts message.map{|m| "| #{m} "}.join("\n")
puts "+-#{"-" * message_size}-+"
end
end
desc "Generates The JSON files that will be used for network API.\nUse DRY=1 to simulate the execution. "
task :generate => [:environment,:hosts] do
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
dirs = Dir.glob("generators/input/#{site}/")
if dirs.empty?
@logger.error "Failed to find a directory containing the net-links yaml file for your site '#{site}'"
next
end
generator = "#{File.join(ROOT_DIR, "generators", "grid5000")}"
net_link_generator = "#{File.join(ROOT_DIR, "generators", "input", "net-links-generator.rb")}"
dirs.each do |dir|
site = File.basename(dir)
net_links_file = File.expand_path(File.join(dir,"net-links.yaml"))
site_file = File.expand_path(File.join(dir,"..","#{site}.rb"))
command = "#{generator} #{site_file} #{net_link_generator} #{net_links_file}"
command << " -s" if ENV['DRY'] && ENV['DRY'] != "0"
sh command
end
end
end
namespace :g5k do
desc "Generates the JSON files based on the generators, for all sites.\nUse SITE=<SITE-NAME> if you wish to restrict the generation to a specific site.\nUse DRY=1 to simulate the execution."
task :generate => :environment do
site = if ENV['SITE']
ENV['SITE']
else
"*"
end
command = "#{File.join(ROOT_DIR, "generators", "grid5000")} #{File.join(ROOT_DIR, "generators", "input", "#{site}.rb")} #{File.join(ROOT_DIR, "generators", "input", "#{site}.yaml")}"
command << " -s" if ENV['DRY'] && ENV['DRY'] != "0"
@logger.info "Executing #{command.inspect}..."
system command
end
end
......@@ -432,3 +195,56 @@ namespace :oar do
end
end
end
namespace :netlinks do
desc "Generates network API JSON files based on net-links yaml files.\nUse DRY=yes to simulate the execution. "
task :generate => [:environment,:hosts] do
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
root_dir_input = "#{ROOT_DIR}/generators/input/sites"
command = File.join(ROOT_DIR, "generators", "grid5000")
command += " " + File.join(root_dir_input, "net-links.rb")
command += " " + File.join(root_dir_input, site,"#{site}.rb")
command += " " + File.join(root_dir_input, site,"net-links","#{host}.yaml")
command << " -s" if ENV['DRY'] == "yes"
# puts command
sh command
end
end
namespace :env do
desc "Generates environment JSON files .\nUse DRY=yes to simulate the execution. "
task :generate => [:environment] do
env_name = ENV["ENV_NAME"]
abort "You must provide ENV_NAME=" if env_name.nil?
root_dir_input = "#{ROOT_DIR}/generators/input"
command = File.join(ROOT_DIR, "generators", "grid5000")
command += " " + File.join(root_dir_input, "environments","#{env_name}")
command << " -s" if ENV['DRY'] == "yes"
sh command
end
end
=begin
task :mm => [:environment,:hosts] do
host,site = @host.scan(/(\S+)\.(\S+)/).flatten
root_dir_input = "#{ROOT_DIR}/generators/input"
Dir.glob("#{root_dir_input}/#{site}*").each do |file|
filename = File.basename(file)
if ((scan = filename.scan(/(\S+)-(\S+)\.(rb|yaml)/)).size > 0)
site,cluster = scan.flatten
cmd = "mkdir -p #{root_dir_input}/#{site}/clusters"
cmd += " && mv #{file} #{root_dir_input}/#{site}/clusters/#{cluster}#{File.extname(filename)}"
sh cmd
# puts cmd
elsif ((scan = filename.scan(/(\S+)\.rb/)).size > 0)
site = scan.first.first
cmd = "mkdir -p #{root_dir_input}/#{site}/clusters"
cmd += " && mv #{file} #{root_dir_input}/#{site}/#{site}.rb"
sh cmd
end
end
end
=end
sites:
- bordeaux
- grenoble
- lille
- lyon
- nancy
- orsay
- rennes
- sophia
- toulouse
\ No newline at end of file
site :rennes do |site_uid| # General description of the site.
name "Rennes"
location "Rennes, France"
web "http://www.irisa.fr"
description ""
latitude 48.114722
longitude -1.679444
email_contact
sys_admin_contact
security_contact
user_support_contact
# Describes the list of environments available on the site.
# Notice the :refer_to option that creates a hard link to an existing file, starting from the ./data directory.
%w{sid-x64-base-1.0}.each do |env_id|
environment env_id, :refer_to => "grid5000/environments/#{env_id}"
end
cluster :paraquad do |cluster_uid|
model "Dell PowerEdge 1950"
created_at Time.parse("2006-12-01").httpdate # Date of arrival of the cluster into Grid5000.
# Do not forget the .httpdate call.
# Describes the nodes that compose the cluster. To avoid repetition, you may enclose the description in a loop:
64.times do |i| # index is starting at 0
node "#{cluster_uid}-#{i+1}" do |node_uid| # node UID.
# lists the supported job types (true, false or string value)
supported_job_types({:deploy => true, :besteffort => true, :virtual => "ivt"})
# describes the architecture of the node
architecture({
:smp_size => 2, # number of physical CPUs
:smt_size => 4, # total number of logical CPUs (cores)
:platform_type => "x86_64"
})
# describes the processors
processor({
:vendor => "Intel",
:model => "Intel Xeon",
:version => "5148 LV",
:clock_speed => 2.33.G, # G = 10^9, M = 10^6, etc.
:instruction_set => "", # x86-64, IA-64, ...
:other_description => "",
:cache_l1 => nil, # first-level unified cache size of the processor
:cache_l1i => nil, # first-level instruction cache size of the processor
:cache_l1d => nil, # first-level data cache size of the processor
:cache_l2 => nil # second-level unified cache size of the processor
})
main_memory({
:ram_size => 4.GiB, # the amount of RAM. MAKE SURE YOU USE GiB or MiB or KiB, and not GB, MB, KB...
:virtual_size => nil # the amount of virtual memory (RAM+Swap)
})
# Information about the default operating system of the node
# $ lsb_release -a.
# =>
# Distributor ID: Ubuntu = :name
# Description: Ubuntu 6.10
# Release: 6.10 = :release
# Codename: edgy = :version
operating_system({
:name => nil, # name of the operating system
:release => nil, # release of the operating system
:version => nil # version of the operating system
})
# Describes the list of storage devices available on the node
# Notice the use of ***GB*** (and not GiB)
# Required properties include: :interface, :size
# You may add the :driver property, or a :raid property (e.g. :raid => "0") if needed.
storage_devices [
{:interface => 'SATA', :size => 160.GB, :driver => "mptsas"}
]
# Describes the list of network adapters available on the node
# Required properties include: :interface, :rate, :switch, :network_address, :ip, :enabled
# You may add properties such as: :driver, :vendor, :version
# You may include adapters reserved for management (in this case, set enabled to false)
network_adapters [
{:interface => 'Myri-10G', :rate => 10.G,
:switch => "c6509-grid", :network_address => "#{node_uid}.#{site_uid}.grid5000.fr", :ip => dns_lookup("#{node_uid}.#{site_uid}.grid5000.fr"),
:vendor => 'Myrinet', :version => "10G-PCIE-8A-C", :enabled => true},
{:interface => 'Ethernet', :rate => 1.G, :enabled => true},
{:interface => 'Ethernet', :rate => 1.G, :enabled => false}
]
end
end
end
end
\ No newline at end of file
This diff is collapsed.
site :lille do
lookup("net-links").each do |equipment_uid, properties|
network_equipment equipment_uid do |uid|
model properties["model"]
kind properties["kind"]
snmp_community properties["snmp_community"]
vlans properties["vlans"]
routes properties["routes"]
channels properties["channels"]
linecards_array = []
properties["linecards"].each do |linecard_index,linecard|
ports = []
linecard.delete("ports").each do |port_index,port|
port = {"uid"=>port} if port.is_a? String
ports[port_index] = port
end
linecard["ports"] = ports.map{|p| p || {}}
linecards_array[linecard_index] = linecard
end
linecards linecards_array.map{|l| l || {}}
end
end
end
---
gw:
mac: 00:04:96:1d:2c:a0
model: Extreme Networks BD-8810
kind: router
connections:
- linecard: 3
port: 10
rate: 1000000000
trunked: false
uid: capricorne-10
kind: node
- linecard: 3
port: 11
rate: 1000000000
trunked: false
uid: capricorne-11
kind: node
- linecard: 3
port: 12
rate: 1000000000
trunked: false
uid: capricorne-12
kind: node
- linecard: 3
port: 13
rate: 1000000000
trunked: false
uid: capricorne-13
kind: node
- linecard: 3
port: 14
rate: 1000000000
trunked: false
uid: capricorne-14
kind: node
- linecard: 3
port: 15
rate: 1000000000
trunked: false
uid: capricorne-15
kind: node
- linecard: 3
port: 16
rate: 1000000000
trunked: false
uid: capricorne-16
kind: node
- linecard: 3
port: 17
rate: 1000000000
trunked: false
uid: capricorne-17
kind: node
- linecard: 3
port: 18
rate: 1000000000
trunked: false
uid: capricorne-18
kind: node
- linecard: 3
port: 19
rate: 1000000000
trunked: false
uid: capricorne-19
kind: node
- linecard: 3
port: 1
rate: 1000000000
trunked: false
uid: capricorne-1
kind: node
- linecard: 3
port: 20
rate: 1000000000
trunked: false
uid: capricorne-20
kind: node
- linecard: 3
port: 21
rate: 1000000000
trunked: false
uid: capricorne-21
kind: node
- linecard: 3
port: 22
rate: 1000000000
trunked: false
uid: capricorne-22
kind: node
- linecard: 3
port: 23
rate: 1000000000
trunked: false
uid: capricorne-23
kind: node
- linecard: 3
port: 24
rate: 1000000000
trunked: false
uid: capricorne-24
kind: node
- linecard: 3
port: 25
rate: 1000000000
trunked: false
uid: capricorne-25
kind: node
- linecard: 3
port: 26
rate: 1000000000
trunked: false
uid: capricorne-26
kind: node
- linecard: 3
port: 27
rate: 1000000000
trunked: false
uid: capricorne-27
kind: node
- linecard: 3
port: 28
rate: 1000000000
trunked: false
uid: capricorne-28
kind: node
- linecard: 3
port: 29
rate: 1000000000
trunked: false
uid: capricorne-29
kind: node
- linecard: 3
port: 2
rate: 1000000000
trunked: false
uid: capricorne-2
kind: node
- linecard: 3
port: 30
rate: 1000000000
trunked: false
uid: capricorne-30
kind: node
- linecard: 3
port: 31
rate: 1000000000
trunked: false
uid: capricorne-31
kind: node
- linecard: 3
port: 32
rate: 1000000000
trunked: false
uid: capricorne-32
kind: node
- linecard: 3
port: 33
rate: 1000000000
trunked: false
uid: capricorne-33
kind: node
- linecard: 3
port: 34
rate: 1000000000
trunked: false
uid: capricorne-34
kind: node
- linecard: 3
port: 35
rate: 1000000000
trunked: false
uid: capricorne-35
kind: node
- linecard: 3
port: 36
rate: 1000000000
trunked: false
uid: capricorne-36
kind: node
- linecard: 3
port: 37
rate: 1000000000
trunked: false
uid: capricorne-37
kind: node
- linecard: 3
port: 38
rate: 1000000000
trunked: false
uid: capricorne-38
kind: node
- linecard: 3
port: 39
rate: 1000000000
trunked: false
uid: capricorne-39
kind: node
- linecard: 3
port: 3
rate: 1000000000
trunked: false
uid: capricorne-3
kind: node
- linecard: 3
port: 40
rate: 1000000000
trunked: false
uid: capricorne-40
kind: node
- linecard: 3
port: 41
rate: 1000000000
trunked: false
uid: capricorne-41
kind: node
- linecard: 3
port: 42
rate: 1000000000
trunked: false
uid: capricorne-42
kind: node
- linecard: 3
port: 43
rate: 1000000000
trunked: false
uid: capricorne-43
kind: node
- linecard: 3
port: 44
rate: 1000000000
trunked: false
uid: capricorne-44
kind: node
- linecard: 3
port: 45
rate: 1000000000
trunked: false
uid: capricorne-45
kind: node
- linecard: 3
port: 46
rate: 1000000000
trunked: false
uid: capricorne-46
kind: node
- linecard: 3
port: 47
rate: 1000000000
trunked: false
uid: capricorne-47
kind: node
- linecard: 3
port: 48
rate: 1000000000
trunked: false
uid: capricorne-48
kind: node
- linecard: 4
port: 1
rate: 1000000000
trunked: false
uid: capricorne-49
kind: node
- linecard: 3
port: 4
rate: 1000000000
trunked: false
uid: capricorne-4
kind: node
- linecard: 4
port: 2
rate: 1000000000
trunked: false
uid: capricorne-50
kind: node
- linecard: 4
port: 3
rate: 1000000000
trunked: false
uid: capricorne-51
kind: node
- linecard: 4
port: 4
rate: 1000000000
trunked: false
uid: capricorne-52
kind: node
- linecard: 4
port: 5
rate: 1000000000
trunked: false
uid: capricorne-53
kind: node
- linecard: 4
port: 6
rate: 1000000000
trunked: false
uid: capricorne-54
kind: node
- linecard: 4
port: 7
rate: 1000000000
trunked: false
uid: capricorne-55
kind: node
- linecard: 4
port: 8
rate: 1000000000
trunked: false
uid: capricorne-56
kind: node
- linecard: 3
port: 5
rate: 1000000000
trunked: false
uid: capricorne-5
kind: node
- linecard: 3
port: 6
rate: 1000000000
trunked: false
uid: capricorne-6
kind: node
- linecard: 3
port: 7
rate: 1000000000
trunked: false
uid: capricorne-7
kind: node
- linecard: 3
port: 8
rate: 1000000000
trunked: false
uid: capricorne-8
kind: node
- linecard: 3
port: 9
rate: 1000000000
trunked: false
uid: capricorne-9
kind: node
- linecard: 1
port: 10
rate: 1000000000
trunked: false
uid: sagittaire-10
kind: node
- linecard: 1
port: 11
rate: 1000000000
trunked: false
uid: sagittaire-11
kind: node
- linecard: 1
port: 12
rate: 1000000000
trunked: false
uid: sagittaire-12
kind: node
- linecard: 1
port: 13
rate: 1000000000
trunked: false
uid: sagittaire-13
kind: node
- linecard: 1
port: 14
rate: 1000000000
trunked: false
uid: sagittaire-14
kind: node
- linecard: 1
port: 15
rate: 1000000000
trunked: false
uid: sagittaire-15
kind: node
- linecard: 1
port: 16
rate: 1000000000
trunked: false
uid: sagittaire-16
kind: node
- linecard: 1
port: 17
rate: 1000000000
trunked: false
uid: sagittaire-17
kind: node
- linecard: 1
port: 18
rate: 1000000000
trunked: false
uid: sagittaire-18
kind: node
- linecard: 1
port: 19
rate: 1000000000
trunked: false
uid: sagittaire-19
kind: node
- linecard: 1
port: 1
rate: 1000000000
trunked: false
uid: sagittaire-1
kind: node
- linecard: 1
port: 20
rate: 1000000000
trunked: false
uid: sagittaire-20
kind: node
- linecard: 1
port: 21
rate: 1000000000
trunked: false
uid: sagittaire-21
kind: node
- linecard: 1
port: 22
rate: 1000000000
trunked: false
uid: sagittaire-22
kind: node
- linecard: 1
port: 23
rate: 1000000000
trunked: false
uid: sagittaire-23
kind: node
- linecard: 1
port: 24
rate: 1000000000
trunked: false
uid: sagittaire-24
kind: node
- linecard: 1
port: 25
rate: 1000000000
trunked: false
uid: sagittaire-25
kind: node
- linecard: 1
port: 26
rate: 1000000000
trunked: false
uid: sagittaire-26
kind: node
- linecard: 1
port: 27
rate: 1000000000
trunked: false
uid: sagittaire-27
kind: node
- linecard: 1
port: 28
rate: 1000000000
trunked: false
uid: sagittaire-28
kind: node
- linecard: 1
port: 29
rate: 1000000000
trunked: false
uid: sagittaire-29
kind: node
- linecard: 1
port: 2
rate: 1000000000
trunked: false
uid: sagittaire-2
kind: node
- linecard: 1
port: 30
rate: 1000000000
trunked: false
uid: sagittaire-30
kind: node
- linecard: 1
port: 31
rate: 1000000000
trunked: false
uid: sagittaire-31
kind: node
- linecard: 1
port: 32
rate: 1000000000
trunked: false
uid: sagittaire-32
kind: node
- linecard: 1
port: 33
rate: 1000000000
trunked: false
uid: sagittaire-33
kind: node
- linecard: 1
port: 34
rate: 1000000000
trunked: false
uid: sagittaire-34
kind: node
- linecard: 1
port: 35
rate: 1000000000
trunked: false
uid: sagittaire-35
kind: node
- linecard: 1
port: 36
rate: 1000000000
trunked: false
uid: sagittaire-36
kind: node
- linecard: 1
port: 37
rate: 1000000000
trunked: false
uid: sagittaire-37
kind: node
- linecard: 1
port: 38
rate: 1000000000
trunked: false
uid: sagittaire-38
kind: node
- linecard: 1
port: 39
rate: 1000000000
trunked: false
uid: sagittaire-39
kind: node
- linecard: 1
port: 3
rate: 1000000000
trunked: false
uid: sagittaire-3
kind: node
- linecard: 1
port: 40
rate: 1000000000
trunked: false
uid: sagittaire-40
kind: node
- linecard: 1
port: 41
rate: 1000000000
trunked: false
uid: sagittaire-41
kind: node
- linecard: 1
port: 42
rate: 1000000000
trunked: false
uid: sagittaire-42
kind: node
- linecard: 1
port: 43
rate: 1000000000
trunked: false
uid: sagittaire-43
kind: node
- linecard: 1
port: 44
rate: 1000000000
trunked: false
uid: sagittaire-44
kind: node
- linecard: 1
port: 45
rate: 1000000000
trunked: false
uid: sagittaire-45
kind: node
- linecard: 1
port: 46
rate: 1000000000
trunked: false
uid: sagittaire-46
kind: node
- linecard: 1
port: 47
rate: 1000000000
trunked: false
uid: sagittaire-47
kind: node
- linecard: 1
port: 48
rate: 1000000000
trunked: false
uid: sagittaire-48
kind: node
- linecard: 2
port: 1
rate: 1000000000
trunked: false
uid: sagittaire-49
kind: node
- linecard: 1
port: 4
rate: 1000000000
trunked: false
uid: sagittaire-4
kind: node
- linecard: 2
port: 2
rate: 1000000000
trunked: false
uid: sagittaire-50
kind: node
- linecard: 2
port: 3
rate: 1000000000
trunked: false
uid: sagittaire-51
kind: node
- linecard: 2
port: 4
rate: 1000000000
trunked: false
uid: sagittaire-52
kind: node
- linecard: 2
port: 5
rate: 1000000000
trunked: false
uid: sagittaire-53
kind: node
- linecard: 2
port: 6
rate: 1000000000
trunked: false
uid: sagittaire-54
kind: node
- linecard: 2
port: 7
rate: 1000000000
trunked: false
uid: sagittaire-55
kind: node
- linecard: 2
port: 8
rate: 1000000000
trunked: false
uid: sagittaire-56
kind: node
- linecard: 2
port: 9
rate: 1000000000
trunked: false
uid: sagittaire-57
kind: node
- linecard: 2
port: 10
rate: 1000000000
trunked: false
uid: sagittaire-58
kind: node
- linecard: 2
port: 11
rate: 1000000000
trunked: false
uid: sagittaire-59
kind: node
- linecard: 2
port: 5
rate: 1000000000
trunked: false
uid: sagittaire-5
kind: node
- linecard: 2
port: 12
rate: 1000000000
trunked: false
uid: sagittaire-60
kind: node
- linecard: 2
port: 13
rate: 1000000000
trunked: false
uid: sagittaire-61
kind: node
- linecard: 2
port: 14
rate: 1000000000
trunked: false
uid: sagittaire-62
kind: node
- linecard: 2
port: 15
rate: 1000000000
trunked: false
uid: sagittaire-63
kind: node
- linecard: 2
port: 16
rate: 1000000000
trunked: false
uid: sagittaire-64
kind: node
- linecard: 2
port: 17
rate: 1000000000
trunked: false
uid: sagittaire-65
kind: node
- linecard: 2
port: 18
rate: 1000000000
trunked: false
uid: sagittaire-66
kind: node
- linecard: 2
port: 19
rate: 1000000000
trunked: false
uid: sagittaire-67
kind: node
- linecard: 2
port: 20
rate: 1000000000
trunked: false
uid: sagittaire-68
kind: node
- linecard: 2
port: 21
rate: 1000000000
trunked: false
uid: sagittaire-69
kind: node
- linecard: 1
port: 6
rate: 1000000000
trunked: false
uid: sagittaire-6
kind: node
- linecard: 2
port: 22
rate: 1000000000
trunked: false
uid: sagittaire-70
kind: node
- linecard: 2
port: 23
rate: 1000000000
trunked: false
uid: sagittaire-71
kind: node
- linecard: 2
port: 24
rate: 1000000000
trunked: false
uid: sagittaire-72
kind: node
- linecard: 2
port: 25
rate: 1000000000
trunked: false
uid: sagittaire-73
kind: node
- linecard: 2
port: 26
rate: 1000000000
trunked: false
uid: sagittaire-74
kind: node
- linecard: 2
port: 27
rate: 1000000000
trunked: false
uid: sagittaire-75
kind: node
- linecard: 2
port: 28
rate: 1000000000
trunked: false
uid: sagittaire-76
kind: node
- linecard: 2
port: 29
rate: 1000000000
trunked: false
uid: sagittaire-77
kind: node
- linecard: 2
port: 30
rate: 1000000000
trunked: false
uid: sagittaire-78
kind: node
- linecard: 2
port: 31
rate: 1000000000
trunked: false
uid: sagittaire-79
kind: node
- linecard: 1
port: 7
rate: 1000000000
trunked: false
uid: sagittaire-7
kind: node
- linecard: 1
port: 8
rate: 1000000000
trunked: false
uid: sagittaire-8
kind: node
- linecard: 1
port: 9
rate: 1000000000
trunked: false
uid: sagittaire-9
kind: node
trunks: []
This diff is collapsed.
---
gw:
model: HP Procurve 5406zl
kind: router
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: switch
rate: 10000
ports:
3: sgraphene3
4: sgriffon2
2:
naming_pattern: "%LINECARD:A%%PORT%"
kind: switch
rate: 10000
ports:
1: sgraphene1
2: sgraphene2
4: sgraphene4
3:
naming_pattern: "%LINECARD:A%%PORT%"
kind: switch
rate: 10000
ports:
3: sgriffon3
4: sgriffon1
channels:
naming_pattern: Po%CHANNELID%
sgraphene1:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: graphene-1
1: graphene-2
4: graphene-3
3: graphene-4
6: graphene-5
5: graphene-6
8: graphene-7
12: graphene-8
11: graphene-9
7: graphene-10
10: graphene-11
9: graphene-12
14: graphene-13
13: graphene-14
16: graphene-15
15: graphene-16
18: graphene-17
17: graphene-18
20: graphene-19
19: graphene-20
22: graphene-21
21: graphene-22
24: graphene-23
23: graphene-24
26: graphene-25
25: graphene-26
28: graphene-27
27: graphene-28
30: graphene-29
29: graphene-30
32: graphene-31
31: graphene-32
34: graphene-33
33: graphene-34
36: graphene-35
35: graphene-36
38: graphene-37
37: graphene-38
40: graphene-39
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
2: gw
channels:
naming_pattern: Po%CHANNELID%
sgraphene2:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: graphene-41
1: graphene-40
3: graphene-42
4: graphene-43
5: graphene-44
6: graphene-45
7: graphene-46
8: graphene-47
9: graphene-48
10: graphene-49
11: graphene-50
12: graphene-51
13: graphene-52
14: graphene-53
15: graphene-54
16: graphene-55
17: graphene-56
18: graphene-57
19: graphene-58
20: graphene-59
21: graphene-60
22: graphene-61
23: graphene-62
24: graphene-63
25: graphene-64
26: graphene-65
27: graphene-66
28: graphene-67
29: graphene-68
30: graphene-69
31: graphene-70
32: graphene-71
33: graphene-72
34: graphene-73
35: graphene-74
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
2: gw
channels:
naming_pattern: Po%CHANNELID%
sgraphene3:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: graphene-75
1: graphene-76
4: graphene-77
3: graphene-78
6: graphene-79
5: graphene-80
8: graphene-81
7: graphene-82
10: graphene-83
9: graphene-84
12: graphene-85
11: graphene-86
14: graphene-87
13: graphene-88
16: graphene-89
15: graphene-90
18: graphene-91
17: graphene-92
20: graphene-93
19: graphene-94
22: graphene-95
21: graphene-96
24: graphene-97
23: graphene-98
26: graphene-99
25: graphene-100
28: graphene-101
27: graphene-102
30: graphene-103
29: graphene-104
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
2: gw
channels:
naming_pattern: Po%CHANNELID%
sgraphene4:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: graphene-106
1: graphene-105
3: graphene-107
4: graphene-108
5: graphene-109
6: graphene-110
7: graphene-111
8: graphene-112
9: graphene-113
10: graphene-114
11: graphene-115
12: graphene-116
13: graphene-117
14: graphene-118
15: graphene-119
16: graphene-120
17: graphene-121
18: graphene-122
19: graphene-123
20: graphene-124
21: graphene-125
22: graphene-126
23: graphene-127
24: graphene-128
25: graphene-129
26: graphene-130
27: graphene-131
28: graphene-132
29: graphene-133
30: graphene-134
31: graphene-135
32: graphene-136
33: graphene-137
34: graphene-138
35: graphene-139
36: graphene-140
37: graphene-141
38: graphene-142
39: graphene-143
40: graphene-144
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
1: gw
channels:
naming_pattern: Po%CHANNELID%
sgriffon1:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: griffon-2
1: griffon-1
3: griffon-3
4: griffon-4
5: griffon-5
6: griffon-6
7: griffon-7
8: griffon-8
10: griffon-9
9: griffon-10
25: griffon-11
26: griffon-12
27: griffon-13
28: griffon-14
29: griffon-15
30: griffon-16
31: griffon-17
32: griffon-18
33: griffon-19
34: griffon-20
35: griffon-21
36: griffon-22
37: griffon-23
38: griffon-24
39: griffon-25
40: griffon-26
41: griffon-27
42: griffon-28
43: griffon-29
11: griffon-58
12: griffon-59
13: griffon-60
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
2: gw
channels:
naming_pattern: Po%CHANNELID%
sgriffon2:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: griffon-31
1: griffon-30
3: griffon-32
4: griffon-33
5: griffon-34
6: griffon-35
7: griffon-36
8: griffon-37
9: griffon-38
25: griffon-39
26: griffon-40
27: griffon-41
28: griffon-42
29: griffon-43
30: griffon-44
31: griffon-45
32: griffon-46
33: griffon-47
34: griffon-48
35: griffon-49
37: griffon-50
36: griffon-51
38: griffon-52
39: griffon-53
40: griffon-54
41: griffon-55
42: griffon-56
43: griffon-57
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
1: gw
channels:
naming_pattern: Po%CHANNELID%
sgriffon3:
model: 3com 4500g
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
4: griffon-61
5: griffon-62
6: griffon-63
7: griffon-64
8: griffon-65
9: griffon-66
10: griffon-67
11: griffon-68
12: griffon-69
13: griffon-70
14: griffon-71
15: griffon-72
25: griffon-73
26: griffon-74
27: griffon-75
28: griffon-76
29: griffon-77
30: griffon-78
31: griffon-79
32: griffon-80
33: griffon-81
34: griffon-82
35: griffon-83
36: griffon-84
37: griffon-85
38: griffon-86
39: griffon-87
40: griffon-88
41: griffon-89
42: griffon-90
43: griffon-91
44: griffon-92
1:
naming_pattern: "%LINECARD:A%%PORT%"
kind: router
rate: 10000
ports:
1: gw
channels:
naming_pattern: Po%CHANNELID%
stalc1:
model: hp procurve
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
1: talc-1
3: talc-2
6: talc-3
7: talc-4
8: talc-5
9: talc-6
10: talc-7
11: talc-8
12: talc-9
13: talc-10
14: talc-11
15: talc-12
16: talc-13
17: talc-14
18: talc-15
19: talc-16
20: talc-17
21: talc-18
25: talc-19
26: talc-20
27: talc-21
28: talc-22
29: talc-23
30: talc-24
31: talc-25
32: talc-26
33: talc-27
34: talc-28
35: talc-29
36: talc-30
37: talc-31
38: talc-32
39: talc-33
40: talc-34
41: talc-35
42: talc-36
43: talc-37
5: talc-134
channels:
naming_pattern: Po%CHANNELID%
stalc2:
model: hp procurve
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
3: talc-38
4: talc-39
5: talc-40
6: talc-41
7: talc-42
8: talc-43
9: talc-44
10: talc-45
11: talc-46
12: talc-47
13: talc-48
14: talc-49
25: talc-50
26: talc-51
27: talc-52
28: talc-53
29: talc-54
30: talc-55
31: talc-56
32: talc-57
33: talc-58
34: talc-59
35: talc-60
36: talc-61
37: talc-62
38: talc-63
39: talc-64
40: talc-65
41: talc-66
42: talc-67
channels:
naming_pattern: Po%CHANNELID%
stalc3:
model: hp procurve
kind: switch
site: nancy
snmp_community: public
vlans:
naming_pattern: Vlan%VLANID%
routes: {}
linecards:
0:
naming_pattern: "%PORT%"
kind: node
rate: 1000
ports:
2: talc-69
1: talc-68
3: talc-70
4: talc-71
5: talc-72
6: talc-73
7: talc-74
8: talc-75
9: talc-76
10: talc-77
11: talc-78
12: talc-79
13: talc-80
14: talc-81
15: talc-82
16: talc-83
17: talc-84
18: talc-85
19: talc-86
20: talc-87
25: talc-88
26: talc-89
27: talc-90
28: talc-91
29: talc-92
30: talc-93
31: talc-94
32: talc-95
33: talc-96
34: talc-97
35: talc-98
36: talc-99
37: talc-100
38: talc-101
39: talc-102
40: talc-103
41: talc-104
42: talc-133
channels:
naming_pattern: Po%CHANNELID%
# Parse net-links given through @config parameter
# @config parameter contains nothin but net-links yaml configurations
@config.each do |equipment_uid, properties|
properties = properties[equipment_uid]
site_name = properties["site"]
site site_name.to_sym do |site|
network_equipment equipment_uid do |uid|
# Most properties are directly written as they are from the net-links YAML file to the the JSON file
model properties["model"]
kind properties["kind"]
# @context.recursive_merge!(:site => site)
snmp_community properties["snmp_community"]
vlans properties["vlans"]
routes properties["routes"]
channels properties["channels"]
# Change the format of linecard from Hash to Array
linecards_array = []
properties["linecards"].each do |linecard_index,linecard|
ports = []
linecard.delete("ports").each do |port_index,port|
port = {"uid"=>port} if port.is_a? String
ports[port_index] = port
end
linecard["ports"] = ports.map{|p| p || {}}
linecards_array[linecard_index] = linecard
end
linecards linecards_array.map{|l| l || {}}
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment