iosparse 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.md +1 -1
  2. data/iosparse.gemspec +1 -1
  3. data/lib/iosparse.rb +72 -22
  4. metadata +1 -1
data/README.md CHANGED
@@ -2,7 +2,7 @@ IOSParse will parse Cisco IOS configuration files, more functionality coming.
2
2
 
3
3
  # How do I use it?
4
4
  Good question. First install it using `gem install iosparse`.
5
- Then use it. Create a new IOSParse object and pass it filename of the Cisco IOS config file (usually a show all type of dump file). Then ask it questions:
5
+ Then use it. Create a new IOSParse object passing it the filename of the Cisco IOS config file (usually a show all type of dump file). Then ask it questions:
6
6
 
7
7
  ````
8
8
  config = IOSParse.new('path/to/ios.conf')
data/iosparse.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "iosparse"
5
- s.version = "0.0.3"
5
+ s.version = "0.0.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ari Mizrahi"]
data/lib/iosparse.rb CHANGED
@@ -16,23 +16,33 @@ class IOSParse
16
16
  end
17
17
 
18
18
  #
19
- # Find all interfaces in the configuration file
19
+ # Find all interfaces
20
20
  #
21
21
  def interfaces
22
22
  # Regex to parse out interfaces
23
23
  interfaces = /\["interface[\s\S]+/
24
- # Call findblocks() passing regex, parent name, and parse boolean
25
- findblocks(interfaces, "interface", false)
24
+ # Call find_blocks() passing regex, parent name, and parse boolean
25
+ find_blocks(interfaces, "interface", false)
26
26
  end
27
27
 
28
28
  #
29
- # Find all names in the configuration file
29
+ # Find all interfaces in monitor mode
30
+ #
31
+ def monitor_interfaces
32
+ # Regex to parse out the monitor interfaces
33
+ interfaces = /monitor-interface.+/
34
+ # Call find_lines() passing regex, parent name, and parse boolean
35
+ find_lines(interfaces, "monitor-interface", false)
36
+ end
37
+
38
+ #
39
+ # Find all names
30
40
  #
31
41
  def names
32
42
  # Regex to parse out names
33
43
  names = /\["names[\s\S]+/
34
- # Call findblocks() passing regex, parent name, and parse boolean
35
- findblocks(names, "names", false)
44
+ # Call find_blocks() passing regex, parent name, and parse boolean
45
+ find_blocks(names, "names", false)
36
46
  end
37
47
 
38
48
  #
@@ -41,18 +51,18 @@ class IOSParse
41
51
  def routes
42
52
  # Regex to parse out routes
43
53
  routes = /\["route[\s\S]+/
44
- # Call findblocks() passing regex, parent name, and parse boolean
45
- findblocks(routes, "route", false)
54
+ # Call find_blocks() passing regex, parent name, and parse boolean
55
+ find_blocks(routes, "route", false)
46
56
  end
47
57
 
48
58
  #
49
- # Find all ACL
59
+ # Find all access-lists
50
60
  #
51
61
  def access_list
52
62
  # Regex to parse out acl
53
63
  acl = /access-list[\s\S]+/
54
- # Call findblocks() passing regex, parent name, and parse boolean
55
- findblocks(acl, "access-list", true)
64
+ # Call find_blocks() passing regex, parent name, and parse boolean
65
+ find_blocks(acl, "access-list", true)
56
66
  end
57
67
 
58
68
  #
@@ -61,8 +71,8 @@ class IOSParse
61
71
  def object_group
62
72
  # Regex to parse out object-groups
63
73
  group = /object-group[\s\S]+/
64
- # Call findblocks() passing regex, parent name, and parse boolean
65
- findblocks(group, "object-group", true)
74
+ # Call find_blocks() passing regex, parent name, and parse boolean
75
+ find_blocks(group, "object-group", true)
66
76
  end
67
77
 
68
78
  private
@@ -70,7 +80,7 @@ class IOSParse
70
80
  #
71
81
  # Primary method to accept regex and parent, then use them to parse blocks and store them in an Array
72
82
  #
73
- def findblocks(filter, parent, parse = true)
83
+ def find_blocks(filter, parent, parse)
74
84
  # Array to store parsed blocks
75
85
  output = Array.new
76
86
  @blocks.each do |block|
@@ -79,7 +89,7 @@ class IOSParse
79
89
  end
80
90
  # Some parents are not within "!" blocks and require some extra work
81
91
  if parse == true then
82
- parse_parent(clean_object_group(output), parent)
92
+ parse_parent(clean_parent(output), parent)
83
93
  else
84
94
  # Return the parsed block as an array
85
95
  output
@@ -87,9 +97,28 @@ class IOSParse
87
97
  end
88
98
 
89
99
  #
90
- # Remove extra characters from object-groups
100
+ # Primary method to accept regex and parent, then use them to parse lines and store them in an Array
91
101
  #
92
- def clean_object_group(block)
102
+ def find_lines(filter, parent, parse)
103
+ # Array to store parsed blocks
104
+ output = Array.new
105
+ @blocks.each do |block|
106
+ # Use regex to filter via scan() then split each line
107
+ block.to_s.match(filter).to_s.split('\n').each do |line|
108
+ # Skip unless the parent is in the line
109
+ next unless line.match(filter)
110
+ # Push matches to array
111
+ output << normalize_line(line.match(filter))
112
+ end
113
+ end
114
+ # Return the parsed block as an array
115
+ output
116
+ end
117
+
118
+ #
119
+ # Remove extra characters from parents
120
+ #
121
+ def clean_parent(block)
93
122
  # Array to store parsed blocks
94
123
  output = Array.new
95
124
  block.each do |line|
@@ -101,23 +130,44 @@ class IOSParse
101
130
  end
102
131
 
103
132
  #
104
- # Some parents come as a single string, we break each parents into a string and push into an array
133
+ # Some parents come as a single string, we break each parent into a string and push into an array
105
134
  #
106
135
  def parse_parent(block, parent)
107
136
  # Array to store parsed blocks
108
137
  output = Array.new
109
138
  block.each do |line|
110
139
  # Split the line where each parent begins
111
- line.to_s.split(parent).each do |push|
140
+ line.to_s.split(parent).each do |data|
112
141
  # Skip empty lines
113
- next if push.include?('["')
142
+ next if data.include?('["')
114
143
  # Remove extra "] characters from each line
115
- push = push.gsub('"]', '')
144
+ data = data.gsub('"]', '')
116
145
  # Re-add parent to the beginning of the line and push it into the array line-by-line
117
- output << "[\"#{parent}#{push}\"]"
146
+ output << "[\"#{parent}#{data}\"]"
118
147
  end
119
148
  end
120
149
  # Return the parsed block as an array
121
150
  output
122
151
  end
152
+
153
+ #
154
+ # Normalize block to standardize returned arrays
155
+ #
156
+ def normalize_block(block)
157
+ # Array to store normalized data
158
+ output = Array.new
159
+ block.each do |data|
160
+ # Normalize data
161
+ output << "[\"#{data}\\\\n\"]"
162
+ end
163
+ # Return the normalized array
164
+ output
165
+ end
166
+
167
+ #
168
+ # Normalize line to standardize returned arrays
169
+ def normalize_line(data)
170
+ # Return normalized data
171
+ "[\"#{data}\\\\n\"]"
172
+ end
123
173
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iosparse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: