CloudKitty installation and configuration
#########################################


Install from source
===================

There is no release of CloudKitty as of now, the installation can be done from
the git repository.

Retrieve and install CloudKitty:

::

    git clone git://git.openstack.org/openstack/cloudkitty
    cd cloudkitty
    python setup.py install

This procedure installs the ``cloudkitty`` python library and a few
executables:

* ``cloudkitty-api``: API service
* ``cloudkitty-processor``: Processing service (collecting and rating)
* ``cloudkitty-dbsync``: Tool to create and upgrade the database schema
* ``cloudkitty-storage-init``: Tool to initiate the storage backend
* ``cloudkitty-writer``: Reporting tool

Install sample configuration files:

::

    mkdir /etc/cloudkitty
    cp etc/cloudkitty/cloudkitty.conf.sample /etc/cloudkitty/cloudkitty.conf
    cp etc/cloudkitty/policy.json /etc/cloudkitty

Install from packages
=====================

Packages for RHEL/CentOS 7 and Ubuntu 14.04 are available for the Kilo release.

For RHEL/CentOS 7
-----------------

#. Enable the EPEL and RDO repositories for Kilo:

::

    yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
    yum install http://rdo.fedorapeople.org/openstack-kilo/rdo-release-kilo.rpm

#. Create the ``/etc/yum.repos.d/cloudkitty.repo`` configuration file to enable
   the CloudKitty repository:

.. code-block:: ini

    [cloudkitty]
    name=CloudKitty repository (Kilo)
    baseurl=http://archive.objectif-libre.com/cloudkitty/el7/kilo/
    gpgcheck=1
    gpgkey=http://archive.objectif-libre.com/ol.asc

#. Install the packages:

::

    yum install cloudkitty-api cloudkitty-processor cloudkitty-dashboard


For Ubuntu 14.04
----------------

#. Enable the Canonical cloud-archive repository for the Kilo release:

::

    apt-get install ubuntu-cloud-keyring
    echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/kilo main" > \
        /etc/apt/sources.list.d/cloudarchive-kilo.list


#. Install the CloudKitty repository public key and configure apt:

::

    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 71E414B3
    echo 'deb http://archive.objectif-libre.com/cloudkitty/ubuntu trusty/kilo main' > \
        /etc/apt/sources.list.d/cloudkitty-kilo.list
    apt-get update

#. Install the packages:

::

    apt-get install cloudkitty-api cloudkitty-processor cloudkitty-dashboard


Configure CloudKitty
====================

Edit :file:`/etc/cloudkitty/cloudkitty.conf` to configure CloudKitty.

The following shows the basic configuration items:

.. code-block:: ini

    [DEFAULT]
    verbose = True
    log_dir = /var/log/cloudkitty

    [oslo_messaging_rabbit]
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASSWORD
    rabbit_hosts = RABBIT_HOST

    [auth]
    username = cloudkitty
    password = CK_PASSWORD
    tenant = service
    region = RegionOne
    url = http://localhost:5000/v2.0

    [keystone_authtoken]
    username = cloudkitty
    password = CK_PASSWORD
    project_name = service
    region = RegionOne
    auth_url = http://localhost:5000/v2.0
    auth_plugin = password

    [database]
    connection = mysql://cloudkitty:CK_DBPASS@localhost/cloudkitty

    [keystone_fetcher]
    username = admin
    password = ADMIN_PASSWORD
    tenant = admin
    region = RegionOne
    url = http://localhost:5000/v2.0

    [ceilometer_collector]
    username = cloudkitty
    password = CK_PASSWORD
    tenant = service
    region = RegionOne
    url = http://localhost:5000


Setup the database and storage backend
======================================

MySQL/MariaDB is the recommended database engine. To setup the database, use
the ``mysql`` client:

::

    mysql -uroot -p << EOF
    CREATE DATABASE cloudkitty;
    GRANT ALL PRIVILEGES ON cloudkitty.* TO 'cloudkitty'@'localhost' IDENTIFIED BY 'CK_DBPASS';
    EOF


Run the database synchronisation scripts:

::

    cloudkitty-dbsync upgrade


Init the storage backend:

::

    cloudkitty-storage-init


Setup Keystone
==============

CloudKitty uses Keystone for authentication, and provides a ``rating`` service.

To integrate CloudKitty to Keystone, run the following commands (as OpenStack
administrator):

::

    keystone user-create --name cloudkitty --pass CK_PASS
    keystone user-role-add --user cloudkitty --role admin --tenant service


Give the ``rating`` role to ``cloudkitty`` for each tenant that should be
handled by CloudKitty:

::

    keystone role-create --name rating
    keystone user-role-add --user cloudkitty --role rating --tenant XXX


Create the ``rating`` service and its endpoints:

::

    keystone service-create --name CloudKitty --type rating
    keystone endpoint-create --service-id RATING_SERVICE_ID \
        --publicurl http://localhost:8888 \
        --adminurl http://localhost:8888 \
        --internalurl http://localhost:8888

Start CloudKitty
================

Start the API and processing services:

::

    cloudkitty-api --config-file /etc/cloudkitty/cloudkitty.conf
    cloudkitty-processor --config-file /etc/cloudkitty/cloudkitty.conf


Horizon integration
===================

Retrieve and install CloudKitty's dashboard:

::

    git clone git://git.openstack.org/openstack/cloudkitty-dashboard
    cd cloudkitty-dashboard
    python setup.py install


Find where the python packages are installed:

::

    PY_PACKAGES_PATH=`pip --version | cut -d' ' -f4`


Then add the enabled file to the horizon settings or installation. Depending on
your setup, you might need to add it to ``/usr/share`` or directly in the
horizon python package:

::

    # If horizon is installed by packages:
    ln -s $PY_PACKAGES_PATH/cloudkittydashboard/enabled/_[0-9]*.py \
    /usr/share/openstack-dashboard/openstack_dashboard/enabled/

    # Directly from sources:
    ln -s $PY_PACKAGES_PATH/cloudkittydashboard/enabled/_[0-9]*.py \
    $PY_PACKAGES_PATH/openstack_dashboard/enabled/


Restart the web server hosting Horizon.
