#!/bin/sh

set -e

if [ -z "${APTGET}" ] ; then
	APTGET="apt-get -o Dpkg::Options::=--force-confnew --allow-downgrades --allow-change-held-packages -y"
fi

# Debconf preseeding library for OpenStack services.
#
# Every OpenStack service now uses the shared debconf templates from
# openstack-pkg-tools (merged at build time by pkgos-merge-templates, and
# renamed from ospt/* to <owner>/*, where the owner prefix is normally the
# source package name). The template families are:
#   <owner>/configure_db              (boolean, gates dbconfig-common)
#   <owner>/configure_rabbit + rabbit-host|userid|password
#   <owner>/configure_ksat + ksat-public-url|region|create-service-user|
#           ksat-admin-username|admin-project-name|admin-password|
#           ksat-service-username|service-project-name|service-password
#   <owner>/configure_api-endpoint + api-keystone-address|proto|
#           api-keystone-admin-username|admin-project-name|
#           api-keystone-admin-password|api-endpoint-address|proto|
#           api-endpoint-region-name
# The dbconfig-common questions are named after the BINARY package which
# asks them (eg: glance-common/dbconfig-install).
#
# All preseed lines below use the 4 fields format (owner, question, type,
# value), so that they also work for packages which aren't installed yet.
# The owner field is the binary package which ships the templates.

# Usage: os_preseed_gen_pass
# Sets GENERATED_PASSWORD with a random value.
os_preseed_gen_pass () {
	GENERATED_PASSWORD=$(dd if=/dev/random bs=64 count=1 2>/dev/null | md5sum | awk '{print $1}')
}

# Preseed dbconfig-common for a service.
# Usage: os_preseed_set_dbconfig_conf <binpkg> <owner> <sql_pass> <db_name> <db_user> <mysql_pass> [mysql_host]
# Example: os_preseed_set_dbconfig_conf glance-common glance <pass> glancedb glance <mysql_root_pass>
os_preseed_set_dbconfig_conf () {
	local PKG_NAME OWNER SQL_PASS DB_NAME DB_USER MYSQL_PASSWORD MYSQL_HOST
	PKG_NAME=${1}
	OWNER=${2}
	SQL_PASS=${3}
	DB_NAME=${4}
	DB_USER=${5}
	MYSQL_PASSWORD=${6}
	MYSQL_HOST=${7:-}

	TMPFILE=$(mktemp -t openstack-preseed-lib.XXXXXX)
	echo "${OWNER} ${OWNER}/configure_db boolean true
${OWNER} ${OWNER}/configure_db seen true
${PKG_NAME} ${PKG_NAME}/dbconfig-install boolean true
${PKG_NAME} ${PKG_NAME}/dbconfig-install seen true
${PKG_NAME} ${PKG_NAME}/dbconfig-reinstall boolean true
${PKG_NAME} ${PKG_NAME}/dbconfig-reinstall seen true
${PKG_NAME} ${PKG_NAME}/dbconfig-upgrade boolean true
${PKG_NAME} ${PKG_NAME}/dbconfig-upgrade seen true
${PKG_NAME} ${PKG_NAME}/database-type select mysql
${PKG_NAME} ${PKG_NAME}/database-type seen true
${PKG_NAME} ${PKG_NAME}/mysql/method select Unix socket
${PKG_NAME} ${PKG_NAME}/mysql/method seen true
${PKG_NAME} ${PKG_NAME}/mysql/admin-user string root
${PKG_NAME} ${PKG_NAME}/mysql/admin-user seen true
${PKG_NAME} ${PKG_NAME}/mysql/admin-pass password ${MYSQL_PASSWORD}
${PKG_NAME} ${PKG_NAME}/mysql/admin-pass seen true
${PKG_NAME} ${PKG_NAME}/mysql/app-pass password ${SQL_PASS}
${PKG_NAME} ${PKG_NAME}/mysql/app-pass seen true
${PKG_NAME} ${PKG_NAME}/app-password-confirm password ${SQL_PASS}
${PKG_NAME} ${PKG_NAME}/app-password-confirm seen true
${PKG_NAME} ${PKG_NAME}/password-confirm password ${SQL_PASS}
${PKG_NAME} ${PKG_NAME}/password-confirm seen true
${PKG_NAME} ${PKG_NAME}/db/app-user string ${DB_USER}
${PKG_NAME} ${PKG_NAME}/db/app-user seen true
${PKG_NAME} ${PKG_NAME}/db/dbname string ${DB_NAME}
${PKG_NAME} ${PKG_NAME}/db/dbname seen true
${PKG_NAME} ${PKG_NAME}/remember-admin-pass boolean true
${PKG_NAME} ${PKG_NAME}/remember-admin-pass seen true
" >${TMPFILE}
	if [ -n "${MYSQL_HOST}" ] && [ "${MYSQL_HOST}" != "localhost" ] && [ "${MYSQL_HOST}" != "127.0.0.1" ] ; then
		echo "${PKG_NAME} ${PKG_NAME}/mysql/method select TCP/IP
${PKG_NAME} ${PKG_NAME}/mysql/method seen true
${PKG_NAME} ${PKG_NAME}/remote/newhost string ${MYSQL_HOST}
${PKG_NAME} ${PKG_NAME}/remote/newhost seen true
${PKG_NAME} ${PKG_NAME}/remote/host string ${MYSQL_HOST}
${PKG_NAME} ${PKG_NAME}/remote/host seen true
${PKG_NAME} ${PKG_NAME}/remote/port string
${PKG_NAME} ${PKG_NAME}/remote/port seen true
" >>${TMPFILE}
	fi
	debconf-set-selections ${TMPFILE}
	rm ${TMPFILE}
}

