fog-profitbricks 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|