smart_proxy_efficient_ip 0.0.12
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.
- checksums.yaml +7 -0
- data/LICENSE +736 -0
- data/README.md +51 -0
- data/bundler.d/efficient_ip.rb +1 -0
- data/config/dhcp_efficient_ip.yml.example +5 -0
- data/config/docker_smart-proxy_settings/settings.d/dhcp.yml +3 -0
- data/config/docker_smart-proxy_settings/settings.d/dhcp_efficient_ip.yml.example +5 -0
- data/config/docker_smart-proxy_settings/settings.yml +4 -0
- data/lib/smart_proxy_efficient_ip.rb +8 -0
- data/lib/smart_proxy_efficient_ip/api.rb +102 -0
- data/lib/smart_proxy_efficient_ip/configuration.rb +36 -0
- data/lib/smart_proxy_efficient_ip/const.rb +41 -0
- data/lib/smart_proxy_efficient_ip/main.rb +132 -0
- data/lib/smart_proxy_efficient_ip/plugin.rb +28 -0
- data/lib/smart_proxy_efficient_ip/version.rb +7 -0
- data/test/api_test.rb +179 -0
- data/test/configuration_test.rb +38 -0
- data/test/provider_test.rb +142 -0
- data/test/test_helper.rb +3 -0
- metadata +121 -0
data/test/api_test.rb
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'SOLIDserver'
|
3
|
+
require 'smart_proxy_efficient_ip/api'
|
4
|
+
|
5
|
+
class ApiTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@connection = ::SOLIDserver::SOLIDserver.new('10.10.10.10', 'username', 'password')
|
8
|
+
@api = ::Proxy::DHCP::EfficientIp::Api.new(@connection)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_find_subnet
|
12
|
+
network_address = '192.168.45.0'
|
13
|
+
subnet = { 'subnet_id' => '142', 'subnet_size' => '256' }
|
14
|
+
server_response = stub(body: [subnet].to_json)
|
15
|
+
|
16
|
+
@connection
|
17
|
+
.expects(:ip_subnet_list)
|
18
|
+
.with(where: "start_hostaddr='#{network_address}' and is_terminal='1'", limit: 1)
|
19
|
+
.returns(server_response)
|
20
|
+
|
21
|
+
assert_equal @api.find_subnet(network_address), subnet
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_find_subnets
|
25
|
+
subnets = [
|
26
|
+
{ 'subnet_id' => '142', 'subnet_size' => '256' },
|
27
|
+
{ 'subnet_id' => '182', 'subnet_size' => '256' },
|
28
|
+
{ 'subnet_id' => '108', 'subnet_size' => '256' },
|
29
|
+
]
|
30
|
+
server_response = stub(body: subnets.to_json)
|
31
|
+
|
32
|
+
@connection
|
33
|
+
.expects(:ip_subnet_list)
|
34
|
+
.with(where: "is_terminal='1' and start_hostaddr!='0.0.0.0'")
|
35
|
+
.returns(server_response)
|
36
|
+
|
37
|
+
assert_equal @api.subnets, subnets
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_find_free
|
41
|
+
network_address = '192.168.45.0'
|
42
|
+
start_ip = '192.168.45.5'
|
43
|
+
end_ip = '192.168.45.25'
|
44
|
+
subnet = { 'subnet_id' => '142', 'subnet_size' => '256' }
|
45
|
+
free_address = { 'hostaddr' => '192.168.45.11' }
|
46
|
+
subnet_response = stub(body: [subnet].to_json)
|
47
|
+
server_response = stub(body: [free_address].to_json)
|
48
|
+
|
49
|
+
@connection
|
50
|
+
.expects(:ip_subnet_list)
|
51
|
+
.with(where: "start_hostaddr='#{network_address}' and is_terminal='1'", limit: 1)
|
52
|
+
.returns(subnet_response)
|
53
|
+
@connection
|
54
|
+
.expects(:ip_address_find_free)
|
55
|
+
.with(subnet_id: subnet['subnet_id'], begin_addr: start_ip, end_addr: end_ip, max_find: 1)
|
56
|
+
.returns(server_response)
|
57
|
+
|
58
|
+
assert_equal @api.find_free(network_address, start_ip, end_ip), free_address
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_find_record
|
62
|
+
address = '192.168.45.92'
|
63
|
+
record = { 'name' => 'Vincent', 'hostaddr' => address }
|
64
|
+
server_response = stub(body: [record].to_json)
|
65
|
+
|
66
|
+
@connection
|
67
|
+
.expects(:ip_address_list)
|
68
|
+
.with(where: "type='ip' and (hostaddr='#{address}' or mac_addr='#{address}')", limit: 1)
|
69
|
+
.returns(server_response)
|
70
|
+
|
71
|
+
assert_equal @api.find_record(address), record
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_find_records
|
75
|
+
address = '192.168.45.92'
|
76
|
+
records = [
|
77
|
+
{ 'name' => 'Vincent', 'hostaddr' => address },
|
78
|
+
{ 'name' => 'Tom', 'hostaddr' => address },
|
79
|
+
]
|
80
|
+
server_response = stub(body: records.to_json)
|
81
|
+
|
82
|
+
@connection
|
83
|
+
.expects(:ip_address_list)
|
84
|
+
.with(where: "type='ip' and (hostaddr='#{address}' or mac_addr='#{address}')")
|
85
|
+
.returns(server_response)
|
86
|
+
|
87
|
+
assert_equal @api.find_records(address), records
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_hosts
|
91
|
+
network_address = '192.168.45.0'
|
92
|
+
hosts = [
|
93
|
+
{ 'name' => 'Vincent', 'hostaddr' => '192.168.45.101' },
|
94
|
+
{ 'name' => 'Tom', 'hostaddr' => '192.168.45.94' },
|
95
|
+
]
|
96
|
+
subnet = { 'subnet_id' => '192', 'subnet_size' => '256', 'start_hostaddr' => network_address }
|
97
|
+
subnet_response = stub(body: [subnet].to_json)
|
98
|
+
server_response = stub(body: hosts.to_json)
|
99
|
+
|
100
|
+
@connection
|
101
|
+
.expects(:ip_subnet_list)
|
102
|
+
.with(where: "start_hostaddr='#{network_address}' and is_terminal='1'", limit: 1)
|
103
|
+
.returns(subnet_response)
|
104
|
+
@connection
|
105
|
+
.expects(:ip_address_list)
|
106
|
+
.with(where: "subnet_id=#{subnet['subnet_id']} and dhcphost_id > 0")
|
107
|
+
.returns(server_response)
|
108
|
+
|
109
|
+
assert_equal @api.hosts(network_address), hosts
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_leases
|
113
|
+
network_address = '192.168.47.0'
|
114
|
+
addresses = [
|
115
|
+
{ 'dhcplease_id' => '78' },
|
116
|
+
{ 'dhcplease_id' => '21' },
|
117
|
+
]
|
118
|
+
leases = [
|
119
|
+
{ 'dhcplease_id' => '78', 'dhcplease_name' => 'ABC' },
|
120
|
+
{ 'dhcplease_id' => '21', 'dhcplease_name' => 'CBD' },
|
121
|
+
]
|
122
|
+
subnet = { 'subnet_id' => '192', 'subnet_size' => '256', 'start_hostaddr' => network_address }
|
123
|
+
subnet_response = stub(body: [subnet].to_json)
|
124
|
+
server_response = stub(body: addresses.to_json)
|
125
|
+
leases_resposne = stub(body: leases.to_json)
|
126
|
+
ids = addresses.map { |addr| addr['dhcplease_id'] }
|
127
|
+
|
128
|
+
@connection
|
129
|
+
.expects(:ip_subnet_list)
|
130
|
+
.with(where: "start_hostaddr='#{network_address}' and is_terminal='1'", limit: 1)
|
131
|
+
.returns(subnet_response)
|
132
|
+
@connection
|
133
|
+
.expects(:ip_address_list)
|
134
|
+
.with(where: "subnet_id=#{subnet['subnet_id']} and dhcplease_id > 0")
|
135
|
+
.returns(server_response)
|
136
|
+
@connection
|
137
|
+
.expects(:dhcp_lease_list)
|
138
|
+
.with(where: "dhcplease_id IN (#{ids})")
|
139
|
+
.returns(leases_resposne)
|
140
|
+
|
141
|
+
assert_equal @api.leases(network_address), leases
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_add_record
|
145
|
+
network_address = '192.168.45.0'
|
146
|
+
params = { 'ip' => '192.168.45.65', 'mac' => '1f:83:ea:ee:53:67', 'name' => 'Makita', 'network' => network_address }
|
147
|
+
subnet = { 'subnet_id' => '192', 'site_name' => 'Houston', 'start_hostaddr' => network_address }
|
148
|
+
subnet_response = stub(body: [subnet].to_json)
|
149
|
+
|
150
|
+
@connection
|
151
|
+
.expects(:ip_subnet_list)
|
152
|
+
.with(where: "start_hostaddr='#{network_address}' and is_terminal='1'", limit: 1)
|
153
|
+
.returns(subnet_response)
|
154
|
+
@connection
|
155
|
+
.expects(:ip_address_add)
|
156
|
+
.with(site_name: subnet['site_name'], ip_addr: params['ip'], mac_addr: params['mac'], name: params['name'])
|
157
|
+
.once
|
158
|
+
|
159
|
+
@api.add_record(params)
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_delete_record
|
163
|
+
subnet_params = { 'subnet_id' => '192', 'site_name' => 'Houston' }
|
164
|
+
subnet = stub(network: '192.168.45.0')
|
165
|
+
record = stub(subnet: subnet, ip: '192.168.45.65')
|
166
|
+
subnet_response = stub(body: [subnet_params].to_json)
|
167
|
+
|
168
|
+
@connection
|
169
|
+
.expects(:ip_subnet_list)
|
170
|
+
.with(where: "start_hostaddr='#{subnet.network}' and is_terminal='1'", limit: 1)
|
171
|
+
.returns(subnet_response)
|
172
|
+
@connection
|
173
|
+
.expects(:ip_address_delete)
|
174
|
+
.with(site_name: subnet_params['site_name'], hostaddr: record.ip)
|
175
|
+
.once
|
176
|
+
|
177
|
+
@api.delete_record(record)
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'SOLIDserver'
|
3
|
+
require 'dhcp_common/dhcp_common'
|
4
|
+
require 'smart_proxy_efficient_ip/api'
|
5
|
+
require 'smart_proxy_efficient_ip/main'
|
6
|
+
require 'smart_proxy_efficient_ip/configuration'
|
7
|
+
|
8
|
+
class ConfigurationTest < Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@settings = {
|
11
|
+
username: 'user',
|
12
|
+
password: 'password',
|
13
|
+
server_id: '10.10.10.10'
|
14
|
+
}
|
15
|
+
@container = ::Proxy::DependencyInjection::Container.new
|
16
|
+
Proxy::DHCP::EfficientIp::Configuration.new.load_dependency_injection_wirings(@container, @settings)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_connection
|
20
|
+
connection = @container.get_dependency(:connection)
|
21
|
+
|
22
|
+
assert_instance_of ::SOLIDserver::SOLIDserver, connection
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_api
|
26
|
+
api = @container.get_dependency(:api)
|
27
|
+
|
28
|
+
assert_instance_of ::Proxy::DHCP::EfficientIp::Api, api
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_provider
|
32
|
+
provider = @container.get_dependency(:dhcp_provider)
|
33
|
+
|
34
|
+
assert_instance_of ::Proxy::DHCP::EfficientIp::Provider, provider
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'SOLIDserver'
|
3
|
+
require 'smart_proxy_efficient_ip/main'
|
4
|
+
require 'smart_proxy_efficient_ip/const'
|
5
|
+
|
6
|
+
SIZE_TO_MASK = ::Proxy::DHCP::EfficientIp::SIZE_TO_MASK
|
7
|
+
|
8
|
+
class ProviderTest < Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@connection = ::SOLIDserver::SOLIDserver.new('10.10.10.10', 'username', 'password')
|
11
|
+
@api = ::Proxy::DHCP::EfficientIp::Api.new(@connection)
|
12
|
+
@provider = ::Proxy::DHCP::EfficientIp::Provider.new(@api, nil)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_find_subnet
|
16
|
+
network_address = '192.168.45.0'
|
17
|
+
subnet_params = { 'subnet_id' => '106', 'subnet_size' => '256' }
|
18
|
+
|
19
|
+
@api.expects(:find_subnet).with(network_address).returns(subnet_params)
|
20
|
+
|
21
|
+
result = @provider.find_subnet(network_address)
|
22
|
+
|
23
|
+
assert_instance_of ::Proxy::DHCP::Subnet, result
|
24
|
+
assert_equal result.network, network_address
|
25
|
+
assert_equal result.netmask, ::Proxy::DHCP::EfficientIp::SIZE_TO_MASK[subnet_params['subnet_size'].to_i]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_find_subnets
|
29
|
+
network_address = '192.168.45.0'
|
30
|
+
subnets_params = [
|
31
|
+
{ 'subnet_id' => '106', 'start_hostaddr' => '192.168.84.0', 'subnet_size' => '256' },
|
32
|
+
{ 'subnet_id' => '125', 'start_hostaddr' => '192.168.88.0', 'subnet_size' => '128' },
|
33
|
+
]
|
34
|
+
|
35
|
+
@api.expects(:subnets).returns(subnets_params)
|
36
|
+
|
37
|
+
result = @provider.subnets
|
38
|
+
assert_instance_of ::Proxy::DHCP::Subnet, result[0]
|
39
|
+
assert_instance_of ::Proxy::DHCP::Subnet, result[1]
|
40
|
+
assert_equal result[0].network, subnets_params[0]['start_hostaddr']
|
41
|
+
assert_equal result[1].network, subnets_params[1]['start_hostaddr']
|
42
|
+
assert_equal result[0].netmask, SIZE_TO_MASK[subnets_params[0]['subnet_size'].to_i]
|
43
|
+
assert_equal result[1].netmask, SIZE_TO_MASK[subnets_params[1]['subnet_size'].to_i]
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_all_hosts
|
47
|
+
network_address = '192.168.75.0'
|
48
|
+
subnet = { 'subnet_id' => '106', 'subnet_size' => '256' }
|
49
|
+
hosts = [
|
50
|
+
{ 'name' => 'Rick', 'hostaddr' => '192.168.75.23', 'mac_addr' => '8a:9c:3e:c3:5a:6b' },
|
51
|
+
{ 'name' => 'Morty', 'hostaddr' => '192.168.75.67', 'mac_addr' => 'af:94:2d:6d:7e:7e' }
|
52
|
+
]
|
53
|
+
|
54
|
+
|
55
|
+
@api.expects(:hosts).with(network_address).returns(hosts)
|
56
|
+
@api.expects(:find_subnet).with(network_address).returns(subnet)
|
57
|
+
|
58
|
+
result = @provider.all_hosts(network_address)
|
59
|
+
|
60
|
+
assert_instance_of ::Proxy::DHCP::Reservation, result[0]
|
61
|
+
assert_instance_of ::Proxy::DHCP::Reservation, result[1]
|
62
|
+
assert_equal result[0].name, hosts[0]['name']
|
63
|
+
assert_equal result[1].name, hosts[1]['name']
|
64
|
+
assert_equal result[0].ip, hosts[0]['hostaddr']
|
65
|
+
assert_equal result[1].ip, hosts[1]['hostaddr']
|
66
|
+
assert_equal result[0].mac, hosts[0]['mac_addr']
|
67
|
+
assert_equal result[1].mac, hosts[1]['mac_addr']
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_all_leases
|
71
|
+
network_address = '192.168.85.0'
|
72
|
+
subnet = { 'subnet_id' => '106', 'subnet_size' => '256' }
|
73
|
+
real_mac_address_1 = '8a:9c:3e:c3:5a:6b'
|
74
|
+
real_mac_address_2 = 'af:94:2d:6d:7e:7e'
|
75
|
+
leases = [
|
76
|
+
{
|
77
|
+
'dhcplease_id' => '78',
|
78
|
+
'dhcplease_name' => 'Nick',
|
79
|
+
'dhcplease_addr' => '192.168.75.23',
|
80
|
+
'dhcplease_mac_addr' => "0a:#{real_mac_address_1}",
|
81
|
+
'dhcplease_first_time' => '1617021896',
|
82
|
+
'dhcplease_end_time' => '1617066741',
|
83
|
+
'time_to_expire' => '54632'
|
84
|
+
},
|
85
|
+
{
|
86
|
+
'dhcplease_id' => '31',
|
87
|
+
'dhcplease_name' => 'Jack',
|
88
|
+
'dhcplease_addr' => '192.168.75.67',
|
89
|
+
'dhcplease_mac_addr' => "0a:#{real_mac_address_2}",
|
90
|
+
'dhcplease_first_time' => '1617021396',
|
91
|
+
'dhcplease_end_time' => '1617066421',
|
92
|
+
'time_to_expire' => '631'
|
93
|
+
}
|
94
|
+
]
|
95
|
+
|
96
|
+
|
97
|
+
@api.expects(:leases).with(network_address).returns(leases)
|
98
|
+
@api.expects(:find_subnet).with(network_address).returns(subnet)
|
99
|
+
|
100
|
+
result = @provider.all_leases(network_address)
|
101
|
+
|
102
|
+
assert_instance_of ::Proxy::DHCP::Lease, result[0]
|
103
|
+
assert_instance_of ::Proxy::DHCP::Lease, result[1]
|
104
|
+
assert_equal result[0].name, leases[0]['dhcplease_name']
|
105
|
+
assert_equal result[1].name, leases[1]['dhcplease_name']
|
106
|
+
assert_equal result[0].ip, leases[0]['dhcplease_addr']
|
107
|
+
assert_equal result[1].ip, leases[1]['dhcplease_addr']
|
108
|
+
assert_equal result[0].mac, real_mac_address_1
|
109
|
+
assert_equal result[1].mac, real_mac_address_2
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_unused_ip
|
113
|
+
network_address = '192.168.85.0'
|
114
|
+
free_ip = '192.168.85.64'
|
115
|
+
start_ip = '192.168.85.12'
|
116
|
+
end_ip = '192.168.85.112'
|
117
|
+
server_response = { 'hostaddr' => free_ip }
|
118
|
+
|
119
|
+
@api.expects(:find_free).with(network_address, start_ip, end_ip).returns(server_response)
|
120
|
+
|
121
|
+
result = @provider.unused_ip(network_address, nil, start_ip, end_ip)
|
122
|
+
|
123
|
+
assert_equal result, free_ip
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_find_record
|
127
|
+
network_address = '192.168.95.0'
|
128
|
+
ip = '192.168.95.23'
|
129
|
+
record_params = { 'hostaddr' => ip, 'mac_addr' => 'e1:2c:07:c1:46:7b', 'name' => 'First' }
|
130
|
+
subnet_params = { 'subnet_id' => '577', 'subnet_size' => '256' }
|
131
|
+
|
132
|
+
@api.expects(:find_subnet).with(network_address).returns(subnet_params)
|
133
|
+
@api.expects(:find_record).with(ip).returns(record_params)
|
134
|
+
|
135
|
+
result = @provider.find_record(network_address, ip)
|
136
|
+
|
137
|
+
assert_instance_of Proxy::DHCP::Reservation, result
|
138
|
+
assert_equal result.ip, record_params['hostaddr']
|
139
|
+
assert_equal result.mac, record_params['mac_addr']
|
140
|
+
assert_equal result.name, record_params['name']
|
141
|
+
end
|
142
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: smart_proxy_efficient_ip
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.12
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michal Olejniczak
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: SOLIDserver
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.11
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.11
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mocha
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.11'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test-unit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.4'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.4'
|
69
|
+
description: Plugin for integration Foreman's smart proxy with EfficientIP
|
70
|
+
email:
|
71
|
+
- michal.olejniczak@ironin.pl
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- LICENSE
|
77
|
+
- README.md
|
78
|
+
- bundler.d/efficient_ip.rb
|
79
|
+
- config/dhcp_efficient_ip.yml.example
|
80
|
+
- config/docker_smart-proxy_settings/settings.d/dhcp.yml
|
81
|
+
- config/docker_smart-proxy_settings/settings.d/dhcp_efficient_ip.yml.example
|
82
|
+
- config/docker_smart-proxy_settings/settings.yml
|
83
|
+
- lib/smart_proxy_efficient_ip.rb
|
84
|
+
- lib/smart_proxy_efficient_ip/api.rb
|
85
|
+
- lib/smart_proxy_efficient_ip/configuration.rb
|
86
|
+
- lib/smart_proxy_efficient_ip/const.rb
|
87
|
+
- lib/smart_proxy_efficient_ip/main.rb
|
88
|
+
- lib/smart_proxy_efficient_ip/plugin.rb
|
89
|
+
- lib/smart_proxy_efficient_ip/version.rb
|
90
|
+
- test/api_test.rb
|
91
|
+
- test/configuration_test.rb
|
92
|
+
- test/provider_test.rb
|
93
|
+
- test/test_helper.rb
|
94
|
+
homepage: https://gitlab.ironin.it/efficient-ip/smart-proxy-dhcp
|
95
|
+
licenses:
|
96
|
+
- GPL-3.0
|
97
|
+
metadata: {}
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubygems_version: 3.1.2
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: Smart proxy plugin for EfficientIP
|
117
|
+
test_files:
|
118
|
+
- test/api_test.rb
|
119
|
+
- test/configuration_test.rb
|
120
|
+
- test/provider_test.rb
|
121
|
+
- test/test_helper.rb
|