class OpenNebula::Host
Constants
- HOST_METHODS
Constants and Class Methods
- HOST_STATES
- 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 58 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 69 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 vnm [String] Name of the vnm_driver (networking) @param cluster_id [String] Id of the cluster
@return [Integer, OpenNebula::Error] the new ID in case of
success, error otherwise
# File lib/opennebula/host.rb, line 97 def allocate(hostname,im,vmm,vnm,cluster_id=ClusterPool::NONE_CLUSTER_ID) super(HOST_METHODS[:allocate],hostname,im,vmm,vnm,cluster_id) end
Deletes the Host
# File lib/opennebula/host.rb, line 102 def delete() super(HOST_METHODS[:delete]) end
Disables the Host
# File lib/opennebula/host.rb, line 112 def disable() set_enabled(false) end
Enables the Host
# File lib/opennebula/host.rb, line 107 def enable() set_enabled(true) end
# File lib/opennebula/host.rb, line 116 def flush() 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'] vm.resched end end end
Imports a wild VM from the host and puts it in running state
@param name [String] Name of the VM to import
@return [nil, OpenNebula::Error] nil in case of success, Error
otherwise
# File lib/opennebula/host.rb, line 197 def import_wild(name) 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) rc = vm.allocate(template) return rc if OpenNebula.is_error?(rc) vm.deploy(id, false) end
Get importable wild VMs in the host
# File lib/opennebula/host.rb, line 253 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 81 def info() super(HOST_METHODS[:info], 'HOST') 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 167 def monitoring(xpath_expressions) return super(HOST_METHODS[:monitoring], 'HOST', 'LAST_MON_TIME', 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 175 def monitoring_xml() return Error.new('ID not defined') if !@pe_id return @client.call(HOST_METHODS[:monitoring], @pe_id) end
Returns the state of the Host (string value)
# File lib/opennebula/host.rb, line 237 def short_state_str SHORT_HOST_STATES[state_str] end
Returns the state of the Host (numeric value)
# File lib/opennebula/host.rb, line 227 def state self['STATE'].to_i end
Returns the state of the Host (string value)
# File lib/opennebula/host.rb, line 232 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 243 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 144 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 248 def wilds [self.to_hash['HOST']['TEMPLATE']['VM']].flatten.compact end
Private Instance Methods
# File lib/opennebula/host.rb, line 258 def set_enabled(enabled) return Error.new('ID not defined') if !@pe_id rc = @client.call(HOST_METHODS[:enable], @pe_id, enabled) rc = nil if !OpenNebula.is_error?(rc) return rc end