This file is indexed.

/usr/bin/onequota is in opennebula 3.2.1-2.

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