class OpenNebula::VirtualMachinePool

Constants

INFO_ALL_VM
INFO_NOT_DONE

Constants for info queries (include/RequestManagerPoolInfoFilter.h)

VM_POOL_METHODS

Constants and Class attribute accessors

Public Class Methods

new(client, user_id=0) click to toggle source

client a Client object that represents a XML-RPC connection user_id is to refer to a Pool with VirtualMachines from that user

Calls superclass method OpenNebula::Pool.new
# File lib/opennebula/virtual_machine_pool.rb, line 46
def initialize(client, user_id=0)
    super('VM_POOL','VM',client)

    @user_id  = user_id
end

Public Instance Methods

accounting(filter_flag=INFO_ALL, options={}) click to toggle source

Retrieves the accounting data for all the VMs in the pool

@param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE
or user_id

@param [Hash] options @option params [Integer] :start_time Start date and time to take into account,

if no start_time is required use -1

@option params [Integer] :end_time End date and time to take into account,

if no end_time is required use -1

@option params [Integer] :host Host id to filter the results @option params [Integer] :group Group id to filter the results @option params [String] :xpath Xpath expression to filter the results.

For example: HISTORY[ETIME>0]

@option params [String] :order_by_1 Xpath expression to group the @option params [String] :order_by_2 Xpath expression to group the

returned hash. This will be the second level of the hash

@return [Hash, OpenNebula::Error]

The first level hash uses the :order_by_1 values as keys, and
as value a Hash with the :order_by_2 values and the HISTORY_RECORDS

@example

