Init commit to do basic setting

This commit is contained in:
Xingchao Yu 2013-09-25 22:22:17 +08:00
commit bbdbc64bb4
9 changed files with 327 additions and 0 deletions

View File

@ -0,0 +1,22 @@
Puppet::Type.type(:designate_config).provide(
:ini_setting,
:parent => Puppet::Type.type(:ini_setting).provider(:ruby)
) do
def section
resource[:name].split('/', 2).first
end
def setting
resource[:name].split('/', 2).last
end
def separator
'='
end
def file_path
'/etc/designate/designate.conf'
end
end

View File

@ -0,0 +1,19 @@
Puppet::Type.newtype(:designate_config) do
ensurable
newparam(:name, :namevar => true) do
desc 'Section/setting name to manage from designate.conf'
newvalues(/\S+\/\S+/)
end
newproperty(:value) do
desc 'The value of the setting to be defined.'
munge do |value|
value = value.to_s.strip
value.capitalize! if value =~ /^(true|false)$/i
value
end
end
end

29
manifests/api.pp Normal file
View File

@ -0,0 +1,29 @@
class designate::api (
$enabled = true,
$auth_strategy = 'noauth',
){
include designate::params
package { 'designate-api':
ensure => installed,
name => $::designate::params::api_package_name,
}
Package['designate-common'] -> Service['designate-api']
service { 'designate-api':
ensure => $service_ensure,
name => $::designate::params::api_service_name,
enable => $enabled,
hasstatus => true,
hasrestart => true,
require => Class['designate::db'],
subscribe => Exec['designate-dbsync']
}
designate_config {
'service:api/auth_strategy' : value => $auth_strategy;
}
}

27
manifests/central.pp Normal file
View File

@ -0,0 +1,27 @@
class designate::central (
$enabled = true,
$backend_driver = 'bind9',
) {
include designate::params
package { 'designate-api':
ensure => installed,
name => $::designate::params::central_package_name,
}
Package['designate-common'] -> Service['designate-api']
service { 'designate-api':
ensure => $service_ensure,
name => $::designate::params::central_service_name,
enable => $enabled,
hasstatus => true,
hasrestart => true,
require => Class['designate::db'],
subscribe => Exec['designate-dbsync']
}
designate_config {
'service:central/backend_driver' : value => $backend_driver;
}
}

49
manifests/db.pp Normal file
View File

@ -0,0 +1,49 @@
# Configures the designate database
# This class will install the required libraries depending on the driver
# specified in the connection_string parameter
#
# == Parameters
# [*database_connection*]
# the connection string. format: [driver]://[user]:[password]@[host]/[database]
#
class designate::db (
$database_connection = 'mysql://designate:designate@localhost/designate'
) {
include designate::params
Package<| title == 'designate-common' |> -> Class['designate::db']
case $database_connection {
/^mysql:\/\//: {
$backend_package = false
include mysql::python
}
default: {
fail('Unsupported backend configured')
}
}
if $backend_package and !defined(Package[$backend_package]) {
package {'designate-backend-package':
ensure => present,
name => $backend_package,
}
}
designate_config {
'storage:sqlalchemy/database_connection': value => $database_connection;
}
designate_config['storage:sqlalchemy/database_connection'] ~> Exec['designate-dbsync']
exec { 'designate-dbsync':
command => $::designate::params::dbsync_command,
path => '/usr/bin',
user => 'root',
refreshonly => true,
logoutput => on_failure,
subscribe => designate_config['storage:sqlalchemy/database_connection']
}
}

63
manifests/db/mysql.pp Normal file
View File

