refactor quantum configuration

add openstack::quantum manifest that can
be used to configure various quantum roles.

updates the fixtures file to use the latest quantum
from stackforge.

also updates how quantum integrates into the other
modules

    openstack::controller
* public and private interface are no longer required
* quantum user and db password should not have defaults
(but also not be required)
* change rabbit user
* ovs_local_ip defaults to internal address
* add quantum configuration to controller

    openstack::compute
* add quantum_host (b/c it is difference from
keystone host)
* allow setting service username and tenant
* set correct vif driver
* user the quantum openstack class
* default ovs_local_ip to internal address
* change rabbit username to not default to nova
(more services are not using it)

    nova::controller
* add metadata and quantum user params
* add quantum_md_proxy secret to nova::api
* only require public and private interfaces for
nova-networks
* only configure nova compute components related to
quantum

Change-Id: I9dc1628fbb493fd93bfd602b1c6e33c01ad46d96
This commit is contained in:
Daneyon Hansen
2013-05-23 15:19:55 -07:00
committed by Dan Bode
parent 76c3059336
commit 94a4096657
10 changed files with 712 additions and 158 deletions

View File

@@ -6,7 +6,7 @@ fixtures:
"glance": "git://github.com/stackforge/puppet-glance.git"
'horizon': 'git://github.com/stackforge/puppet-horizon'
'swift' : 'git://github.com/stackforge/puppet-swift'
'quantum': 'git://github.com/bodepd/puppet-quantum'
'quantum': 'git://github.com/stackforge/puppet-quantum'
"apt": "git://github.com/puppetlabs/puppetlabs-apt.git"
"apache": "git://github.com/puppetlabs/puppetlabs-apache.git"
"concat": "git://github.com/ripienaar/puppet-concat.git"

View File

