module Construqt::Util
Constants
- PORTS_DEF_REGEXP
- PORT_NAME_REGEXP
Public Class Methods
add_clean_ip_pattern(pat)
click to toggle source
# File lib/construqt/util.rb, line 85 def self.add_clean_ip_pattern(pat) @clean_if << pat end
add_gre_prefix(name)
click to toggle source
# File lib/construqt/util.rb, line 76 def self.add_gre_prefix(name) unless name.start_with?("gt") return "gt"+name end name end
clean_bgp(name)
click to toggle source
# File lib/construqt/util.rb, line 99 def self.clean_bgp(name) name.gsub(/[^a-z0-9]/, '_') end
clean_if(prefix, name)
click to toggle source
# File lib/construqt/util.rb, line 89 def self.clean_if(prefix, name) unless name.start_with?(prefix) name = prefix+name end name = name.gsub(/[^a-z0-9]/, '') @clean_if.each { |pat| name.gsub!(pat, '') } name end
createRangeDefinition(ports)
click to toggle source
# File lib/construqt/util.rb, line 107 def self.createRangeDefinition(ports) ranges=[] lastPort=nil #remove duplicates ports.uniq.sort do |l,r| fc = l.to_s.length <=> r.to_s.length fc!=0 ? fc : l<=>r end.each do |port| port = port.to_s if (ranges.length>0 && portNeighbors?(port, ranges[ranges.length-1]["to"])) ranges[ranges.length-1]["to"] = port else ranges << {"from" => port, "to" => port} end end ranges = ranges.map do |range| range["from"] == range["to"] ? range["from"] : range["from"] +"-"+range["to"] end #puts "self.createRangeDefinition[#{ports}]=>#{ranges}" ranges.join(",") end
expandRangeDefinition(list_str)
click to toggle source
# File lib/construqt/util.rb, line 133 def self.expandRangeDefinition(list_str) ports = list_str.strip.split(",").map do |range_def| range = range_def.split("-") if (range.length==1) range elsif (range.length==2) range[0]=~/#{PORT_NAME_REGEXP}/ prefix_from=$1 from = $2 range[1]=~/#{PORT_NAME_REGEXP}/ prefix_to=$1 to = $2 throw "port prefixes differ" unless prefix_from==prefix_to (from.to_i .. to.to_i).map {|n| prefix_from + n.to_s } else throw "invalid range found #{range_def}" end end ports.flatten end
generate_mac_address_from_name(name)
click to toggle source
# File lib/construqt/util.rb, line 154 def self.generate_mac_address_from_name(name) # http://www.iana.org/assignments/ethernet-numbers/ethernet-numbers.xhtml '8f:'+Digest::SHA256.hexdigest("#{name}").scan(/../)[0,5].join(':') end
indent(body, ident)
click to toggle source
# File lib/construqt/util.rb, line 159 def self.indent(body, ident) if ident.kind_of?(Fixnum) ident = (1..ident).to_a.map{' '}.join('') end body.lines.map { |line| ident+line.chomp.strip }.join("\n") end
password(a)
click to toggle source
# File lib/construqt/util.rb, line 72 def self.password(a) a end
portNeighbors?(port1, port2)
click to toggle source
# File lib/construqt/util.rb, line 103 def self.portNeighbors?(port1, port2) port2.succ == port1 || port1.succ == port2 end
write_str(str, *path)
click to toggle source
# File lib/construqt/util.rb, line 64 def self.write_str(str, *path) path = File.join("cfgs", *path) FileUtils.mkdir_p(File.dirname(path)) File.open(path, 'w') {|f| f.write(str) } Construqt.logger.info "Write:#{path}" return str end