/usr/bin/onequota is in opennebula 3.4.1-4.1ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189  | #!/usr/bin/env ruby
# -------------------------------------------------------------------------- #
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
#                                                                            #
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
# not use this file except in compliance with the License. You may obtain    #
# a copy of the License at                                                   #
#                                                                            #
# http://www.apache.org/licenses/LICENSE-2.0                                 #
#                                                                            #
# Unless required by applicable law or agreed to in writing, software        #
# distributed under the License is distributed on an "AS IS" BASIS,          #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
# See the License for the specific language governing permissions and        #
# limitations under the License.                                             #
#--------------------------------------------------------------------------- #
ONE_LOCATION=ENV["ONE_LOCATION"]
if !ONE_LOCATION
    RUBY_LIB_LOCATION="/usr/lib/one/ruby"
else
    RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
end
$: << RUBY_LIB_LOCATION
$: << RUBY_LIB_LOCATION+"/cli"
require 'command_parser'
require 'cli_helper'
require 'one_helper'
require 'quota'
require 'pp'
QUOTA_KEYS = Quota::DB_QUOTA_SCHEMA.keys
def show_table(values, usage=nil)
    size = usage ? 12 : 8
    values.sort!{|v1, v2| v1[:UID]<=>v2[:UID] }
    table=CLIHelper::ShowTable.new(nil, self) do
        column :UID, "ONE identifier for the User", :size=>4 do |d|
            d[:UID]
        end
        QUOTA_KEYS.each { |key|
            column key, "#{key} quota", :size=>size do |d|
                if usage
                    "#{usage[key].to_i}/#{d[key].to_i}"
                else
                    "#{d[key].to_i}"
                end
            end
        }
        default :UID, *QUOTA_KEYS
    end
    table.show(values)
end
cmd=CommandParser::CmdParser.new(ARGV) do
    usage "`onequota` <command> [<args>] [<options>]"
    version OpenNebulaHelper::ONE_VERSION
    quota = Quota.new
    ########################################################################
    # Global Options
    ########################################################################
    set :option, CommandParser::OPTIONS
    ########################################################################
    # Argument Formats
    ########################################################################
    quota_list_desc = <<-EOT.unindent
        List of quota keys, comma separated.
        Available quotas: #{QUOTA_KEYS.join(', ')}
    EOT
    set :format, :quota_list, quota_list_desc do |arg|
        arg_list = arg.split(',')
        rc = nil
        arg_list.collect! do |elem|
          sym = elem.upcase.to_sym
          if !QUOTA_KEYS.include?(sym)
            rc = -1, "#{elem} is not a valid quota"
            break
          end
          sym
        end
        rc ? rc : [0, arg_list]
    end
    set :format, :value_list, "List of quota values, comma separated." do |arg|
        arg_list = arg.split(',')
        arg_list.map! {|a| a.to_i }
        [0, arg_list]
    end
    set :format, :userid, OpenNebulaHelper.rname_to_id_desc("USER") do |arg|
        OpenNebulaHelper.rname_to_id(arg, "USER")
    end
    ########################################################################
    # Commands
    ########################################################################
    set_desc = <<-EOT.unindent
        Set a quota for a given user.
        Examples:
          onequota set 3 cpu 12
          onequota set 4 cpu,memory,storage 8,4096,10000
    EOT
    command :set, set_desc, :userid, :quota_list, :value_list do
        user_id, keys, values = args
        if keys.length != values.length
            exit_with_code -1, "The number of keys and values does not match"
        end
        values_hash = Hash.new
        keys.each_with_index { |k,i|
            values_hash[k] = values[i]
        }
        quota.set_quota(user_id, values_hash)
        exit_with_code 0
    end
    ########################################################################
    unset_desc = <<-EOT.unindent
        Unset a quota for a given user.
        Examples:
          onequota unset 3 cpu
          onequota unset 4 cpu,memory,storage
    EOT
    command :unset, unset_desc, :userid, :quota_list do
        user_id, keys = args
        values_hash = Hash.new
        keys.each_with_index { |k,i|
            values_hash[k] = 0
        }
        quota.set_quota(user_id, values_hash)
        exit_with_code 0
    end
    ########################################################################
    delete_desc = "Delete the defined quotas for the given user"
    command :delete, delete_desc, :userid do
        quota.delete_quota(args[0])
        exit_with_code 0
    end
    ########################################################################
    show_desc = "Show the user's quota and usage. (usage/quota)"
    FORCE={
        :name  => "force",
        :short => "-f",
        :large => "--force",
        :description => "Force the usage calculation instead of using the cache"
    }
    command :show, show_desc, :userid, :options=>[FORCE] do
        user_usage = quota.get_usage(args[0],nil,options[:force])
        user_quota = quota.get_quota(args[0])
        show_table([user_quota], user_usage)
        exit_with_code 0
    end
    ########################################################################
    list_desc = "List the defined quotas for all the users"
    command :list, list_desc do
        show_table(quota.get_quota)
        exit_with_code 0
    end
end
 |