@@ -20,7 +20,7 @@
# [network_config] Used to specify network manager specific parameters .Optional. Defualts to {}.
# [mysql_root_password] The root password to set for the mysql database. Optional. Defaults to sql_pass'.
# [rabbit_password] The password to use for the rabbitmq user. Optional. Defaults to rabbit_pw'
# [rabbit_user] The rabbitmq user to use for auth. Optional. Defaults to nova'.
# [rabbit_user] The rabbitmq user to use for auth. Optional. Defaults to openstack.
# [admin_email] The admin's email address. Optional. Defaults to someuser@some_fake_email_address.foo'.
# [admin_password] The default password of the keystone admin. Optional. Defaults to ChangeMe'.
# [keystone_db_password] The default password for the keystone db user. Optional. Defaults to keystone_pass'.
@@ -107,7 +107,7 @@ class openstack::all (
$network_config = {},
$quantum = true,
# Rabbit
$rabbit_user = 'nova',
$rabbit_user = 'openstack',
# Horizon
$horizon = true,
$cache_server_ip = '127.0.0.1',

View File

@@ -5,8 +5,6 @@
#
# === Parameters
#
# See params.pp
#
# === Examples
#
# class { 'openstack::nova::compute':
@@ -33,17 +31,25 @@ class openstack::compute (
$multi_host = false,
$enabled_apis = 'ec2,osapi_compute,metadata',
# Quantum
$quantum = false,
$quantum_host = false,
$quantum = true,
$quantum_user_password = false,
$keystone_host = false,
$quantum_admin_tenant_name = 'services',
$quantum_admin_user = 'quantum',
$enable_ovs_agent = true,
$enable_l3_agent = false,
$enable_dhcp_agent = false,
$quantum_auth_url = "http://127.0.0.1:35357/v2.0",
$keystone_host = '127.0.0.1',
$quantum_host = '127.0.0.1',
$ovs_local_ip = false,
# Nova
$nova_admin_tenant_name = 'services',
$nova_admin_user = 'nova',
$purge_nova_config = true,
$libvirt_vif_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver',
# Rabbit
$rabbit_host = '127.0.0.1',
$rabbit_user = 'nova',
$rabbit_user = 'openstack',
$rabbit_virtual_host = '/',
# Glance
$glance_api_servers = false,
@@ -65,6 +71,12 @@ class openstack::compute (
$enabled = true
) {
if $ovs_local_ip {
$ovs_local_ip_real = $ovs_local_ip
} else {
$ovs_local_ip_real = $internal_address
}
if $vncserver_listen {
$vncserver_listen_real = $vncserver_listen
} else {
@@ -156,9 +168,6 @@ class openstack::compute (
}
} else {
if ! $quantum_host {
fail('quantum host must be specified when quantum is installed on compute instances')
}
if ! $quantum_user_password {
fail('quantum user password must be set when quantum is configured')
}
@@ -166,37 +175,45 @@ class openstack::compute (
fail('keystone host must be configured when quantum is installed')
}
class { 'quantum':
verbose => $verbose,
debug => $verbose,
rabbit_host => $rabbit_host,
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
#sql_connection => $quantum_sql_connection,
class { 'openstack::quantum':
# Database
db_host => $db_host,
# Networking
ovs_local_ip => $ovs_local_ip_real,
# Rabbit
rabbit_host => $rabbit_host,
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
# Quantum OVS
enable_ovs_agent => $enable_ovs_agent,
firewall_driver => false,
# Quantum L3 Agent
enable_l3_agent => $enable_l3_agent,
enable_dhcp_agent => $enable_dhcp_agent,
auth_url => $quantum_auth_url,
user_password => $quantum_user_password,
# Keystone
keystone_host => $keystone_host,
# General
enabled => $enabled,
enable_server => false,
verbose => $verbose,
}
class { 'quantum::agents::ovs':
enable_tunneling => true,
local_ip => $internal_address,
class { 'nova::compute::quantum':
libvirt_vif_driver => $libvirt_vif_driver,
}
class { 'nova::compute::quantum': }
# does this have to be installed on the compute node?
# NOTE
# Configures nova.conf entries applicable to Quantum.
class { 'nova::network::quantum':
quantum_admin_password => $quantum_user_password,
quantum_auth_strategy => 'keystone',
quantum_url => "http://${keystone_host}:9696",
quantum_admin_tenant_name => 'services',
quantum_admin_username => 'quantum',
quantum_admin_auth_url => "http://${keystone_host}:35357/v2.0"
quantum_url => "http://${quantum_host}:9696",
quantum_admin_username => $quantum_admin_user,
quantum_admin_tenant_name => $quantum_admin_tenant_name,
quantum_admin_auth_url => "http://${keystone_host}:35357/v2.0",
}
nova_config {
'DEFAULT/linuxnet_interface_driver': value => 'nova.network.linux_net.LinuxOVSInterfaceDriver';
'DEFAULT/linuxnet_ovs_integration_bridge': value => 'br-int';
}
}
if $manage_volumes {

View File

@@ -19,7 +19,7 @@
# [nova_db_password] Nova DB password.
# [nova_user_password] Nova service password.
# [rabbit_password] Rabbit password.
# [rabbit_user] Rabbit User.
# [rabbit_user] Rabbit User. Optional. Defaults to openstack.
# [rabbit_virtual_host] Rabbit virtual host path for Nova. Defaults to '/'.
# [network_manager] Nova network manager to use.
# [fixed_range] Range of ipv4 network for vms.
@@ -43,6 +43,18 @@
# The next is an array of arrays, that can be used to add call-out links to the dashboard for other apps.
# There is no specific requirement for these apps to be for monitoring, that's just the defacto purpose.
# Each app is defined in two parts, the display name, and the URI
# [metadata_shared_secret]
# Shared secret used by nova and quantum to authenticate metadata.
# (optional) Defaults to false.
#
# [firewall_driver]
# Driver used to implement firewall rules.
# (optional) Defaults to 'quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver'.
#
# [quantum_auth_url]
# Url used to quantum to contact the authentication service.
# (optional) Default to http://127.0.0.1:35357/v2.0.
#
# [horizon_app_links] array as in '[ ["Nagios","http://nagios_addr:port/path"],["Ganglia","http://ganglia_addr"] ]'
# [enabled] Whether services should be enabled. This parameter can be used to
# implement services in active-passive modes for HA. Optional. Defaults to true.
@@ -67,8 +79,6 @@
class openstack::controller (
# Required Network
$public_address,
$public_interface,
$private_interface,
$admin_email,
# required password
$admin_password,
@@ -82,8 +92,8 @@ class openstack::controller (
$secret_key,
# cinder and quantum password are not required b/c they are
# optional. Not sure what to do about this.
$quantum_user_password = 'quantum_pass',
$quantum_db_password = 'quantum_pass',
$quantum_user_password = false,
$quantum_db_password = false,
$cinder_user_password = false,
$cinder_db_password = false,
# Database
@@ -94,6 +104,7 @@ class openstack::controller (
$mysql_bind_address = '0.0.0.0',
$allowed_hosts = '%',
# Keystone
$keystone_host = '127.0.0.1',
$keystone_db_user = 'keystone',
$keystone_db_dbname = 'keystone',
$keystone_admin_tenant = 'admin',
@@ -114,7 +125,9 @@ class openstack::controller (
$nova_db_dbname = 'nova',
$purge_nova_config = true,
$enabled_apis = 'ec2,osapi_compute,metadata',
# Network
# Nova Networking
$public_interface = false,
$private_interface = false,
$internal_address = false,
$admin_address = false,
$network_manager = 'nova.network.manager.FlatDHCPManager',
@@ -126,7 +139,7 @@ class openstack::controller (
$auto_assign_floating_ip = false,
$network_config = {},
# Rabbit
$rabbit_user = 'nova',
$rabbit_user = 'openstack',
$rabbit_virtual_host = '/',
# Horizon
$horizon = true,
@@ -143,13 +156,30 @@ class openstack::controller (
$cinder = true,
$cinder_db_user = 'cinder',
$cinder_db_dbname = 'cinder',
# quantum
$quantum = false,
# Quantum
$quantum = true,
$bridge_interface = undef,
$external_bridge_name = 'br-ex',
$enable_ovs_agent = false,
$enable_dhcp_agent = true,
$enable_l3_agent = true,
$enable_metadata_agent = true,
$metadata_shared_secret = false,
$firewall_driver = 'quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver',
$quantum_db_user = 'quantum',
$quantum_db_dbname = 'quantum',
$quantum_db_name = 'quantum',
$quantum_auth_url = 'http://127.0.0.1:35357/v2.0',
$enable_quantum_server = true,
$ovs_local_ip = false,
$enabled = true
) {
if $ovs_local_ip {
$ovs_local_ip_real = $ovs_local_ip
} else {
$ovs_local_ip_real = $internal_address
}
if $internal_address {
$internal_address_real = $internal_address
} else {
@@ -279,9 +309,7 @@ class openstack::controller (
# Quantum
quantum => $quantum,
quantum_user_password => $quantum_user_password,
quantum_db_password => $quantum_db_password,
quantum_db_user => $quantum_db_user,
quantum_db_dbname => $quantum_db_dbname,
metadata_shared_secret => $metadata_shared_secret,
# Nova
nova_admin_tenant_name => $nova_admin_tenant_name,
nova_admin_user => $nova_admin_user,
@@ -304,6 +332,55 @@ class openstack::controller (
enabled => $enabled,
}
######### Quantum Controller Services ########
if ($quantum) {
if ! $quantum_user_password {
fail('quantum_user_password must be set when configuring quantum')
}
if ! $quantum_db_password {
fail('quantum_db_password must be set when configuring quantum')
}
if ! $bridge_interface {
fail('bridge_interface must be set when configuring quantum')
}
class { 'openstack::quantum':
# Database
db_host => $db_host,
# Rabbit
rabbit_host => $rabbit_host,
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
rabbit_virtual_host => $rabbit_virtual_host,
# Quantum OVS
ovs_local_ip => $ovs_local_ip_real,
bridge_uplinks => ["${external_bridge_name}:${bridge_interface}"],
bridge_mappings => ["default:${external_bridge_name}"],
enable_ovs_agent => $enable_ovs_agent,
firewall_driver => $firewall_driver,
# Database
db_name => $quantum_db_name,
db_user => $quantum_db_user,
db_password => $quantum_db_password,
# Quantum agents
enable_dhcp_agent => $enable_dhcp_agent,
enable_l3_agent => $enable_l3_agent,
enable_metadata_agent => $enable_metadata_agent,
auth_url => $quantum_auth_url,
user_password => $quantum_user_password,
shared_secret => $metadata_shared_secret,
# Keystone
keystone_host => $keystone_host,
# General
enabled => $enabled,
enable_server => $enable_quantum_server,
verbose => $verbose,
}
}
######### Cinder Controller Services ########
if ($cinder) {

View File

@@ -6,7 +6,16 @@
#
# === Parameters
#
# See params.pp
# [quantum]
# Specifies if nova should be configured to use quantum.
# (optional) Defaults to false (indicating nova-networks should be used)
#
# [quantum_user_password]
# password that nova uses to authenticate with quantum.
#
# [metadata_shared_secret] Secret used to authenticate between nova and the
# quantum metadata services.
# (Optional). Defaults to undef.
#
# === Examples
#
@@ -43,11 +52,9 @@ class openstack::nova::controller (
$public_interface = undef,
$private_interface = undef,
# quantum
$quantum = false,
$quantum_db_dbname = 'quantum',
$quantum_db_user = 'quantum',
$quantum_db_password = 'quantum_pass',
$quantum_user_password = 'quantum_pass',
$quantum = true,
$quantum_user_password = false,
$metadata_shared_secret = undef,
# Nova
$nova_admin_tenant_name = 'services',
$nova_admin_user = 'nova',
@@ -55,7 +62,7 @@ class openstack::nova::controller (
$nova_db_dbname = 'nova',
$enabled_apis = 'ec2,osapi_compute,metadata',
# Rabbit
$rabbit_user = 'nova',
$rabbit_user = 'openstack',
$rabbit_virtual_host = '/',
# Database
$db_type = 'mysql',
@@ -64,9 +71,10 @@ class openstack::nova::controller (
# VNC
$vnc_enabled = true,
$vncproxy_host = undef,
# General
# Keystone
$keystone_host = '127.0.0.1',
$verbose = 'False',
# General
$verbose = false,
$enabled = true
) {
@@ -114,12 +122,13 @@ class openstack::nova::controller (
# Configure nova-api
class { 'nova::api':
enabled => $enabled,
admin_tenant_name => $nova_admin_tenant_name,
admin_user => $nova_admin_user,
admin_password => $nova_user_password,
enabled_apis => $enabled_apis,
auth_host => $keystone_host,
enabled => $enabled,
admin_tenant_name => $nova_admin_tenant_name,
admin_user => $nova_admin_user,
admin_password => $nova_user_password,
enabled_apis => $enabled_apis,
auth_host => $keystone_host,
quantum_metadata_proxy_shared_secret => $metadata_shared_secret,
}
@@ -142,6 +151,13 @@ class openstack::nova::controller (
}
}
if ! $private_interface {
fail('private interface must be set when nova networking is used')
}
if ! $public_interface {
fail('public interface must be set when nova networking is used')
}
class { 'nova::network':
private_interface => $private_interface,
public_interface => $public_interface,
@@ -155,39 +171,10 @@ class openstack::nova::controller (
install_service => $enable_network_service,
}
} else {
# Set up Quantum
$quantum_sql_connection = "mysql://${quantum_db_user}:${quantum_db_password}@${db_host}/${quantum_db_dbname}?charset=utf8"
class { 'quantum':
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
#sql_connection => $quantum_sql_connection,
verbose => $verbose,
debug => $verbose,
}
# Configure Nova for Quantum networking
class { 'quantum::server':
auth_password => $quantum_user_password,
}
class { 'quantum::plugins::ovs':
sql_connection => $quantum_sql_connection,
tenant_network_type => 'gre',
}
class { 'quantum::agents::ovs':
bridge_uplinks => ["br-ex:${public_interface}"],
bridge_mappings => ['external:br-ex'],
enable_tunneling => true,
local_ip => $internal_address,
}
class { 'quantum::agents::dhcp':
use_namespaces => False,
}
class { 'quantum::agents::l3':
external_network_bridge => 'br-ex',
auth_password => $quantum_user_password,
if ! $quantum_user_password {
fail('quantum_user_password must be specified when quantum is configured')
}
class { 'nova::network::quantum':

242
manifests/quantum.pp Normal file
View File

@@ -0,0 +1,242 @@
#
# == Class: openstack::quantum
#
# Class to define quantum components for openstack. This class can
# be configured to provide all quantum related functionality.
#
# === Parameters
#
# [user_password]
# Password used for authentication.
# (required)
#
# [rabbit_password]
# Password used to connect to rabbitmq
# (required)
#
# [enabled]
# state of the quantum services.
# (optional) Defaults to true.
#
# [enable_server]
# If the server should be installed.
# (optional) Defaults to true.
#
# [enable_dhcp_agent]
# Whether the dhcp agent should be enabled.
# (optional) Defaults to false.
#
# [enable_l3_agent]
# Whether the l3 agent should be enabled.
# (optional) Defaults to false.
#
# [enable_metadata_agent]
# Whether the metadata agent should be enabled.
# (optional) Defaults to false.
#
# [enable_ovs_agent]
# Whether the ovs agent should be enabled.
# (optional) Defaults to false.
#
# [bridge_uplinks]
# OVS external bridge name and physical bridge interface tuple.
# (optional) Defaults to [].
#
# [bridge_mappings]
# Physical network name and OVS external bridge name tuple. Only needed for flat and VLAN networking.
# (optional) Defaults to [].
#
# [auth_url]
# Url used to contact the authentication service.
# (optional) Defaults to 'http://localhost:35357/v2.0'.
#
# [shared_secret]
# Shared secret used for the metadata service.
# (optional) Defaults to false indicating the metadata service is not configured.
#
# [metadata_ip]
# Ip address of metadata service.
# (optional) Defaults to '127.0.0.1'.
#
# [db_password]
# Password used to connect to quantum database.
# (required)
#
# [db_type]
# Type of database to use. Only accepts mysql at the moment.
# (optional)
#
# [ovs_local_ip]
# Ip address to use for tunnel endpoint.
# Only required when ovs is enabled. No default.
#
# [ovs_enable_tunneling]
# Whether ovs tunnels should be enabled.
# (optional) Defaults to true.
#
# [firewall_driver]
# Firewall driver to use.
# (optional) Defaults to undef.
#
# [rabbit_user]
# Name of rabbit user.
# (optional) defaults to rabbit_user.
#
# [rabbit_host]
# Host where rabbitmq is running.
# (optional) 127.0.0.1
#
# [rabbit_virtual_host]
# Virtual host to use for rabbitmq.
# (optional) Defaults to '/'.
#
# [db_host]
# Host where db is running.
# (optional) Defaults to 127.0.0.1.
#
# [db_name]
# Name of quantum database.
# (optional) Defaults to quantum.
#
# [db_user]
# User to connect to quantum database as.
# (optional) Defaults to quantum.
#
# [bind_address]
# Address quantum api server should bind to.
# (optional) Defaults to 0.0.0.0.
#
# [keystone_host]
# Host running keystone.
# (optional) Defaults to 127.0.0.1.
#
# [verbose]
# Enables verbose for quantum services.
# (optional) Defaults to false.
#
# [debug]
# Enables debug for quantum services.
# (optional) Defaults to false.
#
# === Examples
#
# class { 'openstack::quantum':
# db_password => 'quantum_db_pass',
# user_password => 'keystone_user_pass',
# rabbit_password => 'quantum_rabbit_pass',
# bridge_uplinks => '[br-ex:eth0]',
# bridge_mappings => '[default:br-ex],
# enable_ovs_agent => true,
# ovs_local_ip => '10.10.10.10',
# }
#
class openstack::quantum (
# Passwords
$user_password,
$rabbit_password,
# enable or disable quantum
$enabled = true,
$enable_server = true,
# Set DHCP/L3 Agents on Primary Controller
$enable_dhcp_agent = false,
$enable_l3_agent = false,
$enable_metadata_agent = false,
$enable_ovs_agent = false,
# OVS settings
$ovs_local_ip = false,
$ovs_enable_tunneling = true,
$bridge_uplinks = [],
$bridge_mappings = [],
# rely on the default set in ovs
$firewall_driver = undef,
# networking and Interface Information
# Metadata configuration
$shared_secret = false,
$metadata_ip = '127.0.0.1',
# Quantum Authentication Information
$auth_url = 'http://localhost:35357/v2.0',
# Rabbit Information
$rabbit_user = 'rabbit_user',
$rabbit_host = '127.0.0.1',
$rabbit_virtual_host = '/',
# Database. Currently mysql is the only option.
$db_type = 'mysql',
$db_password = false,
$db_host = '127.0.0.1',
$db_name = 'quantum',
$db_user = 'quantum',
# General
$bind_address = '0.0.0.0',
$keystone_host = '127.0.0.1',
$verbose = false,
$debug = false,
) {
class { '::quantum':
enabled => $enabled,
bind_host => $bind_address,
rabbit_host => $rabbit_host,
rabbit_virtual_host => $rabbit_virtual_host,
rabbit_user => $rabbit_user,
rabbit_password => $rabbit_password,
verbose => $verbose,
debug => $debug,
}
if $enable_server {
if ! $db_password {
fail('db password must be set when configuring a quantum server')
}
if ($db_type == 'mysql') {
$sql_connection = "mysql://${db_user}:${db_password}@${db_host}/${db_name}?charset=utf8"
} else {
fail("Unsupported db type: ${db_type}. Only mysql is currently supported.")
}
class { 'quantum::server':
auth_host => $keystone_host,
auth_password => $user_password,
}
class { 'quantum::plugins::ovs':
sql_connection => $sql_connection,
tenant_network_type => 'gre',
}
}
if $enable_ovs_agent {
if ! $ovs_local_ip {
fail('ovs_local_ip parameter must be set when using ovs agent')
}
class { 'quantum::agents::ovs':
bridge_uplinks => $bridge_uplinks,
bridge_mappings => $bridge_mappings,
enable_tunneling => $ovs_enable_tunneling,
local_ip => $ovs_local_ip,
firewall_driver => $firewall_driver,
}
}
if $enable_dhcp_agent {
class { 'quantum::agents::dhcp':
use_namespaces => true,
}
}
if $enable_l3_agent {
class {"quantum::agents::l3":
use_namespaces => true,
}
}
if $enable_metadata_agent {
if ! $shared_secret {
fail('Shared secret parameter must be set when using metadata agent')
}
class { 'quantum::agents::metadata':
auth_password => $user_password,
shared_secret => $shared_secret,
auth_url => $auth_url,
metadata_ip => $metadata_ip,
}
}
}

View File

@@ -32,7 +32,7 @@ describe 'openstack::compute' do
should contain_class('nova').with(
:sql_connection => 'mysql://user:pass@host/dbname',
:rabbit_host => '127.0.0.1',
:rabbit_userid => 'nova',
:rabbit_userid => 'openstack',
:rabbit_password => 'rabbit_pw',
:rabbit_virtual_host => '/',
:image_service => 'nova.image.glance.GlanceImageService',
@@ -68,7 +68,7 @@ describe 'openstack::compute' do
should contain_class('openstack::cinder::storage').with(
:sql_connection => 'mysql://user:pass@host/dbcinder',
:rabbit_password => 'rabbit_pw',
:rabbit_userid => 'nova',
:rabbit_userid => 'openstack',
:rabbit_host => '127.0.0.1',
:rabbit_virtual_host => '/',
:volume_group => 'cinder-volumes',
@@ -165,6 +165,7 @@ describe 'openstack::compute' do
'enabled' => true,
'install_service' => true
})
should_not contain_class('openstack::quantum')
end
describe 'with defaults' do
@@ -241,32 +242,48 @@ describe 'openstack::compute' do
:internal_address => '127.0.0.1',
:public_interface => 'eth3',
:quantum => true,
:keystone_host => '127.0.0.1',
:quantum_host => '127.0.0.1',
:keystone_host => '127.0.0.3',
:quantum_host => '127.0.0.2',
:quantum_user_password => 'quantum_user_password'
)
end
it 'should configure quantum' do
should contain_class('quantum').with(
:verbose => false,
:debug => false,
:rabbit_host => params[:rabbit_host],
:rabbit_password => params[:rabbit_password]
should contain_class('openstack::quantum').with(
:db_host => '127.0.0.1',
:ovs_local_ip => params[:internal_address],
:rabbit_host => params[:rabbit_host],
:rabbit_user => 'openstack',
:rabbit_password => params[:rabbit_password],
:enable_ovs_agent => true,
:firewall_driver => false,
:enable_l3_agent => false,
:enable_dhcp_agent => false,
:auth_url => 'http://127.0.0.1:35357/v2.0',
:user_password => params[:quantum_user_password],
:keystone_host => params[:keystone_host],
:enabled => true,
:enable_server => false,
:verbose => false
)
should contain_class('quantum::agents::ovs').with(
:enable_tunneling => true,
:local_ip => '127.0.0.1'
should contain_class('nova::compute::quantum').with(
:libvirt_vif_driver => 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver'
)
should contain_class('nova::compute::quantum')
should contain_class('nova::network::quantum').with(
:quantum_admin_password => 'quantum_user_password',
:quantum_auth_strategy => 'keystone',
:quantum_url => "http://127.0.0.1:9696",
:quantum_url => "http://127.0.0.2:9696",
:quantum_admin_tenant_name => 'services',
:quantum_admin_username => 'quantum',
:quantum_admin_auth_url => "http://127.0.0.1:35357/v2.0"
:quantum_admin_auth_url => "http://127.0.0.3:35357/v2.0"
)
should_not contain_class('quantum::server')
should_not contain_class('quantum::plugins::ovs')
should_not contain_class('quantum::agents::dhcp')
should_not contain_class('quantum::agents::l3')
end
end

View File

@@ -64,10 +64,14 @@ describe 'openstack::controller' do
let :params do
default_params.merge(
:enabled => true,
:db_type => 'mysql',
:quantum => true,
:cinder => true
:enabled => true,
:db_type => 'mysql',
:quantum => true,
:metadata_shared_secret => 'secret',
:bridge_interface => 'eth1',
:quantum_user_password => 'q_pass',
:quantum_db_password => 'q_db_pass',
:cinder => true
)
end
@@ -105,7 +109,7 @@ describe 'openstack::controller' do
)
should contain_class('quantum::db::mysql').with(
:user => 'quantum',
:password => 'quantum_pass',
:password => 'q_db_pass',
:dbname => 'quantum',
:allowed_hosts => '%'
)
@@ -341,7 +345,7 @@ describe 'openstack::controller' do
it 'should contain enabled nova services' do
should contain_class('nova::rabbitmq').with(
:userid => 'nova',
:userid => 'openstack',
:password => 'rabbit_pw',
:virtual_host => '/',
:enabled => true
@@ -349,7 +353,7 @@ describe 'openstack::controller' do
should contain_class('nova').with(
:sql_connection => 'mysql://nova:nova_pass@127.0.0.1/nova',
:rabbit_host => '127.0.0.1',
:rabbit_userid => 'nova',
:rabbit_userid => 'openstack',
:rabbit_password => 'rabbit_pw',
:rabbit_virtual_host => '/',
:image_service => 'nova.image.glance.GlanceImageService',
@@ -479,8 +483,11 @@ describe 'openstack::controller' do
default_params.merge({
:quantum => true,
:verbose => true,
:quantum_user_password => 'q_pass',
:public_interface => 'eth_27'
:quantum_user_password => 'q_pass',
:bridge_interface => 'eth_27',
:internal_address => '10.0.0.3',
:quantum_db_password => 'q_db_pass',
:metadata_shared_secret => 'secret'
})
end
@@ -488,46 +495,31 @@ describe 'openstack::controller' do
it 'should configure quantum' do
should contain_class('quantum').with({
:rabbit_user => 'nova',
:rabbit_password => 'rabbit_pw',
:verbose => true,
:debug => true,
})
should contain_class('quantum::server').with({
:auth_password => 'q_pass',
})
should contain_class('quantum::plugins::ovs').with({
:sql_connection => 'mysql://quantum:quantum_pass@127.0.0.1/quantum?charset=utf8',
})
should contain_class('quantum::agents::ovs').with( {
:bridge_uplinks => ["br-ex:eth_27"],
:bridge_mappings => ['external:br-ex'],
:enable_tunneling => true,
:local_ip => '127.0.0.1',
} )
should contain_class('quantum::agents::dhcp').with( {
:use_namespaces => 'False',
} )
should contain_class('quantum::agents::l3').with( {
:external_network_bridge => 'br-ex',
:auth_password => 'q_pass',
} )
should contain_class('nova::network::quantum').with({
:quantum_admin_password => 'q_pass',
:quantum_auth_strategy => 'keystone',
:quantum_url => "http://127.0.0.1:9696",
:quantum_admin_tenant_name => 'services',
:quantum_admin_username => 'quantum',
:quantum_admin_auth_url => "http://127.0.0.1:35357/v2.0",
})
should contain_class('openstack::quantum').with(
:db_host => '127.0.0.1',
:rabbit_host => '127.0.0.1',
:rabbit_user => 'openstack',
:rabbit_password => 'rabbit_pw',
:rabbit_virtual_host => '/',
:ovs_local_ip => '10.0.0.3',
:bridge_uplinks => ["br-ex:eth_27"],
:bridge_mappings => ["default:br-ex"],
:enable_ovs_agent => false,
:firewall_driver => 'quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver',
:db_name => 'quantum',
:db_user => 'quantum',
:db_password => 'q_db_pass',
:enable_dhcp_agent => true,
:enable_l3_agent => true,
:enable_metadata_agent => true,
:auth_url => 'http://127.0.0.1:35357/v2.0',
:user_password => 'q_pass',
:shared_secret => 'secret',
:keystone_host => '127.0.0.1',
:enabled => true,
:enable_server => true,
:verbose => true
)
end

View File

@@ -0,0 +1,77 @@
require 'spec_helper'
describe 'openstack::nova::controller' do
let :params do
{
:public_address => '127.0.0.1',
:db_host => '127.0.0.1',
:rabbit_password => 'rabbit_pass',
:nova_user_password => 'nova_user_pass',
:quantum_user_password => 'quantum_user_pass',
:nova_db_password => 'nova_db_pass',
:quantum => true,
:metadata_shared_secret => 'secret'
}
end
let :facts do
{:osfamily => 'Debian' }
end
it { should contain_class('openstack::nova::controller') }
context 'when configuring quantum' do
it 'should configure nova with quantum' do
should contain_class('nova::rabbitmq').with(
:userid => 'openstack',
:password => 'rabbit_pass',
:enabled => true,
:virtual_host => '/'
)
should contain_class('nova').with(
:sql_connection => 'mysql://nova:nova_db_pass@127.0.0.1/nova',
:rabbit_userid => 'openstack',
:rabbit_password => 'rabbit_pass',
:rabbit_virtual_host => '/',
:image_service => 'nova.image.glance.GlanceImageService',
:glance_api_servers => '127.0.0.1:9292',
:verbose => false,
:rabbit_host => '127.0.0.1'
)
should contain_class('nova::api').with(
:enabled => true,
:admin_tenant_name => 'services',
:admin_user => 'nova',
:admin_password => 'nova_user_pass',
:enabled_apis => 'ec2,osapi_compute,metadata',
:auth_host => '127.0.0.1',
:quantum_metadata_proxy_shared_secret => 'secret'
)
should contain_class('nova::network::quantum').with(
:quantum_admin_password => 'quantum_user_pass',
:quantum_auth_strategy => 'keystone',
:quantum_url => "http://127.0.0.1:9696",
:quantum_admin_tenant_name => 'services',
:quantum_admin_username => 'quantum',
:quantum_admin_auth_url => "http://127.0.0.1:35357/v2.0"
)
['nova::scheduler', 'nova::objectstore', 'nova::cert', 'nova::consoleauth', 'nova::conductor'].each do |x|
should contain_class(x).with_enabled(true)
end
should contain_class('nova::vncproxy').with(
:host => '127.0.0.1',
:enabled => true
)
end
end
end

View File

@@ -0,0 +1,145 @@
require 'spec_helper'
describe 'openstack::quantum' do
let :facts do
{:osfamily => 'Redhat'}
end
let :params do
{
:user_password => 'q_user_pass',
:rabbit_password => 'rabbit_pass',
:db_password => 'bar'
}
end
context 'install quantum with default settings' do
before do
params.delete(:db_password)
end
it 'should fail b/c database password is required' do
expect do
subject
end.to raise_error(Puppet::Error, /db password must be set/)
end
end
context 'install quantum with default and database password' do
it 'should perform default configuration' do
should contain_class('quantum').with(
:enabled => true,
:bind_host => '0.0.0.0',
:rabbit_host => '127.0.0.1',
:rabbit_virtual_host => '/',
:rabbit_user => 'rabbit_user',
:rabbit_password => 'rabbit_pass',
:verbose => false,
:debug => false
)
should contain_class('quantum::server').with(
:auth_host => '127.0.0.1',
:auth_password => 'q_user_pass'
)
should contain_class('quantum::plugins::ovs').with(
:sql_connection => "mysql://quantum:bar@127.0.0.1/quantum?charset=utf8",
:tenant_network_type => 'gre'
)
end
end
context 'when server is disabled' do
before do
params.merge!(:enable_server => false)
end
it 'should not configure server' do
should_not contain_class('quantum::server')
should_not contain_class('quantum::plugins::ovs')
end
end
context 'when ovs agent is enabled with all required params' do
before do
params.merge!(
:enable_ovs_agent => true,
:bridge_uplinks => ['br-ex:eth0'],
:bridge_mappings => ['default:br-ex'],
:ovs_local_ip => '10.0.0.2'
)
end
it { should contain_class('quantum::agents::ovs').with(
:bridge_uplinks => ['br-ex:eth0'],
:bridge_mappings => ['default:br-ex'],
:enable_tunneling => true,
:local_ip => '10.0.0.2',
:firewall_driver => 'quantum.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver'
)}
context 'without ovs_local_ip' do
before do
params.delete(:ovs_local_ip)
end
it 'should fail' do
expect do
subject
end.to raise_error(Puppet::Error, /ovs_local_ip parameter must be set/)
end
end
end
context 'when dhcp agent is enabled' do
before do
params.merge!(:enable_dhcp_agent => true)
end
it { should contain_class('quantum::agents::dhcp').with(
:use_namespaces => true
) }
end
context 'when l3 agent is enabled' do
before do
params.merge!(:enable_l3_agent => true)
end
it { should contain_class('quantum::agents::l3').with(
:use_namespaces => true
) }
end
context 'when metadata agent is enabled' do
before do
params.merge!(
:enable_metadata_agent => true
)
end
it 'should fail' do
expect do
subject
end.to raise_error(Puppet::Error, /Shared secret parameter must be set/)
end
context 'with a shared secret' do
before do
params.merge!(
:shared_secret => 'foo'
)
end
it { should contain_class('quantum::agents::metadata').with(
:auth_password => 'q_user_pass',
:shared_secret => 'foo',
:auth_url => 'http://localhost:35357/v2.0',
:metadata_ip => '127.0.0.1'
) }
end
end
context 'with invalid db_type' do
before do
params.merge!(:db_type => 'foo', :db_password => 'bar')
end
it 'should fail' do
expect do
subject
end.to raise_error(Puppet::Error, /Unsupported db type: foo./)
end
end
end