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
-
#save ⇒ Object
Creates server * requires attributes: :name, :domain, and :flavor_id OR (:cpu_count && :ram && :disks).
- #shutdown ⇒ Object
- #snapshot ⇒ Object
- #ssh_password ⇒ Object
- #start ⇒ Object
- #state ⇒ Object
- #stop ⇒ Object
- #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
169 170 171 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 169 def key_pairs attributes[:key_pairs] end |
#key_pairs=(keys) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 173 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
214 215 216 217 218 219 220 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 214 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
230 231 232 233 234 235 236 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 230 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 = Fog::Network[:softlayer].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
222 223 224 225 226 227 228 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 222 def public_network_components if attributes['frontendNetworkComponents'] attributes['frontendNetworkComponents'].map { |n| Fog::Compute::Softlayer::NetworkComponent.new(n) } else [] end end |
#ram=(set) ⇒ Object
198 199 200 201 202 203 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 198 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
238 239 240 241 242 243 244 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 238 def ready? if state == "on" else state == "Running" end end |
#reboot(use_hard_reboot = true) ⇒ Object
246 247 248 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 246 def reboot(use_hard_reboot = true) # TODO: implement end |
#save ⇒ Object
Note:
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)
-
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 293 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
273 274 275 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 273 def shutdown # TODO: implement end |
#snapshot ⇒ Object
257 258 259 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 257 def snapshot # TODO: implement end |
#ssh_password ⇒ Object
250 251 252 253 254 255 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 250 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
261 262 263 264 265 266 267 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 261 def start # TODO: implement #requires :identity #service.start_server(identity) true end |
#state ⇒ Object
277 278 279 280 281 282 283 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 277 def state if service.request(:hardware_server, "#{id}/getServerPowerState").body else service.request(:virtual_guest, "#{id}/getPowerState").body['name'] end end |
#stop ⇒ Object
269 270 271 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 269 def stop # TODO: implement end |
#tags ⇒ Object
309 310 311 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 309 def attributes[:tags].map { |i| i['tag']['name'] } if attributes[:tags] end |
#user_data ⇒ Object
210 211 212 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 210 def user_data attributes[:user_data] end |
#user_data=(value) ⇒ Object
206 207 208 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 206 def user_data=(value) attributes[:user_data] = [{'value' => value}] end |
#vlan ⇒ Object
186 187 188 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 186 def vlan attributes[:vlan] ||= _get_vlan end |
#vlan=(value) ⇒ Object
190 191 192 193 194 195 196 |
# File 'lib/fog/softlayer/models/compute/server.rb', line 190 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 = Fog::Network[:softlayer].networks.get(value) if value.is_a?(Integer) attributes[:vlan] = value end |