fog-scaleway 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/fog-scaleway.gemspec +1 -0
- data/lib/fog/scaleway/compute.rb +52 -1
- data/lib/fog/scaleway/models/compute/product_server.rb +17 -0
- data/lib/fog/scaleway/models/compute/product_servers.rb +25 -0
- data/lib/fog/scaleway/requests/account/update_user.rb +1 -1
- data/lib/fog/scaleway/requests/compute/create_server.rb +17 -4
- data/lib/fog/scaleway/requests/compute/execute_server_action.rb +20 -0
- data/lib/fog/scaleway/requests/compute/list_product_servers.rb +17 -0
- data/lib/fog/scaleway/requests/compute/update_server.rb +6 -0
- data/lib/fog/scaleway/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db12bf5472f63d0a82967f353364b030d692aa52
|
4
|
+
data.tar.gz: 0b9b420db0de3ae446a3a8b849de10cc06ed7bec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7c53503be5dbea85781e6d2a4ac210fb7e95c533c0fa1a721736cc38e0ac9e5b5c9224bed40d5b9c4f8a288c1a5fad7be2d46e70f0a975e07555c6871db913e
|
7
|
+
data.tar.gz: 548432aeeaa06b08871bade39ba2561a47f4c17b09ec6d298ae51405b42d62e45ec498d4db3d0bc72ab90e58ac7829f1b028b2fc42de07e22509009b02fdd1aa
|
data/Rakefile
CHANGED
data/fog-scaleway.gemspec
CHANGED
data/lib/fog/scaleway/compute.rb
CHANGED
@@ -37,6 +37,8 @@ module Fog
|
|
37
37
|
collection :bootscripts
|
38
38
|
model :task
|
39
39
|
collection :tasks
|
40
|
+
model :product_server
|
41
|
+
collection :product_servers
|
40
42
|
|
41
43
|
request_path 'fog/scaleway/requests/compute'
|
42
44
|
|
@@ -106,6 +108,9 @@ module Fog
|
|
106
108
|
request :list_containers
|
107
109
|
request :get_container
|
108
110
|
|
111
|
+
# Products
|
112
|
+
request :list_product_servers
|
113
|
+
|
109
114
|
# Dashboard
|
110
115
|
request :get_dashboard
|
111
116
|
|
@@ -209,6 +214,48 @@ module Fog
|
|
209
214
|
'public' => true
|
210
215
|
}].freeze
|
211
216
|
|
217
|
+
PRODUCTS = {
|
218
|
+
'servers' => {
|
219
|
+
'VC1S' => {
|
220
|
+
'volumes_constraint' => {
|
221
|
+
'min_size' => nil,
|
222
|
+
'max_size' => 50_000_000_000
|
223
|
+
},
|
224
|
+
'network' => {
|
225
|
+
'interfaces' => [{
|
226
|
+
'internal_bandwidth' => nil,
|
227
|
+
'internet_bandwidth' => 209_715_200
|
228
|
+
}],
|
229
|
+
'sum_internal_bandwidth' => nil,
|
230
|
+
'sum_internet_bandwidth' => 209_715_200,
|
231
|
+
'ipv6_support' => true
|
232
|
+
},
|
233
|
+
'ncpus' => 2,
|
234
|
+
'ram' => 2_147_483_648,
|
235
|
+
'alt_names' => ['X64-2GB'],
|
236
|
+
'baremetal' => false,
|
237
|
+
'arch' => 'x86_64'
|
238
|
+
},
|
239
|
+
'C1' => {
|
240
|
+
'volumes_constraint' => nil,
|
241
|
+
'network' => {
|
242
|
+
'interfaces' => [{
|
243
|
+
'internal_bandwidth' => 1_073_741_824,
|
244
|
+
'internet_bandwidth' => 209_715_200
|
245
|
+
}],
|
246
|
+
'sum_internal_bandwidth' => 1_073_741_824,
|
247
|
+
'sum_internet_bandwidth' => 209_715_200,
|
248
|
+
'ipv6_support' => false
|
249
|
+
},
|
250
|
+
'ncpus' => 4,
|
251
|
+
'ram' => 2_147_483_648,
|
252
|
+
'alt_names' => [],
|
253
|
+
'baremetal' => true,
|
254
|
+
'arch' => 'arm'
|
255
|
+
}
|
256
|
+
}
|
257
|
+
}.freeze
|
258
|
+
|
212
259
|
def self.data
|
213
260
|
@data ||= Hash.new do |hash, token|
|
214
261
|
hash[token] = {
|
@@ -225,7 +272,7 @@ module Fog
|
|
225
272
|
end],
|
226
273
|
tasks: {},
|
227
274
|
containers: {},
|
228
|
-
server_actions: Hash.new(%w
|
275
|
+
server_actions: Hash.new(%w[poweron poweroff reboot terminate])
|
229
276
|
}
|
230
277
|
end
|
231
278
|
end
|
@@ -248,6 +295,10 @@ module Fog
|
|
248
295
|
data[type][id] || raise_unknown_resource(id)
|
249
296
|
end
|
250
297
|
|
298
|
+
def lookup_product_server(name)
|
299
|
+
PRODUCTS['servers'].find { |n, s| n == name || s['alt_names'].include?(name) }
|
300
|
+
end
|
301
|
+
|
251
302
|
def default_security_group
|
252
303
|
data[:security_groups].values.find { |s| s['organization_default'] }
|
253
304
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class ProductServer < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :volumes_constraint
|
8
|
+
attribute :network
|
9
|
+
attribute :ncpus
|
10
|
+
attribute :ram
|
11
|
+
attribute :alt_names
|
12
|
+
attribute :baremetal
|
13
|
+
attribute :arch
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class ProductServers < Fog::Collection
|
5
|
+
model Fog::Scaleway::Compute::ProductServer
|
6
|
+
|
7
|
+
def all
|
8
|
+
product_servers = service.list_product_servers.body['servers'] || {}
|
9
|
+
product_servers = product_servers.map do |name, product_server|
|
10
|
+
product_server.merge(name: name)
|
11
|
+
end
|
12
|
+
load(product_servers)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get(name)
|
16
|
+
product_servers = service.list_product_servers.body['servers'] || {}
|
17
|
+
name, product_server = product_servers.find do |n, s|
|
18
|
+
n == name || s['alt_names'].include?(name)
|
19
|
+
end
|
20
|
+
new(product_server.merge(name: name)) if product_server
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -31,6 +31,14 @@ module Fog
|
|
31
31
|
|
32
32
|
image = lookup(:images, body['image'])
|
33
33
|
|
34
|
+
commercial_type, product_server = lookup_product_server(body.fetch('commercial_type', 'VC1S'))
|
35
|
+
raise_invalid_request_error('Validation Error') unless commercial_type
|
36
|
+
|
37
|
+
unless image['arch'] == product_server['arch']
|
38
|
+
message = "Image '#{image['id']}' arch is not '#{product_server['arch']}'"
|
39
|
+
raise_invalid_request_error(message)
|
40
|
+
end
|
41
|
+
|
34
42
|
creation_date = now
|
35
43
|
|
36
44
|
volumes = {}
|
@@ -69,12 +77,17 @@ module Fog
|
|
69
77
|
}
|
70
78
|
end
|
71
79
|
|
72
|
-
dynamic_ip_required = !public_ip && body.fetch('dynamic_ip_required', true)
|
73
|
-
|
74
80
|
default_bootscript_id = image['default_bootscript']['id']
|
75
81
|
bootscript_id = body.fetch('bootscript', default_bootscript_id)
|
76
82
|
bootscript = lookup(:bootscripts, bootscript_id)
|
77
83
|
|
84
|
+
dynamic_ip_required = !public_ip && body.fetch('dynamic_ip_required', true)
|
85
|
+
|
86
|
+
enable_ipv6 = body.fetch('enable_ipv6', false)
|
87
|
+
if enable_ipv6 && !product_server['network']['ipv6_support']
|
88
|
+
raise_invalid_request_error("Cannot enable ipv6 on #{commercial_type}")
|
89
|
+
end
|
90
|
+
|
78
91
|
if body['security_group']
|
79
92
|
security_group = lookup(:security_groups, body['security_group'])
|
80
93
|
else
|
@@ -85,10 +98,10 @@ module Fog
|
|
85
98
|
server = {
|
86
99
|
'arch' => image['arch'],
|
87
100
|
'bootscript' => bootscript,
|
88
|
-
'commercial_type' =>
|
101
|
+
'commercial_type' => commercial_type,
|
89
102
|
'creation_date' => creation_date,
|
90
103
|
'dynamic_ip_required' => dynamic_ip_required,
|
91
|
-
'enable_ipv6' =>
|
104
|
+
'enable_ipv6' => enable_ipv6,
|
92
105
|
'extra_networks' => [],
|
93
106
|
'hostname' => body['name'],
|
94
107
|
'id' => Fog::UUID.uuid,
|
@@ -33,6 +33,26 @@ module Fog
|
|
33
33
|
raise_invalid_request_error('server should be stopped')
|
34
34
|
end
|
35
35
|
|
36
|
+
total_volume_size = server['volumes'].values.map { |v| v['size'] }.reduce(&:+)
|
37
|
+
commercial_type, product_server = lookup_product_server(server['commercial_type'])
|
38
|
+
# rubocop:disable Metrics/BlockNesting
|
39
|
+
if (constraint = product_server['volumes_constraint'])
|
40
|
+
min_size = constraint['min_size'] || -Float::INFINITY
|
41
|
+
max_size = constraint['max_size'] || Float::INFINITY
|
42
|
+
if total_volume_size < min_size || total_volume_size > max_size
|
43
|
+
message = "The total volume size of #{commercial_type} instances must be "
|
44
|
+
message << if min_size == -Float::INFINITY
|
45
|
+
"equal or below #{max_size / 10**9}GB"
|
46
|
+
elsif max_size == Float::INFINITY
|
47
|
+
"equal or above #{min_size / 10**9}GB"
|
48
|
+
else
|
49
|
+
"between #{min_size / 10**9}GB and #{max_size / 10**9}GB"
|
50
|
+
end
|
51
|
+
raise_invalid_request_error(message)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
# rubocop:enable Metrics/BlockNesting
|
55
|
+
|
36
56
|
task['description'] = 'server_batch_poweron'
|
37
57
|
|
38
58
|
server['ipv6'] = create_ipv6 if server['enable_ipv6']
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Real
|
5
|
+
def list_product_servers
|
6
|
+
get('/products/servers')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Mock
|
11
|
+
def list_product_servers
|
12
|
+
response(status: 200, body: { 'servers' => PRODUCTS['servers'] })
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -19,6 +19,12 @@ module Fog
|
|
19
19
|
lookup(:bootscripts, body['bootscript'])
|
20
20
|
end
|
21
21
|
|
22
|
+
_, product_server = lookup_product_server(server['commercial_type'])
|
23
|
+
|
24
|
+
if body['enable_ipv6'] && !product_server['network']['ipv6_support']
|
25
|
+
raise_invalid_request_error("Cannot enable ipv6 on #{commercial_type}")
|
26
|
+
end
|
27
|
+
|
22
28
|
volumes = {}
|
23
29
|
body['volumes'].each do |index, volume|
|
24
30
|
volume = lookup(:volumes, volume['id'])
|
data/lib/fog/scaleway/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-scaleway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Satoshi Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -186,6 +186,8 @@ files:
|
|
186
186
|
- lib/fog/scaleway/models/compute/images.rb
|
187
187
|
- lib/fog/scaleway/models/compute/ip.rb
|
188
188
|
- lib/fog/scaleway/models/compute/ips.rb
|
189
|
+
- lib/fog/scaleway/models/compute/product_server.rb
|
190
|
+
- lib/fog/scaleway/models/compute/product_servers.rb
|
189
191
|
- lib/fog/scaleway/models/compute/security_group.rb
|
190
192
|
- lib/fog/scaleway/models/compute/security_group_rule.rb
|
191
193
|
- lib/fog/scaleway/models/compute/security_group_rules.rb
|
@@ -243,6 +245,7 @@ files:
|
|
243
245
|
- lib/fog/scaleway/requests/compute/list_containers.rb
|
244
246
|
- lib/fog/scaleway/requests/compute/list_images.rb
|
245
247
|
- lib/fog/scaleway/requests/compute/list_ips.rb
|
248
|
+
- lib/fog/scaleway/requests/compute/list_product_servers.rb
|
246
249
|
- lib/fog/scaleway/requests/compute/list_security_group_rules.rb
|
247
250
|
- lib/fog/scaleway/requests/compute/list_security_groups.rb
|
248
251
|
- lib/fog/scaleway/requests/compute/list_server_actions.rb
|