# Preseed the shared endpoint registration templates of openstack-pkg-tools.
# The first argument (binary package name) is unused, but kept so that all 4
# helpers share the same <binpkg> <owner> calling convention.
# Usage: os_preseed_endpoint <binpkg> <owner> <keystone_ip> <region> <admin_pass>
os_preseed_endpoint () {
	local OSPE_BINPKG OSPE_OWNER OSPE_KEYSTONE_ENDPOINT_IP OSPE_KEYSTONE_REGION OSPE_KEYSTONE_ADMIN_PASS
	OSPE_BINPKG=${1}
	OSPE_OWNER=${2}
	OSPE_KEYSTONE_ENDPOINT_IP=${3}
	OSPE_KEYSTONE_REGION=${4}
	OSPE_KEYSTONE_ADMIN_PASS=${5}

	TMPFILE=$(mktemp -t openstack-preseed-lib.XXXXXX)
	echo "${OSPE_OWNER} ${OSPE_OWNER}/configure_api-endpoint boolean true
${OSPE_OWNER} ${OSPE_OWNER}/configure_api-endpoint seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-address string ${OSPE_KEYSTONE_ENDPOINT_IP}
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-address seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-proto select http
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-proto seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-username string admin
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-username seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-project-name string admin
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-project-name seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-password password ${OSPE_KEYSTONE_ADMIN_PASS}
${OSPE_OWNER} ${OSPE_OWNER}/api-keystone-admin-password seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-address string ${OSPE_KEYSTONE_ENDPOINT_IP}
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-address seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-proto select http
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-proto seen true
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-region-name string ${OSPE_KEYSTONE_REGION}
${OSPE_OWNER} ${OSPE_OWNER}/api-endpoint-region-name seen true
" >${TMPFILE}
	debconf-set-selections ${TMPFILE}
	rm ${TMPFILE}
}

# Preseed the shared keystone_authtoken templates of openstack-pkg-tools.
# The first argument (binary package name) is unused, but kept so that all 4
# helpers share the same <binpkg> <owner> calling convention.
# Usage: os_preseed_keystone_authtoken <binpkg> <owner> <auth_host> <region> <admin_user> <admin_project> <admin_pass> <service_user> <service_project> <service_pass>
os_preseed_keystone_authtoken () {
	local OSPKO_BINPKG OSPKO_OWNER OSPKO_AUTH_HOST OSPKO_AUTH_REGION OSPKO_AUTH_ADMIN_USERNAME OSPKO_AUTH_ADMIN_PROJECT_NAME OSPKO_AUTH_ADMIN_PASS OSPKO_AUTH_SERVICE_USERNAME OSPKO_AUTH_SERVICE_PROJECT_NAME OSPKO_AUTH_SERVICE_PASS
	OSPKO_BINPKG=${1}
	OSPKO_OWNER=${2}
	OSPKO_AUTH_HOST=${3}
	OSPKO_AUTH_REGION=${4}
	OSPKO_AUTH_ADMIN_USERNAME=${5}
	OSPKO_AUTH_ADMIN_PROJECT_NAME=${6}
	OSPKO_AUTH_ADMIN_PASS=${7}
	OSPKO_AUTH_SERVICE_USERNAME=${8}
	OSPKO_AUTH_SERVICE_PROJECT_NAME=${9}
	OSPKO_AUTH_SERVICE_PASS=${10}

	TMPFILE=$(mktemp -t openstack-preseed-lib.XXXXXX)
	echo "${OSPKO_OWNER} ${OSPKO_OWNER}/configure_ksat boolean true
${OSPKO_OWNER} ${OSPKO_OWNER}/configure_ksat seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-public-url string http://${OSPKO_AUTH_HOST}:5000
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-public-url seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-region string ${OSPKO_AUTH_REGION}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-region seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-create-service-user boolean true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-create-service-user seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-username string ${OSPKO_AUTH_ADMIN_USERNAME}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-username seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-project-name string ${OSPKO_AUTH_ADMIN_PROJECT_NAME}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-project-name seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-password password ${OSPKO_AUTH_ADMIN_PASS}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-admin-password seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-username string ${OSPKO_AUTH_SERVICE_USERNAME}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-username seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-project-name string ${OSPKO_AUTH_SERVICE_PROJECT_NAME}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-project-name seen true
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-password password ${OSPKO_AUTH_SERVICE_PASS}
${OSPKO_OWNER} ${OSPKO_OWNER}/ksat-service-password seen true
" >${TMPFILE}
	debconf-set-selections ${TMPFILE}
	rm ${TMPFILE}
}

