lib/junos-config/config.rb in junos-config-0.2.0 vs lib/junos-config/config.rb in junos-config-0.3.0

- old
+ new

@@ -1,20 +1,35 @@ module JunosConfig class Config attr_reader :raw, + :last_changed, + :version, + :hostname, :interfaces, :security_zones, - :security_policies + :security_policies, + :applications, + :application_sets def initialize(raw) @raw = raw + + m = raw.match(/Last\ changed:\ (.*?)\nversion\ (\S+);/m) + @last_changed = m[1] if m + @version = m[2] if m + raw.scan(/^(\w+)\ \{$(.*?)^\}$/m).each do |section| method = "parse_#{section[0]}" send method, section[1] if respond_to?(method) end end + def parse_groups(raw_section) + m = raw_section.match(/host\-name\ (\S+)-\S;/m) + @hostname = m[1] + end + def parse_interfaces(raw_section) @interfaces = raw_section.scan(/^(\ {4}\S+\ \{$.*?^\ {4}\})$/m).collect do |x| Interface.new self, x[0] end end @@ -29,8 +44,32 @@ x[2].scan(/(\ {12}policy \S+ \{$.*?^\ {12}\}$)/m).collect do |y| Security::Policy.new self, y[0], from_zone, to_zone end end @security_policies.flatten! + end + + def parse_applications(raw_section) + @applications = raw_section.scan(/^(\ {4}application\ \S+ \{$.*?^\ {4}\})$/m).collect do |x| + Application.new self, x[0] + end + @application_lookup = {} + @applications.each{|a| @application_lookup[a.name] = a } + @application_sets = raw_section.scan(/^(\ {4}application\-set\ \S+ \{$.*?^\ {4}\})$/m).collect do |x| + ApplicationSet.new self, x[0] + end + @application_sets.each{|a| @application_lookup[a.name] = a } + + @security_policies.each do |policy| + policy.application.collect! {|name| application(name) } + end + end + + def application(name) + if name =~ /any|ESP|esp|junos\-/ + # junos internal applications + return name + end + @application_lookup[name] end end end