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.
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