fog 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +17 -2
- data/VERSION +1 -1
- data/bin/fog +60 -31
- data/fog.gemspec +34 -2
- data/lib/fog.rb +1 -0
- data/lib/fog/aws/ec2.rb +1 -0
- data/lib/fog/aws/models/ec2/addresses.rb +1 -1
- data/lib/fog/aws/models/ec2/volume.rb +1 -1
- data/lib/fog/aws/models/ec2/volumes.rb +4 -2
- data/lib/fog/aws/s3.rb +1 -0
- data/lib/fog/collection.rb +1 -1
- data/lib/fog/connection.rb +8 -9
- data/lib/fog/rackspace.rb +31 -0
- data/lib/fog/rackspace/files.rb +62 -0
- data/lib/fog/rackspace/models/servers/server.rb +51 -0
- data/lib/fog/rackspace/models/servers/servers.rb +52 -0
- data/lib/fog/rackspace/requests/files/get_containers.rb +56 -0
- data/lib/fog/rackspace/requests/files/head_containers.rb +41 -0
- data/lib/fog/rackspace/requests/servers/create_server.rb +84 -0
- data/lib/fog/rackspace/requests/servers/delete_server.rb +37 -0
- data/lib/fog/rackspace/requests/servers/get_flavors.rb +41 -0
- data/lib/fog/rackspace/requests/servers/get_images.rb +42 -0
- data/lib/fog/rackspace/requests/servers/get_server_details.rb +49 -0
- data/lib/fog/rackspace/requests/servers/get_servers.rb +40 -0
- data/lib/fog/rackspace/requests/servers/get_servers_details.rb +49 -0
- data/lib/fog/rackspace/servers.rb +49 -0
- data/spec/aws/models/ec2/instance_spec.rb +38 -9
- data/spec/aws/models/ec2/volume_spec.rb +2 -2
- data/spec/rackspace/requests/files/get_containers_spec.rb +11 -0
- data/spec/rackspace/requests/files/head_containers_spec.rb +11 -0
- data/spec/rackspace/requests/servers/create_server_spec.rb +21 -0
- data/spec/rackspace/requests/servers/delete_server_spec.rb +11 -0
- data/spec/rackspace/requests/servers/get_flavors_spec.rb +11 -0
- data/spec/rackspace/requests/servers/get_images_spec.rb +11 -0
- data/spec/rackspace/requests/servers/get_server_details_spec.rb +11 -0
- data/spec/rackspace/requests/servers/get_servers_details_spec.rb +11 -0
- data/spec/rackspace/requests/servers/get_servers_spec.rb +11 -0
- data/spec/spec_helper.rb +23 -9
- metadata +34 -2
@@ -0,0 +1,52 @@
|
|
1
|
+
module Fog
|
2
|
+
module Rackspace
|
3
|
+
class Servers
|
4
|
+
|
5
|
+
def servers
|
6
|
+
Fog::Rackspace::Servers::Servers.new(:connection => self)
|
7
|
+
end
|
8
|
+
|
9
|
+
class Servers < Fog::Collection
|
10
|
+
|
11
|
+
def all
|
12
|
+
data = connection.get_servers_details.body
|
13
|
+
servers = Fog::Rackspace::Servers::Servers.new({
|
14
|
+
:connection => connection
|
15
|
+
})
|
16
|
+
for server in data['servers']
|
17
|
+
servers << Fog::Rackspace::Servers::Server.new({
|
18
|
+
:connection => connection,
|
19
|
+
:servers => servers
|
20
|
+
}.merge!(server))
|
21
|
+
end
|
22
|
+
servers
|
23
|
+
end
|
24
|
+
|
25
|
+
def create(attributes = {})
|
26
|
+
server = new(attributes)
|
27
|
+
server.save
|
28
|
+
server
|
29
|
+
end
|
30
|
+
|
31
|
+
def get(id)
|
32
|
+
connection.get_server_details(id)
|
33
|
+
rescue Fog::Errors::NotFound
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def new
|
38
|
+
Fog::Rackspace::Servers::Server.new(
|
39
|
+
:connection => connection,
|
40
|
+
:servers => self
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def reload
|
45
|
+
get(id)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Files
|
6
|
+
|
7
|
+
# List existing storage containers
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * options<~Hash>:
|
11
|
+
# * 'limit'<~Integer> - Upper limit to number of results returned
|
12
|
+
# * 'marker'<~String> - Only return objects with name greater than this value
|
13
|
+
#
|
14
|
+
# ==== Returns
|
15
|
+
# * response<~Fog::AWS::Response>:
|
16
|
+
# * body<~Array>:
|
17
|
+
# * container<~Hash>:
|
18
|
+
# * 'bytes'<~Integer>: - Number of bytes used by container
|
19
|
+
# * 'count'<~Integer>: - Number of items in container
|
20
|
+
# * 'name'<~String>: - Name of container
|
21
|
+
def get_containers(options = {})
|
22
|
+
options = { 'format' => 'json' }.merge!(options)
|
23
|
+
query = []
|
24
|
+
for key, value in options
|
25
|
+
query << "#{key}=#{CGI.escape(value)}"
|
26
|
+
end
|
27
|
+
response = storage_request(
|
28
|
+
:expects => [200, 204],
|
29
|
+
:method => 'GET',
|
30
|
+
:path => '',
|
31
|
+
:query => query.join('&')
|
32
|
+
)
|
33
|
+
if response.status == 204
|
34
|
+
response.body = []
|
35
|
+
end
|
36
|
+
response
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
else
|
44
|
+
|
45
|
+
module Fog
|
46
|
+
module Rackspace
|
47
|
+
class Servers
|
48
|
+
|
49
|
+
def get_flavors
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Files
|
6
|
+
|
7
|
+
# List number of containers and total bytes stored
|
8
|
+
#
|
9
|
+
# ==== Returns
|
10
|
+
# * response<~Fog::AWS::Response>:
|
11
|
+
# * headers<~Hash>:
|
12
|
+
# * 'X-Account-Container-Count'<~String> - Count of containers
|
13
|
+
# * 'X-Account-Bytes-Used'<~String> - Bytes used
|
14
|
+
def head_containers
|
15
|
+
response = storage_request(
|
16
|
+
:expects => 204,
|
17
|
+
:method => 'HEAD',
|
18
|
+
:path => '',
|
19
|
+
:query => 'format=json'
|
20
|
+
)
|
21
|
+
response
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
else
|
29
|
+
|
30
|
+
module Fog
|
31
|
+
module Rackspace
|
32
|
+
class Servers
|
33
|
+
|
34
|
+
def get_flavors
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# Create a new server
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * flavor_id<~Integer> - Id of flavor for server
|
11
|
+
# * image_id<~Integer> - Id of image for server
|
12
|
+
# * name<~String> - Name of server
|
13
|
+
# * options<~Hash>:
|
14
|
+
# * 'metadata'<~Hash> - Up to 5 key value pairs containing 255 bytes of info
|
15
|
+
# * 'name'<~String> - Name of server, defaults to "slice#{id}"
|
16
|
+
# * 'personality'<~Array>: Up to 5 files to customize server
|
17
|
+
# * file<~Hash>:
|
18
|
+
# * 'contents'<~String> - Contents of file (10kb total of contents)
|
19
|
+
# * 'path'<~String> - Path to file (255 bytes total of path strings)
|
20
|
+
#
|
21
|
+
# ==== Returns
|
22
|
+
# * response<~Fog::AWS::Response>:
|
23
|
+
# * body<~Hash>:
|
24
|
+
# * 'servers'<~Hash>:
|
25
|
+
# * 'adminPass'<~String> - Admin password for server
|
26
|
+
# * 'id'<~Integer> - Id of server
|
27
|
+
# * 'name<~String> - Name of server
|
28
|
+
# * 'imageId'<~Integer> - Id of image used to boot server
|
29
|
+
# * 'flavorId'<~Integer> - Id of servers current flavor
|
30
|
+
# * 'hostId'<~String>
|
31
|
+
# * 'status'<~String> - Current server status
|
32
|
+
# * 'progress'<~Integer> - Progress through current status
|
33
|
+
# * 'addresses'<~Hash>:
|
34
|
+
# * 'public'<~Array> - public address strings
|
35
|
+
# * 'private'<~Array> - private address strings
|
36
|
+
# * 'metadata'<~Hash> - metadata
|
37
|
+
def create_server(flavor_id, image_id, options = {})
|
38
|
+
data = {
|
39
|
+
'server' => {
|
40
|
+
'flavorId' => flavor_id,
|
41
|
+
'imageId' => image_id
|
42
|
+
}
|
43
|
+
}
|
44
|
+
if options['metadata']
|
45
|
+
data['server']['metadata'] = options['metadata']
|
46
|
+
end
|
47
|
+
if options['name']
|
48
|
+
data['server']['name'] = options['name']
|
49
|
+
end
|
50
|
+
if options['personality']
|
51
|
+
data['server']['personality'] = []
|
52
|
+
for file in options['personality']
|
53
|
+
data['server']['personality'] << {
|
54
|
+
'contents' => Base64.encode64(file['contents']),
|
55
|
+
'path' => file['path']
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
request(
|
60
|
+
:body => data.to_json,
|
61
|
+
:expects => 202,
|
62
|
+
:method => 'POST',
|
63
|
+
:path => 'servers.json'
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
else
|
72
|
+
|
73
|
+
module Fog
|
74
|
+
module Rackspace
|
75
|
+
class Servers
|
76
|
+
|
77
|
+
def create_server
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# Delete an existing server
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * id<~Integer> - Id of server to delete
|
11
|
+
#
|
12
|
+
def delete_server(id)
|
13
|
+
request(
|
14
|
+
:expects => 202,
|
15
|
+
:method => 'DELETE',
|
16
|
+
:path => "servers/#{id}"
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
else
|
25
|
+
|
26
|
+
module Fog
|
27
|
+
module Rackspace
|
28
|
+
class Servers
|
29
|
+
|
30
|
+
def delete_server
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# List all images (IDs and names only)
|
8
|
+
#
|
9
|
+
# ==== Returns
|
10
|
+
# * response<~Fog::AWS::Response>:
|
11
|
+
# * body<~Hash>:
|
12
|
+
# * 'id'<~Integer> - Id of the flavor
|
13
|
+
# * 'name'<~String> - Name of the flavor
|
14
|
+
# * 'ram'<~Integer> - Amount of ram for the flavor
|
15
|
+
# * 'disk'<~Integer> - Amount of diskspace for the flavor
|
16
|
+
def get_flavors
|
17
|
+
request(
|
18
|
+
:expects => 200,
|
19
|
+
:method => 'GET',
|
20
|
+
:path => 'flavors.json'
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
else
|
29
|
+
|
30
|
+
module Fog
|
31
|
+
module Rackspace
|
32
|
+
class Servers
|
33
|
+
|
34
|
+
def get_flavors
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# List all images (IDs and names only)
|
8
|
+
#
|
9
|
+
# ==== Returns
|
10
|
+
# * response<~Fog::AWS::Response>:
|
11
|
+
# * body<~Hash>:
|
12
|
+
# * 'id'<~Integer> - Id of the image
|
13
|
+
# * 'name'<~String> - Name of the image
|
14
|
+
# * 'updated'<~String> - Last update timestamp for image
|
15
|
+
# * 'created'<~String> - Creation timestamp for image
|
16
|
+
# * 'status'<~String> - Status of image
|
17
|
+
def get_images
|
18
|
+
request(
|
19
|
+
:expects => 200,
|
20
|
+
:method => 'GET',
|
21
|
+
:path => 'images.json'
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
else
|
30
|
+
|
31
|
+
module Fog
|
32
|
+
module Rackspace
|
33
|
+
class Servers
|
34
|
+
|
35
|
+
def get_images
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# List server details for id
|
8
|
+
#
|
9
|
+
# ==== Returns
|
10
|
+
# * response<~Fog::AWS::Response>:
|
11
|
+
# * body<~Hash>:
|
12
|
+
# * 'servers'<~Array>:
|
13
|
+
# * 'id'<~Integer> - Id of server
|
14
|
+
# * 'name<~String> - Name of server
|
15
|
+
# * 'imageId'<~Integer> - Id of image used to boot server
|
16
|
+
# * 'flavorId'<~Integer> - Id of servers current flavor
|
17
|
+
# * 'hostId'<~String>
|
18
|
+
# * 'status'<~String> - Current server status
|
19
|
+
# * 'progress'<~Integer> - Progress through current status
|
20
|
+
# * 'addresses'<~Hash>:
|
21
|
+
# * 'public'<~Array> - public address strings
|
22
|
+
# * 'private'<~Array> - private address strings
|
23
|
+
# * 'metadata'<~Hash> - metadata
|
24
|
+
def get_server_details(id)
|
25
|
+
request(
|
26
|
+
:expects => 200,
|
27
|
+
:method => 'GET',
|
28
|
+
:path => "servers/#{id}.json"
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
else
|
37
|
+
|
38
|
+
module Fog
|
39
|
+
module Rackspace
|
40
|
+
class Servers
|
41
|
+
|
42
|
+
def get_server_details
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
unless Fog.mocking?
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Rackspace
|
5
|
+
class Servers
|
6
|
+
|
7
|
+
# List all servers (IDs and names only)
|
8
|
+
#
|
9
|
+
# ==== Returns
|
10
|
+
# * response<~Fog::AWS::Response>:
|
11
|
+
# * body<~Hash>:
|
12
|
+
# * 'servers'<~Array>:
|
13
|
+
# * 'id'<~Integer> - Id of server
|
14
|
+
# * 'name<~String> - Name of server
|
15
|
+
def get_servers
|
16
|
+
request(
|
17
|
+
:expects => 200,
|
18
|
+
:method => 'GET',
|
19
|
+
:path => 'servers.json'
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
else
|
28
|
+
|
29
|
+
module Fog
|
30
|
+
module Rackspace
|
31
|
+
class Servers
|
32
|
+
|
33
|
+
def get_servers
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|