class Fog::Vcloud::Compute::Server

Public Instance Methods

add_disk(size) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 158
def add_disk(size)
  if @disk_change == :deleted
    raise RuntimeError, "Can't add a disk w/o saving changes or reloading"
  else
    load_unless_loaded!
    @disk_change = :added

    @add_disk = {
      :'rasd:HostResource' => {:vcloud_capacity => size},
      :'rasd:AddressOnParent' =>  (disk_mess.map { |dm| dm[:'rasd:AddressOnParent'] }.sort.last.to_i + 1).to_s,
      :'rasd:ResourceType' => '17'
    }
  end
  true
end
computer_name() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 44
def computer_name
  load_unless_loaded!
  self.guest_customization[:ComputerName]
end
cpus() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 113
def cpus
  if cpu_mess
    { :count => cpu_mess[:"rasd:VirtualQuantity"].to_i,
      :units => cpu_mess[:"rasd:AllocationUnits"] }
  end
end
cpus=(qty) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 120
def cpus=(qty)
  return if qty.nil? or qty.size == 0

  @changed = true
  @update_cpu_value = qty
  qty
end
customization_script() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 34
def customization_script
  load_unless_loaded!
  self.guest_customization[:CustomizationScript]
end
customization_script=(custom_script) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 39
def customization_script=(custom_script)
  @changed = true
  @update_custom_script = custom_script
end
delete()
Alias for: destroy
delete_disk(number) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 174
def delete_disk(number)
  if @disk_change == :added
    raise RuntimeError, "Can't delete a disk w/o saving changes or reloading"
  else
    load_unless_loaded!
    unless number == 0
      @disk_change = :deleted
      @remove_disk = number
    end
  end
  true
end
description=(description) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 187
def description=(description)
  @description_changed = true unless attributes[:description] == description || attributes[:description] == nil
  attributes[:description] = description
end
destroy() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 268
def destroy
  if on?
    undeploy
    wait_for { off? }
  end
  wait_for { off? } # be sure..
  wait_for { ready? } # be doubly sure..
  sleep 2 # API lies. need to give it some time to be happy.
  service.delete_vapp(href).body[:status] == "running"
end
Also aliased as: delete
disks() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 152
def disks
  disk_mess.map do |dm|
    { :number => dm[:"rasd:AddressOnParent"].to_i, :size => dm[:"rasd:HostResource"][:vcloud_capacity].to_i, :resource => dm[:"rasd:HostResource"], :disk_data => dm }
  end
end
graceful_restart() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 91
def graceful_restart
  requires :href
  shutdown
  wait_for { off? }
  power_on
end
ip_addresses() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 59
def ip_addresses
  load_unless_loaded!
  [self.network_connections].flatten.map{|n| n[:IpAddress] }
end
memory() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 128
def memory
  if memory_mess
    { :amount => memory_mess[:"rasd:VirtualQuantity"].to_i,
      :units => memory_mess[:"rasd:AllocationUnits"] }
  end
end
memory=(amount) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 135
def memory=(amount)
  return if amount.nil? or amount.size == 0
  @changed = true
  @update_memory_value = amount
  amount
end
name=(new_name) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 98
def name=(new_name)
  attributes[:name] = new_name
  @changed = true
end
network() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 142
def network
  network_connections[:NetworkConnection] if network_connections
end
network=(network_info) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 146
def network=(network_info)
  @changed = true
  @update_network = network_info
  network_info
end
os_desc() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 49
def os_desc
  load_unless_loaded!
  self.operating_system[:'ovf:Description']
end
os_type() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 54
def os_type
  load_unless_loaded!
  self.operating_system[:vmw_osType]
end
password() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 103
def password
  guest_customization[:AdminPassword]
end
password=(password) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 107
def password=(password)
  return if password.nil? or password.size == 0
  @changed = true
  @update_password = password
end
power_off() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 74
def power_off
  power_operation( :power_off => :powerOff )
end
power_on() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 70
def power_on
  power_operation( :power_on => :powerOn )
end
power_reset() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 82
def power_reset
  power_operation( :power_reset => :reset )
end
ready?() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 64
def ready?
  reload_status # always ensure we have the correct status
  running_tasks = self.tasks && self.tasks.flatten.any? {|ti| ti.kind_of?(Hash) && ti[:status] == 'running' }
  status != '0' && !running_tasks # 0 is provisioning, and no running tasks
