
There are two problems with provider networks: First, the way bridge mappings are done prevents users from having mutliple provider networks. This patch allows the user to pass them in directly. Second, change 38426 proposes changing the behavior of network_vlan_ranges and this patch will reflect that by passing down undef unless the user wishes to override the defaults specified in quantum::plugins::ovs Change-Id: I36b11f9e0fa5458e50cbe59c8f4a5d1f3d9bdaa6
279 lines
8.9 KiB
Puppet
279 lines
8.9 KiB
Puppet
#
|
|
# == Class: openstack::compute
|
|
#
|
|
# Manifest to install/configure nova-compute
|
|
#
|
|
# [purge_nova_config]
|
|
# Whether unmanaged nova.conf entries should be purged.
|
|
# (optional) Defaults to false.
|
|
#
|
|
# [quantum_firewall_driver]
|
|
# Driver used to implement Quantum firewalling.
|
|
# (optional) Defaults to false.
|
|
#
|
|
# [rabbit_hosts] An array of IP addresses or Virttual IP address for connecting to a RabbitMQ Cluster.
|
|
# Optional. Defaults to false.
|
|
#
|
|
# === Examples
|
|
#
|
|
# class { 'openstack::compute':
|
|
# internal_address => '192.168.2.2',
|
|
# vncproxy_host => '192.168.1.1',
|
|
# nova_user_password => 'changeme',
|
|
# }
|
|
|
|
class openstack::compute (
|
|
# Required Network
|
|
$internal_address,
|
|
# Required Nova
|
|
$nova_user_password,
|
|
# Required Rabbit
|
|
$rabbit_password,
|
|
# DB
|
|
$nova_db_password,
|
|
$db_host = '127.0.0.1',
|
|
# Nova Database
|
|
$nova_db_user = 'nova',
|
|
$nova_db_name = 'nova',
|
|
# Network
|
|
$public_interface = undef,
|
|
$private_interface = undef,
|
|
$fixed_range = undef,
|
|
$network_manager = 'nova.network.manager.FlatDHCPManager',
|
|
$network_config = {},
|
|
$multi_host = false,
|
|
$enabled_apis = 'ec2,osapi_compute,metadata',
|
|
# Quantum
|
|
$quantum = true,
|
|
$quantum_user_password = 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,
|
|
$quantum_firewall_driver = false,
|
|
$bridge_mappings = undef,
|
|
$bridge_uplinks = undef,
|
|
# Nova
|
|
$nova_admin_tenant_name = 'services',
|
|
$nova_admin_user = 'nova',
|
|
$purge_nova_config = false,
|
|
$libvirt_vif_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver',
|
|
# Rabbit
|
|
$rabbit_host = '127.0.0.1',
|
|
$rabbit_hosts = false,
|
|
$rabbit_user = 'openstack',
|
|
$rabbit_virtual_host = '/',
|
|
# Glance
|
|
$glance_api_servers = false,
|
|
# Virtualization
|
|
$libvirt_type = 'kvm',
|
|
# VNC
|
|
$vnc_enabled = true,
|
|
$vncproxy_host = undef,
|
|
$vncserver_listen = false,
|
|
# cinder / volumes
|
|
$manage_volumes = true,
|
|
$cinder_volume_driver = 'iscsi',
|
|
$cinder_db_password = false,
|
|
$cinder_db_user = 'cinder',
|
|
$cinder_db_name = 'cinder',
|
|
$volume_group = 'cinder-volumes',
|
|
$iscsi_ip_address = '127.0.0.1',
|
|
$setup_test_volume = false,
|
|
$cinder_rbd_user = 'volumes',
|
|
$cinder_rbd_pool = 'volumes',
|
|
$cinder_rbd_secret_uuid = false,
|
|
# General
|
|
$migration_support = false,
|
|
$verbose = false,
|
|
$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 {
|
|
$vncserver_listen_real = $internal_address
|
|
}
|
|
|
|
|
|
#
|
|
# indicates that all nova config entries that we did
|
|
# not specifify in Puppet should be purged from file
|
|
#
|
|
if ! defined( Resources[nova_config] ) {
|
|
if ($purge_nova_config) {
|
|
resources { 'nova_config':
|
|
purge => true,
|
|
}
|
|
}
|
|
}
|
|
|
|
$nova_sql_connection = "mysql://${nova_db_user}:${nova_db_password}@${db_host}/${nova_db_name}"
|
|
|
|
class { 'nova':
|
|
sql_connection => $nova_sql_connection,
|
|
rabbit_userid => $rabbit_user,
|
|
rabbit_password => $rabbit_password,
|
|
image_service => 'nova.image.glance.GlanceImageService',
|
|
glance_api_servers => $glance_api_servers,
|
|
verbose => $verbose,
|
|
rabbit_host => $rabbit_host,
|
|
rabbit_hosts => $rabbit_hosts,
|
|
rabbit_virtual_host => $rabbit_virtual_host,
|
|
}
|
|
|
|
# Install / configure nova-compute
|
|
class { '::nova::compute':
|
|
enabled => $enabled,
|
|
vnc_enabled => $vnc_enabled,
|
|
vncserver_proxyclient_address => $internal_address,
|
|
vncproxy_host => $vncproxy_host,
|
|
}
|
|
|
|
# Configure libvirt for nova-compute
|
|
class { 'nova::compute::libvirt':
|
|
libvirt_type => $libvirt_type,
|
|
vncserver_listen => $vncserver_listen_real,
|
|
migration_support => $migration_support,
|
|
}
|
|
|
|
# if the compute node should be configured as a multi-host
|
|
# compute installation
|
|
if ! $quantum {
|
|
|
|
if ! $fixed_range {
|
|
fail('Must specify the fixed range when using nova-networks')
|
|
}
|
|
|
|
if $multi_host {
|
|
include keystone::python
|
|
nova_config {
|
|
'DEFAULT/multi_host': value => true;
|
|
'DEFAULT/send_arp_for_ha': value => true;
|
|
}
|
|
if ! $public_interface {
|
|
fail('public_interface must be defined for multi host compute nodes')
|
|
}
|
|
$enable_network_service = true
|
|
class { 'nova::api':
|
|
enabled => true,
|
|
admin_tenant_name => $nova_admin_tenant_name,
|
|
admin_user => $nova_admin_user,
|
|
admin_password => $nova_user_password,
|
|
enabled_apis => $enabled_apis,
|
|
}
|
|
} else {
|
|
$enable_network_service = false
|
|
nova_config {
|
|
'DEFAULT/multi_host': value => false;
|
|
'DEFAULT/send_arp_for_ha': value => false;
|
|
}
|
|
}
|
|
|
|
class { 'nova::network':
|
|
private_interface => $private_interface,
|
|
public_interface => $public_interface,
|
|
fixed_range => $fixed_range,
|
|
floating_range => false,
|
|
network_manager => $network_manager,
|
|
config_overrides => $network_config,
|
|
create_networks => false,
|
|
enabled => $enable_network_service,
|
|
install_service => $enable_network_service,
|
|
}
|
|
} else {
|
|
|
|
if ! $quantum_user_password {
|
|
fail('quantum_user_password must be set when quantum is configured')
|
|
}
|
|
if ! $keystone_host {
|
|
fail('keystone_host must be configured when quantum is installed')
|
|
}
|
|
|
|
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 => $quantum_firewall_driver,
|
|
# 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,
|
|
bridge_mappings => $bridge_mappings,
|
|
bridge_uplinks => $bridge_uplinks
|
|
}
|
|
|
|
class { 'nova::compute::quantum':
|
|
libvirt_vif_driver => $libvirt_vif_driver,
|
|
}
|
|
|
|
# Configures nova.conf entries applicable to Quantum.
|
|
class { 'nova::network::quantum':
|
|
quantum_admin_password => $quantum_user_password,
|
|
quantum_auth_strategy => 'keystone',
|
|
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",
|
|
}
|
|
|
|
}
|
|
|
|
if $manage_volumes {
|
|
|
|
if ! $cinder_db_password {
|
|
fail('cinder_db_password must be set when cinder is being configured')
|
|
}
|
|
|
|
$cinder_sql_connection = "mysql://${cinder_db_user}:${cinder_db_password}@${db_host}/${cinder_db_name}"
|
|
|
|
class { 'openstack::cinder::storage':
|
|
sql_connection => $cinder_sql_connection,
|
|
rabbit_password => $rabbit_password,
|
|
rabbit_userid => $rabbit_user,
|
|
rabbit_host => $rabbit_host,
|
|
rabbit_virtual_host => $rabbit_virtual_host,
|
|
volume_group => $volume_group,
|
|
iscsi_ip_address => $iscsi_ip_address,
|
|
enabled => $enabled,
|
|
verbose => $verbose,
|
|
setup_test_volume => $setup_test_volume,
|
|
rbd_user => $cinder_rbd_user,
|
|
rbd_pool => $cinder_rbd_pool,
|
|
rbd_secret_uuid => $cinter_rbd_secret_uuid,
|
|
volume_driver => $cinder_volume_driver,
|
|
}
|
|
|
|
# set in nova::api
|
|
if ! defined(Nova_config['DEFAULT/volume_api_class']) {
|
|
nova_config { 'DEFAULT/volume_api_class': value => 'nova.volume.cinder.API' }
|
|
}
|
|
}
|
|
|
|
}
|