2013-07-27 07:51:15 +02:00

54 lines
1.7 KiB
Puppet

define kickstack::db {
include pwgen
$fact_prefix = $::kickstack::fact_prefix
$database = $::kickstack::database
$servicename = $name
$username = $name
# Retrieve the currently set password for the service from its
# kickstack_*_sql_connection fact.
# If it's unset, generate one and subsequently export it.
$sql_connection = getvar("${fact_prefix}${servicename}_sql_connection")
$sql_password = $sql_connection ? {
undef => pwgen(),
default => pick(regsubst(getvar("${fact_prefix}${servicename}_sql_connection"),
".*://${username}:(.*)@.*/${servicename}",
'\1'),
pwgen())
}
# Export facts about the database only after configuring the database
Class["${servicename}::db::${database}"] -> Exportfact::Export<| tag == "$database" |>
# Configure the service database (classes look like nova::db::mysql or
# glance::db:postgresql, for example).
# If running on mysql, set the "allowed_hosts" parameter to % so we
# can connect to the database from anywhere.
case "${database}" {
'mysql': {
class { "${servicename}::db::mysql":
user => $username,
password => $sql_password,
charset => 'utf8',
allowed_hosts => '%',
notify => Kickstack::Exportfact::Export["${name}_sql_connection"]
}
}
default: {
class { "${name}::db::${database}":
password => $sql_password
}
}
}
# Export the MySQL connection string for the service
kickstack::exportfact::export { "${name}_sql_connection":
value => "${database}://${name}:${sql_password}@${hostname}/${name}",
tag => "$database"
}
}