172 lines
5.4 KiB
Markdown
172 lines
5.4 KiB
Markdown
# Openstack-Artifice
|
|
|
|
## What
|
|
|
|
Artifice is a prototype of a data aggregation and billing generation layer, intended to tightly couple with the Openstack-Ceilometer
|
|
project.
|
|
|
|
The Artifice layer is intended to store computed values for a known date range, and provide an easy, consistent API for injecting
|
|
billing information into arbitrary ERP systems; from CSV through OpenERP.
|
|
Time-series data for a given time period, a month, is compressed into a single billable item for that month, based on datacenter-based
|
|
rates information.
|
|
|
|
By not imposing logic beyond the concept of a dated invoice that covers a given range, Artifice tries to be unopinionated on how ERP
|
|
must be handled.
|
|
|
|
What the ranges are, and how Ceilometer data is aggregated is intended to be configurable.
|
|
|
|
Artifice enforces its own rigid Postgresql-backed data store, used to store what data has been billed, and for what time range. This is used to prevent repeated billing of a range of data.
|
|
|
|
The Artifice data store will prevent overlapping bills for a given tenant and resource ever being stored, while still allowing for regeneration of a given invoice statement.
|
|
|
|
## Requirements:
|
|
|
|
Artifice requires:
|
|
* Postgresql >= 9.1.
|
|
* Python >=2.7.5, <3.0
|
|
* Python modules:
|
|
* pyaml
|
|
* mock
|
|
* requests
|
|
* sqlalchemy >= 0.8.0
|
|
* OpenStack Grizzly. *currently untested with Havana*
|
|
* Openstack-Keystone
|
|
* Openstack-Ceilometer
|
|
|
|
Despite using SQLAlchemy, Artifice does NOT currently support SQLite or MySQL. Instead, it takes advantage of range exclusive
|
|
columns in Postgres, which is not supported on other systems.
|
|
|
|
## Configuration
|
|
|
|
Configuring Artifice is handled through its primary configuration file, stored in `/etc/openstack/artifice.conf`.
|
|
|
|
This is a yaml-format config file, in the format of:
|
|
|
|
# Defines the database connection logic. This will be converted to a standard
|
|
# database connection string.
|
|
database:
|
|
database: artifice
|
|
host: localhost
|
|
password: aurynn
|
|
port: '5432'
|
|
username: aurynn
|
|
# Configuration passed to the invoice system. This is an arbitrary dictionary
|
|
# and may be anything that the invoice object may require.
|
|
# This example is intended for the CSV module
|
|
invoice:config:
|
|
delimiter: ','
|
|
output_file: '%(tenant)s-%(start)s-%(end)s.csv'
|
|
output_path: /opt/openstack/artifice/invoices
|
|
row_layout:
|
|
- location
|
|
- type
|
|
- start
|
|
- end
|
|
- amount
|
|
- cost
|
|
main:
|
|
# What invoice object we should be using
|
|
invoice:object: billing.csv_invoice:Csv
|
|
# Configuration for OpenStack
|
|
openstack:
|
|
# Location of the Keystone host
|
|
authentication_url: http://foo
|
|
# Location of the Ceilometer host
|
|
ceilometer_url: http://localhost:8777
|
|
# Default tenant to connect to. As this
|
|
default_tenant: demo
|
|
# Username to use
|
|
username: foo
|
|
# Password
|
|
password: bar
|
|
|
|
A sample configuration is included, but **must** be modified appropriately.
|
|
|
|
## Setup of an Openstack environment
|
|
|
|
As mentioned, Artifice relies entirely on the Ceilometer project for its metering and measurement collection.
|
|
|
|
All development has (so far) occurred using a DevStack installation, but a production Ceilometer installation should work as expected.
|
|
|
|
### DevStack
|
|
|
|
Installation on DevStack is relatively easy.
|
|
First, prep the VM with DevStack.
|
|
Since we need Ceilometer installed, we recommend a DevStack localrc similar to:
|
|
|
|
ADMIN_PASSWORD=openstack
|
|
MYSQL_PASSWORD=openstack
|
|
RABBIT_PASSWORD=openstack
|
|
SERVICE_PASSWORD=openstack
|
|
|
|
# Enable Quantum, on Grizzly
|
|
disable_service n-net
|
|
enable_service q-svc
|
|
enable_service q-agt
|
|
enable_service q-dhcp
|
|
enable_service q-l3
|
|
enable_service q-meta
|
|
enable_service quantum
|
|
|
|
# Enable Neutron
|
|
|
|
# Enable Swift
|
|
enable_service swift
|
|
|
|
# Enable ceilometer!
|
|
enable_service ceilometer-acompute,ceilometer-acentral,ceilometer-collector,ceilometer-api
|
|
|
|
A localrc file can be found at **devstack/localrc**
|
|
|
|
Create your VM and install DevStack into it. A Vagrant-compatible bootstrap script that will install most of the necessary components is included in this distribution, at **devstack/bootstrap.sh**
|
|
|
|
Install Artifice and the packages it depends on from the Debian repositories.
|
|
|
|
Artifices' post-intallation hooks will have set up the Postgres database as expected, and Artifice will be ready to run.
|
|
|
|
### Production OpenStack
|
|
|
|
FIXME :)
|
|
|
|
## Using Artifice
|
|
|
|
As mentioned, Artifice comes with a command-line tool to provide some simple commands.
|
|
|
|
Actions one can perform with Artifice are:
|
|
|
|
* *Bill*; Given a date range, generates the current usage bill for a tenant. This will result in a CSV file.
|
|
* *usage*
|
|
|
|
|
|
## Running Tests
|
|
|
|
The tests are currently expected to run with Nosetests, against a pre-provisioned database.
|
|
|
|
### Expected environment
|
|
|
|
The test environment expects that the *DATABASE_URL* envar will be populated.
|
|
*DATABASE_URL* **must** be populated in the form:
|
|
|
|
export DATABASE_URL=postgres://user:password@server/database
|
|
|
|
|
|
Provisioning the database is handled via:
|
|
|
|
|
|
|
|
### Future things
|
|
|
|
Eventually we also want Artifice to:
|
|
|
|
* List current usage numbers
|
|
* List historic usage numbers
|
|
* Re-generate billing information
|
|
|
|
Things we may eventually want include:
|
|
|
|
* Listing this months' total usage of a given resource
|
|
* Listing total usage by datacentre
|
|
* Listing all usage ever
|
|
* A web API for everything
|
|
* A web API for rates information
|