diff --git a/manifests/api.pp b/manifests/api.pp index 748b02204..07ae2897d 100644 --- a/manifests/api.pp +++ b/manifests/api.pp @@ -11,12 +11,13 @@ class nova::api($enabled=false) { exec { "initial-db-sync": command => "/usr/bin/nova-manage db sync", refreshonly => true, - require => [Package["nova-common"], Nova_config['sql_connection']] + require => [Package["nova-common"], Nova_config['sql_connection']], } package { "nova-api": ensure => present, require => Package["python-greenlet"], + notify => Exec['initial-db-sync'], } service { "nova-api": ensure => $service_ensure, diff --git a/manifests/controller.pp b/manifests/controller.pp index 165d775e5..36bf54803 100644 --- a/manifests/controller.pp +++ b/manifests/controller.pp @@ -1,8 +1,98 @@ -class nova::controller () { +# +# TODO - this is currently hardcoded to be a xenserver +class nova::controller( + $db_password, + $db_name = 'nova', + $db_user = 'nova', + $db_host = 'localhost', - class { 'nova::api': } + $rabbit_port = undef, + $rabbit_userid = undef, + $rabbit_password = undef, + $rabbit_virtual_host = undef, + $rabbit_host = undef, - class { 'nova::scheduler': } + $libvirt_type = 'qemu', + + $flat_network_bridge = 'br100', + $flat_network_bridge_ip = '11.0.0.1', + $flat_network_bridge_netmask = '255.255.255.0', + + $nova_network = '11.0.0.0', + $available_ips = '256', + + $image_service = 'nova.image.glance.GlanceImageService', + $glance_host = 'localhost', + $glance_port = '9292', + + $admin_user = 'novaadmin', + $project_name = 'nova', + + $verbose = undef +) { + + + # work around hostname bug, LP #653405 + host { $hostname: + ip => $ipaddress, + host_aliases => $fqdn, + } + class { 'nova::rabbitmq': + port => $rabbit_port, + userid => $rabbit_userid, + password => $rabbit_password, + virtual_host => $rabbit_virtual_host, + require => Host[$hostname], + } + + class { "nova": + verbose => $verbose, + sql_connection => "mysql://${db_user}:${db_password}@${db_host}/${db_name}", + image_service => $image_service, + glance_host => $glance_host, + glance_port => $glance_port, + rabbit_host => $rabbit_host, + rabbit_port => $rabbit_port, + rabbit_userid => $rabbit_userid, + rabbit_password => $rabbit_password, + rabbit_virtual_host => $rabbit_virtual_host, + } + + class { "nova::api": enabled => true } + + class { "nova::compute": + api_server => $ipaddress, + libvirt_type => $libvirt_type, + enabled => true, + } + + class { "nova::network::flat": + enabled => true, + flat_network_bridge => $flat_network_bridge, + flat_network_bridge_ip => $flat_network_bridge_ip, + flat_network_bridge_netmask => $flat_network_bridge_netmask, + } + + class { "nova::objectstore": enabled => true } + class { "nova::scheduler": enabled => true } + + nova::manage::admin { $admin_user: } + nova::manage::project { $project_name: + owner => $admin_user, + } + + nova::manage::network { "${project_name}-net-${nova_network}": + network => $nova_network, + available_ips => $available_ips, + require => Nova::Manage::Project[$project_name], + } + + # set up glance server + class { 'glance::api': + swift_store_user => 'foo_user', + swift_store_key => 'foo_pass', + } + + class { 'glance::registry': } - class { 'nova::network': } }