# Preseed the shared RabbitMQ templates of openstack-pkg-tools.
# The first argument (binary package name) is unused, but kept so that all 4
# helpers share the same <binpkg> <owner> calling convention.
# Usage: os_preseed_rabbit_creds <binpkg> <owner> <rabbit_host> <rabbit_login> <rabbit_pass>
os_preseed_rabbit_creds () {
	local PKG_NAME OWNER RBT_HOST RBT_LOGIN RBT_PASS
	PKG_NAME=${1}
	OWNER=${2}
	RBT_HOST=${3}
	RBT_LOGIN=${4}
	RBT_PASS=${5}

	TMPFILE=$(mktemp -t openstack-preseed-lib.XXXXXX)
	echo "${OWNER} ${OWNER}/configure_rabbit boolean true
${OWNER} ${OWNER}/configure_rabbit seen true
${OWNER} ${OWNER}/rabbit-host string ${RBT_HOST}
${OWNER} ${OWNER}/rabbit-host seen true
${OWNER} ${OWNER}/rabbit-userid string ${RBT_LOGIN}
${OWNER} ${OWNER}/rabbit-userid seen true
${OWNER} ${OWNER}/rabbit-password password ${RBT_PASS}
${OWNER} ${OWNER}/rabbit-password seen true
" >${TMPFILE}
	debconf-set-selections ${TMPFILE}
	rm ${TMPFILE}
}

os_pressed_debconf_and_dbconfig_common () {
	$APTGET install -y debconf dbconfig-common
	echo "debconf debconf/priority select medium
debconf debconf/priority seen true
debconf debconf-apt-progress/title string fake
debconf debconf-apt-progress/title seen true
debconf debconf-apt-progress/preparing string fake
debconf debconf-apt-progress/preparing seen true
" | debconf-set-selections
	dpkg-reconfigure -f noninteractive debconf

	echo "dbconfig-common dbconfig-common/remote-questions-default boolean true
dbconfig-common dbconfig-common/remote-questions-default seen true
dbconfig-common dbconfig-common/remember-admin-pass boolean true
dbconfig-common dbconfig-common/remember-admin-pass seen true
" | debconf-set-selections
	$APTGET install -y debconf dbconfig-common
}

os_pressed_man_db () {
	echo "man-db man-db/install-setuid boolean false
man-db man-db/install-setuid seen true
" | debconf-set-selections || true
}

os_pressed_ca_certs () {
	echo "ca-certificates ca-certificates/trust_new_crts seen true
ca-certificates ca-certificates/trust_new_crts select yes
" | debconf-set-selections
}

os_preseed_ntfs_3g () {
	echo "ntfs-3g ntfs-3g/setuid-root boolean false
ntfs-3g ntfs-3g/setuid-root seen true
ntfs-3g ntfs-3g/initramfs boolean false
ntfs-3g ntfs-3g/initramfs seen true
" | debconf-set-selections
}

os_pressed_libguestfs0 () {
	echo "libguestfs0 libguestfs/update-appliance boolean true
libguestfs0 libguestfs/update-appliance seen true
" | debconf-set-selections
}

os_pressed_misc () {
	os_pressed_debconf_and_dbconfig_common
	os_pressed_man_db
	#os_pressed_ca_certs
	os_preseed_ntfs_3g
	os_pressed_libguestfs0
}

