fog-profitbricks 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.rubocop.yml +21 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +25 -0
  7. data/CONTRIBUTING.md +18 -0
  8. data/CONTRIBUTORS.md +2 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.md +20 -0
  11. data/README.md +29 -0
  12. data/Rakefile +21 -0
  13. data/examples/pb_demo.rb +53 -0
  14. data/fog-profitbricks.gemspec +31 -0
  15. data/gemfiles/Gemfile.1.8.7 +7 -0
  16. data/gemfiles/Gemfile.1.9.2+ +6 -0
  17. data/lib/fog/bin/profitbricks.rb +29 -0
  18. data/lib/fog/profitbricks.rb +13 -0
  19. data/lib/fog/profitbricks/compute.rb +215 -0
  20. data/lib/fog/profitbricks/core.rb +18 -0
  21. data/lib/fog/profitbricks/models/compute/datacenter.rb +59 -0
  22. data/lib/fog/profitbricks/models/compute/datacenters.rb +24 -0
  23. data/lib/fog/profitbricks/models/compute/flavor.rb +27 -0
  24. data/lib/fog/profitbricks/models/compute/flavors.rb +24 -0
  25. data/lib/fog/profitbricks/models/compute/image.rb +30 -0
  26. data/lib/fog/profitbricks/models/compute/images.rb +23 -0
  27. data/lib/fog/profitbricks/models/compute/interface.rb +64 -0
  28. data/lib/fog/profitbricks/models/compute/interfaces.rb +24 -0
  29. data/lib/fog/profitbricks/models/compute/region.rb +15 -0
  30. data/lib/fog/profitbricks/models/compute/regions.rb +24 -0
  31. data/lib/fog/profitbricks/models/compute/server.rb +107 -0
  32. data/lib/fog/profitbricks/models/compute/servers.rb +23 -0
  33. data/lib/fog/profitbricks/models/compute/volume.rb +74 -0
  34. data/lib/fog/profitbricks/models/compute/volumes.rb +24 -0
  35. data/lib/fog/profitbricks/parsers/base.rb +49 -0
  36. data/lib/fog/profitbricks/parsers/compute/clear_data_center.rb +22 -0
  37. data/lib/fog/profitbricks/parsers/compute/connect_storage_to_server.rb +22 -0
  38. data/lib/fog/profitbricks/parsers/compute/create_data_center.rb +22 -0
  39. data/lib/fog/profitbricks/parsers/compute/create_nic.rb +22 -0
  40. data/lib/fog/profitbricks/parsers/compute/create_server.rb +22 -0
  41. data/lib/fog/profitbricks/parsers/compute/create_storage.rb +22 -0
  42. data/lib/fog/profitbricks/parsers/compute/delete_data_center.rb +20 -0
  43. data/lib/fog/profitbricks/parsers/compute/delete_nic.rb +22 -0
  44. data/lib/fog/profitbricks/parsers/compute/delete_server.rb +22 -0
  45. data/lib/fog/profitbricks/parsers/compute/delete_storage.rb +22 -0
  46. data/lib/fog/profitbricks/parsers/compute/disconnect_storage_from_server.rb +22 -0
  47. data/lib/fog/profitbricks/parsers/compute/get_all_data_centers.rb +26 -0
  48. data/lib/fog/profitbricks/parsers/compute/get_all_images.rb +30 -0
  49. data/lib/fog/profitbricks/parsers/compute/get_all_nic.rb +30 -0
  50. data/lib/fog/profitbricks/parsers/compute/get_all_servers.rb +56 -0
  51. data/lib/fog/profitbricks/parsers/compute/get_all_storages.rb +33 -0
  52. data/lib/fog/profitbricks/parsers/compute/get_data_center.rb +23 -0
  53. data/lib/fog/profitbricks/parsers/compute/get_data_center_state.rb +20 -0
  54. data/lib/fog/profitbricks/parsers/compute/get_image.rb +26 -0
  55. data/lib/fog/profitbricks/parsers/compute/get_nic.rb +27 -0
  56. data/lib/fog/profitbricks/parsers/compute/get_server.rb +55 -0
  57. data/lib/fog/profitbricks/parsers/compute/get_storage.rb +30 -0
  58. data/lib/fog/profitbricks/parsers/compute/reset_server.rb +20 -0
  59. data/lib/fog/profitbricks/parsers/compute/set_internet_access.rb +22 -0
  60. data/lib/fog/profitbricks/parsers/compute/update_data_center.rb +22 -0
  61. data/lib/fog/profitbricks/parsers/compute/update_nic.rb +22 -0
  62. data/lib/fog/profitbricks/parsers/compute/update_server.rb +22 -0
  63. data/lib/fog/profitbricks/parsers/compute/update_storage.rb +22 -0
  64. data/lib/fog/profitbricks/requests/compute/clear_data_center.rb +53 -0
  65. data/lib/fog/profitbricks/requests/compute/connect_storage_to_server.rb +85 -0
  66. data/lib/fog/profitbricks/requests/compute/create_data_center.rb +64 -0
  67. data/lib/fog/profitbricks/requests/compute/create_flavor.rb +40 -0
  68. data/lib/fog/profitbricks/requests/compute/create_nic.rb +81 -0
  69. data/lib/fog/profitbricks/requests/compute/create_server.rb +107 -0
  70. data/lib/fog/profitbricks/requests/compute/create_storage.rb +98 -0
  71. data/lib/fog/profitbricks/requests/compute/delete_data_center.rb +62 -0
  72. data/lib/fog/profitbricks/requests/compute/delete_nic.rb +66 -0
  73. data/lib/fog/profitbricks/requests/compute/delete_server.rb +66 -0
  74. data/lib/fog/profitbricks/requests/compute/delete_storage.rb +66 -0
  75. data/lib/fog/profitbricks/requests/compute/disconnect_storage_from_server.rb +78 -0
  76. data/lib/fog/profitbricks/requests/compute/get_all_data_centers.rb +32 -0
  77. data/lib/fog/profitbricks/requests/compute/get_all_flavors.rb +77 -0
  78. data/lib/fog/profitbricks/requests/compute/get_all_images.rb +67 -0
  79. data/lib/fog/profitbricks/requests/compute/get_all_locations.rb +44 -0
  80. data/lib/fog/profitbricks/requests/compute/get_all_nic.rb +55 -0
  81. data/lib/fog/profitbricks/requests/compute/get_all_servers.rb +58 -0
  82. data/lib/fog/profitbricks/requests/compute/get_all_storages.rb +58 -0
  83. data/lib/fog/profitbricks/requests/compute/get_data_center.rb +40 -0
  84. data/lib/fog/profitbricks/requests/compute/get_data_center_state.rb +43 -0
  85. data/lib/fog/profitbricks/requests/compute/get_flavor.rb +82 -0
  86. data/lib/fog/profitbricks/requests/compute/get_image.rb +71 -0
  87. data/lib/fog/profitbricks/requests/compute/get_location.rb +48 -0
  88. data/lib/fog/profitbricks/requests/compute/get_nic.rb +65 -0
  89. data/lib/fog/profitbricks/requests/compute/get_server.rb +100 -0
  90. data/lib/fog/profitbricks/requests/compute/get_storage.rb +65 -0
  91. data/lib/fog/profitbricks/requests/compute/reset_server.rb +51 -0
  92. data/lib/fog/profitbricks/requests/compute/set_internet_access.rb +61 -0
  93. data/lib/fog/profitbricks/requests/compute/start_server.rb +59 -0
  94. data/lib/fog/profitbricks/requests/compute/stop_server.rb +59 -0
  95. data/lib/fog/profitbricks/requests/compute/update_data_center.rb +55 -0
  96. data/lib/fog/profitbricks/requests/compute/update_nic.rb +76 -0
  97. data/lib/fog/profitbricks/requests/compute/update_server.rb +81 -0
  98. data/lib/fog/profitbricks/requests/compute/update_storage.rb +75 -0
  99. data/lib/fog/profitbricks/version.rb +5 -0
  100. data/spec/minitest_helper.rb +33 -0
  101. data/tests/helper.rb +19 -0
  102. data/tests/helpers/formats_helper.rb +23 -0
  103. data/tests/helpers/mock_helper.rb +8 -0
  104. data/tests/profitbricks/requests/compute/flavor_tests.rb +43 -0
  105. data/tests/profitbricks/requests/compute/image_tests.rb +50 -0
  106. data/tests/profitbricks/requests/compute/interface_tests.rb +101 -0
  107. data/tests/profitbricks/requests/compute/location_tests.rb +33 -0
  108. data/tests/profitbricks/requests/compute/server_tests.rb +246 -0
  109. metadata +293 -0
