class OVIRT::VM
Attributes
cluster[R]
cores[R]
creation_time[R]
description[R]
display[R]
host[R]
interfaces[RW]
ips[R]
memory[R]
os[R]
profile[R]
quota[R]
status[R]
storage[R]
template[R]
vnc[R]
volumes[RW]
Public Class Methods
new(client, xml)
click to toggle source
Calls superclass method
OVIRT::BaseObject.new
# File lib/ovirt/vm.rb, line 11 def initialize(client, xml) super(client, xml[:id], xml[:href], (xml/'name').first.text) parse_xml_attributes!(xml) end
ticket(options={})
click to toggle source
# File lib/ovirt/vm.rb, line 42 def self.ticket options={} builder = Nokogiri::XML::Builder.new do action_{ ticket_{ expiry_(options[:expiry] || 120) } } end Nokogiri::XML(builder.to_xml).root.to_s end
to_xml(opts={})
click to toggle source
# File lib/ovirt/vm.rb, line 49 def self.to_xml(opts={}) builder = Nokogiri::XML::Builder.new do vm{ name_ opts[:name] || "i-#{Time.now.to_i}" if opts[:template] template_ :id => (opts[:template]) elsif opts[:template_name] template_{ name_(opts[:template_name])} else template_{name_('Blank')} end if opts[:quota] quota_( :id => opts[:quota]) end if opts[:cluster] cluster_( :id => opts[:cluster]) elsif opts[:cluster_name] cluster_{ name_(opts[:cluster_name])} end type_ opts[:hwp_id] || 'Server' if opts[:memory] memory opts[:memory] end if opts[:cores] cpu { topology( :cores => (opts[:cores] || '1'), :sockets => '1' ) } end os({:type => opts[:os_type] || 'unassigned' }){ if(opts[:first_boot_dev] && opts[:first_boot_dev] == 'network') boot(:dev=> opts[:boot_dev1] || 'network') boot(:dev=> opts[:boot_dev2] || 'hd') else boot(:dev=> opts[:boot_dev2] || 'hd') boot(:dev=> opts[:boot_dev1] || 'network') end kernel (opts[:os_kernel]) initrd (opts[:os_initrd]) cmdline (opts[:os_cmdline]) } display_{ type_(opts[:display][:type]) } if opts[:display] custom_properties { custom_property({ :name => "floppyinject", :value => "#{opts[:fileinject_path] || OVIRT::FILEINJECT_PATH}:#{opts[:user_data]}", :regexp => "^([^:]+):(.*)$"}) } if(opts[:user_data_method] && opts[:user_data_method] == :custom_property) payloads { payload(:type => 'floppy') { file(:name => "#{opts[:fileinject_path] || OVIRT::FILEINJECT_PATH}") { content(Base64::decode64(opts[:user_data])) } } } if(opts[:user_data_method] && opts[:user_data_method] == :payload) } end Nokogiri::XML(builder.to_xml).root.to_s end
Public Instance Methods
ready?()
click to toggle source
In oVirt 3.1 a vm can be marked down and not locked while its volumes are locked. This method indicates if it is safe to launch the vm.
# File lib/ovirt/vm.rb, line 22 def ready? return false unless @status =~ /down/i volumes.each do |volume| return false if volume.status =~ /locked/i end true end
running?()
click to toggle source
# File lib/ovirt/vm.rb, line 16 def running? !(@status =~ /down/i) && !(@status =~ /wait_for_launch/i) end
Private Instance Methods
parse_xml_attributes!(xml)
click to toggle source
# File lib/ovirt/vm.rb, line 110 def parse_xml_attributes!(xml) @description = ((xml/'description').first.text rescue '') @status = ((xml/'status').first.text rescue 'unknown') @memory = (xml/'memory').first.text @profile = (xml/'type').first.text @template = Link::new(@client, (xml/'template').first[:id], (xml/'template').first[:href]) @host = Link::new(@client, (xml/'host').first[:id], (xml/'host').first[:href]) rescue nil @cluster = Link::new(@client, (xml/'cluster').first[:id], (xml/'cluster').first[:href]) @display = { :type => (xml/'display/type').first.text, :address => ((xml/'display/address').first.text rescue nil), :port => ((xml/'display/port').first.text rescue nil), :secure_port => ((xml/'display/secure_port').first.text rescue nil), :subject => ((xml/'display/certificate/subject').first.text rescue nil), :monitors => (xml/'display/monitors').first.text } @cores = ((xml/'cpu/topology').first[:cores].to_i * (xml/'cpu/topology').first[:sockets].to_i rescue nil) @storage = ((xml/'disks/disk/size').first.text rescue nil) @creation_time = (xml/'creation_time').text @ips = (xml/'guest_info/ips/ip').map { |ip| ip[:address] } @vnc = { :address => ((xml/'display/address').first.text rescue "127.0.0.1"), :port => ((xml/'display/port').first.text rescue "5890") } unless @ip @os = { :type => (xml/'os').first[:type], :boot => (xml/'os/boot').collect {|boot| boot[:dev] } } @quota = ((xml/'quota').first[:id] rescue nil) disks = xml/'disks/disk' @volumes = disks.length > 0 ? disks.collect {|disk| OVIRT::Volume::new(@client, disk)} : nil interfaces = xml/'nics/nic' @interfaces = interfaces.length > 0 ? interfaces.collect {|nic| OVIRT::Interface::new(@client, nic)} : nil end