# Preseed and (later) install keystone. Keystone doesn't use the shared
# openstack-pkg-tools templates: it has its own set, and it doesn't ask any
# RabbitMQ or keystone_authtoken question (it IS the auth server).
# Usage: os_install_keystone <auth_token (unused, kept for compatibility)> <admin_pass> <endpoint_ip> <region> <sql_pass> <mysql_root_pass> [mysql_host]
os_install_keystone () {
	local KEYSTONE_AUTH_TOKEN KEYSTONE_ADM_PASS KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_SQL_PASS MYSQL_PASSWORD MYSQL_HOST
	KEYSTONE_AUTH_TOKEN=${1}
	KEYSTONE_ADM_PASS=${2}
	KEYSTONE_ENDPOINT_IP=${3}
	KEYSTONE_REGION=${4}
	KEYSTONE_SQL_PASS=${5}
	MYSQL_PASSWORD=${6}
	MYSQL_HOST=${7:-}

	TMPFILE=$(mktemp -t openstack-preseed-lib.XXXXXX)
	echo "keystone keystone/configure_db boolean true
keystone keystone/configure_db seen true
keystone keystone/create-admin-tenant boolean true
keystone keystone/create-admin-tenant seen true
keystone keystone/admin-user string admin
keystone keystone/admin-user seen true
keystone keystone/admin-email string root@localhost
keystone keystone/admin-email seen true
keystone keystone/admin-password password ${KEYSTONE_ADM_PASS}
keystone keystone/admin-password seen true
keystone keystone/admin-password-confirm password ${KEYSTONE_ADM_PASS}
keystone keystone/admin-password-confirm seen true
keystone keystone/admin-role-name string admin
keystone keystone/admin-role-name seen true
keystone keystone/admin-tenant-name string admin
keystone keystone/admin-tenant-name seen true
keystone keystone/register-endpoint boolean true
keystone keystone/register-endpoint seen true
keystone keystone/endpoint-ip string ${KEYSTONE_ENDPOINT_IP}
keystone keystone/endpoint-ip seen true
keystone keystone/endpoint-proto select http
keystone keystone/endpoint-proto seen true
keystone keystone/region-name string ${KEYSTONE_REGION}
keystone keystone/region-name seen true
" >${TMPFILE}
	debconf-set-selections ${TMPFILE}
	rm ${TMPFILE}

	os_preseed_set_dbconfig_conf keystone keystone ${KEYSTONE_SQL_PASS} keystonedb keystone "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	#DEBIAN_FRONTEND=noninteractive $APTGET install -y keystone
}

os_preseed_glance () {
	local GLANCE_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	GLANCE_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}	# Unused: kept for calling compatibility
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf glance-common glance ${GLANCE_SQL_PASS} glancedb glance "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint glance-api glance ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken glance-common glance ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} glance service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds glance-common glance ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}
}

os_preseed_nova () {
	local NOVA_SQL_PASS NOVA_API_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS METADATA_SHARED_SECRET NOVA_SERVICE_PASS
	NOVA_SQL_PASS=${1}
	NOVA_API_SQL_PASS=${2}
	MYSQL_PASSWORD=${3}
	MYSQL_HOST=${4}
	KEYSTONE_ENDPOINT_IP=${5}
	KEYSTONE_REGION=${6}
	KEYSTONE_ADMIN_PASS=${7}
	KEYSTONE_AUTH_TOKEN=${8}	# Unused: kept for calling compatibility
	RBT_HOST=${9}
	RBT_LOGIN=${10}
	RBT_PASS=${11}
	METADATA_SHARED_SECRET=${12}
	NOVA_SERVICE_PASS=${13}

	# The placement service user is created by nova's postinst, and
	# placement authenticates with the same credentials: make sure both
	# preseeds share the same password. PLACEMENT_SERVICE_PASS is a global
	# so that a later os_preseed_placement call reuses it.
	if [ -z "${PLACEMENT_SERVICE_PASS:-}" ] ; then
		os_preseed_gen_pass
		PLACEMENT_SERVICE_PASS=${GENERATED_PASSWORD}
	fi

	os_preseed_set_dbconfig_conf nova-common nova ${NOVA_SQL_PASS} novadb nova "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_set_dbconfig_conf nova-api novaapi ${NOVA_API_SQL_PASS} novaapidb novaapi "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint nova-api nova ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken nova-common nova ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} nova service ${NOVA_SERVICE_PASS}
	os_preseed_rabbit_creds nova-common nova ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	# Service specific questions of nova
	echo "nova-consoleproxy nova-consoleproxy/daemon_type select spicehtml5
