aboutsummaryrefslogtreecommitdiffstats
path: root/meta-openstack
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openstack')
-rw-r--r--meta-openstack/recipes-devtools/python/python-rally/deployment-existing.json9
-rw-r--r--meta-openstack/recipes-devtools/python/python-rally/rally.conf446
-rw-r--r--meta-openstack/recipes-devtools/python/python-rally/rally.init95
-rw-r--r--meta-openstack/recipes-devtools/python/python-rally/task-example.json17
-rw-r--r--meta-openstack/recipes-devtools/python/python-rally_git.bb145
5 files changed, 712 insertions, 0 deletions
diff --git a/meta-openstack/recipes-devtools/python/python-rally/deployment-existing.json b/meta-openstack/recipes-devtools/python/python-rally/deployment-existing.json
new file mode 100644
index 00000000..82498600
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-rally/deployment-existing.json
@@ -0,0 +1,9 @@
+{
+ "type": "ExistingCloud",
+ "endpoint": {
+ "auth_url": "http://%CONTROLLER_IP%:5000/v2.0/",
+ "username": "%ADMIN_USER%",
+ "password": "%ADMIN_PASSWORD%",
+ "tenant_name": "%ADMIN_TENANT_NAME%"
+ }
+}
diff --git a/meta-openstack/recipes-devtools/python/python-rally/rally.conf b/meta-openstack/recipes-devtools/python/python-rally/rally.conf
new file mode 100644
index 00000000..1c1f8645
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-rally/rally.conf
@@ -0,0 +1,446 @@
+[DEFAULT]
+
+#
+# Options defined in rally.exceptions
+#
+
+# make exception message format errors fatal (boolean value)
+#fatal_exception_format_errors=false
+
+
+#
+# Options defined in rally.openstack.common.lockutils
+#
+
+# Whether to disable inter-process locks (boolean value)
+#disable_process_locking=false
+
+# Directory to use for lock files. (string value)
+#lock_path=<None>
+
+
+#
+# Options defined in rally.openstack.common.log
+#
+
+# Print debugging output (set logging level to DEBUG instead
+# of default WARNING level). (boolean value)
+#debug=false
+
+# Print more verbose output (set logging level to INFO instead
+# of default WARNING level). (boolean value)
+#verbose=false
+
+# Log output to standard error (boolean value)
+#use_stderr=true
+
+# Format string to use for log messages with context (string
+# value)
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages without context
+# (string value)
+#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+
+# Data to append to log format when level is DEBUG (string
+# value)
+#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
+
+# Prefix each line of exception output with this format
+# (string value)
+#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
+
+# List of logger=LEVEL pairs (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN
+
+# Publish error events (boolean value)
+#publish_errors=false
+
+# Make deprecations fatal (boolean value)
+#fatal_deprecations=false
+
+# If an instance is passed with the log message, format it
+# like this (string value)
+#instance_format="[instance: %(uuid)s] "
+
+# If an instance UUID is passed with the log message, format
+# it like this (string value)
+#instance_uuid_format="[instance: %(uuid)s] "
+
+# The name of logging configuration file. It does not disable
+# existing loggers, but just appends specified logging
+# configuration to any other existing logging options. Please
+# see the Python logging module documentation for details on
+# logging configuration files. (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
+
+# DEPRECATED. A logging.Formatter log message format string
+# which may use any of the available logging.LogRecord
+# attributes. This option is deprecated. Please use
+# logging_context_format_string and
+# logging_default_format_string instead. (string value)
+#log_format=<None>
+
+# Format string for %%(asctime)s in log records. Default:
+# %(default)s (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to output to. If no default is
+# set, logging will go to stdout. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
+#log_file=<None>
+
+# (Optional) The base directory used for relative --log-file
+# paths (string value)
+# Deprecated group/name - [DEFAULT]/logdir
+log_dir=/var/log/rally
+
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# during I, and then will be changed in J to honor RFC5424
+# (boolean value)
+#use_syslog=false
+
+# (Optional) Use syslog rfc5424 format for logging. If
+# enabled, will add APP-NAME (RFC5424) before the MSG part of
+# the syslog message. The old format without APP-NAME is
+# deprecated in I, and will be removed in J. (boolean value)
+#use_syslog_rfc_format=false
+
+# Syslog facility to receive log lines (string value)
+#syslog_log_facility=LOG_USER
+
+#
+# Options defined in rally.osclients
+#
+
+# HTTP timeout for any of OpenStack service in seconds
+#openstack_client_http_timeout=180.0
+
+# Use SSL for all OpenStack API interfaces
+#https_insecure=False
+
+# Path to CA server cetrificate for SSL
+#https_cacert=<None>
+
+[benchmark]
+
+#
+# Options defined in rally.benchmark.scenarios.cinder.utils
+#
+
+# Time to sleep after creating a resource before polling for
+# it status (floating point value)
+#cinder_volume_create_prepoll_delay=2.0
+
+# Time to wait for cinder volume to be created. (floating
+# point value)
+#cinder_volume_create_timeout=600.0
+
+# Interval between checks when waiting for volume creation.
+# (floating point value)
+#cinder_volume_create_poll_interval=2.0
+
+# Time to wait for cinder volume to be deleted. (floating
+# point value)
+#cinder_volume_delete_timeout=600.0
+
+# Interval between checks when waiting for volume deletion.
+# (floating point value)
+#cinder_volume_delete_poll_interval=2.0
+
+
+#
+# Options defined in rally.benchmark.scenarios.glance.utils
+#
+
+# Time to sleep after creating a resource before polling for
+# it status (floating point value)
+#glance_image_create_prepoll_delay=2.0
+
+# Time to wait for glance image to be created. (floating point
+# value)
+#glance_image_create_timeout=120.0
+
+# Interval between checks when waiting for image creation.
+# (floating point value)
+#glance_image_create_poll_interval=1.0
+
+# Time to wait for glance image to be deleted. (floating point
+# value)
+#glance_image_delete_timeout=120.0
+
+# Interval between checks when waiting for image deletion.
+# (floating point value)
+#glance_image_delete_poll_interval=1.0
+
+
+#
+# Options defined in rally.benchmark.scenarios.heat.utils
+#
+
+# Time to sleep after creating a resource before polling for
+# it status (floating point value)
+#heat_stack_create_prepoll_delay=2.0
+
+# Time to wait for heat stack to be created. (floating point
+# value)
+#heat_stack_create_timeout=3600.0
+
+# Interval between checks when waiting for stack creation.
+# (floating point value)
+#heat_stack_create_poll_interval=1.0
+
+# Time to wait for heat stack to be deleted. (floating point
+# value)
+#heat_stack_delete_timeout=3600.0
+
+# Interval between checks when waiting for stack deletion.
+# (floating point value)
+#heat_stack_delete_poll_interval=1.0
+
+
+#
+# Options defined in rally.benchmark.scenarios.nova.utils
+#
+
+# Time to sleep after start before polling for status
+# (floating point value)
+#nova_server_start_prepoll_delay=0.0
+
+# Server start timeout (floating point value)
+#nova_server_start_timeout=300.0
+
+# Server start poll interval (floating point value)
+#nova_server_start_poll_interval=1.0
+
+# Time to sleep after stop before polling for status (floating
+# point value)
+#nova_server_stop_prepoll_delay=0.0
+
+# Server stop timeout (floating point value)
+#nova_server_stop_timeout=300.0
+
+# Server stop poll interval (floating point value)
+#nova_server_stop_poll_interval=2.0
+
+# Time to sleep after boot before polling for status (floating
+# point value)
+#nova_server_boot_prepoll_delay=1.0
+
+# Server boot timeout (floating point value)
+#nova_server_boot_timeout=300.0
+
+# Server boot poll interval (floating point value)
+#nova_server_boot_poll_interval=1.0
+
+# Time to sleep after delete before polling for status
+# (floating point value)
+#nova_server_delete_prepoll_delay=2.0
+
+# Server delete timeout (floating point value)
+#nova_server_delete_timeout=300.0
+
+# Server delete poll interval (floating point value)
+#nova_server_delete_poll_interval=2.0
+
+# Time to sleep after reboot before polling for status
+# (floating point value)
+#nova_server_reboot_prepoll_delay=2.0
+
+# Server reboot timeout (floating point value)
+#nova_server_reboot_timeout=300.0
+
+# Server reboot poll interval (floating point value)
+#nova_server_reboot_poll_interval=2.0
+
+# Time to sleep after rescue before polling for status
+# (floating point value)
+#nova_server_rescue_prepoll_delay=2.0
+
+# Server rescue timeout (floating point value)
+#nova_server_rescue_timeout=300.0
+
+# Server rescue poll interval (floating point value)
+#nova_server_rescue_poll_interval=2.0
+
+# Time to sleep after unrescue before polling for status
+# (floating point value)
+#nova_server_unrescue_prepoll_delay=2.0
+
+# Server unrescue timeout (floating point value)
+#nova_server_unrescue_timeout=300.0
+
+# Server unrescue poll interval (floating point value)
+#nova_server_unrescue_poll_interval=2.0
+
+# Time to sleep after suspend before polling for status
+# (floating point value)
+#nova_server_suspend_prepoll_delay=2.0
+
+# Server suspend timeout (floating point value)
+#nova_server_suspend_timeout=300.0
+
+# Server suspend poll interval (floating point value)
+#nova_server_suspend_poll_interval=2.0
+
+# Time to sleep after image_create before polling for status
+# (floating point value)
+#nova_server_image_create_prepoll_delay=0.0
+
+# Server image_create timeout (floating point value)
+#nova_server_image_create_timeout=300.0
+
+# Server image_create poll interval (floating point value)
+#nova_server_image_create_poll_interval=2.0
+
+# Time to sleep after image_delete before polling for status
+# (floating point value)
+#nova_server_image_delete_prepoll_delay=0.0
+
+# Server image_delete timeout (floating point value)
+#nova_server_image_delete_timeout=300.0
+
+# Server image_delete poll interval (floating point value)
+#nova_server_image_delete_poll_interval=2.0
+
+
+[database]
+
+#
+# Options defined in rally.openstack.common.db.options
+#
+
+# The file name to use with SQLite (string value)
+#sqlite_db=rally.sqlite
+
+# If True, SQLite uses synchronous mode (boolean value)
+#sqlite_synchronous=true
+
+# The backend to use for db (string value)
+# Deprecated group/name - [DEFAULT]/db_backend
+#backend=sqlalchemy
+
+# The SQLAlchemy connection string used to connect to the
+# database (string value)
+# Deprecated group/name - [DEFAULT]/sql_connection
+# Deprecated group/name - [DATABASE]/sql_connection
+# Deprecated group/name - [sql]/connection
+connection=postgresql://%DB_USER%:%DB_PASSWORD%@localhost/rally
+
+# The SQL mode to be used for MySQL sessions. This option,
+# including the default, overrides any server-set SQL mode. To
+# use whatever SQL mode is set by the server configuration,
+# set this to no value. Example: mysql_sql_mode= (string
+# value)
+#mysql_sql_mode=TRADITIONAL
+
+# Timeout before idle sql connections are reaped (integer
+# value)
+# Deprecated group/name - [DEFAULT]/sql_idle_timeout
+# Deprecated group/name - [DATABASE]/sql_idle_timeout
+# Deprecated group/name - [sql]/idle_timeout
+#idle_timeout=3600
+
+# Minimum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_min_pool_size
+# Deprecated group/name - [DATABASE]/sql_min_pool_size
+#min_pool_size=1
+
+# Maximum number of SQL connections to keep open in a pool
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_pool_size
+# Deprecated group/name - [DATABASE]/sql_max_pool_size
+#max_pool_size=<None>
+
+# Maximum db connection retries during startup. (setting -1
+# implies an infinite retry count) (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_retries
+# Deprecated group/name - [DATABASE]/sql_max_retries
+#max_retries=10
+
+# Interval between retries of opening a sql connection
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_retry_interval
+# Deprecated group/name - [DATABASE]/reconnect_interval
+#retry_interval=10
+
+# If set, use this value for max_overflow with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DEFAULT]/sql_max_overflow
+# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
+#max_overflow=<None>
+
+# Verbosity of SQL debugging information. 0=None,
+# 100=Everything (integer value)
+# Deprecated group/name - [DEFAULT]/sql_connection_debug
+#connection_debug=0
+
+# Add python stack traces to SQL as comment strings (boolean
+# value)
+# Deprecated group/name - [DEFAULT]/sql_connection_trace
+#connection_trace=false
+
+# If set, use this value for pool_timeout with sqlalchemy
+# (integer value)
+# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
+#pool_timeout=<None>
+
+# Enable the experimental use of database reconnect on
+# connection lost (boolean value)
+#use_db_reconnect=false
+
+# seconds between db connection retries (integer value)
+#db_retry_interval=1
+
+# Whether to increase interval between db connection retries,
+# up to db_max_retry_interval (boolean value)
+#db_inc_retry_interval=true
+
+# max seconds between db connection retries, if
+# db_inc_retry_interval is enabled (integer value)
+#db_max_retry_interval=10
+
+# maximum db connection retries before error is raised.
+# (setting -1 implies an infinite retry count) (integer value)
+#db_max_retries=20
+
+
+[image]
+
+#
+# Options defined in rally.verification.verifiers.tempest.config
+#
+
+# Version of cirros image (string value)
+#cirros_version=0.3.2
+
+# Cirros image name (string value)
+#cirros_image=cirros-0.3.2-x86_64-disk.img
+
+
+[rest]
+
+#
+# Options defined in rally.aas.rest
+#
+
+# The port for the Rally API server (integer value)
+#port=8877
+
+# The listen IP for the Rally API server (string value)
+#host=0.0.0.0
+
+
+[users_context]
+
+#
+# Options defined in rally.benchmark.context.users
+#
+
+# How many concurrent threads use for serving users context
+# (integer value)
+#concurrent=30
+
+
diff --git a/meta-openstack/recipes-devtools/python/python-rally/rally.init b/meta-openstack/recipes-devtools/python/python-rally/rally.init
new file mode 100644
index 00000000..e8345475
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-rally/rally.init
@@ -0,0 +1,95 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: rally
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Should-Start: postgresql rabbitmq-server
+# Should-Stop: postgresql rabbitmq-server
+# Default-Start: 3 5
+# Default-Stop: 0 1 2 6
+# Short-Description: OpenStack Block Storage (Rally) - API
+# Description: OpenStack Block Storage (Rally) - API
+### END INIT INFO
+
+SUFFIX=@suffix@
+DESC="rally-$SUFFIX"
+DAEMON="/usr/bin/rally-$SUFFIX"
+PIDFILE="/var/run/rally-$SUFFIX.pid"
+
+start()
+{
+ if [ -e $PIDFILE ]; then
+ PIDDIR=/proc/$(cat $PIDFILE)
+ if [ -d ${PIDDIR} ]; then
+ echo "$DESC already running."
+ exit 1
+ else
+ echo "Removing stale PID file $PIDFILE"
+ rm -f $PIDFILE
+ fi
+ fi
+
+ if [ ! -d /var/log/rally ]; then
+ mkdir /var/log/rally
+ fi
+
+ echo -n "Starting $DESC..."
+
+ start-stop-daemon --start --quiet --background \
+ --pidfile ${PIDFILE} --make-pidfile --exec ${DAEMON} \
+ -- --log-dir=/var/log/rally
+
+ if [ $? -eq 0 ]; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+}
+
+stop()
+{
+ echo -n "Stopping $DESC..."
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE
+ if [ $? -eq 0 ]; then
+ echo "done."
+ else
+ echo "failed."
+ fi
+ rm -f $PIDFILE
+}
+
+status()
+{
+ pid=`cat $PIDFILE 2>/dev/null`
+ if [ -n "$pid" ]; then
+ if ps -p $pid >&- ; then
+ echo "$DESC is running"
+ return
+ fi
+ fi
+ echo "$DESC is not running"
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|force-reload|reload)
+ stop
+ start
+ ;;
+ status)
+ status
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|force-reload|restart|reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/meta-openstack/recipes-devtools/python/python-rally/task-example.json b/meta-openstack/recipes-devtools/python/python-rally/task-example.json
new file mode 100644
index 00000000..381bb96d
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-rally/task-example.json
@@ -0,0 +1,17 @@
+{
+ "Authenticate.keystone": [
+ {
+ "runner": {
+ "type": "constant",
+ "times": 100,
+ "concurrency": 5
+ },
+ "context": {
+ "users": {
+ "tenants": 3,
+ "users_per_tenant": 50
+ }
+ }
+ }
+ ]
+}
diff --git a/meta-openstack/recipes-devtools/python/python-rally_git.bb b/meta-openstack/recipes-devtools/python/python-rally_git.bb
new file mode 100644
index 00000000..811fd07c
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-rally_git.bb
@@ -0,0 +1,145 @@
+DESCRIPTION = "Rally - OpenStack benchmarking at a scale - is intended to provide the \
+community with a benchmarking tool that is capable of performing specific, \
+complicated and reproducible test cases on real deployment scenarios."
+HOMEPAGE = "https://launchpad.net/rally"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=19cbd64715b51267a47bf3750cc6a8a5"
+
+PR = "r0"
+SRCNAME = "rally"
+
+SRC_URI = "git://github.com/stackforge/${SRCNAME}.git;branch=master \
+ file://rally.init \
+ file://rally.conf \
+ file://task-example.json \
+ file://deployment-existing.json \
+"
+
+SRCREV="b297cf00750f263b8b5bdeb71f6952f672e87f5a"
+PV="git${SRCPV}"
+S = "${WORKDIR}/git"
+
+inherit setuptools update-rc.d hosts identity default_configs
+
+do_install_append() {
+ RALLY_CONF_DIR=${D}${sysconfdir}/${SRCNAME}
+ RALLY_PYTHON_SITEPACKAGES_DIR=${D}${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}
+
+ install -d ${RALLY_CONF_DIR}
+ install -m 600 ${WORKDIR}/rally.conf ${RALLY_CONF_DIR}/rally.conf
+ sed -e "s:%DB_USER%:${DB_USER}:g" -i ${RALLY_CONF_DIR}/rally.conf
+ sed -e "s:%DB_PASSWORD%:${DB_PASSWORD}:g" -i ${RALLY_CONF_DIR}/rally.conf
+
+ if ${@base_contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/init.d
+ sed 's:@suffix@:api:' < ${WORKDIR}/rally.init > ${WORKDIR}/rally-api.init.sh
+ install -m 0755 ${WORKDIR}/rally-api.init.sh ${D}${sysconfdir}/init.d/rally-api
+ fi
+
+ install -d ${RALLY_PYTHON_SITEPACKAGES_DIR}
+ cp -r ${S}/tests* ${RALLY_PYTHON_SITEPACKAGES_DIR}
+ find ${RALLY_PYTHON_SITEPACKAGES_DIR}/tests* -name "*.py" | xargs \
+ sed -i 's:^from tests:from rally.tests:g'
+ install -d ${RALLY_PYTHON_SITEPACKAGES_DIR}/doc/samples
+ cp -r ${S}/doc/samples/* ${RALLY_PYTHON_SITEPACKAGES_DIR}/doc/samples
+
+ install -d ${RALLY_CONF_DIR}/tasks
+ install -m 600 ${WORKDIR}/task-example.json ${RALLY_CONF_DIR}/tasks/example.json
+
+ install -d ${RALLY_CONF_DIR}/deployments
+ install -m 600 ${WORKDIR}/deployment-existing.json ${RALLY_CONF_DIR}/deployments/existing.json
+ sed -e "s:%ADMIN_TENANT_NAME%:admin:g" -i ${RALLY_CONF_DIR}/deployments/existing.json
+ sed -e "s:%ADMIN_USER%:admin:g" -i ${RALLY_CONF_DIR}/deployments/existing.json
+ sed -e "s:%ADMIN_PASSWORD%:${ADMIN_PASSWORD}:g" -i ${RALLY_CONF_DIR}/deployments/existing.json
+ sed -e "s:%CONTROLLER_IP%:${CONTROLLER_IP}:g" -i ${RALLY_CONF_DIR}/deployments/existing.json
+
+ cp ${S}/run_tests.sh ${RALLY_CONF_DIR}
+ cp -r ${S}/tools ${RALLY_CONF_DIR}
+}
+
+pkg_postinst_${SRCNAME}-setup () {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+
+ # This is to make sure postgres is configured and running
+ if ! pidof postmaster > /dev/null; then
+ /etc/init.d/postgresql-init
+ /etc/init.d/postgresql start
+ fi
+
+ if [ ! -d /var/log/rally ]; then
+ mkdir /var/log/rally
+ fi
+
+ sudo -u postgres createdb rally
+ rally-manage db recreate
+}
+
+PACKAGES += "${SRCNAME}-tests ${SRCNAME}-api ${SRCNAME} ${SRCNAME}-setup"
+ALLOW_EMPTY_${SRCNAME}-setup = "1"
+
+FILES_${PN} = "${libdir}/*"
+
+FILES_${SRCNAME}-tests = "${sysconfdir}/${SRCNAME}/run_tests.sh \
+ "
+
+FILES_${SRCNAME} = "${bindir}/* \
+ ${sysconfdir}/${SRCNAME}/* \
+ "
+
+FILES_${SRCNAME}-api = "${bindir}/rally-api \
+ ${sysconfdir}/init.d/rally-api \
+ "
+
+DEPENDS += " \
+ python-pip \
+ python-pbr \
+ "
+
+RDEPENDS_${PN} += " python-babel \
+ python-decorator \
+ python-fixtures \
+ python-iso8601 \
+ python-jsonschema \
+ python-netaddr \
+ python-oslo.config \
+ python-paramiko \
+ python-pbr \
+ python-pecan \
+ python-prettytable \
+ python-pyyaml \
+ python-glanceclient \
+ python-keystoneclient \
+ python-novaclient \
+ python-neutronclient \
+ python-cinderclient \
+ python-heatclient \
+ python-ceilometerclient \
+ python-subunit \
+ python-requests \
+ python-sqlalchemy \
+ python-six \
+ python-wsme \
+ "
+
+RDEPENDS_${SRCNAME}-tests = "${PN} \
+ python-coverage \
+ python-mock \
+ python-testrepository \
+ python-testtools \
+ python-oslotest \
+ "
+
+RDEPENDS_${SRCNAME} = "${PN} \
+ postgresql \
+ postgresql-client \
+ "
+
+RDEPENDS_${SRCNAME}-setup = "postgresql sudo ${SRCNAME}"
+RDEPENDS_${SRCNAME}-api = "${SRCNAME}"
+
+INITSCRIPT_PACKAGES = "${SRCNAME}-api"
+INITSCRIPT_NAME_${SRCNAME}-api = "${SRCNAME}-api"
+INITSCRIPT_PARAMS_${SRCNAME}-api = "${OS_DEFAULT_INITSCRIPT_PARAMS}"