lib/junos-config/config.rb in junos-config-0.1.0 vs lib/junos-config/config.rb in junos-config-0.2.0
- old
+ new
@@ -1,20 +1,36 @@
module JunosConfig
class Config
- attr_reader :config,
- :interfaces
+ attr_reader :raw,
+ :interfaces,
+ :security_zones,
+ :security_policies
- def initialize(config)
- @config = config
- config.scan(/^(\w+)\ \{$(.*?)^\}$/m).each do |section|
+ def initialize(raw)
+ @raw = raw
+ raw.scan(/^(\w+)\ \{$(.*?)^\}$/m).each do |section|
method = "parse_#{section[0]}"
send method, section[1] if respond_to?(method)
end
end
- def parse_interfaces(raw)
- @interfaces = raw.scan(/^(\ {4}\S+\ \{$.*?^\ {4}\})$/m).collect do |section|
- Interface.new section[0]
+ def parse_interfaces(raw_section)
+ @interfaces = raw_section.scan(/^(\ {4}\S+\ \{$.*?^\ {4}\})$/m).collect do |x|
+ Interface.new self, x[0]
end
+ end
+
+ def parse_security(raw_section)
+ @security_zones = raw_section.scan(/^(\ {8}security\-zone\ \S+ \{$.*?^\ {8}\})$/m).collect do |x|
+ Security::Zone.new self, x[0]
+ end
+ @security_policies = raw_section.scan(/^\ {8}from\-zone\ (\S+) to\-zone (\S+) \{$(.*?)^\ {8}\}$/m).collect do |x|
+ from_zone = security_zones.find{ |zone| zone.name == x[0] }
+ to_zone = security_zones.find{ |zone| zone.name == x[1] }
+ 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
end
end