Class: Mantra::Transform::TemplatizeIpAddress
Defined Under Namespace
Classes: QuadSplitter
Instance Method Summary
collapse
#is_scope?, #templatize
#to_regexp
description, #ensure_yml_file_exist, input, inputs, #merge_tool, #previous_transform, #raise_error_if_no_source_manifest, #run, #source_manifest, #target_manifest, #validate_inputs
included
Instance Method Details
#ip_address_matcher ⇒ Object
58
59
60
|
# File 'lib/mantra/transform/templatize_ip_address.rb', line 58
def ip_address_matcher
"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})"
end
|
#is_ip_address?(value) ⇒ Boolean
70
71
72
|
# File 'lib/mantra/transform/templatize_ip_address.rb', line 70
def is_ip_address?(value)
!!value.to_s.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
end
|
#is_ip_range?(value) ⇒ Boolean
66
67
68
|
# File 'lib/mantra/transform/templatize_ip_address.rb', line 66
def is_ip_range?(value)
!!value.to_s.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\s*-\s*(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
end
|
#is_network_range?(value) ⇒ Boolean
62
63
64
|
# File 'lib/mantra/transform/templatize_ip_address.rb', line 62
def is_network_range?(value)
!!value.to_s.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/\d{1,2}$/)
end
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/mantra/transform/templatize_ip_address.rb', line 20
def perform
raise_error_if_no_source_manifest
ensure_yml_file_exist(self.target)
source_manifest.traverse do |node|
template, values = if is_ip_address?(node.content)
splitter = QuadSplitter.new(node.content, quads)
["(( #{splitter.parts(templatize: true).join(" ")} ))", splitter.values]
elsif is_network_range?(node.content)
ip_address, network_prefix_size = *node.content.split("/")
puts "NETWORK RANGE! #{[ip_address, network_prefix_size].inspect}"
splitter = QuadSplitter.new(ip_address, quads)
network_range_parts = splitter.parts + ["/#{network_prefix_size}"]
resulting_template = "(( #{templatize(network_range_parts).join(" ")} ))"
[resulting_template, splitter.values]
elsif is_ip_range?(node.content)
ip_address1, ip_address2 = *node.content.split("-").map { |ip| ip.strip }
splitter1 = QuadSplitter.new(ip_address1, quads)
splitter2 = QuadSplitter.new(ip_address2, quads)
result = templatize(splitter1.parts + ["-"] + splitter2.parts)
["(( #{result.join(" ")} ))", splitter1.values]
end
unless template.nil?
puts template.inspect if node.content == "192.168.3.0/24"
raise UnknownScopeError.new("Can't templatize non leaf ip address") unless node.leaf?
node.content = template
values.each_pair do |scope, value|
scope_element = Manifest::Element.element_with_selector(scope, value)
target_manifest.merge(scope_element)
end
end
end
source_manifest.save
target_manifest.save
end
|