saklient 0.0.2.6 → 0.0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/lib/saklient/cloud/client.rb +1 -1
- data/lib/saklient/cloud/resources/ipv4_net.rb +34 -0
- data/lib/saklient/cloud/resources/ipv4_range.rb +106 -0
- data/lib/saklient/cloud/resources/resource.rb +1 -1
- data/lib/saklient/cloud/resources/swytch.rb +51 -0
- data/lib/saklient/util.rb +30 -1
- data/lib/saklient/version.rb +1 -1
- data/spec/ipv4net_spec.rb +61 -0
- data/spec/router_spec.rb +54 -11
- data/spec/swytch_spec.rb +1 -1
- data/spec/util_spec.rb +28 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fc3dcacb443ef9fb88e18864b25b6e983233659
|
4
|
+
data.tar.gz: 1cc5f3a9323e2634ca191c523bb0975c62b6ce4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ee4c6080b8ea97b6fc138d99b51d83aaef7473d47efec2ac696869cc18e336c5a4a47fefc16ffd8de49c19af1a27bcaaa70f7d079a51686d5ae97f26e8d2230
|
7
|
+
data.tar.gz: 13b55667084a18e62dc41441f751592da315998aba2975af3c9507589c51e5e7031fae5dfa4d5e3fd033673ecea8a32155fe6ac3889c76ac388f11267e390487
|
data/.gitignore
CHANGED
@@ -73,7 +73,7 @@ module Saklient
|
|
73
73
|
|
74
74
|
extra_headers = {
|
75
75
|
'Content-Type' => 'application/x-www-form-urlencoded',
|
76
|
-
'User-Agent' => 'saklient.ruby ver-0.0.2.
|
76
|
+
'User-Agent' => 'saklient.ruby ver-0.0.2.7 rev-3f3b3b7ce4b10e7ebcd77c17497763ba558bf424',
|
77
77
|
'X-Requested-With' => 'XMLHttpRequest',
|
78
78
|
'X-Sakura-HTTP-Method' => method,
|
79
79
|
'X-Sakura-Error-Level' => 'warning',
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative '../client'
|
4
4
|
require_relative 'resource'
|
5
5
|
require_relative 'swytch'
|
6
|
+
require_relative 'ipv4_range'
|
6
7
|
|
7
8
|
module Saklient
|
8
9
|
module Cloud
|
@@ -38,6 +39,29 @@ module Saklient
|
|
38
39
|
# @return [String]
|
39
40
|
attr_accessor :m_next_hop
|
40
41
|
|
42
|
+
# @private
|
43
|
+
# @return [Ipv4Range]
|
44
|
+
attr_accessor :_range
|
45
|
+
|
46
|
+
public
|
47
|
+
|
48
|
+
# @private
|
49
|
+
# @return [Ipv4Range]
|
50
|
+
def get_range
|
51
|
+
return @_range
|
52
|
+
end
|
53
|
+
|
54
|
+
# 利用可能なIPアドレス範囲
|
55
|
+
#
|
56
|
+
# @return [Ipv4Range]
|
57
|
+
attr_reader :range
|
58
|
+
|
59
|
+
def range
|
60
|
+
get_range
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
41
65
|
# @private
|
42
66
|
# @return [String]
|
43
67
|
def _api_path
|
@@ -90,6 +114,16 @@ module Saklient
|
|
90
114
|
|
91
115
|
protected
|
92
116
|
|
117
|
+
# @private
|
118
|
+
# @param [any] r
|
119
|
+
# @param [any] root
|
120
|
+
# @return [void]
|
121
|
+
def _on_after_api_deserialize(r, root)
|
122
|
+
@_range = nil
|
123
|
+
addresses = r[:IPAddresses]
|
124
|
+
@_range = Saklient::Cloud::Resources::Ipv4Range.new(addresses) if !(addresses).nil?
|
125
|
+
end
|
126
|
+
|
93
127
|
# @return [bool]
|
94
128
|
attr_accessor :n_id
|
95
129
|
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
require_relative '../../util'
|
4
|
+
|
5
|
+
module Saklient
|
6
|
+
module Cloud
|
7
|
+
module Resources
|
8
|
+
|
9
|
+
# IPv4ネットワークのIPアドレス範囲.
|
10
|
+
class Ipv4Range
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
# @private
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :_first
|
17
|
+
|
18
|
+
public
|
19
|
+
|
20
|
+
# @private
|
21
|
+
# @return [String]
|
22
|
+
def get_first
|
23
|
+
return @_first
|
24
|
+
end
|
25
|
+
|
26
|
+
# 開始アドレス
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
attr_reader :first
|
30
|
+
|
31
|
+
def first
|
32
|
+
get_first
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
# @private
|
38
|
+
# @return [String]
|
39
|
+
attr_accessor :_last
|
40
|
+
|
41
|
+
public
|
42
|
+
|
43
|
+
# @private
|
44
|
+
# @return [String]
|
45
|
+
def get_last
|
46
|
+
return @_last
|
47
|
+
end
|
48
|
+
|
49
|
+
# 終了アドレス
|
50
|
+
#
|
51
|
+
# @return [String]
|
52
|
+
attr_reader :last
|
53
|
+
|
54
|
+
def last
|
55
|
+
get_last
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
# @private
|
61
|
+
# @return [Array<String>]
|
62
|
+
attr_accessor :_as_array
|
63
|
+
|
64
|
+
public
|
65
|
+
|
66
|
+
# @private
|
67
|
+
# @return [Array<String>]
|
68
|
+
def get_as_array
|
69
|
+
ret = []
|
70
|
+
i = Saklient::Util::ip2long(@_first)
|
71
|
+
i1 = Saklient::Util::ip2long(@_last)
|
72
|
+
while i <= i1 do
|
73
|
+
ret << Saklient::Util::long2ip(i)
|
74
|
+
i += 1
|
75
|
+
end
|
76
|
+
return ret
|
77
|
+
end
|
78
|
+
|
79
|
+
# この範囲に属するIPv4アドレスの一覧を取得します.
|
80
|
+
#
|
81
|
+
# @return [Array<String>]
|
82
|
+
attr_reader :as_array
|
83
|
+
|
84
|
+
def as_array
|
85
|
+
get_as_array
|
86
|
+
end
|
87
|
+
|
88
|
+
# @private
|
89
|
+
# @param [any] obj
|
90
|
+
def initialize(obj = nil)
|
91
|
+
obj = {} if (obj).nil?
|
92
|
+
first = Saklient::Util::get_by_path_any([obj], ['Min', 'min'])
|
93
|
+
@_first = nil
|
94
|
+
@_first = first if !(first).nil?
|
95
|
+
@_first = nil if @_first == ''
|
96
|
+
last = Saklient::Util::get_by_path_any([obj], ['Max', 'max'])
|
97
|
+
@_last = nil
|
98
|
+
@_last = last if !(last).nil?
|
99
|
+
@_last = nil if @_last == ''
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -207,6 +207,57 @@ module Saklient
|
|
207
207
|
|
208
208
|
protected
|
209
209
|
|
210
|
+
# @private
|
211
|
+
# @return [any]
|
212
|
+
def _used_ipv4_address_hash
|
213
|
+
filter = {}
|
214
|
+
filter[('Switch' + '.ID').to_sym] = _id
|
215
|
+
query = {}
|
216
|
+
Saklient::Util::set_by_path(query, 'Count', 0)
|
217
|
+
Saklient::Util::set_by_path(query, 'Filter', filter)
|
218
|
+
Saklient::Util::set_by_path(query, 'Include', ['IPAddress', 'UserIPAddress'])
|
219
|
+
result = @_client.request('GET', '/interface', query)
|
220
|
+
return nil if (result).nil?
|
221
|
+
result = result[:Interfaces]
|
222
|
+
return nil if (result).nil?
|
223
|
+
ifaces = result
|
224
|
+
return nil if (ifaces).nil?
|
225
|
+
found = {}
|
226
|
+
for iface in ifaces
|
227
|
+
ip = iface[:IPAddress]
|
228
|
+
userIp = iface[:UserIPAddress]
|
229
|
+
ip = userIp if (ip).nil?
|
230
|
+
found[ip.to_sym] = true if !(ip).nil?
|
231
|
+
end
|
232
|
+
return found
|
233
|
+
end
|
234
|
+
|
235
|
+
public
|
236
|
+
|
237
|
+
# このルータ+スイッチに接続中のインタフェースに割り当てられているIPアドレスを収集します.
|
238
|
+
#
|
239
|
+
# @return [Array<String>]
|
240
|
+
def collect_used_ipv4_addresses
|
241
|
+
found = _used_ipv4_address_hash
|
242
|
+
return found.keys.map{|k| k.to_s}.sort()
|
243
|
+
end
|
244
|
+
|
245
|
+
# このルータ+スイッチで利用できる未使用のIPアドレスを収集します.
|
246
|
+
#
|
247
|
+
# @return [Array<String>]
|
248
|
+
def collect_unused_ipv4_addresses
|
249
|
+
nets = get_ipv4_nets
|
250
|
+
return nil if nets.length < 1
|
251
|
+
used = _used_ipv4_address_hash
|
252
|
+
ret = []
|
253
|
+
for ip in nets[0].range.as_array
|
254
|
+
ret << ip if !(!used.nil? && used.key?(ip.to_sym))
|
255
|
+
end
|
256
|
+
return ret.sort()
|
257
|
+
end
|
258
|
+
|
259
|
+
protected
|
260
|
+
|
210
261
|
# @return [bool]
|
211
262
|
attr_accessor :n_id
|
212
263
|
|
data/lib/saklient/util.rb
CHANGED
@@ -78,7 +78,7 @@ module Saklient
|
|
78
78
|
raise Exception.new('Could not create class instance of ' + classPath) if (ret).nil?
|
79
79
|
return ret
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
# @param [String] s
|
83
83
|
# @return [NativeDate]
|
84
84
|
def self.str2date(s)
|
@@ -93,6 +93,35 @@ module Saklient
|
|
93
93
|
return d.to_s
|
94
94
|
end
|
95
95
|
|
96
|
+
# @param [String] ip
|
97
|
+
# @return [Integer]
|
98
|
+
def self.ip2long(s)
|
99
|
+
return nil unless s.is_a? String
|
100
|
+
return nil unless /^\d+\.\d+\.\d+\.\d+$/.match(s)
|
101
|
+
ret = 0
|
102
|
+
s.split(/\./).each{|o|
|
103
|
+
v = o.to_i
|
104
|
+
ret = nil unless 0<=v && v<=255
|
105
|
+
ret = ret<<8 | v if !ret.nil?
|
106
|
+
}
|
107
|
+
return ret
|
108
|
+
end
|
109
|
+
|
110
|
+
# @param [Integer] long
|
111
|
+
# @return [String]
|
112
|
+
def self.long2ip(v)
|
113
|
+
v = v.to_i if v.is_a? String
|
114
|
+
return nil unless v.is_a? Integer
|
115
|
+
ret = []
|
116
|
+
v += (1<<32) if v<0
|
117
|
+
4.times{||
|
118
|
+
ret.unshift(v & 255)
|
119
|
+
v >>= 8
|
120
|
+
}
|
121
|
+
return nil if v != 0
|
122
|
+
return ret.join(".")
|
123
|
+
end
|
124
|
+
|
96
125
|
# @param [String] s
|
97
126
|
# @return [String]
|
98
127
|
def self.url_encode(s)
|
data/lib/saklient/version.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
$: << File.dirname(__dir__) + '/lib'
|
2
|
+
require 'saklient/util'
|
3
|
+
require 'saklient/cloud/api'
|
4
|
+
|
5
|
+
describe 'Ipv4Net' do
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
before do
|
10
|
+
|
11
|
+
# load config file
|
12
|
+
root = File.dirname(__dir__)
|
13
|
+
test_ok_file = root + '/testok'
|
14
|
+
expect(File).to exist(test_ok_file)
|
15
|
+
config_file = root + '/config.sh'
|
16
|
+
expect(File).to exist(config_file)
|
17
|
+
@config = {}
|
18
|
+
fh = open(config_file)
|
19
|
+
fh.each {|line|
|
20
|
+
if /^\s*export\s+(\w+)\s*=\s*(.+?)\s*$/.match(line) then
|
21
|
+
key = $1
|
22
|
+
value = $2
|
23
|
+
@config[key.to_sym] = value.gsub(/'([^']*)'|"([^"]*)"|\\(.)|(.)/) {|m|
|
24
|
+
$1 || $2 || $3 || $4
|
25
|
+
}
|
26
|
+
end
|
27
|
+
}
|
28
|
+
fh.close
|
29
|
+
expect(@config[:SACLOUD_TOKEN]).not_to be_empty #'SACLOUD_TOKEN must be defined in config.sh'
|
30
|
+
expect(@config[:SACLOUD_SECRET]).not_to be_empty #'SACLOUD_SECRET must be defined in config.sh'
|
31
|
+
#expect(@config[:SACLOUD_ZONE]).not_to be_empty #'SACLOUD_ZONE must be defined in config.sh'
|
32
|
+
|
33
|
+
# authorize
|
34
|
+
@api = Saklient::Cloud::API::authorize(@config[:SACLOUD_TOKEN], @config[:SACLOUD_SECRET])
|
35
|
+
@api = @api.in_zone(@config[:SACLOUD_ZONE]) if @config[:SACLOUD_ZONE]
|
36
|
+
expect(@api).to be_an_instance_of Saklient::Cloud::API
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
it 'should access objects by path' do
|
43
|
+
|
44
|
+
@api.router.find.each{|router|
|
45
|
+
router.get_swytch.ipv4_nets.each{|net|
|
46
|
+
if !net.range.nil?
|
47
|
+
p net.range.first
|
48
|
+
p net.range.last
|
49
|
+
# p net.range.as_array
|
50
|
+
end
|
51
|
+
}
|
52
|
+
p router.get_swytch.collect_used_ipv4_addresses
|
53
|
+
p router.get_swytch.collect_unused_ipv4_addresses
|
54
|
+
p
|
55
|
+
}
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
end
|
data/spec/router_spec.rb
CHANGED
@@ -45,6 +45,9 @@ describe 'Router' do
|
|
45
45
|
name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
|
46
46
|
description = 'This instance was created by saklient.ruby rspec'
|
47
47
|
mask_len = 28
|
48
|
+
mask_len_cnt = 1<<32-mask_len
|
49
|
+
sroute_mask_len = 28
|
50
|
+
sroute_mask_len_cnt = 1<<32-sroute_mask_len
|
48
51
|
|
49
52
|
#
|
50
53
|
swytch = nil
|
@@ -77,8 +80,38 @@ describe 'Router' do
|
|
77
80
|
end
|
78
81
|
|
79
82
|
expect(swytch).to be_an_instance_of Saklient::Cloud::Resources::Swytch
|
80
|
-
expect(swytch.ipv4_nets.length).to
|
83
|
+
expect(swytch.ipv4_nets.length).to eq 1
|
81
84
|
expect(swytch.ipv4_nets[0]).to be_an_instance_of Saklient::Cloud::Resources::Ipv4Net
|
85
|
+
expect(swytch.ipv4_nets[0].range.as_array.length).to eq mask_len_cnt-5
|
86
|
+
expect(swytch.collect_used_ipv4_addresses.length).to eq 0
|
87
|
+
expect(swytch.collect_unused_ipv4_addresses.length).to eq mask_len_cnt-5
|
88
|
+
|
89
|
+
#
|
90
|
+
puts 'サーバを作成しています...'
|
91
|
+
server = @api.server.create
|
92
|
+
expect(server).to be_an_instance_of Saklient::Cloud::Resources::Server
|
93
|
+
server.name = name
|
94
|
+
server.description = description
|
95
|
+
server.plan = @api.product.server.get_by_spec(1, 1)
|
96
|
+
server.save
|
97
|
+
expect(server.id.to_i).to be > 0
|
98
|
+
|
99
|
+
#
|
100
|
+
puts 'インタフェースを増設しています...'
|
101
|
+
iface = server.add_iface()
|
102
|
+
expect(iface).to be_an_instance_of Saklient::Cloud::Resources::Iface
|
103
|
+
expect(iface.id.to_i).to be > 0
|
104
|
+
|
105
|
+
#
|
106
|
+
puts 'インタフェースをルータ+スイッチに接続しています...'
|
107
|
+
iface.connect_to_swytch(swytch)
|
108
|
+
|
109
|
+
#
|
110
|
+
puts 'インタフェースにIPアドレスを設定しています...'
|
111
|
+
iface.user_ip_address = swytch.ipv4_nets[0].range.as_array[1]
|
112
|
+
iface.save
|
113
|
+
expect(swytch.collect_used_ipv4_addresses.length).to eq 1
|
114
|
+
expect(swytch.collect_unused_ipv4_addresses.length).to eq mask_len_cnt-6
|
82
115
|
|
83
116
|
#
|
84
117
|
puts 'ルータ+スイッチの帯域プランを変更しています...'
|
@@ -87,15 +120,20 @@ describe 'Router' do
|
|
87
120
|
expect(swytch.router.id).not_to eq router_id_before
|
88
121
|
|
89
122
|
#
|
90
|
-
if 0 < swytch.ipv6_nets.length then
|
91
|
-
puts 'ルータ+スイッチからIPv6ネットワークの割当を解除しています...'
|
92
|
-
swytch.remove_ipv6_net
|
93
|
-
end
|
94
123
|
puts 'ルータ+スイッチにIPv6ネットワークを割り当てています...'
|
95
124
|
v6net = swytch.add_ipv6_net
|
96
125
|
expect(v6net).to be_an_instance_of Saklient::Cloud::Resources::Ipv6Net
|
97
126
|
expect(swytch.ipv6_nets.length).to eq 1
|
98
127
|
|
128
|
+
#
|
129
|
+
puts 'ルータ+スイッチにスタティックルートを割り当てています...'
|
130
|
+
net0 = swytch.ipv4_nets[0]
|
131
|
+
next_hop = IPAddr.new(IPAddr.new(net0.address).to_i + 4, Socket::AF_INET).to_s
|
132
|
+
sroute = swytch.add_static_route(sroute_mask_len, next_hop)
|
133
|
+
expect(sroute).to be_an_instance_of Saklient::Cloud::Resources::Ipv4Net
|
134
|
+
expect(swytch.ipv4_nets.length).to eq 2
|
135
|
+
expect(swytch.ipv4_nets[1].range.as_array.length).to eq sroute_mask_len_cnt
|
136
|
+
|
99
137
|
#
|
100
138
|
(swytch.ipv4_nets.length - 1).downto(1) do |i|
|
101
139
|
puts 'ルータ+スイッチからスタティックルートの割当を解除しています...'
|
@@ -103,12 +141,17 @@ describe 'Router' do
|
|
103
141
|
swytch.remove_static_route(net)
|
104
142
|
end
|
105
143
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
144
|
+
#
|
145
|
+
if 0 < swytch.ipv6_nets.length then
|
146
|
+
puts 'ルータ+スイッチからIPv6ネットワークの割当を解除しています...'
|
147
|
+
swytch.remove_ipv6_net
|
148
|
+
end
|
149
|
+
|
150
|
+
#
|
151
|
+
puts 'サーバを削除しています...'
|
152
|
+
server.destroy
|
153
|
+
|
154
|
+
#
|
112
155
|
|
113
156
|
end
|
114
157
|
|
data/spec/swytch_spec.rb
CHANGED
data/spec/util_spec.rb
CHANGED
@@ -67,6 +67,34 @@ describe 'Util' do
|
|
67
67
|
end
|
68
68
|
fail '未定義または読み取り専用フィールドへのset時は NoMethodError がスローされなければなりません' unless ok
|
69
69
|
|
70
|
+
#
|
71
|
+
expect(Util::ip2long('0.0.0.0')).to eq 0
|
72
|
+
expect(Util::ip2long('127.255.255.255')).to eq 0x7FFFFFFF
|
73
|
+
expect(Util::ip2long('128.0.0.0')).to eq 0x80000000
|
74
|
+
expect(Util::ip2long('255.255.255.255')).to eq 0xFFFFFFFF
|
75
|
+
expect(Util::ip2long('222.173.190.239')).to eq 0xDEADBEEF
|
76
|
+
#
|
77
|
+
expect(Util::long2ip(0)).to eq '0.0.0.0'
|
78
|
+
expect(Util::long2ip(0x7FFFFFFF)).to eq '127.255.255.255'
|
79
|
+
expect(Util::long2ip(0x80000000)).to eq '128.0.0.0'
|
80
|
+
expect(Util::long2ip(0xFFFFFFFF)).to eq '255.255.255.255'
|
81
|
+
expect(Util::long2ip(0xDEADBEEF)).to eq '222.173.190.239'
|
82
|
+
expect(Util::long2ip(Util::ip2long('127.255.255.255') + 1)).to eq '128.0.0.0'
|
83
|
+
#
|
84
|
+
expect(Util::ip2long(nil)).to be_nil
|
85
|
+
expect(Util::ip2long(0)).to be_nil
|
86
|
+
expect(Util::ip2long('')).to be_nil
|
87
|
+
expect(Util::ip2long('x')).to be_nil
|
88
|
+
expect(Util::ip2long('0.0.0')).to be_nil
|
89
|
+
expect(Util::ip2long('0.0.0.x')).to be_nil
|
90
|
+
expect(Util::ip2long('0.0.0.0.0')).to be_nil
|
91
|
+
expect(Util::ip2long('255.255.255.256')).to be_nil
|
92
|
+
expect(Util::ip2long('256.255.255.255')).to be_nil
|
93
|
+
expect(Util::long2ip(nil)).to be_nil
|
94
|
+
expect(Util::long2ip('0')).to eq '0.0.0.0'
|
95
|
+
expect(Util::long2ip(Util::ip2long('0.0.0.0') - 1)).to eq '255.255.255.255'
|
96
|
+
expect(Util::long2ip(Util::ip2long('255.255.255.255') + 1)).to be_nil
|
97
|
+
|
70
98
|
end
|
71
99
|
|
72
100
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saklient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2.
|
4
|
+
version: 0.0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- townewgokgok
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- lib/saklient/cloud/resources/icon.rb
|
199
199
|
- lib/saklient/cloud/resources/iface.rb
|
200
200
|
- lib/saklient/cloud/resources/ipv4_net.rb
|
201
|
+
- lib/saklient/cloud/resources/ipv4_range.rb
|
201
202
|
- lib/saklient/cloud/resources/ipv6_net.rb
|
202
203
|
- lib/saklient/cloud/resources/iso_image.rb
|
203
204
|
- lib/saklient/cloud/resources/lb_server.rb
|
@@ -256,6 +257,7 @@ files:
|
|
256
257
|
- spec/bridge_spec.rb
|
257
258
|
- spec/enum_spec.rb
|
258
259
|
- spec/exception_spec.rb
|
260
|
+
- spec/ipv4net_spec.rb
|
259
261
|
- spec/iso_image_spec.rb
|
260
262
|
- spec/license_spec.rb
|
261
263
|
- spec/loadbalancer_spec.rb
|
@@ -293,6 +295,7 @@ test_files:
|
|
293
295
|
- spec/bridge_spec.rb
|
294
296
|
- spec/enum_spec.rb
|
295
297
|
- spec/exception_spec.rb
|
298
|
+
- spec/ipv4net_spec.rb
|
296
299
|
- spec/iso_image_spec.rb
|
297
300
|
- spec/license_spec.rb
|
298
301
|
- spec/loadbalancer_spec.rb
|
@@ -300,4 +303,3 @@ test_files:
|
|
300
303
|
- spec/server_spec.rb
|
301
304
|
- spec/swytch_spec.rb
|
302
305
|
- spec/util_spec.rb
|
303
|
-
has_rdoc:
|