Class: Fog::Compute::Softlayer::Server
- Inherits:
-
Fog::Compute::Server
- Object
- Fog::Compute::Server
- Fog::Compute::Softlayer::Server
- Defined in:
- lib/fog/softlayer/models/compute/server.rb
Instance Method Summary collapse
- #add_tags(tags) ⇒ Object
- #bare_metal ⇒ Object
- #bare_metal? ⇒ Boolean
- #datacenter ⇒ Object
- #datacenter=(name) ⇒ Object
- #delete_tags(tags) ⇒ Object
- #destroy ⇒ Object
- #dns_name ⇒ Object
- #image_id ⇒ Object
- #image_id=(uuid) ⇒ Object
-
#initialize(attributes = {}) ⇒ Server
constructor
A new instance of Server.
- #key_pairs ⇒ Object
- #key_pairs=(keys) ⇒ Object
- #name ⇒ Object
- #name=(set) ⇒ Object
- #network_components ⇒ Object
- #os_code ⇒ Object
- #pre_save ⇒ Object
-
#private_ip ⇒ Object
maintain backward compatibility with <0.3.13.
- #private_network_components ⇒ Object
- #private_vlan ⇒ Object
- #private_vlan=(value) ⇒ Object
-
#public_ip ⇒ Object
maintain backward compatibility with <0.3.13.
- #public_network_components ⇒ Object
- #ram=(set) ⇒ Object
- #ready? ⇒ Boolean
- #reboot(use_hard_reboot = true) ⇒ Object
-
#relaunch! ⇒ Object
reload the OS on a server (method name reload was already taken).
-
#save ⇒ Object
Creates server * requires attributes: :name, :domain, and :flavor_id OR (:cpu_count && :ram && :disks).
-
#shutdown ⇒ Object
Soft power off.
- #snapshot ⇒ Object
- #ssh_password ⇒ Object
- #start ⇒ Object
- #state ⇒ Object
-
#stop ⇒ Object
Hard power off.
- #tags ⇒ Object
- #user_data ⇒ Object
- #user_data=(value) ⇒ Object
- #vlan ⇒ Object
- #vlan=(value) ⇒ Object
Constructor Details
#initialize(attributes = {}) ⇒ Server
Returns a new instance of Server.
50 51 52 53 54 55 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 50 def initialize(attributes = {}) # Forces every request inject bare_metal parameter raise Exception if attributes[:collection].nil? and attributes['bare_metal'].nil? super(attributes) set_defaults end |
Instance Method Details
#add_tags(tags) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 57 def () requires :id raise ArgumentError, "Tags argument for #{self.class.name}##{__method__} must be Array." unless .is_a?(Array) .each do |tag| service..new(:resource_id => self.id, :name => tag).save end self.reload true end |
#bare_metal ⇒ Object
71 72 73 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 71 def @bare_metal end |
#bare_metal? ⇒ Boolean
67 68 69 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 67 def end |
#datacenter ⇒ Object
80 81 82 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 80 def datacenter attributes[:datacenter][:name] unless attributes[:datacenter].nil? end |
#datacenter=(name) ⇒ Object
75 76 77 78 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 75 def datacenter=(name) name = name['name'] if name.is_a?(Hash) attributes[:datacenter] = { :name => name } end |
#delete_tags(tags) ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 84 def () requires :id raise ArgumentError, "Tags argument for #{self.class.name}##{__method__} must be Array." unless .is_a?(Array) .each do |tag| service..new(:resource_id => self.id, :name => tag).destroy end self.reload true end |
#destroy ⇒ Object
94 95 96 97 98 99 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 94 def destroy requires :id request = ? :delete_bare_metal_server : :delete_vm response = service.send(request, self.id) response.body end |
#dns_name ⇒ Object
101 102 103 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 101 def dns_name fqdn end |
#image_id ⇒ Object
109 110 111 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 109 def image_id attributes[:image_id][:globalIdentifier] unless attributes[:image_id].nil? end |
#image_id=(uuid) ⇒ Object
105 106 107 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 105 def image_id=(uuid) attributes[:image_id] = {:globalIdentifier => uuid} end |
#key_pairs ⇒ Object
180 181 182 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 180 def key_pairs attributes[:key_pairs] end |
#key_pairs=(keys) ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 184 def key_pairs=(keys) raise ArgumentError, "Argument #{local_variables.first.to_s} for #{self.class.name}##{__method__} must be Array." unless keys.is_a?(Array) attributes[:key_pairs] = [] keys.map do |key| key = self.symbolize_keys(key) if key.is_a?(Hash) unless key.is_a?(Fog::Compute::Softlayer::KeyPair) or (key.is_a?(Hash) and key[:id]) raise ArgumentError, "Elements of keys array for #{self.class.name}##{__method__} must be a Hash with key 'id', or Fog::Compute::Softlayer::KeyPair" end key = service.key_pairs.get(key[:id]) unless key.is_a?(Fog::Compute::Softlayer::KeyPair) attributes[:key_pairs] << key end end |
#name ⇒ Object
117 118 119 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 117 def name attributes[:hostname] end |
#name=(set) ⇒ Object
113 114 115 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 113 def name=(set) attributes[:hostname] = set end |
#network_components ⇒ Object
225 226 227 228 229 230 231 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 225 def network_components if id (public_network_components << private_network_components).flatten else attributes[:network_components] end end |
#os_code ⇒ Object
153 154 155 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 153 def os_code attributes['operatingSystem']['softwareLicense']['softwareDescription']['referenceCode'] if attributes['operatingSystem'] end |
#pre_save ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 121 def pre_save extract_flavor validate_attributes if self.vlan attributes[:vlan] = { :networkVlan => { :id => self.vlan.id } } end if self.private_vlan attributes[:private_vlan] = { :networkVlan => { :id => self.private_vlan.id } } end if self.key_pairs attributes[:key_pairs].map! { |key| { :id => key.id } } end if self.network_components self.network_components = self.network_components.map do |component| component[:maxSpeed] = component.delete(:speed) if component[:speed] component[:maxSpeed] = component.delete(:max_speed) if component[:max_speed] component end end remap_attributes(attributes, attributes_mapping) clean_attributes end |
#private_ip ⇒ Object
maintain backward compatibility with <0.3.13
145 146 147 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 145 def private_ip # maintain backward compatibility with <0.3.13 private_ip_address end |
#private_network_components ⇒ Object
241 242 243 244 245 246 247 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 241 def private_network_components if attributes['backendNetworkComponents'] attributes['backendNetworkComponents'].map { |n| Fog::Compute::Softlayer::NetworkComponent.new(n) } else [] end end |
#private_vlan ⇒ Object
157 158 159 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 157 def private_vlan attributes[:private_vlan] ||= _get_private_vlan end |
#private_vlan=(value) ⇒ Object
161 162 163 164 165 166 167 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 161 def private_vlan=(value) unless value.is_a?(Integer) or value.is_a?(Fog::Network::Softlayer::Network) raise ArgumentError, "vlan argument for #{self.class.name}##{__method__} must be Integer or Fog::Network::Softlayer::Network." end value = network_connection.networks.get(value) if value.is_a?(Integer) attributes[:private_vlan] = value end |
#public_ip ⇒ Object
maintain backward compatibility with <0.3.13
149 150 151 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 149 def public_ip # maintain backward compatibility with <0.3.13 public_ip_address end |
#public_network_components ⇒ Object
233 234 235 236 237 238 239 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 233 def public_network_components if attributes['frontendNetworkComponents'] attributes['frontendNetworkComponents'].map { |n| Fog::Compute::Softlayer::NetworkComponent.new(n) } else [] end end |
#ram=(set) ⇒ Object
209 210 211 212 213 214 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 209 def ram=(set) if set.is_a?(Array) and set.first['hardwareComponentModel'] set = 1024 * set.first['hardwareComponentModel']['capacity'].to_i end attributes[:ram] = set end |
#ready? ⇒ Boolean
249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 249 def ready? begin if state == "on" else state == "Running" end rescue Excon::Errors::InternalServerError => e false end end |
#reboot(use_hard_reboot = true) ⇒ Object
261 262 263 264 265 266 267 268 269 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 261 def reboot(use_hard_reboot = true) requires :id if service.(id, use_hard_reboot) else service.reboot_vm(id, use_hard_reboot) end true end |
#relaunch! ⇒ Object
reload the OS on a server (method name reload was already taken)
170 171 172 173 174 175 176 177 178 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 170 def relaunch! requires :id body = [ "FORCE", {}] body[1][:sshKeyIds] = key_pairs.map {|kp| kp.id} unless key_pairs.empty? type = ? :hardware_server : :virtual_guest status = service.request(type, "#{id}/reloadOperatingSystem", :body => body, :http_method => :post).status wait_for { not ready? } # block until the relaunch has begun [200, 201].include?(status) end |
#save ⇒ Object
You should use servers.create to create servers instead calling this method directly
Creates server
-
requires attributes: :name, :domain, and :flavor_id OR (:cpu_count && :ram && :disks)
-
State Transitions
-
BUILD -> ACTIVE
-
BUILD -> ERROR (on error)
-
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 330 def save raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted? copy = self.dup copy.pre_save data = if service.(copy.attributes).body else service.create_vm(copy.attributes).body.first end data.delete("bare_metal") merge_attributes(data) true end |
#shutdown ⇒ Object
Soft power off
304 305 306 307 308 309 310 311 312 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 304 def shutdown requires :id if raise Fog::Errors::Error.new('Shutdown not supported on baremetal servers. Use #stop.') else service.power_off_vm(id, false) end true end |
#snapshot ⇒ Object
278 279 280 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 278 def snapshot # TODO: implement end |
#ssh_password ⇒ Object
271 272 273 274 275 276 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 271 def ssh_password requires :id service_path = ? :hardware_server : :virtual_guest @sshpass ||= service.request(service_path, id, :query => 'objectMask=mask[id,operatingSystem.passwords[password]]').body @sshpass['operatingSystem']['passwords'][0]['password'] unless @sshpass['operatingSystem'].nil? or @sshpass['operatingSystem']['passwords'].empty? end |
#start ⇒ Object
282 283 284 285 286 287 288 289 290 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 282 def start requires :id if service.(id) else service.power_on_vm(id) end true end |
#state ⇒ Object
314 315 316 317 318 319 320 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 314 def state if service.request(:hardware_server, "#{id}/getServerPowerState").body else service.request(:virtual_guest, "#{id}/getPowerState").body['name'] end end |
#stop ⇒ Object
Hard power off
293 294 295 296 297 298 299 300 301 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 293 def stop requires :id if service.(id) else service.power_off_vm(id, true) end true end |
#tags ⇒ Object
346 347 348 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 346 def attributes[:tags].map { |i| i['tag']['name'] } if attributes[:tags] end |
#user_data ⇒ Object
221 222 223 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 221 def user_data attributes[:user_data] end |
#user_data=(value) ⇒ Object
217 218 219 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 217 def user_data=(value) attributes[:user_data] = [{'value' => value}] end |
#vlan ⇒ Object
197 198 199 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 197 def vlan attributes[:vlan] ||= _get_vlan end |
#vlan=(value) ⇒ Object
201 202 203 204 205 206 207 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 201 def vlan=(value) unless value.is_a?(Integer) or value.is_a?(Fog::Network::Softlayer::Network) raise ArgumentError, "vlan argument for #{self.class.name}##{__method__} must be Integer or Fog::Network::Softlayer::Network." end value = network_connection.networks.get(value) if value.is_a?(Integer) attributes[:vlan] = value end |