@@ -0,0 +1,77 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ def get_all_flavors()
6
+ response = Excon::Response.new
7
+ response.status = 200
8
+ response.body = {
9
+ 'getAllFlavorsResponse' => [
10
+ {
11
+ 'flavorId' => '00db4c8f-5e83-49b0-a70b-ac4aad786163',
12
+ 'flavorName' => 'Micro',
13
+ 'ram' => 1024,
14
+ 'cores' => 1
15
+ },
16
+ {
17
+ 'flavorId' => 'dc64957b-be9d-431e-91cd-9e217f94d3de',
18
+ 'flavorName' => 'Small',
19
+ 'ram' => 2048,
20
+ 'cores' => 1
21
+ },
22
+ {
23
+ 'flavorId' => 'b37d000e-b347-4592-b572-df13ef8f68e1',
24
+ 'flavorName' => 'Medium',
25
+ 'ram' => 4096,
26
+ 'cores' => 2
27
+ },
28
+ {
29
+ 'flavorId' => 'a5a4389f-54b6-4f47-b6e8-1c5c55976b94',
30
+ 'flavorName' => 'Large',
31
+ 'ram' => 7168,
32
+ 'cores' => 4
33
+ },
34
+ {
35
+ 'flavorId' => '0052db40-f1dd-4ecf-a711-5980081b7059',
36
+ 'flavorName' => 'Extra Large',
37
+ 'ram' => 14336,
38
+ 'cores' => 8
39
+ },
40
+ {
41
+ 'flavorId' => '8b2b835d-be09-48cf-aae2-7e35aafe92d6',
42
+ 'flavorName' => 'Memory Intensive Small',
43
+ 'ram' => 16384,
44
+ 'cores' => 2
45
+ },
46
+ {
47
+ 'flavorId' => '45c28f8b-6a67-4f69-8c94-231d371da2b6',
48
+ 'flavorName' => 'Memory Intensive Medium',
49
+ 'ram' => 28672,
50
+ 'cores' => 4
51
+ },
52
+ {
53
+ 'flavorId' => '1d22436d-d958-4151-b144-43a8e180c4c4',
54
+ 'flavorName' => 'Memory Intensive Large',
55
+ 'ram' => 57344,
56
+ 'cores' => 8
57
+ },
58
+ ]
59
+ }
60
+ response
61
+ end
62
+ end
63
+
64
+ class Mock
65
+ def get_all_flavors
66
+ data = self.data[:flavors]
67
+ response = Excon::Response.new
68
+ response.status = 200
69
+ response.body = {
70
+ 'getAllFlavorsResponse' => self.data[:flavors]
71
+ }
72
+ response
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,67 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require 'fog/profitbricks/parsers/compute/get_all_images'
6
+
7
+ # Displays a list of all available images.
8
+ #
9
+ # ==== Parameters
10
+ # * N/A
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * getAllImagesResponse<~Hash>:
16
+ # * imageId<~String> - Identifer of the image
17
+ # * imageName<~String> - Name of the image
18
+ # * imageSize<~Integer> - Size of the image
19
+ # * imageType<~String> - Image type HDD or CD-ROM/DVD (ISO) image
20
+ # * writeable<~String> - Image is writable (TRUE/FALSE)
21
+ # * bootable<~String> - Image is bootable
22
+ # * cpuHotplug<~String> -Image supports CPU Hot-Plugging
23
+ # * cpuHotUnplug<~String> -
24
+ # * ramHotPlug<~String> - Image supports memory Hot-Plugging
25
+ # * ramHotUnPlug<~String> -
26
+ # * discVirtioHotPlug<~String> -
27
+ # * discVirtioHotUnplug<~String> -
28
+ # * nicHotPlug<~String> -
29
+ # * nicHotUnplug<~String> -
30
+ # * serverIds<~String> - List all servers by ID on which the image is used
31
+ # * location<~String> - Location where the image has been uploaded
32
+ # * osType<~String> - OS type of an image (WINDOWS, LINUX, OTHER, UNKNOWN)
33
+ # * public<~String> - Shows if image is publicly available or private
34
+ #
35
+ # {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/APIDocumentation.html?GetAllImages.html]
36
+ def get_all_images()
37
+ soap_envelope = Fog::ProfitBricks.construct_envelope {
38
+ |xml| xml[:ws].getAllImages
39
+ }
40
+
41
+ request(
42
+ :expects => [200],
43
+ :method => 'POST',
44
+ :body => soap_envelope.to_xml,
45
+ :parser =>
46
+ Fog::Parsers::Compute::ProfitBricks::GetAllImages.new
47
+ )
48
+ end
49
+ end
50
+
51
+ class Mock
52
+ def get_all_images()
53
+ if data = self.data[:images]
54
+ response = Excon::Response.new
55
+ response.status = 200
56
+ response.body = {
57
+ 'getAllImagesResponse' => self.data[:images]
58
+ }
59
+ response
60
+ else
61
+ raise Fog::Compute::NotFound
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,44 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ def get_all_locations(options={})
6
+ response = Excon::Response.new
7
+ response.status = 200
8
+ response.body = {
9
+ 'getAllLocationsResponse' => [
10
+ {
11
+ 'locationId' => 'c0420cc0-90e8-4f4b-8860-df0a07d18047',
12
+ 'locationName' => 'de/fkb',
13
+ 'country' => 'DEU'
14
+ },
15
+ {
16
+ 'locationId' => '68c4099a-d9d8-4683-bdc2-12789aacfa2a',
17
+ 'locationName' => 'de/fra',
18
+ 'country' => 'DEU'
19
+ },
20
+ {
21
+ 'locationId' => 'e102ba74-6764-47f3-8896-246141da8ada',
22
+ 'locationName' => 'us/las',
23
+ 'country' => 'USA'
24
+ }
25
+ ]
26
+ }
27
+ response
28
+ end
29
+ end
30
+
31
+ class Mock
32
+ def get_all_locations(options={})
33
+ data = self.data[:regions]
34
+ response = Excon::Response.new
35
+ response.status = 200
36
+ response.body = {
37
+ 'getAllLocationsResponse' => self.data[:regions]
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,55 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require 'fog/profitbricks/parsers/compute/get_all_nic'
6
+
7
+ # Returns all virtual NICs
8
+ #
9
+ # ==== Parameters
10
+ # * N/A
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * getAllNicResponse<~Hash>:
16
+ # * nicId<~String> - UUID of the network interface
17
+ # * nicName<~String> - Name of the network interface
18
+ # * lanId<~Integer> -
19
+ # * internetAccess<~Boolean> -
20
+ # * serverId<~String> -
21
+ # * ips<~String> -
22
+ # * macAddress<~String> -
23
+ # * firewall<~Hash>:
24
+ # * ...
25
+ # * dhcpActive<~Boolean> -
26
+ # * gatewayIp<~String> -
27
+ # * provisioningState<~String> - INACTIVE, INPROCESS, AVAILABLE, DELETED, ERROR
28
+ #
29
+ # {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/GetAllNIC.html]
30
+ def get_all_nic
31
+ soap_envelope = Fog::ProfitBricks.construct_envelope {
32
+ |xml| xml[:ws].getAllNic
33
+ }
34
+
35
+ request(
36
+ :expects => [200],
37
+ :method => 'POST',
38
+ :body => soap_envelope.to_xml,
39
+ :parser =>
40
+ Fog::Parsers::Compute::ProfitBricks::GetAllNic.new
41
+ )
42
+ end
43
+ end
44
+
45
+ class Mock
46
+ def get_all_nic
47
+ response = Excon::Response.new
48
+ response.status = 200
49
+ response.body = { 'getAllNicResponse' => self.data[:interfaces] }
50
+ response
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,58 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require "fog/profitbricks/parsers/compute/get_all_servers"
6
+ # Retrieve list of virtual servers
7
+ #
8
+ # ==== Parameters
9
+ # * N/A
10
+ #
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ # * getServerResponse<~Array>:
15
+ # * <~Hash>:
16
+ # * dataCenterId<~String> - UUID of virtual data center
17
+ # * dataCenterVersion<~Integer> - Version of the virtual data center
18
+ # * serverId<~String> - UUID of the new virtual server
19
+ # * serverName<~String> -
20
+ # * cores<~Integer> -
21
+ # * ram<~Integer> -
22
+ # * connectedStorages<~Array> -
23
+ # * nics<~Array> -
24
+ # * ips<~String> -
25
+ # * internetAccess<~Boolean> -
26
+ # * provisioningState<~String> -
27
+ # * virtualMachineState<~String> -
28
+ # * creationTime<~Time> -
29
+ # * lastModificationTime<~Time> -
30
+ # * osType<~String> - UNKNOWN, WINDOWS, LINUX, OTHER
31
+ # * availabilityZone<~String> - AUTO, ZONE_1, ZONE_2
32
+ #
33
+ # {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/GetAllServers.html]
34
+ def get_all_servers
35
+ soap_envelope = Fog::ProfitBricks.construct_envelope {
36
+ |xml| xml[:ws].getAllServers
37
+ }
38
+
39
+ request(
40
+ :expects => [200],
41
+ :method => "POST",
42
+ :body => soap_envelope.to_xml,
43
+ :parser => Fog::Parsers::Compute::ProfitBricks::GetAllServers.new
44
+ )
45
+ end
46
+ end
47
+
48
+ class Mock
49
+ def get_all_servers
50
+ response = Excon::Response.new
51
+ response.status = 200
52
+ response.body = { "getAllServersResponse" => self.data[:servers] }
53
+ response
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,58 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require 'fog/profitbricks/parsers/compute/get_all_storages'
6
+
7
+ # Returns all virtual storage information
8
+ #
9
+ # ==== Parameters
10
+ # * N/A
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * getAllStorages<~Hash>:
16
+ # * dataCenterId<~String> - UUID of the virtual data center
17
+ # * dataCenterVersion<~Integer> - Version of the virtual data center
18
+ # * storageId<~String> - UUID of the virtual storage
19
+ # * size<~Integer> - Size of the virtual storage in GB
20
+ # * storageName<~String> - Name of the virtual storage
21
+ # * mountImage<~Hash>:
22
+ # * imageId<~String> -
23
+ # * imageName<~String> -
24
+ # * serverIds<~String> - List of servers connected to the virtual storage by UUID
25
+ # * provisioningState<~String> - Current provisioning state of virtual storage
26
+ # * creationTime<~Time> - Time when virtual storage was created
27
+ # * lastModificationTime<~Time> - Time when the virtual storage was last modified
28
+ #
29
+ # {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/GetAllStorages.html]
30
+ def get_all_storages
31
+ soap_envelope = Fog::ProfitBricks.construct_envelope {
32
+ |xml| xml[:ws].getAllStorages
33
+ }
34
+
35
+ request(
36
+ :expects => [200],
37
+ :method => 'POST',
38
+ :body => soap_envelope.to_xml,
39
+ :parser =>
40
+ Fog::Parsers::Compute::ProfitBricks::GetAllStorages.new
41
+ )
42
+ end
43
+ end
44
+
45
+ class Mock
46
+ def get_all_storages
47
+ data = self.data[:volumes]
48
+ response = Excon::Response.new
49
+ response.status = 200
50
+ response.body = {
51
+ 'getAllStoragesResponse' => self.data[:volumes]
52
+ }
53
+ response
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require "fog/profitbricks/parsers/compute/get_data_center"
6
+
7
+ def get_data_center(data_center_id)
8
+ soap_envelope = Fog::ProfitBricks.construct_envelope do |xml|
9
+ xml[:ws].getDataCenter { xml.dataCenterId(data_center_id) }
10
+ end
11
+
12
+ request(
13
+ :expects => [200],
14
+ :method => "POST",
15
+ :body => soap_envelope.to_xml,
16
+ :parser => Fog::Parsers::Compute::ProfitBricks::GetDataCenter.new
17
+ )
18
+ rescue Excon::Errors::InternalServerError => error
19
+ Fog::Errors::NotFound.new(error)
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def get_data_center(data_center_id)
25
+ if dc = self.data[:datacenters].find {
26
+ |attrib| attrib["dataCenterId"] == data_center_id
27
+ }
28
+ else
29
+ raise Fog::Errors::NotFound.new("The requested resource could not be found")
30
+ end
31
+
32
+ response = Excon::Response.new
33
+ response.status = 200
34
+ response.body = { "getDataCenterResponse" => dc }
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ module Fog
2
+ module Compute
3
+ class ProfitBricks
4
+ class Real
5
+ require 'fog/profitbricks/parsers/compute/get_data_center_state'
6
+ def get_data_center_state(data_center_id)
7
+ soap_envelope = Fog::ProfitBricks.construct_envelope {
8
+ |xml| xml[:ws].getDataCenterState {
9
+ xml.dataCenterId(data_center_id)
10
+ }
11
+ }
12
+
13
+ request(
14
+ :expects => [200],
15
+ :method => 'POST',
16
+ :body => soap_envelope.to_xml,
17
+ :parser =>
18
+ Fog::Parsers::Compute::ProfitBricks::GetDataCenterState.new
19
+ )
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def get_data_center_state(data_center_id)
25
+ if data = self.data[:datacenters]
26
+ dc = self.data[:datacenters].find {
27
+ |attrib| attrib['dataCenterId'] == data_center_id
28
+ }
29
+
30
+ response = Excon::Response.new
31
+ response.status = 200
32
+ response.body = { 'getDataCenterStateResponse' =>
33
+ { 'return' => dc['provisioningState'] }
34
+ }
35
+ response
36
+ else
37
+ raise Fog::Compute::NotFound
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end