fog-profitbricks 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/.rubocop.yml +21 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +25 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +2 -0
- data/Gemfile +4 -0
- data/LICENSE.md +20 -0
- data/README.md +29 -0
- data/Rakefile +21 -0
- data/examples/pb_demo.rb +53 -0
- data/fog-profitbricks.gemspec +31 -0
- data/gemfiles/Gemfile.1.8.7 +7 -0
- data/gemfiles/Gemfile.1.9.2+ +6 -0
- data/lib/fog/bin/profitbricks.rb +29 -0
- data/lib/fog/profitbricks.rb +13 -0
- data/lib/fog/profitbricks/compute.rb +215 -0
- data/lib/fog/profitbricks/core.rb +18 -0
- data/lib/fog/profitbricks/models/compute/datacenter.rb +59 -0
- data/lib/fog/profitbricks/models/compute/datacenters.rb +24 -0
- data/lib/fog/profitbricks/models/compute/flavor.rb +27 -0
- data/lib/fog/profitbricks/models/compute/flavors.rb +24 -0
- data/lib/fog/profitbricks/models/compute/image.rb +30 -0
- data/lib/fog/profitbricks/models/compute/images.rb +23 -0
- data/lib/fog/profitbricks/models/compute/interface.rb +64 -0
- data/lib/fog/profitbricks/models/compute/interfaces.rb +24 -0
- data/lib/fog/profitbricks/models/compute/region.rb +15 -0
- data/lib/fog/profitbricks/models/compute/regions.rb +24 -0
- data/lib/fog/profitbricks/models/compute/server.rb +107 -0
- data/lib/fog/profitbricks/models/compute/servers.rb +23 -0
- data/lib/fog/profitbricks/models/compute/volume.rb +74 -0
- data/lib/fog/profitbricks/models/compute/volumes.rb +24 -0
- data/lib/fog/profitbricks/parsers/base.rb +49 -0
- data/lib/fog/profitbricks/parsers/compute/clear_data_center.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/connect_storage_to_server.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/create_data_center.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/create_nic.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/create_server.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/create_storage.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/delete_data_center.rb +20 -0
- data/lib/fog/profitbricks/parsers/compute/delete_nic.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/delete_server.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/delete_storage.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/disconnect_storage_from_server.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/get_all_data_centers.rb +26 -0
- data/lib/fog/profitbricks/parsers/compute/get_all_images.rb +30 -0
- data/lib/fog/profitbricks/parsers/compute/get_all_nic.rb +30 -0
- data/lib/fog/profitbricks/parsers/compute/get_all_servers.rb +56 -0
- data/lib/fog/profitbricks/parsers/compute/get_all_storages.rb +33 -0
- data/lib/fog/profitbricks/parsers/compute/get_data_center.rb +23 -0
- data/lib/fog/profitbricks/parsers/compute/get_data_center_state.rb +20 -0
- data/lib/fog/profitbricks/parsers/compute/get_image.rb +26 -0
- data/lib/fog/profitbricks/parsers/compute/get_nic.rb +27 -0
- data/lib/fog/profitbricks/parsers/compute/get_server.rb +55 -0
- data/lib/fog/profitbricks/parsers/compute/get_storage.rb +30 -0
- data/lib/fog/profitbricks/parsers/compute/reset_server.rb +20 -0
- data/lib/fog/profitbricks/parsers/compute/set_internet_access.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/update_data_center.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/update_nic.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/update_server.rb +22 -0
- data/lib/fog/profitbricks/parsers/compute/update_storage.rb +22 -0
- data/lib/fog/profitbricks/requests/compute/clear_data_center.rb +53 -0
- data/lib/fog/profitbricks/requests/compute/connect_storage_to_server.rb +85 -0
- data/lib/fog/profitbricks/requests/compute/create_data_center.rb +64 -0
- data/lib/fog/profitbricks/requests/compute/create_flavor.rb +40 -0
- data/lib/fog/profitbricks/requests/compute/create_nic.rb +81 -0
- data/lib/fog/profitbricks/requests/compute/create_server.rb +107 -0
- data/lib/fog/profitbricks/requests/compute/create_storage.rb +98 -0
- data/lib/fog/profitbricks/requests/compute/delete_data_center.rb +62 -0
- data/lib/fog/profitbricks/requests/compute/delete_nic.rb +66 -0
- data/lib/fog/profitbricks/requests/compute/delete_server.rb +66 -0
- data/lib/fog/profitbricks/requests/compute/delete_storage.rb +66 -0
- data/lib/fog/profitbricks/requests/compute/disconnect_storage_from_server.rb +78 -0
- data/lib/fog/profitbricks/requests/compute/get_all_data_centers.rb +32 -0
- data/lib/fog/profitbricks/requests/compute/get_all_flavors.rb +77 -0
- data/lib/fog/profitbricks/requests/compute/get_all_images.rb +67 -0
- data/lib/fog/profitbricks/requests/compute/get_all_locations.rb +44 -0
- data/lib/fog/profitbricks/requests/compute/get_all_nic.rb +55 -0
- data/lib/fog/profitbricks/requests/compute/get_all_servers.rb +58 -0
- data/lib/fog/profitbricks/requests/compute/get_all_storages.rb +58 -0
- data/lib/fog/profitbricks/requests/compute/get_data_center.rb +40 -0
- data/lib/fog/profitbricks/requests/compute/get_data_center_state.rb +43 -0
- data/lib/fog/profitbricks/requests/compute/get_flavor.rb +82 -0
- data/lib/fog/profitbricks/requests/compute/get_image.rb +71 -0
- data/lib/fog/profitbricks/requests/compute/get_location.rb +48 -0
- data/lib/fog/profitbricks/requests/compute/get_nic.rb +65 -0
- data/lib/fog/profitbricks/requests/compute/get_server.rb +100 -0
- data/lib/fog/profitbricks/requests/compute/get_storage.rb +65 -0
- data/lib/fog/profitbricks/requests/compute/reset_server.rb +51 -0
- data/lib/fog/profitbricks/requests/compute/set_internet_access.rb +61 -0
- data/lib/fog/profitbricks/requests/compute/start_server.rb +59 -0
- data/lib/fog/profitbricks/requests/compute/stop_server.rb +59 -0
- data/lib/fog/profitbricks/requests/compute/update_data_center.rb +55 -0
- data/lib/fog/profitbricks/requests/compute/update_nic.rb +76 -0
- data/lib/fog/profitbricks/requests/compute/update_server.rb +81 -0
- data/lib/fog/profitbricks/requests/compute/update_storage.rb +75 -0
- data/lib/fog/profitbricks/version.rb +5 -0
- data/spec/minitest_helper.rb +33 -0
- data/tests/helper.rb +19 -0
- data/tests/helpers/formats_helper.rb +23 -0
- data/tests/helpers/mock_helper.rb +8 -0
- data/tests/profitbricks/requests/compute/flavor_tests.rb +43 -0
- data/tests/profitbricks/requests/compute/image_tests.rb +50 -0
- data/tests/profitbricks/requests/compute/interface_tests.rb +101 -0
- data/tests/profitbricks/requests/compute/location_tests.rb +33 -0
- data/tests/profitbricks/requests/compute/server_tests.rb +246 -0
- metadata +293 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Parsers
|
|
3
|
+
module Compute
|
|
4
|
+
module ProfitBricks
|
|
5
|
+
class UpdateStorage < Fog::Parsers::ProfitBricks::Base
|
|
6
|
+
def reset
|
|
7
|
+
@response = { 'updateStorageResponse' => {} }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def end_element(name)
|
|
11
|
+
case name
|
|
12
|
+
when 'requestId', 'dataCenterId'
|
|
13
|
+
@response['updateStorageResponse'][name] = value
|
|
14
|
+
when 'dataCenterVersion'
|
|
15
|
+
@response['updateStorageResponse'][name] = value.to_i
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
require "fog/profitbricks/parsers/compute/clear_data_center"
|
|
6
|
+
|
|
7
|
+
# Clear all objects within a virtual data center
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# * dataCenterId<~String> - Required, UUID of virtual data center
|
|
11
|
+
#
|
|
12
|
+
# ==== Returns
|
|
13
|
+
# * response<~Excon::Response>:
|
|
14
|
+
# * body<~Hash>:
|
|
15
|
+
# * clearDataCenterResponse<~Hash>:
|
|
16
|
+
# * requestId<~String> - ID of request
|
|
17
|
+
# * dataCenterId<~String> - UUID of virtual data center
|
|
18
|
+
# * dataCenterVersion<~Integer> - Version of the virtual data center
|
|
19
|
+
#
|
|
20
|
+
# {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/ClearDataCenter.html]
|
|
21
|
+
def clear_data_center(data_center_id)
|
|
22
|
+
soap_envelope = Fog::ProfitBricks.construct_envelope {
|
|
23
|
+
|xml| xml[:ws].clearDataCenter {
|
|
24
|
+
xml.dataCenterId(data_center_id)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
request(
|
|
29
|
+
:expects => [200],
|
|
30
|
+
:method => "POST",
|
|
31
|
+
:body => soap_envelope.to_xml,
|
|
32
|
+
:parser => Fog::Parsers::Compute::ProfitBricks::ClearDataCenter.new
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class Mock
|
|
38
|
+
def clear_data_center(data_center_id)
|
|
39
|
+
response = Excon::Response.new
|
|
40
|
+
response.status = 200
|
|
41
|
+
response.body = {
|
|
42
|
+
"clearDataCenterResponse" => {
|
|
43
|
+
"requestId" => Fog::Mock::random_numbers(7),
|
|
44
|
+
"dataCenterId" => Fog::UUID.uuid,
|
|
45
|
+
"dataCenterVersion" => 1,
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
response
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
require 'fog/profitbricks/parsers/compute/connect_storage_to_server'
|
|
6
|
+
|
|
7
|
+
# Connect virtual storage
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# * storageId<~String> - Required, UUID of virtual storage
|
|
11
|
+
# * serverId<~String> - Required,
|
|
12
|
+
# * options<~Hash>:
|
|
13
|
+
# * busType<~String> - Optional, VIRTIO, IDE
|
|
14
|
+
# * deviceNumber<~Integer> - Optional,
|
|
15
|
+
#
|
|
16
|
+
# ==== Returns
|
|
17
|
+
# * response<~Excon::Response>:
|
|
18
|
+
# * body<~Hash>:
|
|
19
|
+
# * connectStorageToServerResponse<~Hash>:
|
|
20
|
+
# * requestId<~String> - ID of request
|
|
21
|
+
# * dataCenterId<~String> - UUID of virtual data center
|
|
22
|
+
# * dataCenterVersion<~Integer> - Version of the virtual data center
|
|
23
|
+
#
|
|
24
|
+
# {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/ConnectStorage.html]
|
|
25
|
+
def connect_storage_to_server(storage_id, server_id, options={})
|
|
26
|
+
soap_envelope = Fog::ProfitBricks.construct_envelope {
|
|
27
|
+
|xml| xml[:ws].connectStorageToServer {
|
|
28
|
+
xml.request {
|
|
29
|
+
xml.storageId(storage_id)
|
|
30
|
+
xml.serverId(server_id)
|
|
31
|
+
options.each { |key, value| xml.send(key, value) }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
request(
|
|
37
|
+
:expects => [200],
|
|
38
|
+
:method => 'POST',
|
|
39
|
+
:body => soap_envelope.to_xml,
|
|
40
|
+
:parser =>
|
|
41
|
+
Fog::Parsers::Compute::ProfitBricks::ConnectStorageToServer.new
|
|
42
|
+
)
|
|
43
|
+
rescue Excon::Errors::InternalServerError => error
|
|
44
|
+
Fog::Errors::NotFound.new(error)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class Mock
|
|
49
|
+
def connect_storage_to_server(storage_id, server_id, options={})
|
|
50
|
+
|
|
51
|
+
if storage = self.data[:volumes].find {
|
|
52
|
+
|attrib| attrib['storageId'] == storage_id
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
raise Fog::Errors::NotFound.new(
|
|
56
|
+
'The requested volume could not be found'
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if server = self.data[:servers].find {
|
|
61
|
+
|attrib| attrib['serverId'] == server_id
|
|
62
|
+
}
|
|
63
|
+
server['connectedStorages'] << storage
|
|
64
|
+
else
|
|
65
|
+
raise Fog::Errors::NotFound.new(
|
|
66
|
+
'The requested server could not be found'
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
response = Excon::Response.new
|
|
71
|
+
response.status = 200
|
|
72
|
+
response.body =
|
|
73
|
+
{ 'connectStorageToServerResponse' =>
|
|
74
|
+
{
|
|
75
|
+
'requestId' => Fog::Mock::random_numbers(7),
|
|
76
|
+
'dataCenterId' => Fog::UUID.uuid,
|
|
77
|
+
'dataCenterVersion' => 1
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
response
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
require 'fog/profitbricks/parsers/compute/create_data_center'
|
|
6
|
+
|
|
7
|
+
# Create a new virtual data center
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# dataCenterName<~String> - Name of the new virtual data center
|
|
11
|
+
# location<~String> - Location to create the new data center ("de/fkb", "de/fra", or "us/las")
|
|
12
|
+
#
|
|
13
|
+
# ==== Returns
|
|
14
|
+
# * response<~Excon::Response>:
|
|
15
|
+
# * body<~Hash>:
|
|
16
|
+
# * createDataCenterResponse<~Hash>:
|
|
17
|
+
# * requestId<~String> - ID of request
|
|
18
|
+
# * dataCenterId<~String> - UUID of virtual data center
|
|
19
|
+
# * dataCenterVersion<~Integer> - Version of the virtual data center
|
|
20
|
+
# * location<~String> - Location of virtual data center
|
|
21
|
+
#
|
|
22
|
+
# {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/CreateDataCenter.html]
|
|
23
|
+
def create_data_center(data_center_name='', location='')
|
|
24
|
+
soap_envelope = Fog::ProfitBricks.construct_envelope {
|
|
25
|
+
|xml| xml[:ws].createDataCenter {
|
|
26
|
+
xml.request {
|
|
27
|
+
xml.dataCenterName(data_center_name)
|
|
28
|
+
xml.location(location)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
request(
|
|
34
|
+
:expects => [200],
|
|
35
|
+
:method => 'POST',
|
|
36
|
+
:body => soap_envelope.to_xml,
|
|
37
|
+
:parser =>
|
|
38
|
+
Fog::Parsers::Compute::ProfitBricks::CreateDataCenter.new
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Mock
|
|
44
|
+
def create_data_center(data_center_name='', location='')
|
|
45
|
+
|
|
46
|
+
data_center = {
|
|
47
|
+
'requestId' => Fog::Mock::random_numbers(7),
|
|
48
|
+
'dataCenterId' => Fog::UUID.uuid,
|
|
49
|
+
'dataCenterName' => data_center_name || '',
|
|
50
|
+
'location' => location || '',
|
|
51
|
+
'dataCenterVersion' => 1,
|
|
52
|
+
'provisioningState' => 'AVAILABLE'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
self.data[:datacenters] << data_center
|
|
56
|
+
response = Excon::Response.new
|
|
57
|
+
response.status = 200
|
|
58
|
+
response.body = { 'createDataCenterResponse' => data_center }
|
|
59
|
+
response
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
# Not a real API method; will only return flavor object.
|
|
6
|
+
def create_flavor(flavor_name, cores, ram)
|
|
7
|
+
response = Excon::Response.new
|
|
8
|
+
response.status = 200
|
|
9
|
+
response.body = {
|
|
10
|
+
'createFlavorResponse' => {
|
|
11
|
+
'id' => Fog::UUID.uuid,
|
|
12
|
+
'name' => flavor_name,
|
|
13
|
+
'cores' => cores,
|
|
14
|
+
'ram' => ram,
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
response
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class Mock
|
|
22
|
+
def create_flavor(flavor_name, ram, cores)
|
|
23
|
+
response = Excon::Response.new
|
|
24
|
+
response.status = 200
|
|
25
|
+
|
|
26
|
+
flavor = {
|
|
27
|
+
'id' => Fog::UUID.uuid,
|
|
28
|
+
'name' => flavor_name,
|
|
29
|
+
'ram' => ram,
|
|
30
|
+
'cores' => cores
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
self.data[:flavors] << flavor
|
|
34
|
+
response.body = { 'createFlavorResponse' => flavor }
|
|
35
|
+
response
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
require 'fog/profitbricks/parsers/compute/create_nic'
|
|
6
|
+
|
|
7
|
+
# Create new virtual network interface
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# * serverId<~String> - Required,
|
|
11
|
+
# * lanId - Required,
|
|
12
|
+
# * options<~Hash>:
|
|
13
|
+
# * nicName<~String> - Optional, name of the new virtual network interface
|
|
14
|
+
# * ip<~String> - Optional,
|
|
15
|
+
# * dhcpActive<~String> - Optional,
|
|
16
|
+
#
|
|
17
|
+
# ==== Returns
|
|
18
|
+
# * response<~Excon::Response>:
|
|
19
|
+
# * body<~Hash>:
|
|
20
|
+
# * createNicResponse<~Hash>:
|
|
21
|
+
# * requestId<~String> - ID of request
|
|
22
|
+
# * dataCenterId<~String> - UUID of virtual data center
|
|
23
|
+
# * dataCenterVersion<~Integer> - Version of the virtual data center
|
|
24
|
+
# * nicId<~String> - UUID of the new virtual network interface
|
|
25
|
+
#
|
|
26
|
+
# {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/CreateNIC.html]
|
|
27
|
+
def create_nic(server_id, lan_id, options={})
|
|
28
|
+
soap_envelope = Fog::ProfitBricks.construct_envelope {
|
|
29
|
+
|xml| xml[:ws].createNic {
|
|
30
|
+
xml.request {
|
|
31
|
+
xml.serverId(server_id)
|
|
32
|
+
xml.lanId(lan_id)
|
|
33
|
+
options.each { |key, value| xml.send(key, value) }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
request(
|
|
39
|
+
:expects => [200],
|
|
40
|
+
:method => 'POST',
|
|
41
|
+
:body => soap_envelope.to_xml,
|
|
42
|
+
:parser =>
|
|
43
|
+
Fog::Parsers::Compute::ProfitBricks::CreateNic.new
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class Mock
|
|
49
|
+
def create_nic(server_id, lan_id, options={})
|
|
50
|
+
response = Excon::Response.new
|
|
51
|
+
response.status = 200
|
|
52
|
+
|
|
53
|
+
nic_id = Fog::UUID.uuid
|
|
54
|
+
nic = {
|
|
55
|
+
'nicId' => nic_id,
|
|
56
|
+
'lanId' => lan_id,
|
|
57
|
+
'nicName' => options['nicName'] || '',
|
|
58
|
+
'internetAccess' => options['internetAccess'] || 'false',
|
|
59
|
+
'ip' => options['ip'] || nil,
|
|
60
|
+
'macAddress' => Fog::Mock::random_hex(12),
|
|
61
|
+
'firewall' => {},
|
|
62
|
+
'dhcpActive' => options['dhcpActive'] || 'false',
|
|
63
|
+
'provisioningState' => 'AVAILABLE'
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
self.data[:interfaces] << nic
|
|
67
|
+
response.body = {
|
|
68
|
+
'createNicResponse' =>
|
|
69
|
+
{
|
|
70
|
+
'requestId' => Fog::Mock::random_numbers(7),
|
|
71
|
+
'dataCenterId' => Fog::UUID.uuid,
|
|
72
|
+
'dataCenterVersion' => 1,
|
|
73
|
+
'nicId' => nic_id
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
response
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class ProfitBricks
|
|
4
|
+
class Real
|
|
5
|
+
require 'fog/profitbricks/parsers/compute/create_server'
|
|
6
|
+
|
|
7
|
+
# Create new virtual server
|
|
8
|
+
#
|
|
9
|
+
# ==== Parameters
|
|
10
|
+
# * dataCenterId<~String> - Required, UUID of virtual data center
|
|
11
|
+
# * cores<~Integer> - Required, number of CPU cores allocated to virtual server
|
|
12
|
+
# * ram<~Integer> - Required, amount of memory in GB allocated to virtual server
|
|
13
|
+
# * options<~Hash>:
|
|
14
|
+
# * serverName<~String> - Optional, name of the new virtual network interface
|
|
15
|
+
# * bootFromStorageId<~String> - Optional, defines an existing storage device ID to be set as boot device of the server
|
|
16
|
+
# * bootFromImageId<~<String> - Optional, defines an existing CD-ROM/DVD image ID to be set as boot device of the server
|
|
17
|
+
# * internetAccess<~Boolean> - Optional, set to TRUE to connect the server to the Internet via the specified LAN ID
|
|
18
|
+
# * lanId<~String> - Optional, connects the server to the specified LAN ID
|
|
19
|
+
# * osType<~String> - Optional, UNKNOWN, WINDOWS, LINUX, OTHER
|
|
20
|
+
# * availabilityZone<~String> - Optional, AUTO, ZONE_1, ZONE_2
|
|
21
|
+
# * cpuHotPlug<~Boolean> - Optional, set the server CPU Hot-Plug capability
|
|
22
|
+
# * ramHotPlug<~Boolean> - Optional, set the server RAM Hot-Plug capability
|
|
23
|
+
# * nicHotPlug<~Boolean> - Optional, set the server NIC Hot-Plug capability
|
|
24
|
+
# * nicHotUnPlug<~Boolean> - Optional, set the server NIC Hot-UnPlug capability
|
|
25
|
+
# * discVirtioHotPlug<~Boolean> - Optional, set the server capabilities to hotplug storages which are connected through VirtIO bustypeSet
|
|
26
|
+
# * discVirtioHotUnPlug<~Boolean> - Optional, set the server capabilities to hotUnplug storages which are connected through VirtIO bustypeSet
|
|
27
|
+
#
|
|
28
|
+
# ==== Returns
|
|
29
|
+
# * response<~Excon::Response>:
|
|
30
|
+
# * body<~Hash>:
|
|
31
|
+
# * createServerResponse<~Hash>:
|
|
32
|
+
# * requestId<~String> - ID of request
|
|
33
|
+
# * dataCenterId<~String> - UUID of virtual data center
|
|
34
|
+
# * dataCenterVersion<~Integer> - Version of the virtual data center
|
|
35
|
+
# * serverId<~String> - UUID of the new virtual server
|
|
36
|
+
#
|
|
37
|
+
# {ProfitBricks API Documentation}[http://www.profitbricks.com/apidoc/CreateServer.html]
|
|
38
|
+
def create_server(data_center_id, cores, ram, options={})
|
|
39
|
+
soap_envelope = Fog::ProfitBricks.construct_envelope {
|
|
40
|
+
|xml| xml[:ws].createServer {
|
|
41
|
+
xml.request {
|
|
42
|
+
xml.dataCenterId(data_center_id)
|
|
43
|
+
xml.cores(cores)
|
|
44
|
+
xml.ram(ram)
|
|
45
|
+
options.each { |key, value| xml.send(key, value) }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
request(
|
|
51
|
+
:expects => [200],
|
|
52
|
+
:method => 'POST',
|
|
53
|
+
:body => soap_envelope.to_xml,
|
|
54
|
+
:parser =>
|
|
55
|
+
Fog::Parsers::Compute::ProfitBricks::CreateServer.new
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class Mock
|
|
61
|
+
def create_server(data_center_id, cores, ram, options={})
|
|
62
|
+
server_id = Fog::UUID.uuid
|
|
63
|
+
|
|
64
|
+
server = {
|
|
65
|
+
'serverId' => server_id,
|
|
66
|
+
'cores' => cores,
|
|
67
|
+
'ram' => ram,
|
|
68
|
+
'serverName' => options['serverName'],
|
|
69
|
+
'internetAccess' => options['internetAccess'] || 'false',
|
|
70
|
+
#'ips' => options['ips'] || '',
|
|
71
|
+
'connectedStorages' => options['connectedStorages'] || [],
|
|
72
|
+
'romDrives' => options['romDrives'] || [],
|
|
73
|
+
'nics' => options['nics'] || [],
|
|
74
|
+
'provisioningState' => 'AVAILABLE',
|
|
75
|
+
'virtualMachineState' => 'RUNNING',
|
|
76
|
+
'creationTime' => Time.now,
|
|
77
|
+
'lastModificationTime' => Time.now,
|
|
78
|
+
'osType' => options['osType'] || 'UNKNOWN',
|
|
79
|
+
'availabilityZone' => options['availabilityZone'] || 'AUTO',
|
|
80
|
+
'dataCenterId' => Fog::UUID.uuid,
|
|
81
|
+
'dataCenterVersion' => 1
|
|
82
|
+
##'cpuHotPlug' => 'true',
|
|
83
|
+
##'ramHotPlug' => 'true',
|
|
84
|
+
##'nicHotPlug' => 'true',
|
|
85
|
+
##'nicHotUnPlug' => 'true',
|
|
86
|
+
##'discVirtioHotPlug' => 'true',
|
|
87
|
+
##'discVirtioHotUnPlug' => 'true'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
self.data[:servers] << server
|
|
91
|
+
|
|
92
|
+
response = Excon::Response.new
|
|
93
|
+
response.status = 200
|
|
94
|
+
response.body = {
|
|
95
|
+
'createServerResponse' => {
|
|
96
|
+
'requestId' => Fog::Mock::random_numbers(7),
|
|
97
|
+
'dataCenterId' => Fog::UUID.uuid,
|
|
98
|
+
'dataCenterVersion' => 1,
|
|
99
|
+
'serverId' => server_id
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
response
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|