.. Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with this work
for additional information# regarding copyright ownership. The ASF licenses this
file to you 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.


Quota Plugin 
=============

Quota service, while allowing for scalability, will make sure that the cloud is
not exploited by attacks, careless use and program errors. To address this
problem, employ the quota-enforcement service that allows resource
usage within certain bounds as defined by policies and available quotas for
various entities. Quota service extends the functionality of usage server to
provide a measurement for the resources used by the accounts and domains using a
common unit referred to as cloud currency in this document. It can be configured
to ensure that your usage won’t exceed the budget allocated to accounts/domain
in cloud currency. It will let user know how much of the cloud resources he is
using. It will help the cloud admins, if they want, to ensure that a user does
not go beyond his allocated quota. Per usage cycle if an account is found to be
exceeding its quota then it is locked. Locking an account means that it will not
be able to initiate a new resource allocation request, whether it is more
storage or an additional ip. To unlock an account you need to add more credit to it.
In case you want the locking to be disabled on global or on account scope those 
provisions are also provided. Needless to say quota service as well as any action
on the account is configurable.

Enabling the Quota Service 
----------------------------

Before installing and configuring the quota service you need to make sure that
the Usage Server has been installed. This requires extra steps beyond just
installing the CloudStack software. See Installing the Usage Server (Optional)
in the Advanced Installation Guide.

#. enable.usage.server: Set to true to enable usage server.

The quota plugin is disabled by default. To enable it goto Global Settings and
set the following global configuration to true:

#.  quota.enable.service

By default Quota service does not lock the accounts that have exceeded the quota
usage. To enable quota service to lock accounts set the following global
configuration to true:

#. quota.enable.enforcement

The other configurations that are there for quota service are as:

#. quota.currency.symbol : The symbol that is used before any currency 
   figure in various quota forms and reports. 
#. quota.usage.smtp.host: Quota SMTP host for sending quota alerts. 
#. quota.usage.smtp.port: Quota SMTP port. 
#. quota.usage.smtp.user: Quota SMTP user. 
#. quota.usage.smtp.password: Quota SMTP password. 
#. quota.usage.smtp.sender: Quota SMTP alert sender email address. 
#. quota.usage.smtp.useAuth: If true, use secure SMTP authentication when sending emails. 
#. quota.usage.smtp.connection.timeout: Quota SMTP server connection timeout duration.

There are several configuration variables that are inherited from usage server, 
these are listed below:

#. usage.aggregation.timezone

All these are described in details in Usage Server documentation.

Restart the Management Server and  the Usage Server to enable the set configuration 
values.

.. code:: bash

   service cloudstack-management restart 
   service cloudstack-usage restart

Once the quota service is running it will calculate the quota balance for each account.
The quota usage is calculated as per the quota tariff provided by the site administrator.


Quota Tariff
-------------

The following table shows all quota types for which you can specify tariff.

.. cssclass:: table-striped table-bordered table-hover

+------------------+-----------------------------------+-------------------------+
| Type ID          | Type Name                         | Tariff Description      |
|                  |                                   |                         |
+==================+===================================+=========================+
| 1                | RUNNING\_VM                       | One month of running    |
|                  |                                   | Compute-Month           |
+------------------+-----------------------------------+-------------------------+
| 2                | ALLOCATED\_VM                     | One month of allocated  |
|                  |                                   | VM                      |
+------------------+-----------------------------------+-------------------------+
| 3                | IP\_ADDRESS                       | Quota for a month of    |
|                  |                                   | allocated IP            |
+------------------+-----------------------------------+-------------------------+
| 4                | NETWORK\_BYTES\_SENT              | Quota for 1GB bytes sent|
+------------------+-----------------------------------+-------------------------+
| 5                | NETWORK\_BYTES\_RECEIVED          | Quota for 1GB bytes sent|
+------------------+-----------------------------------+-------------------------+
| 6                | VOLUME                            | Quota for 1 GB of       |
|                  |                                   | Volume use for a month  |
+------------------+-----------------------------------+-------------------------+
| 7                | TEMPLATE                          | Quota for 1 GB of       |
|                  |                                   |Template use for a month |
+------------------+-----------------------------------+-------------------------+
| 8                | ISO                               | Quota for 1 GB of       |
|                  |                                   | ISO use for a month     |
+------------------+-----------------------------------+-------------------------+
| 9                | SNAPSHOT                          | Quota for 1 GB of       |
|                  |                                   |SNAPSHOT use for a month |
+------------------+-----------------------------------+-------------------------+
| 11               | LOAD\_BALANCER\_POLICY            | Quota for load balancer |
|                  |                                   | policy month            |
+------------------+-----------------------------------+-------------------------+
| 12               | PORT\_FORWARDING\_RULE            |Quota for port forwarding|
|                  |                                   | policy month            |
+------------------+-----------------------------------+-------------------------+
| 13               | NETWORK\_OFFERING                 | Quota for network       |
|                  |                                   | Offering for a month    |
+------------------+-----------------------------------+-------------------------+
| 14               | VPN\_USERS                        | Quota for VPN usage     |
|                  |                                   |  for a month            |
+------------------+-----------------------------------+-------------------------+
| 15               | CPU\_CLOCK\_RATE                  | The tariff for using    |
|                  |                                   | 1 CPU i100 MHz clock    |
+------------------+-----------------------------------+-------------------------+
| 16               | CPU\_NUMBER                       | The quota tariff for    |
|                  |                                   | using 1 virtual CPU.    |
+------------------+-----------------------------------+-------------------------+
| 17               | MEMORY                            | The quota tariff for    |
|                  |                                   | using 1MB RAM size.     |
+------------------+-----------------------------------+-------------------------+

The quota tariff can be listed using listQuotaTariff API.

quotaTariff: Lists all quota tariff plans

The tariff for each of the above can be set by using the updateQuotaTariff API.

Quota Credits
-------------

The quota credit (quotaCredit) API lets you add or remove quota currency credits to
an account. With this API you can also control the quota enforcement policy at
account level. This will enable you to have some accounts where the quota policy is
not enforced. The overall quota enforcement is controlled by the quota.enable.enforcement
global setting.

In addition to above the quota API lets you can fine tune the alert generation by specifying
the quota threshold for each account. If not explictly stated, the threshold is taken as 80%
of the last deposit.

Quota Balance
--------------

Quota balance API states the start balance and end balance(optional) from a start date
to end date (optional).
 
Quota Statement
----------------
 
Quota statement for a period consist of the quota usage under various quota types for 
the given period from a start date to an end date.

Quota Monthly Statement
------------------------

Quota service emails the monthly quota statement for the last month at the beginning of
each month. For this service to work properly you need to ensure that the usage server
is running.
 
Quota Alert Management
-----------------------

Quota module also provides APIs to customize various email templates that are used to
alert account owners about quota going down below threshold and quota getting over.


All the above functionality is also available via quota UI plugin.
