fog-scaleway 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +58 -0
  8. data/Rakefile +21 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/fog-scaleway.gemspec +31 -0
  12. data/lib/fog/scaleway.rb +15 -0
  13. data/lib/fog/scaleway/account.rb +306 -0
  14. data/lib/fog/scaleway/client.rb +54 -0
  15. data/lib/fog/scaleway/compute.rb +350 -0
  16. data/lib/fog/scaleway/errors.rb +37 -0
  17. data/lib/fog/scaleway/models/account/organization.rb +42 -0
  18. data/lib/fog/scaleway/models/account/organizations.rb +22 -0
  19. data/lib/fog/scaleway/models/account/token.rb +60 -0
  20. data/lib/fog/scaleway/models/account/tokens.rb +22 -0
  21. data/lib/fog/scaleway/models/account/user.rb +69 -0
  22. data/lib/fog/scaleway/models/account/users.rb +23 -0
  23. data/lib/fog/scaleway/models/compute/bootscript.rb +19 -0
  24. data/lib/fog/scaleway/models/compute/bootscripts.rb +22 -0
  25. data/lib/fog/scaleway/models/compute/image.rb +83 -0
  26. data/lib/fog/scaleway/models/compute/images.rb +22 -0
  27. data/lib/fog/scaleway/models/compute/ip.rb +70 -0
  28. data/lib/fog/scaleway/models/compute/ips.rb +22 -0
  29. data/lib/fog/scaleway/models/compute/security_group.rb +77 -0
  30. data/lib/fog/scaleway/models/compute/security_group_rule.rb +59 -0
  31. data/lib/fog/scaleway/models/compute/security_group_rules.rb +34 -0
  32. data/lib/fog/scaleway/models/compute/security_groups.rb +22 -0
  33. data/lib/fog/scaleway/models/compute/server.rb +243 -0
  34. data/lib/fog/scaleway/models/compute/servers.rb +47 -0
  35. data/lib/fog/scaleway/models/compute/snapshot.rb +90 -0
  36. data/lib/fog/scaleway/models/compute/snapshots.rb +22 -0
  37. data/lib/fog/scaleway/models/compute/task.rb +31 -0
  38. data/lib/fog/scaleway/models/compute/tasks.rb +22 -0
  39. data/lib/fog/scaleway/models/compute/volume.rb +96 -0
  40. data/lib/fog/scaleway/models/compute/volumes.rb +22 -0
  41. data/lib/fog/scaleway/request_helper.rb +32 -0
  42. data/lib/fog/scaleway/requests/account/create_token.rb +62 -0
  43. data/lib/fog/scaleway/requests/account/delete_token.rb +21 -0
  44. data/lib/fog/scaleway/requests/account/get_organization.rb +19 -0
  45. data/lib/fog/scaleway/requests/account/get_organization_quotas.rb +21 -0
  46. data/lib/fog/scaleway/requests/account/get_token.rb +19 -0
  47. data/lib/fog/scaleway/requests/account/get_token_permissions.rb +21 -0
  48. data/lib/fog/scaleway/requests/account/get_user.rb +19 -0
  49. data/lib/fog/scaleway/requests/account/list_organizations.rb +19 -0
  50. data/lib/fog/scaleway/requests/account/list_tokens.rb +19 -0
  51. data/lib/fog/scaleway/requests/account/update_token.rb +27 -0
  52. data/lib/fog/scaleway/requests/account/update_user.rb +39 -0
  53. data/lib/fog/scaleway/requests/compute/create_image.rb +61 -0
  54. data/lib/fog/scaleway/requests/compute/create_ip.rb +68 -0
  55. data/lib/fog/scaleway/requests/compute/create_security_group.rb +49 -0
  56. data/lib/fog/scaleway/requests/compute/create_security_group_rule.rb +49 -0
  57. data/lib/fog/scaleway/requests/compute/create_server.rb +129 -0
  58. data/lib/fog/scaleway/requests/compute/create_snapshot.rb +54 -0
  59. data/lib/fog/scaleway/requests/compute/create_volume.rb +88 -0
  60. data/lib/fog/scaleway/requests/compute/delete_image.rb +27 -0
  61. data/lib/fog/scaleway/requests/compute/delete_ip.rb +29 -0
  62. data/lib/fog/scaleway/requests/compute/delete_security_group.rb +31 -0
  63. data/lib/fog/scaleway/requests/compute/delete_security_group_rule.rb +23 -0
  64. data/lib/fog/scaleway/requests/compute/delete_server.rb +40 -0
  65. data/lib/fog/scaleway/requests/compute/delete_snapshot.rb +29 -0
  66. data/lib/fog/scaleway/requests/compute/delete_task.rb +21 -0
  67. data/lib/fog/scaleway/requests/compute/delete_user_data.rb +21 -0
  68. data/lib/fog/scaleway/requests/compute/delete_volume.rb +31 -0
  69. data/lib/fog/scaleway/requests/compute/execute_server_action.rb +101 -0
  70. data/lib/fog/scaleway/requests/compute/get_bootscript.rb +19 -0
  71. data/lib/fog/scaleway/requests/compute/get_container.rb +19 -0
  72. data/lib/fog/scaleway/requests/compute/get_dashboard.rb +37 -0
  73. data/lib/fog/scaleway/requests/compute/get_image.rb +19 -0
  74. data/lib/fog/scaleway/requests/compute/get_ip.rb +19 -0
  75. data/lib/fog/scaleway/requests/compute/get_security_group.rb +19 -0
  76. data/lib/fog/scaleway/requests/compute/get_security_group_rule.rb +23 -0
  77. data/lib/fog/scaleway/requests/compute/get_server.rb +48 -0
  78. data/lib/fog/scaleway/requests/compute/get_snapshot.rb +19 -0
  79. data/lib/fog/scaleway/requests/compute/get_task.rb +25 -0
  80. data/lib/fog/scaleway/requests/compute/get_user_data.rb +25 -0
  81. data/lib/fog/scaleway/requests/compute/get_volume.rb +19 -0
  82. data/lib/fog/scaleway/requests/compute/list_bootscripts.rb +23 -0
  83. data/lib/fog/scaleway/requests/compute/list_containers.rb +19 -0
  84. data/lib/fog/scaleway/requests/compute/list_images.rb +27 -0
  85. data/lib/fog/scaleway/requests/compute/list_ips.rb +19 -0
  86. data/lib/fog/scaleway/requests/compute/list_security_group_rules.rb +21 -0
  87. data/lib/fog/scaleway/requests/compute/list_security_groups.rb +19 -0
  88. data/lib/fog/scaleway/requests/compute/list_server_actions.rb +21 -0
  89. data/lib/fog/scaleway/requests/compute/list_servers.rb +19 -0
  90. data/lib/fog/scaleway/requests/compute/list_snapshots.rb +19 -0
  91. data/lib/fog/scaleway/requests/compute/list_tasks.rb +19 -0
  92. data/lib/fog/scaleway/requests/compute/list_user_data.rb +21 -0
  93. data/lib/fog/scaleway/requests/compute/list_volumes.rb +19 -0
  94. data/lib/fog/scaleway/requests/compute/update_image.rb +31 -0
  95. data/lib/fog/scaleway/requests/compute/update_ip.rb +47 -0
  96. data/lib/fog/scaleway/requests/compute/update_security_group.rb +29 -0
  97. data/lib/fog/scaleway/requests/compute/update_security_group_rule.rb +31 -0
  98. data/lib/fog/scaleway/requests/compute/update_server.rb +71 -0
  99. data/lib/fog/scaleway/requests/compute/update_snapshot.rb +24 -0
  100. data/lib/fog/scaleway/requests/compute/update_user_data.rb +25 -0
  101. data/lib/fog/scaleway/requests/compute/update_volume.rb +24 -0
  102. data/lib/fog/scaleway/version.rb +5 -0
  103. 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