nova-consoleproxy nova-consoleproxy/daemon_type seen true
nova-common nova/my-ip string ${KEYSTONE_ENDPOINT_IP}
nova-common nova/my-ip seen true
nova-common nova/cinder_os_region_name string ${KEYSTONE_REGION}
nova-common nova/cinder_os_region_name seen true
" | debconf-set-selections

	# Neutron configuration of Nova (only used when nova/configure_neutron
	# is true, which itself is only used when nova/configure_ksat is true)
	echo "nova-common nova/configure_neutron boolean true
nova-common nova/configure_neutron seen true
nova-common nova/neutron_url string http://${KEYSTONE_ENDPOINT_IP}:9696
nova-common nova/neutron_url seen true
nova-common nova/neutron_admin_tenant_name string admin
nova-common nova/neutron_admin_tenant_name seen true
nova-common nova/neutron_admin_username string admin
nova-common nova/neutron_admin_username seen true
nova-common nova/neutron_admin_password password ${KEYSTONE_ADMIN_PASS}
nova-common nova/neutron_admin_password seen true
nova-common nova/metadata_secret password ${METADATA_SHARED_SECRET}
nova-common nova/metadata_secret seen true
" | debconf-set-selections

	# Placement configuration of Nova (only used when nova/configure_placement
	# is true, which itself is only used when nova/configure_ksat is true)
	echo "nova-common nova/configure_placement boolean true
nova-common nova/configure_placement seen true
nova-common nova/placement_admin_tenant_name string service
nova-common nova/placement_admin_tenant_name seen true
nova-common nova/placement_os_region_name string ${KEYSTONE_REGION}
nova-common nova/placement_os_region_name seen true
nova-common nova/placement_admin_username string placement
nova-common nova/placement_admin_username seen true
nova-common nova/placement_admin_password password ${PLACEMENT_SERVICE_PASS}
nova-common nova/placement_admin_password seen true
" | debconf-set-selections
}

os_preseed_neutron () {
	local NEUTRON_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS METADATA_SHARED_SECRET NOVA_URL ADMIN_TENANT_ID NOVA_SERVICE_PASS
	NEUTRON_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}	# Unused: kept for calling compatibility
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}
	METADATA_SHARED_SECRET=${11}
	NOVA_URL=${12}			# Unused: nova_auth_url is derived from the endpoint IP
	ADMIN_TENANT_ID=${13}		# Unused: nova_service_project_name is used instead
	NOVA_SERVICE_PASS=${14}
	if [ -n "${15:-}" ] ; then
		NEUTRON_SERVICE_PASS=${15}
	fi
	if [ -z "${NEUTRON_SERVICE_PASS:-}" ] ; then
		os_preseed_gen_pass
		NEUTRON_SERVICE_PASS=${GENERATED_PASSWORD}
	fi

	os_preseed_set_dbconfig_conf neutron-common neutron ${NEUTRON_SQL_PASS} neutrondb neutron "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint neutron-api neutron ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken neutron-common neutron ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} neutron service ${NEUTRON_SERVICE_PASS}
	os_preseed_rabbit_creds neutron-common neutron ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	# Nova credentials used by Neutron (only used when
	# neutron/configure_nova is true, which itself is only used when
	# neutron/configure_ksat is true)
	echo "neutron-common neutron/configure_nova boolean true
neutron-common neutron/configure_nova seen true
neutron-common neutron/nova_auth_url string http://${KEYSTONE_ENDPOINT_IP}:5000
neutron-common neutron/nova_auth_url seen true
neutron-common neutron/nova_region string ${KEYSTONE_REGION}
neutron-common neutron/nova_region seen true
neutron-common neutron/nova_service_project_name string service
neutron-common neutron/nova_service_project_name seen true
neutron-common neutron/nova_service_username string nova
neutron-common neutron/nova_service_username seen true
neutron-common neutron/nova_service_password password ${NOVA_SERVICE_PASS}
neutron-common neutron/nova_service_password seen true
" | debconf-set-selections

	# The metadata agent has its own owner prefix, and its
	# metadata_proxy_shared_secret must match nova/metadata_secret
	echo "neutron-metadata-agent neutron-metadata/configure boolean true
