.. 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.
