fuel-library/deployment/puppet/nova/manifests/cells.pp
Bogdan Dobrelya e2cbdd0649 Sync puppet-nova
109d4825e5cdd15aa529c1ef7bcccc05f6a78178 4.0.0

Partial blueprint merge-openstack-puppet-modules

Change-Id: I672620f149e4a63240144f0ce20e84b084cfd459
Signed-off-by: Bogdan Dobrelya <bdobrelia@mirantis.com>
2014-07-04 09:01:26 +03:00

246 lines
8.8 KiB
Puppet

#
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
#
# Author: Emilien Macchi <emilien.macchi@enovance.com>
# François Charlier <francois.charlier@enovance.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# The nova::cells class installs the Nova Cells
#
# == Parameters
# [*enabled*]
# Use Nova Cells or not
# Defaults to 'False'
#
# [*manage_service*]
# (optional) Whether to start/stop the service
# Defaults to true
#
# [*create_cells*]
# Create cells with nova-manage
# Defaults to 'True'
#
# [*driver*]
# Cells communication driver to use
# Defaults to 'nova.cells.rpc_driver.CellsRPCDriver'
#
# [*instance_updated_at_threshold*]
# Number of seconds after an instance was updated or deleted to continue to update cells
# Defaults to '3600'
#
# [*max_hop_count*]
# Maximum number of hops for cells routing
# Defaults to '10'
#
# [*scheduler*]
# Cells scheduler to use
# Defaults to 'nova.cells.scheduler.CellsScheduler'
#
# [*instance_update_num_instances*]
# Number of instances to update per periodic task run
# Defaults to '1'
#
# [*manager*]
# Number of instances to update per periodic task run
# Defaults to 'nova.cells.manager.CellsManager'
#
# [*cell_name*]
# name of this cell
# Defaults to 'nova'
#
# [*cell_parent_name*]
# * If a child cell, this is the name of the 'parent' cell.
# * If a parent cell, should be left to undef.
#
# [*capabilities*]
# Key/Multi-value list with the capabilities of the cell
# Defaults to 'hypervisor=xenserver;kvm,os=linux;windows'
#
# [*call_timeout*]
# Seconds to wait for response from a call to a cell
# Defaults to '60'
#
# [*reserve_percent*]
# Percentage of cell capacity to hold in reserve. Affects both memory and disk utilization
# Defaults to '10.0'
#
# [*cell_type*]
# Type of cell: parent or child
# Defaults to 'None'
#
# [*mute_child_interval*]
# Number of seconds after which a lack of capability and
# capacity updates signals the child cell is to be treated as a mute
# Defaults to '300'
#
# [*bandwidth_update_interval*]
# Seconds between bandwidth updates for cells
# Defaults to '600'
#
# [*rpc_driver_queue_base*]
# Base queue name to use when communicating between cells
# Various topics by message type will be appended to this
# Defaults to 'cells.intercell'
#
# [*scheduler_filter_classes*]
# Filter classes the cells scheduler should use
# Defaults to 'nova.cells.filters.all_filters'
#
# [*scheduler_weight_classes*]
# Weigher classes the cells scheduler should use
# Defaults to 'nova.cells.weights.all_weighers'
#
# [*scheduler_retries*]
# How many retries when no cells are available
# Defaults to '10'
#
# [*scheduler_retry_delay*]
# How often to retry in seconds when no cells are available
# Defaults to '2'
#
# [*db_check_interval*]
# Seconds between getting fresh cell info from db
# Defaults to '60'
#
# [*mute_weight_multiplier*]
# Multiplier used to weigh mute children (The value should be negative)
# Defaults to '-10.0'
#
# [*mute_weight_value*]
# Weight value assigned to mute children (The value should be positive)
# Defaults to '1000.0'
#
# [*ram_weight_multiplier*]
# Multiplier used for weighing ram. Negative numbers mean to stack vs spread
# Defaults to '10.0'
#
# [*weight_offset*]
# It might be used by some cell scheduling code in the future
# Defaults to '1.0'
#
# [*weight_scale*]
# It might be used by some cell scheduling code in the future
# Defaults to '1.0'
#
class nova::cells (
$bandwidth_update_interval = '600',
$call_timeout = '60',
$capabilities = ['hypervisor=xenserver;kvm','os=linux;windows'],
$cell_name = 'nova',
$cell_type = undef,
$cell_parent_name = undef,
$create_cells = true,
$db_check_interval = '60',
$driver = 'nova.cells.rpc_driver.CellsRPCDriver',
$enabled = false,
$ensure_package = 'present',
$instance_updated_at_threshold = '3600',
$instance_update_num_instances = '1',
$manage_service = true,
$manager = 'nova.cells.manager.CellsManager',
$max_hop_count = '10',
$mute_child_interval = '300',
$mute_weight_multiplier = '-10.0',
$mute_weight_value = '1000.0',
$ram_weight_multiplier = '10.0',
$reserve_percent = '10.0',
$rpc_driver_queue_base = 'cells.intercell',
$scheduler_filter_classes = 'nova.cells.filters.all_filters',
$scheduler = 'nova.cells.scheduler.CellsScheduler',
$scheduler_retries = '10',
$scheduler_retry_delay = '2',
$scheduler_weight_classes = 'nova.cells.weights.all_weighers',
$weight_offset = '1.0',
$weight_scale = '1.0'
) {
include nova::params
case $cell_type {
'parent': {
nova_config { 'DEFAULT/compute_api_class': value => 'nova.compute.cells_api.ComputeCellsAPI' }
nova_config { 'DEFAULT/cell_type': value => 'api' }
}
'child': {
nova_config { 'DEFAULT/quota_driver': value => 'nova.quota.NoopQuotaDriver' }
nova_config { 'DEFAULT/cell_type': value => 'compute' }
}
default: { fail("Unsupported cell_type parameter value: '${cell_type}'. Should be 'parent' or 'child'.") }
}
nova_config {
'cells/bandwidth_update_interval': value => $bandwidth_update_interval;
'cells/call_timeout': value => $call_timeout;
'cells/capabilities': value => join($capabilities, ',');
'cells/db_check_interval': value => $db_check_interval;
'cells/driver': value => $driver;
'cells/enable': value => $enabled;
'cells/instance_updated_at_threshold': value => $instance_updated_at_threshold;
'cells/instance_update_num_instances': value => $instance_update_num_instances;
'cells/manager': value => $manager;
'cells/max_hop_count': value => $max_hop_count;
'cells/mute_child_interval': value => $mute_child_interval;
'cells/mute_weight_multiplier': value => $mute_weight_multiplier;
'cells/mute_weight_value': value => $mute_weight_value;
'cells/name': value => $cell_name;
'cells/ram_weight_multiplier': value => $ram_weight_multiplier;
'cells/reserve_percent': value => $reserve_percent;
'cells/rpc_driver_queue_base': value => $rpc_driver_queue_base;
'cells/scheduler_filter_classes': value => $scheduler_filter_classes;
'cells/scheduler_retries': value => $scheduler_retries;
'cells/scheduler_retry_delay': value => $scheduler_retry_delay;
'cells/scheduler': value => $scheduler;
'cells/scheduler_weight_classes': value => $scheduler_weight_classes;
}
nova::generic_service { 'cells':
enabled => $enabled,
manage_service => $manage_service,
package_name => $::nova::params::cells_package_name,
service_name => $::nova::params::cells_service_name,
ensure_package => $ensure_package,
}
if $create_cells {
@@nova::manage::cells { $cell_name:
cell_type => $cell_type,
cell_parent_name => $cell_parent_name,
rabbit_username => $::nova::init::rabbit_userid,
rabbit_password => $::nova::init::rabbit_password,
rabbit_hosts => $::nova::init::rabbit_hosts,
rabbit_port => $::nova::init::rabbit_port,
rabbit_virtual_host => $::nova::init::virtual_host,
weight_offset => $weight_offset,
weight_scale => $weight_scale,
before => Service['cells']
}
case $cell_type {
'parent': {
# A parent cell must declare its child cell(s)
Nova::Manage::Cells <<| cell_parent_name == $cell_parent_name and cell_type == 'child' |>>
}
'child': {
# A child cell must declare its parent cell
Nova::Manage::Cells <<| name == $cell_parent_name and cell_type == 'parent' |>>
}
default: {
fail("Invalid cell_type parameter value: ${cell_type}")
}
}
}
}