neutron-metadata-agent neutron-metadata/configure seen true
neutron-metadata-agent neutron-metadata/metadata_secret password ${METADATA_SHARED_SECRET}
neutron-metadata-agent neutron-metadata/metadata_secret seen true
neutron-metadata-agent neutron-metadata/nova_metadata_host string 127.0.0.1
neutron-metadata-agent neutron-metadata/nova_metadata_host seen true
" | debconf-set-selections

	# The overlay IP for the OpenvSwitch agent (ML2 is the only plugin
	# nowadays, there's no plugin selection question anymore)
	echo "neutron-openvswitch-agent neutron-openvswitch-agent/overlay-int-ip-address string ${KEYSTONE_ENDPOINT_IP}
neutron-openvswitch-agent neutron-openvswitch-agent/overlay-int-ip-address seen true
" | debconf-set-selections
}

os_preseed_cinder () {
	local CINDER_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	CINDER_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}	# Unused: kept for calling compatibility
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf cinder-common cinder ${CINDER_SQL_PASS} cinderdb cinder "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint cinder-api cinder ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken cinder-common cinder ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} cinder service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds cinder-common cinder ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	echo "cinder-common cinder/my-ip string ${KEYSTONE_ENDPOINT_IP}
cinder-common cinder/my-ip seen true
cinder-common cinder/volume_group string cinder-volumes
cinder-common cinder/volume_group seen true
cinder-common cinder/glance-api-servers string http://${KEYSTONE_ENDPOINT_IP}:9292
cinder-common cinder/glance-api-servers seen true
" | debconf-set-selections
}

# Preseed Horizon. Note that Horizon has no database, RabbitMQ,
# keystone_authtoken or endpoint registration questions at all: only the 3
# questions below (split between the openstack-dashboard and
# openstack-dashboard-apache binary packages).
# Usage: os_pressed_horizon [allowed_hosts]
os_pressed_horizon () {
	HORIZON_ALLOWED_HOSTS=${1:-*}
	echo "openstack-dashboard horizon/allowed-hosts string ${HORIZON_ALLOWED_HOSTS}
openstack-dashboard horizon/allowed-hosts seen true
openstack-dashboard-apache horizon/activate_vhost boolean true
openstack-dashboard-apache horizon/activate_vhost seen true
openstack-dashboard-apache horizon/use_ssl boolean true
openstack-dashboard-apache horizon/use_ssl seen true
" | debconf-set-selections
}

# Preseed placement. Placement has a database and needs the keystone
# credentials, but no RabbitMQ. The placement service user is created by
# nova's postinst: PLACEMENT_SERVICE_PASS is shared with os_preseed_nova.
# Usage: os_preseed_placement <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> [<placement_service_pass>]
os_preseed_placement () {
	local PLACEMENT_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS
	PLACEMENT_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	if [ -n "${7:-}" ] ; then
		PLACEMENT_SERVICE_PASS=${7}
	fi
	if [ -z "${PLACEMENT_SERVICE_PASS:-}" ] ; then
		os_preseed_gen_pass
		PLACEMENT_SERVICE_PASS=${GENERATED_PASSWORD}
	fi

	os_preseed_set_dbconfig_conf placement-common placement ${PLACEMENT_SQL_PASS} placementdb placement "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint placement-api placement ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken placement-common placement ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} placement service ${PLACEMENT_SERVICE_PASS}
}

# Preseed ceilometer. Ceilometer has no database and no keystone_authtoken
# questions: only RabbitMQ is configured through debconf.
# Usage: os_preseed_ceilometer <ip (unused)> <region (unused)> <admin_pass (unused)> <auth_token (unused)> <rbt_host> <rbt_login> <rbt_pass>
os_preseed_ceilometer () {
	KEYSTONE_ENDPOINT_IP=${1}
	KEYSTONE_REGION=${2}
	KEYSTONE_ADMIN_PASS=${3}
	KEYSTONE_AUTH_TOKEN=${4}
	RBT_HOST=${5}
	RBT_LOGIN=${6}
	RBT_PASS=${7}

	os_preseed_rabbit_creds ceilometer-common ceilometer ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}
}

os_preseed_heat () {
	local HEAT_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	HEAT_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}	# Unused: kept for calling compatibility
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf heat-common heat ${HEAT_SQL_PASS} heatdb heat "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	# Both heat-api and heat-api-cfn register endpoints, each with its own
	# owner prefix
	os_preseed_endpoint heat-api heat ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_endpoint heat-api-cfn heat-api-cfn ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken heat-common heat ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} heat service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds heat-common heat ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	# The Heat domain admin questions are gated by
	# heat/configure_with_debconf (default: false)
	echo "heat-common heat/configure_with_debconf boolean true
