smart_proxy_dhcp_infoblox 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/smart_proxy_dhcp_infoblox/common_crud.rb +17 -5
- data/lib/smart_proxy_dhcp_infoblox/dhcp_infoblox_main.rb +23 -5
- data/lib/smart_proxy_dhcp_infoblox/dhcp_infoblox_version.rb +1 -1
- data/lib/smart_proxy_dhcp_infoblox/fixed_address_crud.rb +18 -14
- data/lib/smart_proxy_dhcp_infoblox/host_ipv4_address_crud.rb +14 -8
- data/lib/smart_proxy_dhcp_infoblox/unused_ips.rb +1 -0
- data/test/host_and_fixedaddress_crud_test.rb +42 -17
- data/test/infoblox_provider_test.rb +14 -5
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '085837132cc0862c9f3ffc24e0e2730f8e3adbb3'
|
4
|
+
data.tar.gz: 0f4eba506ee80571addcd1d4a567ba71642870e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42aa2e6637a6e1aaef0379d205e7f59df1e1a9aa477afc0e0b51ef723ed2b4a36560daa784f3b82d303d97e4c96acd010626ca5495f806615e244503973357c1
|
7
|
+
data.tar.gz: 6ee6869da932c9f8ef89a4996d10644cb68ed47c06ff7891e168c6c2d1cfc9948e7fb0e004b94da78e501c3286e3b867e93c7bf277946857bc8ee9b0b5c12742
|
@@ -48,11 +48,25 @@ module ::Proxy::DHCP::Infoblox
|
|
48
48
|
|
49
49
|
def del_record(_, record)
|
50
50
|
raise InvalidRecord, "#{record} is static - unable to delete" unless record.deleteable?
|
51
|
-
found =
|
51
|
+
found = find_hosts('ipv4addr' => record.ip).first
|
52
52
|
return if found.nil?
|
53
53
|
found.delete
|
54
54
|
end
|
55
55
|
|
56
|
+
def del_records_by_ip(ip_address)
|
57
|
+
found = find_hosts({'ipv4addr' => ip_address}, 2147483646)
|
58
|
+
return if found.empty?
|
59
|
+
found.each {|record| record.delete}
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def del_record_by_mac(mac_address)
|
64
|
+
found = find_hosts('mac' => mac_address).first
|
65
|
+
return if found.nil?
|
66
|
+
found.delete
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
56
70
|
def build_reservation(name, host, full_subnet_address)
|
57
71
|
return nil if host.nil?
|
58
72
|
return nil if name.nil? || name.empty?
|
@@ -60,16 +74,14 @@ module ::Proxy::DHCP::Infoblox
|
|
60
74
|
return nil if host.mac.nil? || host.mac.empty?
|
61
75
|
|
62
76
|
opts = { :hostname => name }
|
63
|
-
opts[:mac] = host.mac
|
64
|
-
opts[:ip] = host.ipv4addr
|
65
77
|
opts[:deleteable] = true
|
66
78
|
# TODO: nextserver, use_nextserver, bootfile, and use_bootfile attrs exist but are not available in the Fixedaddress model
|
67
79
|
# Might be useful to extend the model to include these
|
68
80
|
opts[:nextServer] = host.nextserver if (host.respond_to?(:use_nextserver) && host.use_nextserver)
|
69
81
|
opts[:filename] = host.bootfile if (host.respond_to?(:use_bootfile) && host.use_bootfile)
|
70
|
-
|
82
|
+
subnet = ::Proxy::DHCP::Subnet.new(full_subnet_address.split('/').first, cidr_to_ip_mask(cidr_to_i(full_subnet_address.split('/').last)))
|
71
83
|
|
72
|
-
Proxy::DHCP::Reservation.new(opts)
|
84
|
+
Proxy::DHCP::Reservation.new(name, host.ipv4addr, host.mac, subnet, opts)
|
73
85
|
end
|
74
86
|
end
|
75
87
|
end
|
@@ -18,8 +18,6 @@ module Proxy::DHCP::Infoblox
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def find_subnet(address);::Proxy::DHCP::Subnet.new(address, '255.255.255.0'); end
|
21
|
-
def load_subnets; end
|
22
|
-
def load_subnet_data(_); end
|
23
21
|
|
24
22
|
def subnets
|
25
23
|
::Infoblox::Network.all(connection).map do |network|
|
@@ -41,20 +39,40 @@ module Proxy::DHCP::Infoblox
|
|
41
39
|
crud.find_record(full_network_address(subnet_address), an_address)
|
42
40
|
end
|
43
41
|
|
42
|
+
def find_record_by_mac(subnet_address, mac_address)
|
43
|
+
crud.find_record_by_mac(full_network_address(subnet_address), mac_address)
|
44
|
+
end
|
45
|
+
|
46
|
+
def find_records_by_ip(subnet_address, ip_address)
|
47
|
+
crud.find_records_by_ip(full_network_address(subnet_address), ip_address)
|
48
|
+
end
|
49
|
+
|
44
50
|
def add_record(options)
|
45
51
|
crud.add_record(options)
|
46
52
|
logger.debug("Added DHCP reservation for #{options[:ip]}/#{options[:mac]}")
|
47
53
|
restart_grid.try_restart
|
48
54
|
end
|
49
55
|
|
50
|
-
def del_record(
|
51
|
-
crud.del_record(full_network_address(
|
56
|
+
def del_record(record)
|
57
|
+
crud.del_record(full_network_address(record.subnet_address), record)
|
52
58
|
logger.debug("Removed DHCP reservation for #{record.ip} => #{record}")
|
53
59
|
restart_grid.try_restart
|
54
60
|
end
|
55
61
|
|
62
|
+
def del_record_by_mac(_, mac_address)
|
63
|
+
crud.del_record_by_mac(mac_address)
|
64
|
+
logger.debug("Removed DHCP reservation for #{mac_address}")
|
65
|
+
restart_grid.try_restart
|
66
|
+
end
|
67
|
+
|
68
|
+
def del_records_by_ip(_, ip_address)
|
69
|
+
crud.del_records_by_ip(ip_address)
|
70
|
+
logger.debug("Removed DHCP reservation(s) for #{ip_address}")
|
71
|
+
restart_grid.try_restart
|
72
|
+
end
|
73
|
+
|
56
74
|
def unused_ip(subnet, _, from_ip_address, to_ip_address)
|
57
|
-
unused_ips.unused_ip(subnet
|
75
|
+
unused_ips.unused_ip(subnet, from_ip_address, to_ip_address)
|
58
76
|
end
|
59
77
|
|
60
78
|
def find_network(network_address)
|
@@ -3,7 +3,7 @@ require 'smart_proxy_dhcp_infoblox/common_crud'
|
|
3
3
|
module ::Proxy::DHCP::Infoblox
|
4
4
|
class FixedAddressCRUD < CommonCRUD
|
5
5
|
def initialize(connection)
|
6
|
-
@
|
6
|
+
@memoized_hosts = []
|
7
7
|
@memoized_condition = nil
|
8
8
|
super
|
9
9
|
end
|
@@ -14,26 +14,32 @@ module ::Proxy::DHCP::Infoblox
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def find_record_by_ip(subnet_address, ip_address)
|
17
|
-
found =
|
17
|
+
found = find_hosts('ipv4addr' => ip_address).first
|
18
18
|
return nil if found.nil?
|
19
19
|
build_reservation(found.name, found, subnet_address)
|
20
20
|
end
|
21
21
|
|
22
|
+
def find_records_by_ip(subnet_address, ip_address)
|
23
|
+
found = find_hosts({'ipv4addr' => ip_address}, 2147483646)
|
24
|
+
return [] if found.empty?
|
25
|
+
found.map {|record| build_reservation(record.name, record, subnet_address)}
|
26
|
+
end
|
27
|
+
|
22
28
|
def find_record_by_mac(subnet_address, mac_address)
|
23
|
-
found =
|
29
|
+
found = find_hosts('mac' => mac_address).first
|
24
30
|
return nil if found.nil?
|
25
31
|
build_reservation(found.name, found, subnet_address)
|
26
32
|
end
|
27
33
|
|
28
|
-
def
|
29
|
-
return @
|
34
|
+
def find_hosts(condition, max_results = 1)
|
35
|
+
return @memoized_hosts if (!@memoized_host.empty? && @memoized_condition == condition)
|
30
36
|
@memoized_condition = condition
|
31
|
-
@
|
37
|
+
@memoized_hosts = ::Infoblox::Fixedaddress.find(@connection, condition.merge('_max_results' => max_results))
|
32
38
|
end
|
33
39
|
|
34
40
|
def find_host_and_name_by_ip(ip_address)
|
35
|
-
h =
|
36
|
-
[h.name, h]
|
41
|
+
h = find_hosts('ipv4addr' => ip_address).first
|
42
|
+
h.nil? ? [nil, nil] : [h.name, h]
|
37
43
|
end
|
38
44
|
|
39
45
|
def build_host(options)
|
@@ -41,12 +47,10 @@ module ::Proxy::DHCP::Infoblox
|
|
41
47
|
host.name = options[:hostname]
|
42
48
|
host.ipv4addr = options[:ip]
|
43
49
|
host.mac = options[:mac]
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
#host.bootfile = options[:filename]
|
49
|
-
#host.use_bootfile = true
|
50
|
+
host.nextserver = options[:nextServer]
|
51
|
+
host.use_nextserver = true
|
52
|
+
host.bootfile = options[:filename]
|
53
|
+
host.use_bootfile = true
|
50
54
|
host
|
51
55
|
end
|
52
56
|
end
|
@@ -4,7 +4,7 @@ require 'smart_proxy_dhcp_infoblox/network_address_range_regex_generator'
|
|
4
4
|
module ::Proxy::DHCP::Infoblox
|
5
5
|
class HostIpv4AddressCRUD < CommonCRUD
|
6
6
|
def initialize(connection)
|
7
|
-
@
|
7
|
+
@memoized_hosts = []
|
8
8
|
@memoized_condition = nil
|
9
9
|
super
|
10
10
|
end
|
@@ -22,26 +22,32 @@ module ::Proxy::DHCP::Infoblox
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def find_record_by_ip(subnet_address, ip_address)
|
25
|
-
found =
|
25
|
+
found = find_hosts('ipv4addr' => ip_address).first
|
26
26
|
return nil if found.nil?
|
27
27
|
build_reservation(found.name, found.ipv4addrs.find {|ip| ip.ipv4addr == ip_address}, subnet_address)
|
28
28
|
end
|
29
29
|
|
30
|
+
def find_records_by_ip(subnet_address, ip_address)
|
31
|
+
found = find_hosts({'ipv4addr' => ip_address}, 2147483646)
|
32
|
+
return [] if found.empty?
|
33
|
+
found.map {|record| build_reservation(record.name, record.ipv4addrs.find {|ip| ip.ipv4addr == ip_address}, subnet_address)}
|
34
|
+
end
|
35
|
+
|
30
36
|
def find_record_by_mac(subnet_address, mac_address)
|
31
|
-
found =
|
37
|
+
found = find_hosts('mac' => mac_address).first
|
32
38
|
return nil if found.nil?
|
33
39
|
build_reservation(found.name, found.ipv4addrs.find {|ip| ip.mac == mac_address}, subnet_address)
|
34
40
|
end
|
35
41
|
|
36
42
|
def find_host_and_name_by_ip(ip_address)
|
37
|
-
h =
|
38
|
-
[h.name, h.ipv4addrs.find {|ip| ip.ipv4addr == ip_address}]
|
43
|
+
h = find_hosts('ipv4addr' => ip_address).first
|
44
|
+
h.nil? ? [nil, nil] : [h.name, h.ipv4addrs.find {|ip| ip.ipv4addr == ip_address}]
|
39
45
|
end
|
40
46
|
|
41
|
-
def
|
42
|
-
return @
|
47
|
+
def find_hosts(condition, max_results = 1)
|
48
|
+
return @memoized_hosts if (!@memoized_hosts.empty? && @memoized_condition == condition)
|
43
49
|
@memoized_condition = condition
|
44
|
-
@
|
50
|
+
@memoized_hosts = ::Infoblox::Host.find(@connection, condition.merge('_max_results' => max_results))
|
45
51
|
end
|
46
52
|
|
47
53
|
def build_host(options)
|
@@ -16,6 +16,11 @@ module CommoncrudTests
|
|
16
16
|
assert_nil @crud.find_record_by_ip('192.168.42.0/24', '192.168.42.1')
|
17
17
|
end
|
18
18
|
|
19
|
+
def test_find_records_using_ip_returns_empty_arrays_if_records_not_found
|
20
|
+
@entity.expects(:find).with(@connection, 'ipv4addr' => '192.168.42.1', '_max_results' => 2147483646).returns([])
|
21
|
+
assert @crud.find_records_by_ip('192.168.42.0/24', '192.168.42.1').empty?
|
22
|
+
end
|
23
|
+
|
19
24
|
def test_find_record_using_mac
|
20
25
|
@entity.expects(:find).with(@connection, 'mac' => '00:01:02:03:05:06', '_max_results' => 1).returns([@host])
|
21
26
|
assert_equal @reservation, @crud.find_record_by_mac('192.168.42.0/24', '00:01:02:03:05:06')
|
@@ -46,16 +51,29 @@ module CommoncrudTests
|
|
46
51
|
def test_add_record_with_already_existing_host
|
47
52
|
@crud.expects(:build_host).with(:ip => @ip, :mac => @mac, :hostname => @hostname).returns(@host)
|
48
53
|
@host.expects(:post).raises(Infoblox::Error.new("IB.Data.Conflict"))
|
49
|
-
@crud.expects(:
|
54
|
+
@crud.expects(:find_hosts).with('ipv4addr' => @ip).returns([@host])
|
50
55
|
|
51
56
|
assert_raises(Proxy::DHCP::AlreadyExists) { @crud.add_record(:ip => @ip, :mac => @mac, :hostname => @hostname) }
|
52
57
|
end
|
53
58
|
|
54
59
|
def test_del_record
|
55
|
-
@crud.expects(:
|
60
|
+
@crud.expects(:find_hosts).with('ipv4addr' => @ip).returns([@host])
|
56
61
|
@host.expects(:delete)
|
57
62
|
@crud.del_record('unused', @reservation)
|
58
63
|
end
|
64
|
+
|
65
|
+
def test_del_records_by_ip
|
66
|
+
@crud.expects(:find_hosts).with({'ipv4addr' => @ip}, 2147483646).returns([@host, @host1])
|
67
|
+
@host.expects(:delete)
|
68
|
+
@host1.expects(:delete)
|
69
|
+
@crud.del_records_by_ip(@ip)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_del_record_by_mac
|
73
|
+
@crud.expects(:find_hosts).with('mac' => @mac).returns([@host])
|
74
|
+
@host.expects(:delete)
|
75
|
+
@crud.del_record_by_mac(@mac)
|
76
|
+
end
|
59
77
|
end
|
60
78
|
|
61
79
|
class HostCrudTest < Test::Unit::TestCase
|
@@ -72,16 +90,20 @@ class HostCrudTest < Test::Unit::TestCase
|
|
72
90
|
@nextserver = '192.168.42.1'
|
73
91
|
@filename = '/tftpboot.img'
|
74
92
|
@ip = '192.168.42.1'
|
93
|
+
@subnet_ip = '192.168.42.0'
|
75
94
|
|
76
95
|
@host = ::Infoblox::Host.new(
|
77
96
|
:name => @hostname,
|
78
97
|
:ipv4addrs => [{:ipv4addr => @ip, :mac => @mac, :nextserver => @nextserver, :use_nextserver => true,
|
79
98
|
:bootfile => @filename, :use_bootfile => true, :configure_for_dhcp => true}])
|
99
|
+
@host1 = ::Infoblox::Host.new(
|
100
|
+
:name => 'another.test.com',
|
101
|
+
:ipv4addrs => [{:ipv4addr => @ip, :mac => '00:01:02:03:05:07', :nextserver => @nextserver, :use_nextserver => true,
|
102
|
+
:bootfile => @filename, :use_bootfile => true, :configure_for_dhcp => true}])
|
80
103
|
|
81
|
-
@reservation = ::Proxy::DHCP::Reservation.new(
|
82
|
-
|
83
|
-
|
84
|
-
:subnet => ::Proxy::DHCP::Subnet.new('192.168.42.0', '255.255.255.0'))
|
104
|
+
@reservation = ::Proxy::DHCP::Reservation.new(@hostname, @ip, @mac, ::Proxy::DHCP::Subnet.new(@subnet_ip, '255.255.255.0'),
|
105
|
+
:hostname => @hostname, :nextServer => @nextserver, :filename => @filename,
|
106
|
+
:deleteable => true)
|
85
107
|
end
|
86
108
|
|
87
109
|
def test_all_hosts
|
@@ -111,8 +133,8 @@ class HostCrudTest < Test::Unit::TestCase
|
|
111
133
|
def test_add_record_with_collision
|
112
134
|
@crud.expects(:build_host).with(:ip => @ip, :mac => @mac, :hostname => @hostname).returns(@host)
|
113
135
|
@host.expects(:post).raises(Infoblox::Error.new("IB.Data.Conflict"))
|
114
|
-
@crud.expects(:
|
115
|
-
::Infoblox::Host.new(:name => @hostname, :ipv4addrs => [{:ipv4addr => @ip, :mac => '11:22:33:44:55:66', :configure_for_dhcp => true}]))
|
136
|
+
@crud.expects(:find_hosts).with('ipv4addr' => @ip).returns(
|
137
|
+
[::Infoblox::Host.new(:name => @hostname, :ipv4addrs => [{:ipv4addr => @ip, :mac => '11:22:33:44:55:66', :configure_for_dhcp => true}])])
|
116
138
|
|
117
139
|
assert_raises(Proxy::DHCP::Collision) { @crud.add_record(:ip => @ip, :mac => @mac, :hostname => @hostname) }
|
118
140
|
end
|
@@ -130,14 +152,17 @@ class FixedaddressCrudTest < Test::Unit::TestCase
|
|
130
152
|
@nextserver = '192.168.42.1'
|
131
153
|
@filename = '/tftpboot.img'
|
132
154
|
@ip = '192.168.42.1'
|
155
|
+
@subnet_ip = '192.168.42.0'
|
133
156
|
|
134
157
|
@host = ::Infoblox::Fixedaddress.new(
|
135
158
|
:name => @hostname,
|
136
159
|
:ipv4addr => @ip, :mac => @mac) # :ipv4addr => @ip, :mac => @mac) #
|
160
|
+
@host1 = ::Infoblox::Fixedaddress.new(
|
161
|
+
:name => 'another.test.com',
|
162
|
+
:ipv4addr => @ip, :mac => '00:01:02:03:05:07')
|
137
163
|
|
138
|
-
@reservation = ::Proxy::DHCP::Reservation.new(
|
139
|
-
|
140
|
-
:subnet => ::Proxy::DHCP::Subnet.new('192.168.42.0', '255.255.255.0'))
|
164
|
+
@reservation = ::Proxy::DHCP::Reservation.new(@hostname, @ip, @mac, ::Proxy::DHCP::Subnet.new(@subnet_ip, '255.255.255.0'),
|
165
|
+
:deleteable => true, :hostname => @hostname)
|
141
166
|
end
|
142
167
|
|
143
168
|
def test_all_hosts
|
@@ -152,17 +177,17 @@ class FixedaddressCrudTest < Test::Unit::TestCase
|
|
152
177
|
assert_equal @host.name, built.name
|
153
178
|
assert_equal @host.ipv4addr, built.ipv4addr
|
154
179
|
assert_equal @host.mac, built.mac
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
180
|
+
assert_equal @nextserver, built.nextserver
|
181
|
+
assert built.use_nextserver
|
182
|
+
assert_equal @filename, built.bootfile
|
183
|
+
assert built.use_bootfile
|
159
184
|
end
|
160
185
|
|
161
186
|
def test_add_record_with_collision
|
162
187
|
@crud.expects(:build_host).with(:ip => @ip, :mac => @mac, :hostname => @hostname).returns(@host)
|
163
188
|
@host.expects(:post).raises(Infoblox::Error.new("IB.Data.Conflict"))
|
164
|
-
@crud.expects(:
|
165
|
-
::Infoblox::Fixedaddress.new(:name => @hostname, :ipv4addr => @ip, :mac => '11:22:33:44:55:66'))
|
189
|
+
@crud.expects(:find_hosts).with('ipv4addr' => @ip).returns(
|
190
|
+
[::Infoblox::Fixedaddress.new(:name => @hostname, :ipv4addr => @ip, :mac => '11:22:33:44:55:66')])
|
166
191
|
|
167
192
|
assert_raises(Proxy::DHCP::Collision) { @crud.add_record(:ip => @ip, :mac => @mac, :hostname => @hostname) }
|
168
193
|
end
|
@@ -52,10 +52,19 @@ class InfobloxProviderTest < Test::Unit::TestCase
|
|
52
52
|
@crud.stubs(:del_record)
|
53
53
|
@provider.stubs(:full_network_address)
|
54
54
|
@restart_grid.expects(:try_restart)
|
55
|
-
@provider.del_record(
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
@provider.del_record(::Proxy::DHCP::Record.new('192.168.42.1', '00:01:02:03:04:05',
|
56
|
+
::Proxy::DHCP::Subnet.new('192.168.42.0', '255.255.255.0')))
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_del_record_by_mac_restarts_grid
|
60
|
+
@crud.stubs(:del_record_by_mac)
|
61
|
+
@restart_grid.expects(:try_restart)
|
62
|
+
@provider.del_record_by_mac(@subnet.network, '00:01:02:03:04:05')
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_del_record_by_ip_restarts_grid
|
66
|
+
@crud.stubs(:del_records_by_ip)
|
67
|
+
@restart_grid.expects(:try_restart)
|
68
|
+
@provider.del_records_by_ip(@subnet.network, '192.168.42.1')
|
60
69
|
end
|
61
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_proxy_dhcp_infoblox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Klaas Demter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Infoblox DHCP provider plugin for Foreman's smart proxy
|
14
14
|
email:
|
@@ -43,7 +43,7 @@ files:
|
|
43
43
|
- test/unused_ip_test.rb
|
44
44
|
homepage: https://github.com/theforeman/smart_proxy_dhcp_infoblox
|
45
45
|
licenses:
|
46
|
-
-
|
46
|
+
- GPL-3.0
|
47
47
|
metadata: {}
|
48
48
|
post_install_message:
|
49
49
|
rdoc_options: []
|
@@ -61,15 +61,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
61
|
version: '0'
|
62
62
|
requirements: []
|
63
63
|
rubyforge_project:
|
64
|
-
rubygems_version: 2.
|
64
|
+
rubygems_version: 2.6.12
|
65
65
|
signing_key:
|
66
66
|
specification_version: 4
|
67
67
|
summary: Infoblox DHCP provider plugin for Foreman's smart proxy
|
68
68
|
test_files:
|
69
|
-
- test/host_and_fixedaddress_crud_test.rb
|
70
|
-
- test/infoblox_provider_test.rb
|
71
69
|
- test/plugin_configuration_test.rb
|
70
|
+
- test/unused_ip_test.rb
|
71
|
+
- test/host_and_fixedaddress_crud_test.rb
|
72
72
|
- test/record_type_validator_test.rb
|
73
|
-
- test/regex_generator_test.rb
|
74
73
|
- test/test_helper.rb
|
75
|
-
- test/
|
74
|
+
- test/infoblox_provider_test.rb
|
75
|
+
- test/regex_generator_test.rb
|