# # == Class: openstack::compute # # Manifest to install/configure nova-compute # # [purge_nova_config] # Whether unmanaged nova.conf entries should be purged. # (optional) Defaults to false. # # === Examples # # class { 'openstack::nova::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, # 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_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_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, # 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_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 => 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 { '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, volume_driver => 'iscsi', } # set in nova::api if ! defined(Nova_config['DEFAULT/volume_api_class']) { nova_config { 'DEFAULT/volume_api_class': value => 'nova.volume.cinder.API' } } } }