class OneGroupHelper

Public Class Methods

conf_file() click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 25
def self.conf_file
    "onegroup.yaml"
end
rname() click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 21
def self.rname
    "GROUP"
end

Public Instance Methods

create_complete_resource(group_hash) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 51
def create_complete_resource(group_hash)
    group = factory
    rc = group.create(group_hash)

    if OpenNebula.is_error?(rc)
        return -1, rc.message
    end

    puts "ID: #{group.id}"
    return 0
end
create_resource(options, &block) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 29
def create_resource(options, &block)
    group = factory

    rc = block.call(group)

    if OpenNebula.is_error?(rc)
        return -1, rc.message
    else
        puts "ID: #{group.id.to_s}"
    end

    puts "Creating default ACL rules: #{GROUP_DEFAULT_ACLS}" if options[:verbose]

    exit_code , msg = group.create_default_acls

    if OpenNebula.is_error?(exit_code)
        return -1, exit_code.message
    end

    exit_code.to_i
end
format_pool(options) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 63
def format_pool(options)
    config_file = self.class.table_conf

    table = CLIHelper::ShowTable.new(config_file, self) do
        def pool_default_quotas(path)
            @data.dsearch('/GROUP_POOL/DEFAULT_GROUP_QUOTAS/'+path)
        end

        def quotas
            if !defined?(@quotas)
                quotas = @data.dsearch('GROUP_POOL/QUOTAS')
                @quotas = Hash.new

                if (!quotas.nil?)
                    quotas = [quotas].flatten

                    quotas.each do |q|
                        @quotas[q['ID']] = q
                    end
                end
            end
            @quotas
        end

        column :ID, "ONE identifier for the Group", :size=>4 do |d|
            d["ID"]
        end

        column :NAME, "Name of the Group", :left, :size=>29 do |d|
            d["NAME"]
        end

        column :USERS, "Number of Users in this group", :size=>5 do |d|
            ids = d["USERS"]["ID"]

            case ids
            when String
                "1"
            when Array
                ids.size
            else
                "0"
            end
        end

        column :VMS , "Number of VMS", :size=>9 do |d|
            begin
                q = quotas[d['ID']]

                if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
                    q['VM_QUOTA']['VM'] = {
                        "VMS"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "VMS_USED"              => "0",
                        "CPU"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "CPU_USED"              => "0",
                        "MEMORY"                => OneQuotaHelper::LIMIT_DEFAULT,
                        "MEMORY_USED"           => "0",
                        "RUNNING_VMS"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_VMS_USED"      => "0",
                        "RUNNING_CPU"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_CPU_USED"      => "0",
                        "RUNNING_MEMORY"        => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_MEMORY_USED"   => "0",
                        "SYSTEM_DISK_SIZE"      => OneQuotaHelper::LIMIT_DEFAULT,
                        "SYSTEM_DISK_SIZE_USED" => "0"
                    }

                    quotas[d['ID']] = q
                end

                limit = q['VM_QUOTA']['VM']["VMS"]

                if limit == OneQuotaHelper::LIMIT_DEFAULT
                    limit = pool_default_quotas("VM_QUOTA/VM/VMS")
                    limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
                end

                if limit == OneQuotaHelper::LIMIT_UNLIMITED
                    "%3d /   -" % [q['VM_QUOTA']['VM']["VMS_USED"]]
                else
                    "%3d / %3d" % [q['VM_QUOTA']['VM']["VMS_USED"], limit]
                end

            rescue NoMethodError
                "-"
            end
        end

        column :MEMORY, "Total memory allocated to user VMs", :size=>17 do |d|
            begin
                q = quotas[d['ID']]

                if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
                    q['VM_QUOTA']['VM'] = {
                        "VMS"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "VMS_USED"              => "0",
                        "CPU"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "CPU_USED"              => "0",
                        "MEMORY"                => OneQuotaHelper::LIMIT_DEFAULT,
                        "MEMORY_USED"           => "0",
                        "RUNNING_VMS"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_VMS_USED"      => "0",
                        "RUNNING_CPU"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_CPU_USED"      => "0",
                        "RUNNING_MEMORY"        => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_MEMORY_USED"   => "0",
                        "SYSTEM_DISK_SIZE"      => OneQuotaHelper::LIMIT_DEFAULT,
                        "SYSTEM_DISK_SIZE_USED" => "0"
                    }

                    quotas[d['ID']] = q
                end

                limit = q['VM_QUOTA']['VM']["MEMORY"]

                if limit == OneQuotaHelper::LIMIT_DEFAULT
                    limit = pool_default_quotas("VM_QUOTA/VM/MEMORY")
                    limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
                end

                if limit == OneQuotaHelper::LIMIT_UNLIMITED
                    "%7s /       -" % [
                        OpenNebulaHelper.unit_to_str(q['VM_QUOTA']['VM']["MEMORY_USED"].to_i,{},"M")]
                else
                    "%7s / %7s" % [
                        OpenNebulaHelper.unit_to_str(q['VM_QUOTA']['VM']["MEMORY_USED"].to_i,{},"M"),
                        OpenNebulaHelper.unit_to_str(limit.to_i,{},"M")]
                end

            rescue NoMethodError
                "-"
            end
        end

        column :CPU, "Total CPU allocated to user VMs", :size=>11 do |d|
            begin
                q = quotas[d['ID']]

                if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
                    q['VM_QUOTA']['VM'] = {
                        "VMS"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "VMS_USED"              => "0",
                        "CPU"                   => OneQuotaHelper::LIMIT_DEFAULT,
                        "CPU_USED"              => "0",
                        "MEMORY"                => OneQuotaHelper::LIMIT_DEFAULT,
                        "MEMORY_USED"           => "0",
                        "RUNNING_VMS"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_VMS_USED"      => "0",
                        "RUNNING_CPU"           => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_CPU_USED"      => "0",
                        "RUNNING_MEMORY"        => OneQuotaHelper::LIMIT_DEFAULT,
                        "RUNNING_MEMORY_USED"   => "0",
                        "SYSTEM_DISK_SIZE"      => OneQuotaHelper::LIMIT_DEFAULT,
                        "SYSTEM_DISK_SIZE_USED" => "0"
                    }

                    quotas[d['ID']] = q
                end

                limit = q['VM_QUOTA']['VM']["CPU"]

                if limit == OneQuotaHelper::LIMIT_DEFAULT
                    limit = pool_default_quotas("VM_QUOTA/VM/CPU")
                    limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
                end

                if limit == OneQuotaHelper::LIMIT_UNLIMITED
                    "%3.1f /    -" % [q['VM_QUOTA']['VM']["CPU_USED"]]
                else
                    "%3.1f / %3.1f" % [q['VM_QUOTA']['VM']["CPU_USED"], limit]
                end

            rescue NoMethodError
                "-"
            end
        end

        default :ID, :NAME, :USERS, :VMS, :MEMORY, :CPU
    end

    table
