fog 0.0.14 → 0.0.15
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.
- 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
|