profitbricks 0.9.9 → 1.0.0
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 +4 -4
- data/Gemfile +3 -2
- data/Gemfile.lock +19 -22
- data/Guardfile +9 -0
- data/Manifest.txt +15 -0
- data/README.md +1 -1
- data/Rakefile +13 -5
- data/lib/profitbricks.rb +7 -5
- data/lib/profitbricks/data_center.rb +19 -20
- data/lib/profitbricks/extensions.rb +0 -3
- data/lib/profitbricks/firewall.rb +14 -20
- data/lib/profitbricks/image.rb +4 -6
- data/lib/profitbricks/ip_block.rb +5 -6
- data/lib/profitbricks/load_balancer.rb +23 -48
- data/lib/profitbricks/model.rb +8 -35
- data/lib/profitbricks/nic.rb +17 -22
- data/lib/profitbricks/profitbricks.rb +35 -27
- data/lib/profitbricks/rule.rb +2 -2
- data/lib/profitbricks/server.rb +96 -18
- data/lib/profitbricks/storage.rb +17 -22
- data/profitbricks.gemspec +6 -6
- data/spec/fixtures/get_server/two_nics.json +1 -0
- data/spec/fixtures/get_server/two_nics.xml +1 -0
- data/spec/fixtures/get_storage/mount_image.json +21 -0
- data/spec/fixtures/get_storage/mount_image.xml +1 -0
- data/spec/fixtures/power_off_server/success.json +1 -0
- data/spec/fixtures/power_off_server/success.xml +1 -0
- data/spec/fixtures/reset_server/success.json +1 -0
- data/spec/fixtures/reset_server/success.xml +1 -0
- data/spec/fixtures/shutdown_server/success.json +1 -0
- data/spec/fixtures/shutdown_server/success.xml +1 -0
- data/spec/fixtures/start_server/success.json +1 -0
- data/spec/fixtures/start_server/success.xml +1 -0
- data/spec/live/data_center_spec.rb +47 -0
- data/spec/live/server_spec.rb +58 -0
- data/spec/profitbricks/cli_spec.rb +13 -6
- data/spec/profitbricks/data_center_spec.rb +54 -29
- data/spec/profitbricks/firewall_spec.rb +17 -11
- data/spec/profitbricks/image_spec.rb +8 -5
- data/spec/profitbricks/ip_block_spec.rb +8 -5
- data/spec/profitbricks/load_balancer_spec.rb +23 -16
- data/spec/profitbricks/model_spec.rb +10 -13
- data/spec/profitbricks/nic_spec.rb +16 -13
- data/spec/profitbricks/server_spec.rb +117 -11
- data/spec/profitbricks/storage_spec.rb +22 -13
- data/spec/spec_helper.rb +10 -23
- metadata +19 -5
- data/.gemtest +0 -0
@@ -18,8 +18,8 @@ module Profitbricks
|
|
18
18
|
#
|
19
19
|
# @return [Boolean] true on success, false otherwise
|
20
20
|
def release
|
21
|
-
response = Profitbricks.request :release_public_ip_block,
|
22
|
-
return true
|
21
|
+
response = Profitbricks.request :release_public_ip_block, block_id: self.id
|
22
|
+
return true
|
23
23
|
end
|
24
24
|
|
25
25
|
class << self
|
@@ -28,8 +28,7 @@ module Profitbricks
|
|
28
28
|
# @return [Array<IpBlock>] List of all IpBlocks
|
29
29
|
def all
|
30
30
|
response = Profitbricks.request :get_all_public_ip_blocks
|
31
|
-
|
32
|
-
[datacenters].flatten.compact.collect do |block|
|
31
|
+
[response].flatten.compact.collect do |block|
|
33
32
|
PB::IpBlock.new(block)
|
34
33
|
end
|
35
34
|
end
|
@@ -39,8 +38,8 @@ module Profitbricks
|
|
39
38
|
# @param [Fixnum] Block size / amount of IPs to reserve
|
40
39
|
# @return [IpBlock] The reserved IpBlock
|
41
40
|
def reserve(amount)
|
42
|
-
response = Profitbricks.request :reserve_public_ip_block,
|
43
|
-
return PB::IpBlock.new(response
|
41
|
+
response = Profitbricks.request :reserve_public_ip_block, block_size: amount
|
42
|
+
return PB::IpBlock.new(response)
|
44
43
|
end
|
45
44
|
|
46
45
|
|
@@ -12,12 +12,10 @@ module Profitbricks
|
|
12
12
|
# @return [Boolean] true on success, false otherwise
|
13
13
|
def update(options = {})
|
14
14
|
options.merge!(:load_balancer_id=> self.id)
|
15
|
-
|
16
|
-
|
17
|
-
xml += "</arg0>"
|
18
|
-
response = Profitbricks.request :update_load_balancer, xml
|
15
|
+
options[:load_balancer_name] = options.delete :name
|
16
|
+
response = Profitbricks.request :update_load_balancer, options
|
19
17
|
self.reload
|
20
|
-
return true
|
18
|
+
return true
|
21
19
|
end
|
22
20
|
|
23
21
|
# Adds new servers to the Load Balancer within the respective LAN.
|
@@ -31,14 +29,10 @@ module Profitbricks
|
|
31
29
|
# @return [Boolean] true on success, false otherwise
|
32
30
|
def register_servers(servers)
|
33
31
|
raise "You have to provide at least one server" unless servers
|
34
|
-
options = {:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
39
|
-
response = Profitbricks.request :register_servers_on_load_balancer, xml
|
40
|
-
update_attributes(response.to_hash[:register_servers_on_load_balancer_response][:return])
|
41
|
-
return true if response.to_hash[:register_servers_on_load_balancer_response][:return]
|
32
|
+
options = {load_balancer_id: self.id, server_ids: servers.collect(&:id)}
|
33
|
+
response = Profitbricks.request :register_servers_on_load_balancer, options
|
34
|
+
self.reload
|
35
|
+
return true
|
42
36
|
end
|
43
37
|
|
44
38
|
# Removes servers from the load balancer
|
@@ -51,13 +45,9 @@ module Profitbricks
|
|
51
45
|
# @return [Boolean] true on success, false otherwise
|
52
46
|
def deregister_servers(servers)
|
53
47
|
raise "You have to provide at least one server" unless servers
|
54
|
-
options = {:
|
55
|
-
|
56
|
-
|
57
|
-
xml += "<serverIds>#{server.id}</serverIds>"
|
58
|
-
end
|
59
|
-
response = Profitbricks.request :deregister_servers_on_load_balancer, xml
|
60
|
-
return true if response.to_hash[:deregister_servers_on_load_balancer_response][:return]
|
48
|
+
options = {load_balancer_id: self.id, server_ids: servers.collect(&:id)}
|
49
|
+
response = Profitbricks.request :deregister_servers_on_load_balancer, options
|
50
|
+
return true
|
61
51
|
end
|
62
52
|
|
63
53
|
# Enables the load balancer to distribute traffic to the specified servers.
|
@@ -66,13 +56,9 @@ module Profitbricks
|
|
66
56
|
# @return [Boolean] true on success, false otherwise
|
67
57
|
def activate_servers(servers)
|
68
58
|
raise "You have to provide at least one server" unless servers
|
69
|
-
options = {:
|
70
|
-
|
71
|
-
|
72
|
-
xml += "<serverIds>#{server.id}</serverIds>"
|
73
|
-
end
|
74
|
-
response = Profitbricks.request :activate_load_balancing_on_servers, xml
|
75
|
-
return true if response.to_hash[:activate_load_balancing_on_servers_response][:return]
|
59
|
+
options = {load_balancer_id: self.id, server_ids: servers.collect(&:id)}
|
60
|
+
response = Profitbricks.request :activate_load_balancing_on_servers, options
|
61
|
+
return true
|
76
62
|
end
|
77
63
|
|
78
64
|
# Disables the load balancer to distribute traffic to the specified servers.
|
@@ -81,13 +67,9 @@ module Profitbricks
|
|
81
67
|
# @return [Boolean] true on success, false otherwise
|
82
68
|
def deactivate_servers(servers)
|
83
69
|
raise "You have to provide at least one server" unless servers
|
84
|
-
options = {:
|
85
|
-
|
86
|
-
|
87
|
-
xml += "<serverIds>#{server.id}</serverIds>"
|
88
|
-
end
|
89
|
-
response = Profitbricks.request :deactivate_load_balancing_on_servers, xml
|
90
|
-
return true if response.to_hash[:deactivate_load_balancing_on_servers_response][:return]
|
70
|
+
options = {load_balancer_id: self.id, server_ids: servers.collect(&:id)}
|
71
|
+
response = Profitbricks.request :deactivate_load_balancing_on_servers, options
|
72
|
+
return true
|
91
73
|
end
|
92
74
|
|
93
75
|
# Deletes an existing load balancer.
|
@@ -96,8 +78,8 @@ module Profitbricks
|
|
96
78
|
#
|
97
79
|
# @return [Boolean] true on success, false otherwise
|
98
80
|
def delete
|
99
|
-
|
100
|
-
return true
|
81
|
+
Profitbricks.request :delete_load_balancer, load_balancer_id: self.id
|
82
|
+
return true
|
101
83
|
end
|
102
84
|
|
103
85
|
class << self
|
@@ -116,16 +98,9 @@ module Profitbricks
|
|
116
98
|
# @option options [Array<Server>] :servers Array of servers to connect to the LoadBalancer
|
117
99
|
# @return [LoadBalancer] The created LoadBalancer
|
118
100
|
def create(options = {})
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
options[:servers].each do |server|
|
123
|
-
xml += "<serverIds>#{server.id}</serverIds>"
|
124
|
-
end
|
125
|
-
end
|
126
|
-
xml += "</arg0>"
|
127
|
-
response = Profitbricks.request :create_load_balancer, xml
|
128
|
-
self.find(:id => response.to_hash[:create_load_balancer_response][:return][:load_balancer_id])
|
101
|
+
options[:server_ids] = options.delete(:servers).collect(&:id) if options[:servers]
|
102
|
+
response = Profitbricks.request :create_load_balancer, options
|
103
|
+
self.find(:id => response[:load_balancer_id])
|
129
104
|
end
|
130
105
|
|
131
106
|
# Returns information about a virtual load balancer.
|
@@ -135,8 +110,8 @@ module Profitbricks
|
|
135
110
|
# @return [LoadBalancer] The found LoadBalancer
|
136
111
|
def find(options = {})
|
137
112
|
raise "Unable to locate the LoadBalancer named '#{options[:name]}'" unless options[:id]
|
138
|
-
response = Profitbricks.request :get_load_balancer,
|
139
|
-
PB::LoadBalancer.new(response
|
113
|
+
response = Profitbricks.request :get_load_balancer, load_balancer_id: options[:id]
|
114
|
+
PB::LoadBalancer.new(response)
|
140
115
|
end
|
141
116
|
end
|
142
117
|
end
|
data/lib/profitbricks/model.rb
CHANGED
@@ -28,21 +28,6 @@ module Profitbricks
|
|
28
28
|
def self.belongs_to(model, options = {})
|
29
29
|
klass = Profitbricks.get_class model.to_s, options
|
30
30
|
@@associations[model] = {:type => :belongs_to, :class => klass}
|
31
|
-
define_method(model) { instance_variable_get("@#{model}") }
|
32
|
-
end
|
33
|
-
|
34
|
-
def get_xml_and_update_attributes(hash, attributes=nil)
|
35
|
-
attributes = hash.keys if attributes.nil?
|
36
|
-
attributes.each do |a|
|
37
|
-
initialize_getter(a, hash[a]) if hash[a]
|
38
|
-
end
|
39
|
-
hash, attributes = self.class.expand_attributes(hash, attributes, self.class)
|
40
|
-
xml = self.class.build_xml(hash, attributes)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.get_xml_and_update_attributes(hash, attributes=[])
|
44
|
-
hash, attributes = expand_attributes(hash, attributes, name())
|
45
|
-
self.build_xml(hash, attributes)
|
46
31
|
end
|
47
32
|
|
48
33
|
def attributes
|
@@ -54,6 +39,12 @@ module Profitbricks
|
|
54
39
|
end
|
55
40
|
|
56
41
|
private
|
42
|
+
def update_attributes_from_hash(updated)
|
43
|
+
updated.keys.each do |a|
|
44
|
+
initialize_getter(a, updated[a])
|
45
|
+
self.instance_variable_set("@#{a}", updated[a])
|
46
|
+
end
|
47
|
+
end
|
57
48
|
def update_attributes(updated)
|
58
49
|
self.instance_variables.each do |var|
|
59
50
|
self.instance_variable_set(var, updated.instance_variable_get(var))
|
@@ -66,12 +57,6 @@ module Profitbricks
|
|
66
57
|
value
|
67
58
|
end
|
68
59
|
|
69
|
-
def self.build_xml(hash ,attributes)
|
70
|
-
attributes.collect do |a|
|
71
|
-
"<#{a.to_s.lower_camelcase}>#{hash[a]}</#{a.to_s.lower_camelcase}>" if hash[a]
|
72
|
-
end.join('')
|
73
|
-
end
|
74
|
-
|
75
60
|
def initialize_getter name, value=nil
|
76
61
|
self.class.send :define_method, name do
|
77
62
|
instance_variable_get("@#{name}")
|
@@ -95,19 +80,7 @@ module Profitbricks
|
|
95
80
|
end
|
96
81
|
|
97
82
|
def initialize_belongs_to_association name, association, value
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
def self.expand_attributes(hash, attributes, klass=nil)
|
102
|
-
[:name, :algorithm].each do |a|
|
103
|
-
deleted = hash.delete(a)
|
104
|
-
if deleted
|
105
|
-
hash["#{klass.to_s.underscore}_#{a.to_s}"] = deleted
|
106
|
-
attributes.delete(a)
|
107
|
-
attributes.push "#{klass.to_s.underscore}_#{a.to_s}"
|
108
|
-
end
|
109
|
-
end
|
110
|
-
return hash, attributes
|
83
|
+
initialize_getter name, association[:class].send(:new, value, self)
|
111
84
|
end
|
112
|
-
|
85
|
+
end
|
113
86
|
end
|
data/lib/profitbricks/nic.rb
CHANGED
@@ -13,9 +13,8 @@ module Profitbricks
|
|
13
13
|
# @param [Boolean] Internet access (trUe/false)
|
14
14
|
# @return [Boolean] true on success, false otherwise
|
15
15
|
def set_internet_access=(value)
|
16
|
-
|
17
|
-
|
18
|
-
return true if response.to_hash[:set_internet_access_response][:return]
|
16
|
+
response = Profitbricks.request :set_internet_access, data_center_id: self.data_center_id, lan_id: self.lan_id, internet_access: value
|
17
|
+
return true
|
19
18
|
end
|
20
19
|
|
21
20
|
# Changes the settings of an existing NIC.
|
@@ -27,38 +26,36 @@ module Profitbricks
|
|
27
26
|
# @option options [String] :name Names the NIC
|
28
27
|
# @return [Boolean] true on success, false otherwise
|
29
28
|
def update(options = {})
|
30
|
-
|
31
|
-
options.
|
32
|
-
|
33
|
-
|
34
|
-
response = Profitbricks.request :update_nic, xml
|
35
|
-
return true if response.to_hash[:update_nic_response][:return]
|
29
|
+
update_attributes_from_hash options
|
30
|
+
options[:nic_name] = options.delete :name if options[:name]
|
31
|
+
response = Profitbricks.request :update_nic, options.merge(:nic_id => self.id)
|
32
|
+
return true
|
36
33
|
end
|
37
34
|
|
38
35
|
# Adds an existing reserved public IP to a NIC. This operation is required, when dealing with reserved public IPs to ensure proper routing by the ProfitBricks cloud networking layer.
|
39
36
|
#
|
40
37
|
# @param [String] Reserved IP
|
41
38
|
def add_ip(ip)
|
42
|
-
response = Profitbricks.request :add_public_ip_to_nic,
|
39
|
+
response = Profitbricks.request :add_public_ip_to_nic, nic_id: self.id, ip: ip
|
43
40
|
@ips.push ip
|
44
|
-
return true
|
41
|
+
return true
|
45
42
|
end
|
46
43
|
|
47
44
|
# Removes a reserved public IP from a NIC. This operation is required, when dealing with reserved public IPs to ensure proper routing by the ProfitBricks cloud networking layer.
|
48
45
|
#
|
49
46
|
# @param [String] Reserved IP
|
50
47
|
def remove_ip(ip)
|
51
|
-
response = Profitbricks.request :remove_public_ip_from_nic,
|
48
|
+
response = Profitbricks.request :remove_public_ip_from_nic, nic_id: self.id, ip: ip
|
52
49
|
@ips.delete ip
|
53
|
-
return true
|
50
|
+
return true
|
54
51
|
end
|
55
52
|
|
56
53
|
# Deletes an existing NIC.
|
57
54
|
#
|
58
55
|
# @return [Boolean] true on success, false otherwise
|
59
56
|
def delete
|
60
|
-
response = Profitbricks.request :delete_nic,
|
61
|
-
return true
|
57
|
+
response = Profitbricks.request :delete_nic, nic_id: self.id
|
58
|
+
return true
|
62
59
|
end
|
63
60
|
|
64
61
|
def ip
|
@@ -82,11 +79,9 @@ module Profitbricks
|
|
82
79
|
# @option options [String] :name Names the NIC
|
83
80
|
# @return [Nic] The created NIC
|
84
81
|
def create(options = {})
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
response = Profitbricks.request :create_nic, xml
|
89
|
-
self.find(:id => response.to_hash[:create_nic_return][:return][:nic_id])
|
82
|
+
options[:nic_name] = options.delete :name if options[:name]
|
83
|
+
response = Profitbricks.request :create_nic, options
|
84
|
+
self.find(:id => response[:nic_id])
|
90
85
|
end
|
91
86
|
|
92
87
|
# Returns information about the state and configuration of an existing NIC.
|
@@ -95,8 +90,8 @@ module Profitbricks
|
|
95
90
|
# @option options [String] :id The id of the NIC to locate
|
96
91
|
def find(options = {})
|
97
92
|
raise "Unable to locate the Nic named '#{options[:name]}'" unless options[:id]
|
98
|
-
response = Profitbricks.request :get_nic,
|
99
|
-
PB::Nic.new(response
|
93
|
+
response = Profitbricks.request :get_nic, nic_id: options[:id]
|
94
|
+
PB::Nic.new(response)
|
100
95
|
end
|
101
96
|
end
|
102
97
|
end
|
@@ -1,4 +1,8 @@
|
|
1
1
|
module Profitbricks
|
2
|
+
NEED_PREFIX = [:create_nic, :create_load_balancer, :update_storage, :create_storage,
|
3
|
+
:update_data_center, :rom_drive, :update_nic, :create_server,
|
4
|
+
:update_load_balancer, :connect_storage_to_server, :update_server]
|
5
|
+
|
2
6
|
# Configure the Profitbricks API client
|
3
7
|
#
|
4
8
|
# @see Profitbricks::Config
|
@@ -9,21 +13,21 @@ module Profitbricks
|
|
9
13
|
Profitbricks::Config.polling_interval = 1
|
10
14
|
yield Profitbricks::Config
|
11
15
|
|
12
|
-
Savon.configure do |config|
|
13
|
-
config.raise_errors = false
|
14
|
-
config.log = Profitbricks::Config.log
|
15
|
-
config.pretty_print_xml = true
|
16
|
-
end
|
17
16
|
HTTPI.log = false
|
18
17
|
|
19
|
-
@client = Savon::Client.new do |
|
20
|
-
wsdl
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
@client = Savon::Client.new do |globals|
|
19
|
+
globals.wsdl "https://api.profitbricks.com/1.2/wsdl"
|
20
|
+
globals.convert_request_keys_to :lower_camelcase
|
21
|
+
globals.raise_errors true
|
22
|
+
globals.log Profitbricks::Config.log
|
23
|
+
globals.pretty_print_xml true
|
24
|
+
|
25
|
+
# Looks like ssl verifycation works with current jruby
|
26
|
+
#if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' && !ENV['SSL_CERT_DIR']
|
27
|
+
# puts "Warning: SSL certificate verification has been disabled"
|
28
|
+
# globals.ssl_verify_mode = :none
|
29
|
+
#end
|
30
|
+
globals.basic_auth [Profitbricks::Config.username, Profitbricks::Config.password]
|
27
31
|
end
|
28
32
|
|
29
33
|
Profitbricks.client = @client
|
@@ -38,22 +42,26 @@ module Profitbricks
|
|
38
42
|
end
|
39
43
|
|
40
44
|
private
|
41
|
-
def self.request(method,
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
def self.request(method, options={})
|
46
|
+
begin
|
47
|
+
message = if NEED_PREFIX.include? method
|
48
|
+
{ arg0: options }
|
49
|
+
else
|
50
|
+
options
|
51
|
+
end
|
52
|
+
resp = Profitbricks.client.call(method, message: message)
|
53
|
+
self.store(method, message, resp.to_xml, resp.to_hash) if Profitbricks::Config.save_responses
|
54
|
+
rescue Savon::SOAPFault => error
|
55
|
+
puts "Error during request '#{method}': #{error.to_s}"
|
48
56
|
puts "------------------------------ Request XML -------------------------------"
|
49
|
-
puts
|
57
|
+
puts message
|
50
58
|
puts "--------------------------------------------------------------------------"
|
51
|
-
puts "------------------------------ Response
|
52
|
-
puts
|
59
|
+
puts "------------------------------ Response ----------------------------------"
|
60
|
+
puts error.to_hash
|
53
61
|
puts "--------------------------------------------------------------------------"
|
54
|
-
raise RuntimeError.new("Error during request '#{method}': #{
|
62
|
+
raise RuntimeError.new("Error during request '#{method}': #{error.to_s}")
|
55
63
|
end
|
56
|
-
resp
|
64
|
+
(resp.body["#{method}_response".to_sym] || resp.body["#{method}_return".to_sym])[:return]
|
57
65
|
end
|
58
66
|
|
59
67
|
def self.client=(client)
|
@@ -83,10 +91,10 @@ module Profitbricks
|
|
83
91
|
klass = Profitbricks.const_get(klass)
|
84
92
|
else
|
85
93
|
begin
|
86
|
-
require "profitbricks/#{
|
94
|
+
require "profitbricks/#{klass.downcase}"
|
87
95
|
klass = Profitbricks.const_get(klass)
|
88
96
|
rescue LoadError
|
89
|
-
raise LoadError.new("Invalid association, could not locate the class '#{
|
97
|
+
raise LoadError.new("Invalid association, could not locate the class '#{klass}'")
|
90
98
|
end
|
91
99
|
end
|
92
100
|
klass
|
data/lib/profitbricks/rule.rb
CHANGED
@@ -4,8 +4,8 @@ module Profitbricks
|
|
4
4
|
#
|
5
5
|
# @return [Boolean] true on success, false otherwise
|
6
6
|
def delete
|
7
|
-
response = Profitbricks.request :remove_firewall_rules,
|
8
|
-
return true
|
7
|
+
response = Profitbricks.request :remove_firewall_rules, firewall_rule_ids: self.id
|
8
|
+
return true
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/profitbricks/server.rb
CHANGED
@@ -1,19 +1,53 @@
|
|
1
1
|
module Profitbricks
|
2
2
|
class Server < Profitbricks::Model
|
3
3
|
has_many :nics
|
4
|
+
has_many :connected_storages, :class_name => :storage
|
4
5
|
|
5
6
|
# Deletes the virtual Server.
|
6
7
|
# @return [Boolean] true on success, false otherwise
|
7
8
|
def delete
|
8
|
-
|
9
|
-
return true
|
9
|
+
Profitbricks.request :delete_server, server_id: self.id
|
10
|
+
return true
|
10
11
|
end
|
11
12
|
|
12
|
-
# Reboots
|
13
|
+
# Reboots an existing virtual server (SOFT REBOOT).
|
13
14
|
# @return [Boolean] true on success, false otherwise
|
14
15
|
def reboot
|
15
|
-
|
16
|
-
|
16
|
+
@virtual_machine_state = 'NOSTATE'
|
17
|
+
Profitbricks.request :reboot_server, server_id: self.id
|
18
|
+
return true
|
19
|
+
end
|
20
|
+
|
21
|
+
# Resets an existing virtual server (POWER CYCLE).
|
22
|
+
# @return [Boolean] true on success, false otherwise
|
23
|
+
def reset
|
24
|
+
@virtual_machine_state = 'NOSTATE'
|
25
|
+
Profitbricks.request :reset_server, server_id: self.id
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
|
29
|
+
# Starts an existing virtual server
|
30
|
+
# @return [Boolean] true on success, false otherwise
|
31
|
+
def start
|
32
|
+
@virtual_machine_state = 'NOSTATE'
|
33
|
+
Profitbricks.request :start_server, server_id: self.id
|
34
|
+
return true
|
35
|
+
end
|
36
|
+
|
37
|
+
# Stops an existing virtual server (HARD power off)
|
38
|
+
# @return [Boolean] true on success, false otherwise
|
39
|
+
def power_off
|
40
|
+
@virtual_machine_state = 'SHUTOFF'
|
41
|
+
Profitbricks.request :power_off_server, server_id: self.id
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
# Stops an existing virtual server gracefully (SOFT stop)
|
46
|
+
# @return [Boolean] true on success, false otherwise
|
47
|
+
def shutdown
|
48
|
+
@virtual_machine_state = 'SHUTDOWN'
|
49
|
+
Profitbricks.request :shutdown_server, server_id: self.id
|
50
|
+
return true
|
17
51
|
end
|
18
52
|
|
19
53
|
# Updates parameters of an existing virtual Server device.
|
@@ -31,11 +65,11 @@ module Profitbricks
|
|
31
65
|
raise ArgumentError.new(":ram has to be at least 256MiB and a multiple of it") if options[:ram] and (options[:ram] < 256 or (options[:ram] % 256) > 0)
|
32
66
|
raise ArgumentError.new(":availability_zone has to be either 'AUTO', 'ZONE_1', or 'ZONE_2'") if options[:availability_zone] and !['AUTO', 'ZONE_1', 'ZONE_2'].include? options[:availability_zone]
|
33
67
|
raise ArgumentError.new(":os_type has to be either 'WINDOWS' or 'OTHER'") if options[:os_type] and !['WINDOWS', 'OTHER'].include? options[:os_type]
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
response = Profitbricks.request :update_server,
|
38
|
-
return true
|
68
|
+
update_attributes_from_hash options
|
69
|
+
options[:server_name] = options.delete :name if options[:name]
|
70
|
+
options[:server_id] = self.id
|
71
|
+
response = Profitbricks.request :update_server, options
|
72
|
+
return true
|
39
73
|
end
|
40
74
|
|
41
75
|
# Checks if the Server is running
|
@@ -53,13 +87,54 @@ module Profitbricks
|
|
53
87
|
end
|
54
88
|
end
|
55
89
|
|
90
|
+
# Checks if the Server was successfully provisioned
|
91
|
+
#
|
92
|
+
# @return [Boolean] true if the Server was provisioned, false otherwise
|
93
|
+
def provisioned?
|
94
|
+
self.reload
|
95
|
+
if @provisioning_state == 'AVAILABLE'
|
96
|
+
true
|
97
|
+
else
|
98
|
+
false
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Blocks until the Server is provisioned
|
103
|
+
def wait_for_provisioning
|
104
|
+
while !self.provisioned?
|
105
|
+
sleep Profitbricks::Config.polling_interval
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
56
109
|
# Creates a Nic for the current Server, automatically sets the :server_id
|
57
110
|
# @see Profitbricks::Nic#create
|
58
111
|
def create_nic(options)
|
59
112
|
Nic.create(options.merge(:server_id => self.id))
|
60
113
|
end
|
61
114
|
|
115
|
+
# Helper method to get a list of all public IP adresses
|
116
|
+
#
|
117
|
+
# @return [Array <String>] Array of all public IP adresses
|
118
|
+
def public_ips
|
119
|
+
filter_nics_and_return_ips {|nic| nic.internet_access == true }
|
120
|
+
end
|
121
|
+
|
122
|
+
# Helper method to get a list of all private IP adresses
|
123
|
+
#
|
124
|
+
# @return [Array <String>] Array of all private IP adresses
|
125
|
+
def private_ips
|
126
|
+
filter_nics_and_return_ips {|nic| nic.internet_access == false }
|
127
|
+
end
|
128
|
+
|
129
|
+
|
62
130
|
class << self
|
131
|
+
# Returns a list of all Servers created by the user.
|
132
|
+
#
|
133
|
+
# @return [Array <Server>] Array of all available Servers
|
134
|
+
def all
|
135
|
+
DataCenter.all.collect(&:servers).flatten.compact
|
136
|
+
end
|
137
|
+
|
63
138
|
# Creates a Virtual Server within an existing data center. Parameters can be specified to set up a
|
64
139
|
# boot device and connect the server to an existing LAN or the Internet.
|
65
140
|
#
|
@@ -80,12 +155,9 @@ module Profitbricks
|
|
80
155
|
raise ArgumentError.new(":ram has to be at least 256MiB and a multiple of it") if options[:ram].to_i < 256 or (options[:ram].to_i % 256) > 0
|
81
156
|
raise ArgumentError.new(":availability_zone has to be either 'AUTO', 'ZONE_1', or 'ZONE_2'") if options[:availability_zone] and !['AUTO', 'ZONE_1', 'ZONE_2'].include? options[:availability_zone]
|
82
157
|
raise ArgumentError.new(":os_type has to be either 'WINDOWS' or 'OTHER'") if options[:os_type] and !['WINDOWS', 'OTHER'].include? options[:os_type]
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
xml += "</arg0>"
|
87
|
-
response = Profitbricks.request :create_server, xml
|
88
|
-
self.find(:id => response.to_hash[:create_server_return][:return][:server_id])
|
158
|
+
options[:server_name] = options.delete :name if options[:name]
|
159
|
+
response = Profitbricks.request :create_server, options
|
160
|
+
self.find(:id => response[:server_id])
|
89
161
|
end
|
90
162
|
|
91
163
|
# Finds a virtual server
|
@@ -99,9 +171,15 @@ module Profitbricks
|
|
99
171
|
# options[:id] = dc.id if dc
|
100
172
|
#end
|
101
173
|
raise "Unable to locate the server named '#{options[:name]}'" unless options[:id]
|
102
|
-
response = Profitbricks.request :get_server,
|
103
|
-
PB::Server.new(response
|
174
|
+
response = Profitbricks.request :get_server, server_id: options[:id]
|
175
|
+
PB::Server.new(response)
|
104
176
|
end
|
105
177
|
end
|
178
|
+
|
179
|
+
private
|
180
|
+
def filter_nics_and_return_ips(&block)
|
181
|
+
return [] if self.nics.nil?
|
182
|
+
self.nics.select { |nic| yield nic }.collect(&:ips).flatten
|
183
|
+
end
|
106
184
|
end
|
107
185
|
end
|