fog-scaleway 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.ruby-version +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +58 -0
- data/Rakefile +21 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/fog-scaleway.gemspec +31 -0
- data/lib/fog/scaleway.rb +15 -0
- data/lib/fog/scaleway/account.rb +306 -0
- data/lib/fog/scaleway/client.rb +54 -0
- data/lib/fog/scaleway/compute.rb +350 -0
- data/lib/fog/scaleway/errors.rb +37 -0
- data/lib/fog/scaleway/models/account/organization.rb +42 -0
- data/lib/fog/scaleway/models/account/organizations.rb +22 -0
- data/lib/fog/scaleway/models/account/token.rb +60 -0
- data/lib/fog/scaleway/models/account/tokens.rb +22 -0
- data/lib/fog/scaleway/models/account/user.rb +69 -0
- data/lib/fog/scaleway/models/account/users.rb +23 -0
- data/lib/fog/scaleway/models/compute/bootscript.rb +19 -0
- data/lib/fog/scaleway/models/compute/bootscripts.rb +22 -0
- data/lib/fog/scaleway/models/compute/image.rb +83 -0
- data/lib/fog/scaleway/models/compute/images.rb +22 -0
- data/lib/fog/scaleway/models/compute/ip.rb +70 -0
- data/lib/fog/scaleway/models/compute/ips.rb +22 -0
- data/lib/fog/scaleway/models/compute/security_group.rb +77 -0
- data/lib/fog/scaleway/models/compute/security_group_rule.rb +59 -0
- data/lib/fog/scaleway/models/compute/security_group_rules.rb +34 -0
- data/lib/fog/scaleway/models/compute/security_groups.rb +22 -0
- data/lib/fog/scaleway/models/compute/server.rb +243 -0
- data/lib/fog/scaleway/models/compute/servers.rb +47 -0
- data/lib/fog/scaleway/models/compute/snapshot.rb +90 -0
- data/lib/fog/scaleway/models/compute/snapshots.rb +22 -0
- data/lib/fog/scaleway/models/compute/task.rb +31 -0
- data/lib/fog/scaleway/models/compute/tasks.rb +22 -0
- data/lib/fog/scaleway/models/compute/volume.rb +96 -0
- data/lib/fog/scaleway/models/compute/volumes.rb +22 -0
- data/lib/fog/scaleway/request_helper.rb +32 -0
- data/lib/fog/scaleway/requests/account/create_token.rb +62 -0
- data/lib/fog/scaleway/requests/account/delete_token.rb +21 -0
- data/lib/fog/scaleway/requests/account/get_organization.rb +19 -0
- data/lib/fog/scaleway/requests/account/get_organization_quotas.rb +21 -0
- data/lib/fog/scaleway/requests/account/get_token.rb +19 -0
- data/lib/fog/scaleway/requests/account/get_token_permissions.rb +21 -0
- data/lib/fog/scaleway/requests/account/get_user.rb +19 -0
- data/lib/fog/scaleway/requests/account/list_organizations.rb +19 -0
- data/lib/fog/scaleway/requests/account/list_tokens.rb +19 -0
- data/lib/fog/scaleway/requests/account/update_token.rb +27 -0
- data/lib/fog/scaleway/requests/account/update_user.rb +39 -0
- data/lib/fog/scaleway/requests/compute/create_image.rb +61 -0
- data/lib/fog/scaleway/requests/compute/create_ip.rb +68 -0
- data/lib/fog/scaleway/requests/compute/create_security_group.rb +49 -0
- data/lib/fog/scaleway/requests/compute/create_security_group_rule.rb +49 -0
- data/lib/fog/scaleway/requests/compute/create_server.rb +129 -0
- data/lib/fog/scaleway/requests/compute/create_snapshot.rb +54 -0
- data/lib/fog/scaleway/requests/compute/create_volume.rb +88 -0
- data/lib/fog/scaleway/requests/compute/delete_image.rb +27 -0
- data/lib/fog/scaleway/requests/compute/delete_ip.rb +29 -0
- data/lib/fog/scaleway/requests/compute/delete_security_group.rb +31 -0
- data/lib/fog/scaleway/requests/compute/delete_security_group_rule.rb +23 -0
- data/lib/fog/scaleway/requests/compute/delete_server.rb +40 -0
- data/lib/fog/scaleway/requests/compute/delete_snapshot.rb +29 -0
- data/lib/fog/scaleway/requests/compute/delete_task.rb +21 -0
- data/lib/fog/scaleway/requests/compute/delete_user_data.rb +21 -0
- data/lib/fog/scaleway/requests/compute/delete_volume.rb +31 -0
- data/lib/fog/scaleway/requests/compute/execute_server_action.rb +101 -0
- data/lib/fog/scaleway/requests/compute/get_bootscript.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_container.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_dashboard.rb +37 -0
- data/lib/fog/scaleway/requests/compute/get_image.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_ip.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_security_group.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_security_group_rule.rb +23 -0
- data/lib/fog/scaleway/requests/compute/get_server.rb +48 -0
- data/lib/fog/scaleway/requests/compute/get_snapshot.rb +19 -0
- data/lib/fog/scaleway/requests/compute/get_task.rb +25 -0
- data/lib/fog/scaleway/requests/compute/get_user_data.rb +25 -0
- data/lib/fog/scaleway/requests/compute/get_volume.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_bootscripts.rb +23 -0
- data/lib/fog/scaleway/requests/compute/list_containers.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_images.rb +27 -0
- data/lib/fog/scaleway/requests/compute/list_ips.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_security_group_rules.rb +21 -0
- data/lib/fog/scaleway/requests/compute/list_security_groups.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_server_actions.rb +21 -0
- data/lib/fog/scaleway/requests/compute/list_servers.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_snapshots.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_tasks.rb +19 -0
- data/lib/fog/scaleway/requests/compute/list_user_data.rb +21 -0
- data/lib/fog/scaleway/requests/compute/list_volumes.rb +19 -0
- data/lib/fog/scaleway/requests/compute/update_image.rb +31 -0
- data/lib/fog/scaleway/requests/compute/update_ip.rb +47 -0
- data/lib/fog/scaleway/requests/compute/update_security_group.rb +29 -0
- data/lib/fog/scaleway/requests/compute/update_security_group_rule.rb +31 -0
- data/lib/fog/scaleway/requests/compute/update_server.rb +71 -0
- data/lib/fog/scaleway/requests/compute/update_snapshot.rb +24 -0
- data/lib/fog/scaleway/requests/compute/update_user_data.rb +25 -0
- data/lib/fog/scaleway/requests/compute/update_volume.rb +24 -0
- data/lib/fog/scaleway/version.rb +5 -0
- metadata +285 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Snapshot < Fog::Model
|
5
|
+
identity :id
|
6
|
+
|
7
|
+
attribute :base_volume
|
8
|
+
attribute :creation_date
|
9
|
+
attribute :modification_date
|
10
|
+
attribute :name
|
11
|
+
attribute :organization
|
12
|
+
attribute :size
|
13
|
+
attribute :state
|
14
|
+
attribute :volume_type
|
15
|
+
|
16
|
+
def base_volume=(value)
|
17
|
+
attributes[:base_volume] = case value
|
18
|
+
when Hash
|
19
|
+
service.volumes.new(value)
|
20
|
+
when String
|
21
|
+
service.volumes.new(identity: value)
|
22
|
+
else
|
23
|
+
value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def save
|
28
|
+
if persisted?
|
29
|
+
update
|
30
|
+
else
|
31
|
+
create
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
requires :identity
|
37
|
+
|
38
|
+
service.delete_snapshot(identity)
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_image(name, arch)
|
43
|
+
requires :identity
|
44
|
+
|
45
|
+
if (image = service.create_image(name, arch, identity).body['image'])
|
46
|
+
service.images.new(image)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_volume(name = nil)
|
51
|
+
requires :identity, :volume_type
|
52
|
+
|
53
|
+
if name.nil?
|
54
|
+
requires :name
|
55
|
+
|
56
|
+
name = "#{self.name} - (from snapshot)"
|
57
|
+
end
|
58
|
+
|
59
|
+
if (volume = service.create_volume(name, volume_type, base_snapshot: identity).body['volume'])
|
60
|
+
service.volumes.new(volume)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def create
|
67
|
+
requires :name, :base_volume
|
68
|
+
|
69
|
+
if (snapshot = service.create_snapshot(name, base_volume.identity).body['snapshot'])
|
70
|
+
merge_attributes(snapshot)
|
71
|
+
true
|
72
|
+
else
|
73
|
+
false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def update
|
78
|
+
requires :identity
|
79
|
+
|
80
|
+
if (snapshot = service.update_snapshot(identity, self).body['snapshot'])
|
81
|
+
merge_attributes(snapshot)
|
82
|
+
true
|
83
|
+
else
|
84
|
+
false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Snapshots < Fog::Collection
|
5
|
+
model Fog::Scaleway::Compute::Snapshot
|
6
|
+
|
7
|
+
def all
|
8
|
+
snapshots = service.list_snapshots.body['snapshots'] || []
|
9
|
+
load(snapshots)
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if (snapshot = service.get_snapshot(identity).body['snapshot'])
|
14
|
+
new(snapshot)
|
15
|
+
end
|
16
|
+
rescue Fog::Scaleway::Compute::UnknownResource
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Task < Fog::Model
|
5
|
+
identity :id
|
6
|
+
|
7
|
+
attribute :status
|
8
|
+
attribute :description
|
9
|
+
attribute :terminated_at
|
10
|
+
attribute :href_from
|
11
|
+
attribute :progress
|
12
|
+
attribute :started_at
|
13
|
+
|
14
|
+
def pending?
|
15
|
+
status == 'pending'
|
16
|
+
end
|
17
|
+
|
18
|
+
def success?
|
19
|
+
status == 'success'
|
20
|
+
end
|
21
|
+
|
22
|
+
def destroy
|
23
|
+
requires :identity
|
24
|
+
|
25
|
+
service.delete_task(identity)
|
26
|
+
true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Tasks < Fog::Collection
|
5
|
+
model Fog::Scaleway::Compute::Task
|
6
|
+
|
7
|
+
def all
|
8
|
+
tasks = service.list_tasks.body['tasks']
|
9
|
+
load(tasks)
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if (task = service.get_task(identity).body['task'])
|
14
|
+
new(task)
|
15
|
+
end
|
16
|
+
rescue Fog::Scaleway::Compute::UnknownResource
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Volume < Fog::Model
|
5
|
+
identity :id
|
6
|
+
|
7
|
+
attribute :creation_date
|
8
|
+
attribute :export_uri
|
9
|
+
attribute :modification_date
|
10
|
+
attribute :name
|
11
|
+
attribute :organization
|
12
|
+
attribute :server
|
13
|
+
attribute :size
|
14
|
+
attribute :volume_type
|
15
|
+
|
16
|
+
def server=(value)
|
17
|
+
attributes[:server] = case value
|
18
|
+
when Hash
|
19
|
+
service.servers.new(value)
|
20
|
+
when String
|
21
|
+
service.servers.new(identity: value)
|
22
|
+
else
|
23
|
+
value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def save
|
28
|
+
if persisted?
|
29
|
+
update
|
30
|
+
else
|
31
|
+
create
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
requires :identity
|
37
|
+
|
38
|
+
service.delete_volume(identity)
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_snapshot(name = nil)
|
43
|
+
requires :identity
|
44
|
+
|
45
|
+
if name.nil?
|
46
|
+
requires :name
|
47
|
+
|
48
|
+
name = "#{self.name} snapshot"
|
49
|
+
end
|
50
|
+
|
51
|
+
if (snapshot = service.create_snapshot(name, identity).body['snapshot'])
|
52
|
+
service.snapshots.new(snapshot)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def clone(name = nil)
|
57
|
+
requires :identity, :volume_type
|
58
|
+
|
59
|
+
if name.nil?
|
60
|
+
requires :name
|
61
|
+
|
62
|
+
name = "#{self.name} - (Copy)"
|
63
|
+
end
|
64
|
+
|
65
|
+
if (volume = service.create_volume(name, volume_type, base_volume: identity).body['volume'])
|
66
|
+
service.volumes.new(volume)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def create
|
73
|
+
requires :name, :volume_type, :size
|
74
|
+
|
75
|
+
if (volume = service.create_volume(name, volume_type, size: size).body['volume'])
|
76
|
+
merge_attributes(volume)
|
77
|
+
true
|
78
|
+
else
|
79
|
+
false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def update
|
84
|
+
requires :identity
|
85
|
+
|
86
|
+
if (volume = service.update_volume(identity, self).body['volume'])
|
87
|
+
merge_attributes(volume)
|
88
|
+
true
|
89
|
+
else
|
90
|
+
false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Compute
|
4
|
+
class Volumes < Fog::Collection
|
5
|
+
model Fog::Scaleway::Compute::Volume
|
6
|
+
|
7
|
+
def all
|
8
|
+
volumes = service.list_volumes.body['volumes'] || []
|
9
|
+
load(volumes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if (volume = service.get_volume(identity).body['volume'])
|
14
|
+
new(volume)
|
15
|
+
end
|
16
|
+
rescue Fog::Scaleway::Compute::UnknownResource
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
module RequestHelper
|
4
|
+
def create(path, body)
|
5
|
+
request(method: :post,
|
6
|
+
path: path,
|
7
|
+
body: body,
|
8
|
+
expects: [201])
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(path, query = {})
|
12
|
+
request(method: :get,
|
13
|
+
path: path,
|
14
|
+
query: query,
|
15
|
+
expects: [200])
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(path, body)
|
19
|
+
request(method: :put,
|
20
|
+
path: path,
|
21
|
+
body: body,
|
22
|
+
expects: [200])
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete(path)
|
26
|
+
request(method: :delete,
|
27
|
+
path: path,
|
28
|
+
expects: [204])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Account
|
4
|
+
class Real
|
5
|
+
def create_token(options = {})
|
6
|
+
if @email.nil?
|
7
|
+
raise ArgumentError, 'email is required to create a token'
|
8
|
+
end
|
9
|
+
|
10
|
+
body = {
|
11
|
+
email: @email
|
12
|
+
}
|
13
|
+
|
14
|
+
body.merge!(options)
|
15
|
+
|
16
|
+
create('/tokens', body)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Mock
|
21
|
+
def create_token(options = {})
|
22
|
+
if @email.nil?
|
23
|
+
raise ArgumentError, 'email is required to create a token'
|
24
|
+
end
|
25
|
+
|
26
|
+
body = {
|
27
|
+
email: @email
|
28
|
+
}
|
29
|
+
|
30
|
+
body.merge!(options)
|
31
|
+
|
32
|
+
body = jsonify(body)
|
33
|
+
|
34
|
+
user = data[:users].values.find do |user|
|
35
|
+
user['email'] == body['email']
|
36
|
+
end
|
37
|
+
|
38
|
+
raise_invalid_auth('Invalid credentials') unless user
|
39
|
+
|
40
|
+
expires = nil
|
41
|
+
if body['expires'] != false
|
42
|
+
expires = (Time.now + 30 * 60).utc.strftime(TIME_FORMAT)
|
43
|
+
end
|
44
|
+
|
45
|
+
token = {
|
46
|
+
'user_id' => user['id'],
|
47
|
+
'description' => body['description'] || '',
|
48
|
+
'roles' => { 'organization' => nil, 'role' => nil },
|
49
|
+
'expires' => expires,
|
50
|
+
'creation_date' => now,
|
51
|
+
'inherits_user_perms' => true,
|
52
|
+
'id' => Fog::UUID.uuid
|
53
|
+
}
|
54
|
+
|
55
|
+
data[:tokens][token['id']] = token
|
56
|
+
|
57
|
+
response(status: 201, body: { 'token' => token })
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Account
|
4
|
+
class Real
|
5
|
+
def delete_token(token_id)
|
6
|
+
delete("/tokens/#{token_id}")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Mock
|
11
|
+
def delete_token(token_id)
|
12
|
+
token = lookup(:tokens, token_id)
|
13
|
+
|
14
|
+
data[:tokens].delete(token['id'])
|
15
|
+
|
16
|
+
response(status: 204)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Account
|
4
|
+
class Real
|
5
|
+
def get_organization(organization_id)
|
6
|
+
get("/organizations/#{organization_id}")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Mock
|
11
|
+
def get_organization(organization_id)
|
12
|
+
organization = lookup(:organizations, organization_id)
|
13
|
+
|
14
|
+
response(status: 200, body: { 'organization' => organization })
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Fog
|
2
|
+
module Scaleway
|
3
|
+
class Account
|
4
|
+
class Real
|
5
|
+
def get_organization_quotas(organization_id)
|
6
|
+
get("/organizations/#{organization_id}/quotas")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Mock
|
11
|
+
def get_organization_quotas(organization_id)
|
12
|
+
organization = lookup(:organizations, organization_id)
|
13
|
+
|
14
|
+
quotas = lookup(:organization_quotas, organization['id'])
|
15
|
+
|
16
|
+
response(status: 200, body: { 'quotas' => quotas })
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|