class OpenNebula::Host
Constants
- HOST_METHODS
Constants and Class Methods
- HOST_STATES
- HOST_STATUS
- SHORT_HOST_STATES
Public Class Methods
Creates a Host
description with just its identifier this method should be used to create plain Host
objects. id
the id of the host
Example:
host = Host.new(Host.build_xml(3),rpc_client)
# File lib/opennebula/host.rb, line 65 def Host.build_xml(pe_id=nil) if pe_id host_xml = "<HOST><ID>#{pe_id}</ID></HOST>" else host_xml = "<HOST></HOST>" end XMLElement.build_xml(host_xml, 'HOST') end
Class constructor
# File lib/opennebula/host.rb, line 76 def initialize(xml, client) super(xml,client) @client = client @pe_id = self['ID'].to_i if self['ID'] end
Public Instance Methods
Allocates a new Host
in OpenNebula
@param hostname [String] Name of the new Host
. @param im [String] Name of the im_driver (information/monitoring) @param vmm [String] Name of the vmm_driver (hypervisor) @param cluster_id [String] Id of the cluster, -1 to use default
@return [Integer, OpenNebula::Error] the new ID in case of
success, error otherwise
# File lib/opennebula/host.rb, line 103 def allocate(hostname, im, vmm, cluster_id=ClusterPool::NONE_CLUSTER_ID) super(HOST_METHODS[:allocate], hostname, im, vmm, cluster_id) end
Deletes the Host
# File lib/opennebula/host.rb, line 108 def delete() super(HOST_METHODS[:delete]) end
Disables the Host
# File lib/opennebula/host.rb, line 118 def disable() set_status("DISABLED") end
Enables the Host
# File lib/opennebula/host.rb, line 113 def enable() set_status("ENABLED") end
# File lib/opennebula/host.rb, line 135 def flush(action) self.disable vm_pool = OpenNebula::VirtualMachinePool.new(@client, VirtualMachinePool::INFO_ALL_VM) rc = vm_pool.info if OpenNebula.is_error?(rc) puts rc.message exit(-1) end vm_pool.each do |vm| hid = vm['HISTORY_RECORDS/HISTORY[last()]/HID'] if hid == self['ID'] case action when "resched" vm.resched when "delete-recreate" vm.recover(4) else vm.resched end end end end
Resets monitoring forcing an update
# File lib/opennebula/host.rb, line 128 def forceupdate() rc = offline return rc if OpenNebula.is_error?(rc) enable end
Imports a wild VM from the host and puts it in running state
@param name [String] Name of the VM to import @param ipv4 [Array] Array with IP4s to set @param ipv6 [Array] Array with IP6s to set
@return [nil, OpenNebula::Error] nil in case of success, Error
otherwise
# File lib/opennebula/host.rb, line 224 def import_wild(name, ipv4 = nil, ipv6 = nil) vms = importable_wilds.select {|vm| vm['VM_NAME'] == name } if vms.length == 0 return OpenNebula::Error.new("No importable wilds with name " << "'#{name}' found.") elsif vms.length > 1 return OpenNebula::Error.new("More than one importable wild " << "with name '#{name}' found.") end wild = vms.first template = Base64.decode64(wild['IMPORT_TEMPLATE']) xml = OpenNebula::VirtualMachine.build_xml vm = OpenNebula::VirtualMachine.new(xml, @client) # vCenter wild VMs has a different process # image and vnets objects representing existing nics and disks # must be created and referenced vcenter_wild_vm = wild.key? "VCENTER_TEMPLATE" if vcenter_wild_vm require 'vcenter_driver' vi_client = VCenterDriver::VIClient.new_from_host(self["ID"]) importer = VCenterDriver::VmmImporter.new(@client, vi_client) return importer.import( { :wild => wild, :template => template, :one_item => vm, :host => self['ID'], :ipv4 => ipv4, :ipv6 => ipv6 } ) else rc = vm.allocate(template) return rc if OpenNebula.is_error?(rc) vm.deploy(id, false) return vm.id end end
Get importable wild VMs in the host
# File lib/opennebula/host.rb, line 301 def importable_wilds wilds.select {|w| Hash === w && w['IMPORT_TEMPLATE'] } end
Retrieves the information of the given Host
.
# File lib/opennebula/host.rb, line 88 def info(decrypt = false) super(HOST_METHODS[:info], 'HOST', decrypt) end
Retrieves this Host's monitoring data from OpenNebula
@param [Array<String>] xpath_expressions Elements to retrieve.
@return [Hash<String, Array<Array<int>>>, OpenNebula::Error] Hash
with
the requested xpath expressions, and an Array of 'timestamp, value'.
@example
host.monitoring( ['HOST_SHARE/FREE_CPU', 'HOST_SHARE/RUNNING_VMS'] ) { "HOST_SHARE/RUNNING_VMS" => [["1337266000", "1"], ["1337266044", "1"], ["1337266088", "3"]], "HOST_SHARE/FREE_CPU" => [["1337266000", "800"], ["1337266044", "800"], ["1337266088", "800"]] }
# File lib/opennebula/host.rb, line 193 def monitoring(xpath_expressions) return super(HOST_METHODS[:monitoring], xpath_expressions) end
Retrieves this Host's monitoring data from OpenNebula
, in XML
@return [String] Monitoring data, in XML
# File lib/opennebula/host.rb, line 200 def monitoring_xml() return Error.new('ID not defined') if !@pe_id return @client.call(HOST_METHODS[:monitoring], @pe_id) end
Sets the Host
offline
# File lib/opennebula/host.rb, line 123 def offline() set_status("OFFLINE") end
Returns the state of the Host
(string value)
# File lib/opennebula/host.rb, line 285 def short_state_str SHORT_HOST_STATES[state_str] end
Returns the state of the Host
(numeric value)
# File lib/opennebula/host.rb, line 275 def state self['STATE'].to_i end
Returns the state of the Host
(string value)
# File lib/opennebula/host.rb, line 280 def state_str HOST_STATES[state] end
Returns the <TEMPLATE> element in text form
- indent
-
Boolean indents the resulting string, default true
# File lib/opennebula/host.rb, line 291 def template_str(indent=true) template_like_str('TEMPLATE', indent) end
Replaces the template contents
@param new_template [String] New template contents @param append [true, false] True to append new attributes instead of
replace the whole template
@return [nil, OpenNebula::Error] nil in case of success, Error
otherwise
# File lib/opennebula/host.rb, line 170 def update(new_template, append=false) super(HOST_METHODS[:update], new_template, append ? 1 : 0) end
Get wild VMs in the host
# File lib/opennebula/host.rb, line 296 def wilds [self.to_hash['HOST']['TEMPLATE']['VM']].flatten.compact end
Private Instance Methods
# File lib/opennebula/host.rb, line 306 def set_status(status) return Error.new('ID not defined') if !@pe_id rc = @client.call(HOST_METHODS[:status], @pe_id, HOST_STATUS[status]) rc = nil if !OpenNebula.is_error?(rc) return rc end