end
reload() click to toggle source
Calls superclass method Fog::Vcloud::Model#reload
# File lib/fog/vcloud/models/compute/server.rb, line 197
def reload
  reset_tracking
  super
end
save() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 202
def save
  unless persisted?
    #Lame ...
    raise RuntimeError, "Should not be here"
  else
    if on?
      if @changed
        raise RuntimeError, "Can't save cpu, name or memory changes while the VM is on."
      end
    end

    if @update_custom_script
      guest_customization[:CustomizationScript] = @update_custom_script.to_s
      service.configure_vm_customization_script(guest_customization)
      wait_for { ready? }
    end

    if @update_password
        guest_customization[:AdminPassword] = @update_password.to_s
        service.configure_vm_password(guest_customization)
        wait_for { ready? }
    end

    if @update_cpu_value
      cpu_mess[:"rasd:VirtualQuantity"] = @update_cpu_value.to_s
      service.configure_vm_cpus(cpu_mess)
      wait_for { ready? }
    end

    if @update_memory_value
      memory_mess[:"rasd:VirtualQuantity"] = @update_memory_value.to_s
      service.configure_vm_memory(memory_mess)
      wait_for { ready? }
    end

    if @update_network
      network_connections[:NetworkConnection][:network] = @update_network[:network_name]
      network_connections[:NetworkConnection][:IpAddressAllocationMode] = @update_network[:network_mode]
      service.configure_vm_network(network_connections)
      wait_for { ready? }
    end
    if @disk_change == :deleted
      data = disk_mess.delete_if do |vh|
        vh[:'rasd:ResourceType'] == '17' &&
          vh[:'rasd:AddressOnParent'].to_s == @remove_disk.to_s
      end
      service.configure_vm_disks(self.href, data)
      wait_for { ready? }
    end
    if @disk_change == :added
      data = disk_mess
      data << @add_disk
      service.configure_vm_disks(self.href, data)
      wait_for { ready? }
    end
    if @name_changed || @description_changed
      edit_uri = links.select {|i| i[:rel] == 'edit'}
      edit_uri = edit_uri.kind_of?(Array) ? edit_uri.flatten[0][:href] : edit_uri[:href]
      service.configure_vm_name_description(edit_uri, self.name, self.description)
      wait_for { ready? }
    end
  end
  reset_tracking
  true
end
shutdown() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 78
def shutdown
  power_operation( :power_shutdown => :shutdown )
end
tags() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 30
def tags
  Fog::Vcloud::Compute::Tags.new(:service => service, :href => href + '/metadata')
end
undeploy() click to toggle source

This is the real power-off operation

# File lib/fog/vcloud/models/compute/server.rb, line 87
def undeploy
  service.undeploy href
end

Private Instance Methods

_compose_vapp_data() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 293
def _compose_vapp_data
  { :name   => name,
    :cpus   => cpus[:count],
    :memory => memory[:amount],
    :disks  => disks
  }
end
cpu_mess() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 308
def cpu_mess
  load_unless_loaded!
  if virtual_hardware
    virtual_hardware.find { |item| item[:"rasd:ResourceType"] == "3" }
  end
end
disk_mess() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 315
def disk_mess
  load_unless_loaded!
  if virtual_hardware
    virtual_hardware.select { |item| item[:"rasd:ResourceType"] == "17" }
  else
    []
  end
end
memory_mess() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 301
def memory_mess
  load_unless_loaded!
  if virtual_hardware
    virtual_hardware.find { |item| item[:"rasd:ResourceType"] == "4" }
  end
end
power_operation(op) click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 324
def power_operation(op)
  requires :href
  begin
    service.send(op.keys.first, href + "/power/action/#{op.values.first}" )
  rescue Excon::Errors::InternalServerError => e
    #Frankly we shouldn't get here ...
    raise e unless e.to_s =~ /because it is already powered o(n|ff)/
  end
  true
end
reload_status() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 335
def reload_status
  server = service.get_server(href)
  self.status = server.status
  self.tasks = server.tasks
end
reset_tracking() click to toggle source
# File lib/fog/vcloud/models/compute/server.rb, line 282
def reset_tracking
  @disk_change = false
  @changed = false
  @update_password = nil
  @update_cpu_value = nil
  @update_memory_value = nil
  @update_network = nil
  @name_changed = false
  @description_changed = nil
end