fog 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/Rakefile +17 -2
  2. data/VERSION +1 -1
  3. data/bin/fog +60 -31
  4. data/fog.gemspec +34 -2
  5. data/lib/fog.rb +1 -0
  6. data/lib/fog/aws/ec2.rb +1 -0
  7. data/lib/fog/aws/models/ec2/addresses.rb +1 -1
  8. data/lib/fog/aws/models/ec2/volume.rb +1 -1
  9. data/lib/fog/aws/models/ec2/volumes.rb +4 -2
  10. data/lib/fog/aws/s3.rb +1 -0
  11. data/lib/fog/collection.rb +1 -1
  12. data/lib/fog/connection.rb +8 -9
  13. data/lib/fog/rackspace.rb +31 -0
  14. data/lib/fog/rackspace/files.rb +62 -0
  15. data/lib/fog/rackspace/models/servers/server.rb +51 -0
  16. data/lib/fog/rackspace/models/servers/servers.rb +52 -0
  17. data/lib/fog/rackspace/requests/files/get_containers.rb +56 -0
  18. data/lib/fog/rackspace/requests/files/head_containers.rb +41 -0
  19. data/lib/fog/rackspace/requests/servers/create_server.rb +84 -0
  20. data/lib/fog/rackspace/requests/servers/delete_server.rb +37 -0
  21. data/lib/fog/rackspace/requests/servers/get_flavors.rb +41 -0
  22. data/lib/fog/rackspace/requests/servers/get_images.rb +42 -0
  23. data/lib/fog/rackspace/requests/servers/get_server_details.rb +49 -0
  24. data/lib/fog/rackspace/requests/servers/get_servers.rb +40 -0
  25. data/lib/fog/rackspace/requests/servers/get_servers_details.rb +49 -0
  26. data/lib/fog/rackspace/servers.rb +49 -0
  27. data/spec/aws/models/ec2/instance_spec.rb +38 -9
  28. data/spec/aws/models/ec2/volume_spec.rb +2 -2
  29. data/spec/rackspace/requests/files/get_containers_spec.rb +11 -0
  30. data/spec/rackspace/requests/files/head_containers_spec.rb +11 -0
  31. data/spec/rackspace/requests/servers/create_server_spec.rb +21 -0
  32. data/spec/rackspace/requests/servers/delete_server_spec.rb +11 -0
  33. data/spec/rackspace/requests/servers/get_flavors_spec.rb +11 -0
  34. data/spec/rackspace/requests/servers/get_images_spec.rb +11 -0
  35. data/spec/rackspace/requests/servers/get_server_details_spec.rb +11 -0
  36. data/spec/rackspace/requests/servers/get_servers_details_spec.rb +11 -0
  37. data/spec/rackspace/requests/servers/get_servers_spec.rb +11 -0
  38. data/spec/spec_helper.rb +23 -9
  39. 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