heat-common heat/configure_with_debconf seen true
heat-common heat/heat_domain_admin_username string heat_domain_admin
heat-common heat/heat_domain_admin_username seen true
heat-common heat/heat_domain_admin_password password ${KEYSTONE_ADMIN_PASS}
heat-common heat/heat_domain_admin_password seen true
heat-common heat/heat_domain_name string heat
heat-common heat/heat_domain_name seen true
" | debconf-set-selections
}

os_preseed_aodh () {
	local AODH_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	AODH_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}	# Unused: kept for calling compatibility
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf aodh-common aodh ${AODH_SQL_PASS} aodhdb aodh "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint aodh-api aodh ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken aodh-common aodh ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} aodh service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds aodh-common aodh ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}
}

# Preseed gnocchi. Gnocchi has a database (note: its packaged default is
# SQLite, but we always preseed MySQL) and needs the keystone credentials,
# but no RabbitMQ.
# Usage: os_preseed_gnocchi <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> [<service_pass>]
os_preseed_gnocchi () {
	local GNOCCHI_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS
	GNOCCHI_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	if [ -n "${7:-}" ] ; then
		GNOCCHI_SERVICE_PASS=${7}
	fi
	if [ -z "${GNOCCHI_SERVICE_PASS:-}" ] ; then
		os_preseed_gen_pass
		GNOCCHI_SERVICE_PASS=${GENERATED_PASSWORD}
	fi

	os_preseed_set_dbconfig_conf gnocchi-common gnocchi ${GNOCCHI_SQL_PASS} gnocchidb gnocchi "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint gnocchi-api gnocchi ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken gnocchi-common gnocchi ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} gnocchi service ${GNOCCHI_SERVICE_PASS}
}

# Preseed ironic.
# Usage: os_preseed_ironic <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> <auth_token (unused, kept for calling compatibility)> <rbt_host> <rbt_login> <rbt_pass>
os_preseed_ironic () {
	local IRONIC_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	IRONIC_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf ironic-common ironic ${IRONIC_SQL_PASS} ironicdb ironic "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint ironic-api ironic ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken ironic-common ironic ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} ironic service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds ironic-common ironic ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	echo "ironic-common ironic/enabled_drivers multiselect pxe_ipmitool
ironic-common ironic/enabled_drivers seen true
" | debconf-set-selections
}

# Preseed magnum.
# Usage: os_preseed_magnum <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> <auth_token (unused, kept for calling compatibility)> <rbt_host> <rbt_login> <rbt_pass>
os_preseed_magnum () {
	local MAGNUM_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	MAGNUM_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf magnum-common magnum ${MAGNUM_SQL_PASS} magnumdb magnum "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint magnum-api magnum ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken magnum-common magnum ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} magnum service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds magnum-common magnum ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	# The trust (domain admin) and cinder questions are gated by
	# magnum/configure_with_debconf (default: false)
	os_preseed_gen_pass
	MAGNUM_DOMAIN_ADMIN_PASS=${GENERATED_PASSWORD}
	echo "magnum-common magnum/configure_with_debconf boolean true
magnum-common magnum/configure_with_debconf seen true
magnum-common magnum/magnum_domain_admin_username string magnum_domain_admin
magnum-common magnum/magnum_domain_admin_username seen true
magnum-common magnum/magnum_domain_admin_password password ${MAGNUM_DOMAIN_ADMIN_PASS}
magnum-common magnum/magnum_domain_admin_password seen true
magnum-common magnum/magnum_domain_name string magnum
magnum-common magnum/magnum_domain_name seen true
magnum-common magnum/keystone_interface select public
magnum-common magnum/keystone_interface seen true
magnum-common magnum/cinder_os_region_name string ${KEYSTONE_REGION}
magnum-common magnum/cinder_os_region_name seen true
magnum-common magnum/create_volume_type boolean false
magnum-common magnum/create_volume_type seen true
magnum-common magnum/default_docker_volume_type string docker
magnum-common magnum/default_docker_volume_type seen true
" | debconf-set-selections
}

# Preseed octavia.
# Usage: os_preseed_octavia <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> <auth_token (unused, kept for calling compatibility)> <rbt_host> <rbt_login> <rbt_pass>
os_preseed_octavia () {
	local OCTAVIA_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	OCTAVIA_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	KEYSTONE_AUTH_TOKEN=${7}
	RBT_HOST=${8}
	RBT_LOGIN=${9}
	RBT_PASS=${10}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf octavia-common octavia ${OCTAVIA_SQL_PASS} octaviadb octavia "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint octavia-api octavia ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken octavia-common octavia ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} octavia service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds octavia-common octavia ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}

	# The health manager questions are gated by
	# octavia/configure_health_manager (default: false)
	echo "octavia-health-manager octavia/configure_health_manager boolean true
octavia-health-manager octavia/configure_health_manager seen true
octavia-health-manager octavia/health_manager_bind_ip string ${KEYSTONE_ENDPOINT_IP}
octavia-health-manager octavia/health_manager_bind_ip seen true
octavia-health-manager octavia/health_manager_bind_port string 5555
octavia-health-manager octavia/health_manager_bind_port seen true
octavia-health-manager octavia/hearthbeat_key string insecure
octavia-health-manager octavia/hearthbeat_key seen true
" | debconf-set-selections
}

