saklient 0.0.7 → 0.0.8
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/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
|