end
parse_template(tmpl_str) click to toggle source

Parses a OpenNebula template string and turns it into a Hash @param [String] tmpl_str template @return [Hash, Zona::Error] Hash or Error

# File lib/one_helper/onegroup_helper.rb, line 249
def parse_template(tmpl_str)
    name_reg     =/[\w\d_-]+/
    variable_reg =/\s*(#{name_reg})\s*=\s*/
    single_variable_reg =/^#{variable_reg}([^\[]+?)(#.*)?$/

    tmpl                      = Hash.new
    tmpl['user']              = Hash.new

    tmpl_str.scan(single_variable_reg) do | m |
        key   = m[0].strip.downcase
        value = m[1].strip.gsub("\"","")
        case key
            when "admin_user_name"
                tmpl['user']['name']=value
            when "admin_user_password"
                tmpl['user']['password']=value
            when "admin_user_auth_driver"
                tmpl['user']['auth_driver']=value
            else
                tmpl[key] = value
        end
    end

    return tmpl
end
pool_default_quotas(path) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 67
def pool_default_quotas(path)
    @data.dsearch('/GROUP_POOL/DEFAULT_GROUP_QUOTAS/'+path)
end
quotas() click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 71
def quotas
    if !defined?(@quotas)
        quotas = @data.dsearch('GROUP_POOL/QUOTAS')
        @quotas = Hash.new

        if (!quotas.nil?)
            quotas = [quotas].flatten

            quotas.each do |q|
                @quotas[q['ID']] = q
            end
        end
    end
    @quotas
end

Private Instance Methods

factory(id=nil) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 277
def factory(id=nil)
    if id
        OpenNebula::Group.new_with_id(id, @client)
    else
        xml=OpenNebula::Group.build_xml
        OpenNebula::Group.new(xml, @client)
    end
end
factory_pool(user_flag=-2) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 286
def factory_pool(user_flag=-2)
    #TBD OpenNebula::UserPool.new(@client, user_flag)
    @group_pool = OpenNebula::GroupPool.new(@client)
    return @group_pool
end
format_resource(group, options = {}) click to toggle source
# File lib/one_helper/onegroup_helper.rb, line 292
def format_resource(group, options = {})
    system = System.new(@client)

    str="%-15s: %-20s"
    str_h1="%-80s"

    CLIHelper.print_header(str_h1 % "GROUP #{group['ID']} INFORMATION")
    puts str % ["ID",   group.id.to_s]
    puts str % ["NAME", group.name]
    puts

    CLIHelper.print_header(str_h1 % "GROUP TEMPLATE",false)
    puts group.template_str
    puts

    admin_ids = group.admin_ids

    CLIHelper::ShowTable.new(nil, self) do
        column :"USER ID", "", :right, :size=>7 do |d|
            d
        end

        column :"ADMIN", "", :left, :size=>5 do |d|
            if (group.admin_ids.include?(d))
                "*"
            else
                ""
            end
        end
    end.show(group.user_ids, {})

    group_hash = group.to_hash

    default_quotas = nil

    group.each('/GROUP/DEFAULT_GROUP_QUOTAS') { |elem|
        default_quotas = elem
    }

    helper = OneQuotaHelper.new(@client)
    helper.format_quota(group_hash['GROUP'], default_quotas, group.id)
end