# Preseed vigie. Vigie has a database and needs the keystone credentials,
# but no RabbitMQ.
# Usage: os_preseed_vigie <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> [<service_pass>]
os_preseed_vigie () {
	local VIGIE_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS
	VIGIE_SQL_PASS=${1}
	MYSQL_PASSWORD=${2}
	MYSQL_HOST=${3}
	KEYSTONE_ENDPOINT_IP=${4}
	KEYSTONE_REGION=${5}
	KEYSTONE_ADMIN_PASS=${6}
	if [ -n "${7:-}" ] ; then
		VIGIE_SERVICE_PASS=${7}
	fi
	if [ -z "${VIGIE_SERVICE_PASS:-}" ] ; then
		os_preseed_gen_pass
		VIGIE_SERVICE_PASS=${GENERATED_PASSWORD}
	fi

	os_preseed_set_dbconfig_conf vigie-common vigie ${VIGIE_SQL_PASS} vigiedb vigie "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint vigie-api vigie ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken vigie-common vigie ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} vigie service ${VIGIE_SERVICE_PASS}
}

# Swift doesn't use debconf at all (no database, no RabbitMQ question, no
# keystone_authtoken): its configuration is done through /etc/swift/*.conf
# and the ring files. This function is a no-op, kept so that callers can
# have a uniform os_preseed_<service> call for every service.
os_preseed_swift () {
	return 0
}

# Preseed a service which uses the standard db + rabbit + ksat + endpoint
# template families, and whose binary packages are named <service>-common
# and <service>-api.
# Usage: os_preseed_standard <service> <sql_pass> <mysql_root_pass> [mysql_host] <keystone_ip> <region> <admin_pass> <auth_token (unused)> <rbt_host> <rbt_login> <rbt_pass>
os_preseed_standard () {
	local APP_NAME APP_SQL_PASS MYSQL_PASSWORD MYSQL_HOST KEYSTONE_ENDPOINT_IP KEYSTONE_REGION KEYSTONE_ADMIN_PASS KEYSTONE_AUTH_TOKEN RBT_HOST RBT_LOGIN RBT_PASS
	APP_NAME=${1}
	APP_SQL_PASS=${2}
	MYSQL_PASSWORD=${3}
	MYSQL_HOST=${4}
	KEYSTONE_ENDPOINT_IP=${5}
	KEYSTONE_REGION=${6}
	KEYSTONE_ADMIN_PASS=${7}
	KEYSTONE_AUTH_TOKEN=${8}	# Unused: kept for calling compatibility
	RBT_HOST=${9}
	RBT_LOGIN=${10}
	RBT_PASS=${11}

	os_preseed_gen_pass
	os_preseed_set_dbconfig_conf ${APP_NAME}-common ${APP_NAME} ${APP_SQL_PASS} ${APP_NAME}db ${APP_NAME} "${MYSQL_PASSWORD}" "${MYSQL_HOST}"
	os_preseed_endpoint ${APP_NAME}-api ${APP_NAME} ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} ${KEYSTONE_ADMIN_PASS}
	os_preseed_keystone_authtoken ${APP_NAME}-common ${APP_NAME} ${KEYSTONE_ENDPOINT_IP} ${KEYSTONE_REGION} admin admin ${KEYSTONE_ADMIN_PASS} ${APP_NAME} service ${GENERATED_PASSWORD}
	os_preseed_rabbit_creds ${APP_NAME}-common ${APP_NAME} ${RBT_HOST} ${RBT_LOGIN} ${RBT_PASS}
}

os_preseed_designate () {
	os_preseed_standard designate "$@"
}

os_preseed_barbican () {
	os_preseed_standard barbican "$@"
}

os_preseed_manila () {
	os_preseed_standard manila "$@"
}

os_preseed_mistral () {
	os_preseed_standard mistral "$@"
}

os_preseed_cloudkitty () {
	os_preseed_standard cloudkitty "$@"
}