{"HISTORY_RECORDS"=>
    {"HISTORY"=> [
      {"OID"=>"0",
       "SEQ"=>"0",
       "HOSTNAME"=>"dummy",
       ...
      },
      {"OID"=>"0",
       "SEQ"=>"0",
       "HOSTNAME"=>"dummy",

@example :order_by_1 => VM/UID

{"0"=>
    {"HISTORY_RECORDS"=>
       {"HISTORY"=> [
         {"OID"=>"0",
          "SEQ"=>"0",
          "HOSTNAME"=>"dummy",
          ...
         },
         {"OID"=>"0",
          "SEQ"=>"0",
          "HOSTNAME"=>"dummy",

@example :order_by_1 => VM/UID, :order_by_2 => VM/ID

{"0"=>
    {"0"=>
        {"HISTORY_RECORDS"=>
            {"HISTORY"=> [
              {"OID"=>"0",
               "SEQ"=>"0",
               "HOSTNAME"=>"dummy",
               ...
              },
              {"OID"=>"0",
               "SEQ"=>"0",
               "HOSTNAME"=>"dummy",
# File lib/opennebula/virtual_machine_pool.rb, line 249
def accounting(filter_flag=INFO_ALL, options={})
    acct_hash = Hash.new

    rc = build_accounting(filter_flag, options) do |history|
        hash = acct_hash

        if options[:order_by_1]
            id_1 = history[options[:order_by_1]]
            acct_hash[id_1] ||= Hash.new

            if options[:order_by_2]
                id_2 = history[options[:order_by_2]]
                acct_hash[id_1][id_2] ||= Hash.new

                hash = acct_hash[id_1][id_2]
            else
                hash = acct_hash[id_1]
            end
        end

        hash["HISTORY_RECORDS"] ||= Hash.new
        hash["HISTORY_RECORDS"]["HISTORY"] ||= Array.new
        hash["HISTORY_RECORDS"]["HISTORY"] << history.to_hash['HISTORY']
    end

    return rc if OpenNebula.is_error?(rc)

    acct_hash
end
accounting_xml(filter_flag=INFO_ALL, options={}) click to toggle source

Retrieves the accounting data for all the VMs in the pool in xml

@param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE
or user_id

@param [Hash] options @option params [Integer] :start_time Start date and time to take into account,

if no start_time is required use -1

@option params [Integer] :end_time End date and time to take into account,

if no end_time is required use -1

@option params [Integer] :host Host id to filter the results @option params [Integer] :group Group id to filter the results @option params [String] :xpath Xpath expression to filter the results.

For example: HISTORY[ETIME>0]

@return [String] the xml representing the accounting data

# File lib/opennebula/virtual_machine_pool.rb, line 295
def accounting_xml(filter_flag=INFO_ALL, options={})
    acct_hash = Hash.new
    xml_str = "<HISTORY_RECORDS>\n"

    rc = build_accounting(filter_flag, options) do |history|
        xml_str << history.to_xml
    end

    return rc if OpenNebula.is_error?(rc)

    xml_str << "\n</HISTORY_RECORDS>"
    xml_str
end
calculate_showback(start_month, start_year, end_month, end_year) click to toggle source

Processes all the history records, and stores the monthly cost for each VM

@param [Integer] start_month First month (+year) to process. January is 1.
Use -1 to unset
@param [Integer] start_year First year (+month) to process. e.g. 2014.
Use -1 to unset
@param [Integer] end_month Last month (+year) to process. January is 1.
Use -1 to unset
@param [Integer] end_year Last year (+month) to process. e.g. 2014.
Use -1 to unset
# File lib/opennebula/virtual_machine_pool.rb, line 178
def calculate_showback(start_month, start_year, end_month, end_year)
    start_month ||= -1
    start_year  ||= -1
    end_month   ||= -1
    end_year    ||= -1

    return @client.call(VM_POOL_METHODS[:calculate_showback],
                        start_month, start_year, end_month, end_year)
end
factory(element_xml) click to toggle source

Default Factory Method for the Pools

# File lib/opennebula/virtual_machine_pool.rb, line 53
def factory(element_xml)
    OpenNebula::VirtualMachine.new(element_xml,@client)
end
info(*args) click to toggle source

Retrieves all or part of the VirtualMachines in the pool. No arguments, returns the not-in-done VMs for the user

user_id, start_id, end_id
user_id, start_id, end_id, state
# File lib/opennebula/virtual_machine_pool.rb, line 65
def info(*args)
    case args.size
        when 0
            info_filter(VM_POOL_METHODS[:info],
                        @user_id,
                        -1,
                        -1,
                        INFO_NOT_DONE)
        when 1
            info_filter(VM_POOL_METHODS[:info],
                        args[0],
                        -1,
                        -1,
                        INFO_NOT_DONE)
        when 3
            info_filter(VM_POOL_METHODS[:info],
                        args[0],
                        args[1],
                        args[2],
                        INFO_NOT_DONE)
        when 4
            info_filter(VM_POOL_METHODS[:info],
                        args[0],
                        args[1],
                        args[2],
                        args[3])
    end
end
Also aliased as: info!
info!(*args)
Alias for: info
info_all() click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 94
def info_all()
    return info_filter(VM_POOL_METHODS[:info],
                       INFO_ALL,
                       -1,
                       -1,
                       INFO_NOT_DONE)
end
Also aliased as: info_all!
info_all!()
Alias for: info_all
info_group() click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 110
def info_group()
    return info_filter(VM_POOL_METHODS[:info],
                       INFO_GROUP,
                       -1,
                       -1,
                       INFO_NOT_DONE)
end
Also aliased as: info_group!
info_group!()
Alias for: info_group
info_mine() click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 102
def info_mine()
    return info_filter(VM_POOL_METHODS[:info],
                       INFO_MINE,
                       -1,
                       -1,
                       INFO_NOT_DONE)
end
Also aliased as: info_mine!
info_mine!()
Alias for: info_mine
monitoring(xpath_expressions, filter_flag=INFO_ALL) click to toggle source

Retrieves the monitoring data for all the VMs in the pool

@param [Array<String>] xpath_expressions Elements to retrieve. @param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE.

@return [Hash<String, <Hash<String, Array<Array<int>>>>>,

OpenNebula::Error] The first level hash uses the VM ID as keys, and
as value a Hash with the requested xpath expressions,
and an Array of 'timestamp, value'.

@example

vm_pool.monitoring( ['CPU', 'NET_TX', 'TEMPLATE/CUSTOM_PROBE'] )

{"1"=>
 {"CPU"=>
   [["1337608271", "0"], ["1337608301", "0"], ["1337608331", "0"]],
  "NET_TX"=>
   [["1337608271", "510"], ["1337608301", "510"], ["1337608331", "520"]],
  "TEMPLATE/CUSTOM_PROBE"=>
   []},

"0"=>
 {"CPU"=>
   [["1337608271", "0"], ["1337608301", "0"], ["1337608331", "0"]],
  "NET_TX"=>
   [["1337608271", "510"], ["1337608301", "510"], ["1337608331", "520"]],
  "TEMPLATE/CUSTOM_PROBE"=>
   []}}
Calls superclass method OpenNebula::Pool#monitoring
# File lib/opennebula/virtual_machine_pool.rb, line 152
def monitoring(xpath_expressions, filter_flag=INFO_ALL)
    return super(VM_POOL_METHODS[:monitoring],
        'VM', 'LAST_POLL', xpath_expressions, filter_flag)
end
monitoring_xml(filter_flag=INFO_ALL) click to toggle source

Retrieves the monitoring data for all the VMs in the pool, in XML

@param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE.

@return [String] VM monitoring data, in XML

# File lib/opennebula/virtual_machine_pool.rb, line 163
def monitoring_xml(filter_flag=INFO_ALL)
    return @client.call(VM_POOL_METHODS[:monitoring], filter_flag)
end
showback(filter_flag=INFO_ALL, options={}) click to toggle source

Retrieves the showback data for all the VMs in the pool

@param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE
or user_id

@param [Hash] options @option params [Integer] :start_year First month (+year) to take

into account, if no start time is required use -1

@option params [Integer] :start_month First year (+month) to take

into account, if no start time is required use -1

@option params [Integer] :end_year Last month (+year) to take

into account, if no end time is required use -1

@option params [Integer] :end_month Last year (+month) to take

into account, if no end time is required use -1

@option params [Integer] :group Group id to filter the results @option params [String] :xpath Xpath expression to filter the results.

For example: SHOWBACK[TOTAL_COST>0]

@option params [String] :order_by_1 Xpath expression to group the @option params [String] :order_by_2 Xpath expression to group the

returned hash. This will be the second level of the hash

@return [Hash, OpenNebula::Error]

The first level hash uses the :order_by_1 values as keys, and
as value a Hash with the :order_by_2 values and the SHOWBACK_RECORDS
# File lib/opennebula/virtual_machine_pool.rb, line 333
def showback(filter_flag=INFO_ALL, options={})
    data_hash = Hash.new

    rc = build_showback(filter_flag, options) do |record|
        hash = data_hash

        if options[:order_by_1]
            id_1 = record[options[:order_by_1]]
            data_hash[id_1] ||= Hash.new

            if options[:order_by_2]
                id_2 = record[options[:order_by_2]]
                data_hash[id_1][id_2] ||= Hash.new

                hash = data_hash[id_1][id_2]
            else
                hash = data_hash[id_1]
            end
        end

        hash["SHOWBACK_RECORDS"] ||= Hash.new
        hash["SHOWBACK_RECORDS"]["SHOWBACK"] ||= Array.new
        hash["SHOWBACK_RECORDS"]["SHOWBACK"] << record.to_hash['SHOWBACK']
    end

    return rc if OpenNebula.is_error?(rc)

    data_hash
end
showback_xml(filter_flag=INFO_ALL, options={}) click to toggle source

Retrieves the showback data for all the VMs in the pool, in xml

@param [Integer] filter_flag Optional filter flag to retrieve all or

part of the Pool. Possible values: INFO_ALL, INFO_GROUP, INFO_MINE
or user_id

@param [Hash] options @option params [Integer] :start_year First month (+year) to take

into account, if no start time is required use -1

@option params [Integer] :start_month First year (+month) to take

into account, if no start time is required use -1

@option params [Integer] :end_year Last month (+year) to take

into account, if no end time is required use -1

@option params [Integer] :end_month Last year (+month) to take

into account, if no end time is required use -1

@option params [Integer] :group Group id to filter the results @option params [String] :xpath Xpath expression to filter the results.

For example: SHOWBACK[TOTAL_COST>10]

@return [String] the xml representing the showback data

# File lib/opennebula/virtual_machine_pool.rb, line 382
def showback_xml(filter_flag=INFO_ALL, options={})
    xml_str = "<SHOWBACK_RECORDS>\n"

    rc = build_showback(filter_flag, options) do |showback|
        xml_str << showback.to_xml
    end

    return rc if OpenNebula.is_error?(rc)

    xml_str << "\n</SHOWBACK_RECORDS>"
    xml_str
end

Private Instance Methods

build_accounting(filter_flag, options, &block) click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 397
def build_accounting(filter_flag, options, &block)
    xml_str = @client.call(VM_POOL_METHODS[:accounting],
                filter_flag,
                options[:start_time],
                options[:end_time])

    return xml_str if OpenNebula.is_error?(xml_str)

    xmldoc = XMLElement.new
    xmldoc.initialize_xml(xml_str, 'HISTORY_RECORDS')

    xpath_array = Array.new
    xpath_array << "HISTORY[HID=#{options[:host]}]" if options[:host]
    xpath_array << "HISTORY[VM/GID=#{options[:group]}]" if options[:group]
    xpath_array << options[:xpath] if options[:xpath]

    if xpath_array.empty?
        xpath_str = "HISTORY"
    else
        xpath_str = xpath_array.join(' | ')
    end

    acct_hash = Hash.new

    xmldoc.each(xpath_str) do |history|
        block.call(history)
    end

    acct_hash
end
build_showback(filter_flag, options, &block) click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 428
def build_showback(filter_flag, options, &block)
    xml_str = @client.call(VM_POOL_METHODS[:showback],
                filter_flag,
                options[:start_month],
                options[:start_year],
                options[:end_month],
                options[:end_year])

    return xml_str if OpenNebula.is_error?(xml_str)

    xmldoc = XMLElement.new
    xmldoc.initialize_xml(xml_str, 'SHOWBACK_RECORDS')

    xpath_array = Array.new
    xpath_array << "SHOWBACK[GID=#{options[:group]}]" if options[:group]
    xpath_array << options[:xpath] if options[:xpath]

    if xpath_array.empty?
        xpath_str = "SHOWBACK"
    else
        xpath_str = xpath_array.join(' | ')
    end

    data_hash = Hash.new

    xmldoc.each(xpath_str) do |showback|
        block.call(showback)
    end

    data_hash
end
info_filter(xml_method, who, start_id, end_id, state) click to toggle source
# File lib/opennebula/virtual_machine_pool.rb, line 460
def info_filter(xml_method, who, start_id, end_id, state)
    return xmlrpc_info(xml_method, who, start_id, end_id, state)
end