saklient 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/saklient/cloud/client.rb +1 -1
- data/lib/saklient/cloud/resources/server.rb +40 -28
- data/lib/saklient/version.rb +1 -1
- data/spec/server_spec.rb +111 -82
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 888caa1a7e16911a83fc233a258817fe3fd23bf7
|
4
|
+
data.tar.gz: 9886629e6022f3c4a8ea5313fec7039e2f65999c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59cd3006140c4e5c9afa72f6d8c287ede4c20eebf3f99925801ad6ab1623bc9e71dc01d988eab0691c6575b4bebbafbd28e04dbf491d444765c83a38a7092d73
|
7
|
+
data.tar.gz: dd0b47152232d3caae9e29aaa3cbe4043be34b6257851e9cc60fc897c03ba3fa0ce639bca43a2096000954b4e993803cc6466eaa680bd02c895ef62640bafa88
|
@@ -78,7 +78,7 @@ module Saklient
|
|
78
78
|
|
79
79
|
extra_headers = {
|
80
80
|
'Content-Type' => 'application/x-www-form-urlencoded',
|
81
|
-
'User-Agent' => 'saklient.ruby ver-0.0.
|
81
|
+
'User-Agent' => 'saklient.ruby ver-0.0.8 rev-bab628f6f4c2a9d37b38c634b4a514cb66467939',
|
82
82
|
'X-Requested-With' => 'XMLHttpRequest',
|
83
83
|
'X-Sakura-HTTP-Method' => method,
|
84
84
|
'X-Sakura-Error-Level' => 'warning',
|
@@ -167,6 +167,7 @@ module Saklient
|
|
167
167
|
# ディスクのコピー中は待機し, 完了してからreturnします.
|
168
168
|
#
|
169
169
|
# 共有セグメントに接続されている場合はAPIによって自動的に割り当てられるため, 省略またはnullを指定してください.
|
170
|
+
# 文字列 "skip" を指定すると, ディスク修正処理をスキップします.
|
170
171
|
# trueを指定した場合は, 複製元の現在のディスク#1から直接クローンします.
|
171
172
|
# 省略またはnullを指定した場合は, 複製元のディスク#1が作成された時のコピー元リソースから再度クローンを試みます.
|
172
173
|
# 既に削除されている場合は, 複製元の現在のディスク#1からの直接クローンにフォールバックします.
|
@@ -188,6 +189,8 @@ module Saklient
|
|
188
189
|
server = Saklient::Cloud::Resources::Server.new(@_client, nil)
|
189
190
|
names = []
|
190
191
|
hostNames = []
|
192
|
+
skipConfig = userIpAddress == 'skip'
|
193
|
+
userIpAddress = nil if skipConfig
|
191
194
|
if (name).nil? || (hostName).nil?
|
192
195
|
model = Saklient::Util::create_class_instance('saklient.cloud.models.Model_Server', [@_client])
|
193
196
|
servers = model.limit(0).find
|
@@ -209,31 +212,38 @@ module Saklient
|
|
209
212
|
if 0 < self.ifaces.length
|
210
213
|
iface = self.ifaces[0]
|
211
214
|
iface.reload
|
212
|
-
if (
|
213
|
-
|
214
|
-
|
215
|
-
|
215
|
+
if !(userIpAddress).nil?
|
216
|
+
if (iface.ip_address).nil?
|
217
|
+
raise Saklient::Errors::SaklientException.new('invalid_data', 'Setting an IP address to the disconnected interface is not allowed') if (iface.swytch_id).nil?
|
218
|
+
else
|
219
|
+
raise Saklient::Errors::SaklientException.new('invalid_data', 'Setting an IP address to the interface connected to a shared segment is not allowed')
|
220
|
+
end
|
216
221
|
end
|
217
222
|
end
|
218
223
|
srcDisks = find_disks
|
219
224
|
if 0 < srcDisks.length
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
if
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
rescue Saklient::Errors::HttpNotFoundException
|
228
|
-
diskSource = srcDisks[0]
|
229
|
-
end
|
225
|
+
if Saklient::Util::are_same(diskSource, true)
|
226
|
+
diskSource = srcDisks[0]
|
227
|
+
else
|
228
|
+
if (diskSource).nil?
|
229
|
+
diskSource = srcDisks[0].source
|
230
|
+
if (diskSource).nil?
|
231
|
+
diskSource = srcDisks[0]
|
230
232
|
else
|
231
|
-
if diskSource.is_a?(Saklient::Cloud::Resources::
|
233
|
+
if diskSource.is_a?(Saklient::Cloud::Resources::Archive)
|
232
234
|
begin
|
233
235
|
diskSource.reload
|
234
236
|
rescue Saklient::Errors::HttpNotFoundException
|
235
237
|
diskSource = srcDisks[0]
|
236
238
|
end
|
239
|
+
else
|
240
|
+
if diskSource.is_a?(Saklient::Cloud::Resources::Disk)
|
241
|
+
begin
|
242
|
+
diskSource.reload
|
243
|
+
rescue Saklient::Errors::HttpNotFoundException
|
244
|
+
diskSource = srcDisks[0]
|
245
|
+
end
|
246
|
+
end
|
237
247
|
end
|
238
248
|
end
|
239
249
|
end
|
@@ -281,21 +291,23 @@ module Saklient
|
|
281
291
|
end
|
282
292
|
if !(disk).nil?
|
283
293
|
disk.sleep_while_copying
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
if
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
294
|
+
if !skipConfig
|
295
|
+
diskconf = disk.create_config
|
296
|
+
diskconf.host_name = hostName
|
297
|
+
diskconf.ssh_key = sshKey
|
298
|
+
diskconf.ip_address = userIpAddress
|
299
|
+
if !(userSwytch).nil?
|
300
|
+
if 0 < userSwytch.ipv4_nets.length
|
301
|
+
net = userSwytch.ipv4_nets[0]
|
302
|
+
diskconf.default_route = net.default_route
|
303
|
+
diskconf.network_mask_len = net.mask_len
|
304
|
+
else
|
305
|
+
diskconf.default_route = userSwytch.user_default_route
|
306
|
+
diskconf.network_mask_len = userSwytch.user_mask_len
|
307
|
+
end
|
296
308
|
end
|
309
|
+
diskconf.write
|
297
310
|
end
|
298
|
-
diskconf.write
|
299
311
|
end
|
300
312
|
server.reload
|
301
313
|
return server
|
data/lib/saklient/version.rb
CHANGED
data/spec/server_spec.rb
CHANGED
@@ -3,13 +3,15 @@ require 'saklient/cloud/api'
|
|
3
3
|
require 'date'
|
4
4
|
require 'SecureRandom'
|
5
5
|
|
6
|
+
SKIPS_SERVER_BOOT = true
|
6
7
|
TESTS_EASY_DUPLICATE = true
|
7
8
|
TESTS_DISK_EXPANSION = false
|
8
9
|
|
9
10
|
BREAKS_AFTER_SERVER_UP = false
|
10
11
|
BREAKS_AFTER_EASY_DUPLICATE = true
|
11
12
|
|
12
|
-
USE_READYMADE_SERVER_ID = 112800244655 # For TESTS_EASY_DUPLICATE
|
13
|
+
USE_READYMADE_SERVER_ID = nil # 112800244655 # For TESTS_EASY_DUPLICATE
|
14
|
+
CREATES_EMPTY_DISK = true
|
13
15
|
|
14
16
|
|
15
17
|
|
@@ -77,7 +79,7 @@ describe 'Server' do
|
|
77
79
|
|
78
80
|
|
79
81
|
it 'should be CRUDed' do
|
80
|
-
name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8]
|
82
|
+
name = '!ruby_rspec-' + DateTime.now.strftime('%Y%m%d_%H%M%S') + '-' + SecureRandom.uuid[0, 8] + "-001"
|
81
83
|
description = 'This instance was created by saklient.ruby rspec'
|
82
84
|
tag = 'saklient-test'
|
83
85
|
cpu = 1
|
@@ -134,7 +136,11 @@ describe 'Server' do
|
|
134
136
|
disk.description = 'This instance was created by saklient.ruby rspec'
|
135
137
|
disk.tags = ['saklient-test']
|
136
138
|
disk.plan = @api.product.disk.ssd
|
137
|
-
|
139
|
+
if CREATES_EMPTY_DISK
|
140
|
+
disk.size_gib = archive.size_gib
|
141
|
+
else
|
142
|
+
disk.source = archive
|
143
|
+
end
|
138
144
|
disk.save
|
139
145
|
# p disk.dump
|
140
146
|
|
@@ -182,8 +188,10 @@ describe 'Server' do
|
|
182
188
|
# p disk.dump
|
183
189
|
disk.source = nil
|
184
190
|
disk.reload
|
185
|
-
|
186
|
-
|
191
|
+
unless CREATES_EMPTY_DISK
|
192
|
+
expect(disk.source).to be_an_instance_of Saklient::Cloud::Resources::Archive
|
193
|
+
expect(disk.source.id).to eq archive.id
|
194
|
+
end
|
187
195
|
expect(disk.size_gib).to eq archive.size_gib
|
188
196
|
|
189
197
|
# connect the disk to the server
|
@@ -196,91 +204,106 @@ describe 'Server' do
|
|
196
204
|
expect(ip_address).not_to be_empty
|
197
205
|
|
198
206
|
# config the disk
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
# boot
|
209
|
-
puts 'booting the server...'
|
210
|
-
server.boot
|
211
|
-
sleep 3
|
212
|
-
server.reload
|
213
|
-
expect(server.instance.status).to eq Saklient::Cloud::Enums::EServerInstanceStatus::up
|
214
|
-
|
215
|
-
# boot conflict
|
216
|
-
puts 'checking the server power conflicts...'
|
217
|
-
ok = false
|
218
|
-
begin
|
219
|
-
server.boot
|
220
|
-
rescue Saklient::Errors::HttpConflictException
|
221
|
-
ok = true
|
207
|
+
unless CREATES_EMPTY_DISK
|
208
|
+
puts 'writing configuration to the disk...'
|
209
|
+
diskconf = disk.create_config
|
210
|
+
diskconf.host_name = 'saklient-test'
|
211
|
+
diskconf.password = password
|
212
|
+
diskconf.ssh_key = ssh_public_key
|
213
|
+
diskconf.ssh_keys.unshift(additional_ssh_public_key) if !additional_ssh_public_key.empty?
|
214
|
+
diskconf.scripts.push(script)
|
215
|
+
diskconf.write
|
222
216
|
end
|
223
|
-
fail 'サーバ起動中の起動試行時は HttpConflictException がスローされなければなりません' unless ok
|
224
217
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
218
|
+
unless SKIPS_SERVER_BOOT
|
219
|
+
|
220
|
+
# boot
|
221
|
+
puts 'booting the server...'
|
222
|
+
server.boot
|
223
|
+
sleep 3
|
224
|
+
server.reload
|
225
|
+
expect(server.instance.status).to eq Saklient::Cloud::Enums::EServerInstanceStatus::up
|
226
|
+
|
227
|
+
# boot conflict
|
228
|
+
puts 'checking the server power conflicts...'
|
229
|
+
ok = false
|
230
|
+
begin
|
231
|
+
server.boot
|
232
|
+
rescue Saklient::Errors::HttpConflictException
|
233
|
+
ok = true
|
236
234
|
end
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
235
|
+
fail 'サーバ起動中の起動試行時は HttpConflictException がスローされなければなりません' unless ok
|
236
|
+
|
237
|
+
# ssh
|
238
|
+
unless CREATES_EMPTY_DISK
|
239
|
+
cmd = '| ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -i' + ssh_private_key_file +
|
240
|
+
' root@' + ip_address + ' hostname 2>/dev/null'
|
241
|
+
ssh_success = false
|
242
|
+
puts 'trying to SSH to the server...'
|
243
|
+
for i in 0..9 do
|
244
|
+
sleep 5
|
245
|
+
sh = open cmd
|
246
|
+
host_name_got = ''
|
247
|
+
while !sh.eof
|
248
|
+
host_name_got += sh.gets
|
249
|
+
end
|
250
|
+
sh.close
|
251
|
+
host_name_got.strip!
|
252
|
+
next unless host_name == host_name_got
|
253
|
+
ssh_success = true
|
254
|
+
break
|
255
|
+
end
|
256
|
+
fail '作成したサーバへ正常にSSHできません' unless ssh_success
|
257
|
+
end
|
258
|
+
|
259
|
+
fail 'サーバを起動後、処理を中断しました' if BREAKS_AFTER_SERVER_UP
|
260
|
+
|
261
|
+
# stop
|
262
|
+
sleep 1
|
263
|
+
puts 'stopping the server...'
|
264
|
+
server.stop
|
265
|
+
fail 'サーバが正常に停止しません' unless server.sleep_until_down
|
266
|
+
|
267
|
+
# activity
|
268
|
+
for sample in server.activity.fetch.samples do
|
269
|
+
expect(sample.at).to be_an_instance_of DateTime
|
270
|
+
end
|
271
|
+
|
256
272
|
end
|
257
273
|
|
258
274
|
end
|
259
275
|
|
260
276
|
if TESTS_EASY_DUPLICATE
|
261
277
|
puts 'running easy duplicate...'
|
262
|
-
|
278
|
+
server1 = server
|
279
|
+
server2 = server1.easy_duplicate(CREATES_EMPTY_DISK ? 'skip' : nil)
|
263
280
|
|
264
281
|
# check the server properties
|
265
282
|
expect(server2.id.to_i).to be > 0
|
266
|
-
expect(server2.name.gsub(/-\d+/, '')).to eq name.gsub(/-\d+/, '')
|
267
|
-
expect(server2.host_name.gsub(/-\d+/, '')).to eq host_name.gsub(/-\d+/, '')
|
268
|
-
expect(server2.description).to eq description
|
283
|
+
expect(server2.name.gsub(/-\d+/, '')).to eq server1.name.gsub(/-\d+/, '')
|
284
|
+
expect(server2.host_name.gsub(/-\d+/, '')).to eq server1.host_name.gsub(/-\d+/, '')
|
285
|
+
expect(server2.description).to eq server1.description
|
269
286
|
expect(server2.tags).to be_an_instance_of Array
|
270
|
-
expect(server2.tags.length).to eq
|
271
|
-
expect(server2.tags[0]).to eq
|
272
|
-
expect(server2.plan.cpu).to eq cpu
|
273
|
-
expect(server2.plan.memory_gib).to eq
|
287
|
+
expect(server2.tags.length).to eq server1.tags.length
|
288
|
+
expect(server2.tags[0]).to eq server1.tags[0]
|
289
|
+
expect(server2.plan.cpu).to eq server1.plan.cpu
|
290
|
+
expect(server2.plan.memory_gib).to eq server1.plan.memory_gib
|
274
291
|
|
275
|
-
expect(server2.ifaces.length).to eq
|
292
|
+
expect(server2.ifaces.length).to eq server1.ifaces.length
|
276
293
|
expect(server2.ifaces[0]).to be_an_instance_of Saklient::Cloud::Resources::Iface
|
277
294
|
expect(server2.ifaces[0].id.to_i).to be > 0
|
278
|
-
expect(server2.ifaces[0].ip_address).not_to eq
|
295
|
+
expect(server2.ifaces[0].ip_address).not_to eq server1.ifaces[0].ip_address
|
279
296
|
|
297
|
+
disks1 = server1.find_disks()
|
280
298
|
disks2 = server2.find_disks()
|
281
|
-
expect(disks2.length).to eq
|
282
|
-
expect(disks2[0].size_gib).to eq
|
283
|
-
expect(disks2[0].source
|
299
|
+
expect(disks2.length).to eq disks1.length
|
300
|
+
expect(disks2[0].size_gib).to eq disks1[0].size_gib
|
301
|
+
expect(disks2[0].source).not_to be_nil
|
302
|
+
if CREATES_EMPTY_DISK
|
303
|
+
expect(disks2[0].source.id).to eq disks1[0].id
|
304
|
+
else
|
305
|
+
expect(disks2[0].source.id).to eq disks1[0].source.id
|
306
|
+
end
|
284
307
|
|
285
308
|
next if BREAKS_AFTER_EASY_DUPLICATE
|
286
309
|
|
@@ -288,14 +311,18 @@ describe 'Server' do
|
|
288
311
|
server2.destroy()
|
289
312
|
end
|
290
313
|
|
291
|
-
|
292
|
-
puts 'disconnecting the disk from the server...'
|
293
|
-
disk.disconnect
|
294
|
-
|
295
|
-
# delete the server
|
296
|
-
puts 'deleting the server...'
|
297
|
-
server.destroy
|
314
|
+
if USE_READYMADE_SERVER_ID.nil? then
|
298
315
|
|
316
|
+
# disconnect the disk from the server
|
317
|
+
puts 'disconnecting the disk from the server...'
|
318
|
+
disk.disconnect
|
319
|
+
|
320
|
+
# delete the server
|
321
|
+
puts 'deleting the server...'
|
322
|
+
server.destroy
|
323
|
+
|
324
|
+
end
|
325
|
+
|
299
326
|
if TESTS_DISK_EXPANSION
|
300
327
|
|
301
328
|
# duplicate the disk
|
@@ -323,9 +350,11 @@ describe 'Server' do
|
|
323
350
|
|
324
351
|
end
|
325
352
|
|
326
|
-
|
327
|
-
|
328
|
-
|
353
|
+
if USE_READYMADE_SERVER_ID.nil? then
|
354
|
+
# delete the disks
|
355
|
+
puts 'deleting the disk...'
|
356
|
+
disk.destroy
|
357
|
+
end
|
329
358
|
|
330
359
|
end
|
331
360
|
|
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.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- townewgokgok
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|