saklient 0.0.2.6 → 0.0.2.7
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 +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:
|