@ -0,0 +1,63 @@
# The designate::db::mysql class creates a MySQL database for designate.
# It must be used on the MySQL server
#
# == Parameters
#
# [*password*]
# password to connect to the database. Mandatory.
#
# [*dbname*]
# name of the database. Optional. Defaults to designate.
#
# [*user*]
# user to connect to the database. Optional. Defaults to designate.
#
# [*host*]
# the default source host user is allowed to connect from.
# Optional. Defaults to 'localhost'
#
# [*allowed_hosts*]
# other hosts the user is allowd to connect from.
# Optional. Defaults to undef.
#
# [*charset*]
# the database charset. Optional. Defaults to 'latin1'
#
class designate::db::mysql(
$password = false,
$dbname = 'designate',
$user = 'designate',
$host = 'localhost',
$allowed_hosts = undef,
$charset = 'latin1',
) {
validate_string($password)
Class['mysql::server'] -> Class['designate::db::mysql']
Class['designate::db::mysql'] -> Exec<| title == 'designate-dbsync' |>
Mysql::Db[$dbname] ~> Exec<| title == 'designate-dbsync' |>
mysql::db { $dbname:
user => $user,
password => $password,
host => $host,
charset => $charset,
require => Class['mysql::config'],
}
# Check allowed_hosts to avoid duplicate resource declarations
if is_array($allowed_hosts) and delete($allowed_hosts,$host) != [] {
$real_allowed_hosts = delete($allowed_hosts,$host)
} elsif is_string($allowed_hosts) and ($allowed_hosts != $host) {
$real_allowed_hosts = $allowed_hosts
}
if $real_allowed_hosts {
designate::db::mysql::host_access { $real_allowed_hosts:
user => $user,
password => $password,
database => $dbname,
}
}
}

View File

@ -0,0 +1,30 @@
# Allow a user to access the designate database
#
# == Namevar
# The host to allow
#
# == Parameters
# [*user*]
# username to allow
#
# [*password*]
# user password
#
# [*database*]
# the database name
#
define designate::db::mysql::host_access ($user, $password, $database) {
database_user { "${user}@${name}":
password_hash => mysql_password($password),
provider => 'mysql',
require => Database[$database],
}
database_grant { "${user}@${name}/${database}":
# TODO figure out which privileges to grant.
privileges => 'all',
provider => 'mysql',
require => Database_user["${user}@${name}"]
}
}

62
manifests/init.pp Normal file
View File

@ -0,0 +1,62 @@
class designate(
$package_ensure = present,
$verbose = false,
$debug = false,
$rabbit_host = '127.0.0.1',
$rabbit_port = '5672',
$rabbit_userid = 'guest',
$rabbit_password = '',
$rabbit_virtualhost = '/',
) {
package { 'openstack-designate':
ensure => $package_ensure,
name => $::designate::params::common_package_name,
}
user { 'desginate':
name => 'desginate',
gid => 'desginate',
groups => ['nova'],
system => true,
require => Package['openstack-designate'],
}
group { 'desginate':
name => 'desginate',
require => Package['openstack-designate'],
}
file { '/etc/desginate/':
ensure => directory,
owner => 'desginate',
group => 'desginate',
mode => '0750',
}
file { '/etc/desginate/desginate.conf':
owner => 'desginate',
group => 'desginate',
mode => '0640',
}
Package['openstack-designate'] -> desginate_config<||>
designate_config {
'DEFAULT/rabbit_host' : value => $rabbit_host;
'DEFAULT/rabbit_port' : value => $rabbit_port;
'DEFAULT/rabbit_hosts' : value => "${rabbit_host}:${rabbit_port}";
'DEFAULT/rabbit_userid' : value => $rabbit_userid;
'DEFAULT/rabbit_password' : value => $rabbit_password;
'DEFAULT/rabbit_virtualhost' : value => $rabbit_virtualhost;
}
# default setting
designate_config {
'DEFAULT/debug' : value => $debug;
'DEFAULT/verbose' : value => $verbose;
'DEFAULT/log_dir' : value => $::designate::params::log_dir;
'DEFAULT/state_path' : value => $::designate::params::state_path;
}
}

26
manifests/params.pp Normal file
View File

@ -0,0 +1,26 @@
# Params
class designate::params {
$dbsync_command = 'designate-manage database-init && designate-manage database-sync'
$log_dir = '/var/named/data'
case $::osfamily {
'RedHat': {
#package name
$common_package_name = 'openstack-designate'
$api_package_name = 'openstack-designate-api'
$central_package_name = 'openstack-designate-central'
$sink_package_name = 'openstack-designate-sink'
# service names
$agent_service_name = 'openstack-designate-agent'
$api_service_name = 'openstack-designate-api'
$central_service_name = 'openstack-designate-central'
}
}
}