Files
puppet-nova/manifests/scheduler/filter.pp
Bartek Zurawski e7fe8c16ae Add MultiStrOpt for scheduler_available_filters
scheduler_available_filters option defines filter classes made available to
the nova scheduler. This parameter can be used multiple times or it can be
set as array value.
It is helpful when owner want to add to nova scheduler external filters.

Co-Authored-By: Daniel Pawlik <daniel.pawlik@corp.ovh.com>

Change-Id: I6be7bb4cea1906bd98c513bd2d01153e4643e3ac
Closes-Bug: #1591998
2016-07-27 10:20:06 +00:00

156 lines
6.1 KiB
Puppet

# == Class: nova:scheduler::filter
#
# This class is aim to configure nova.scheduler filter
#
# === Parameters:
#
# [*scheduler_host_manager*]
# (optional) The scheduler host manager class to use
# Defaults to 'host_manager'
#
# [*scheduler_max_attempts*]
# (optional) Maximum number of attempts to schedule an instance
# Defaults to '3'
#
# [*scheduler_host_subset_size*]
# (optional) defines the subset size that a host is chosen from
# Defaults to '1'
#
# [*max_io_ops_per_host*]
# (optional) Ignore hosts that have too many builds/resizes/snaps/migrations
# Defaults to '8'
#
# [*isolated_images*]
# (optional) An array of images to run on isolated host
# Defaults to $::os_service_default
#
# [*isolated_hosts*]
# (optional) An array of hosts reserved for specific images
# Defaults to $::os_service_default
#
# [*max_instances_per_host*]
# (optional) Ignore hosts that have too many instances
# Defaults to '50'
#
# [*scheduler_available_filters*]
# (optional) An array with filter classes available to the scheduler.
# Example: ['first.filter.class', 'second.filter.class']
# Defaults to ['nova.scheduler.filters.all_filters']
#
# [*scheduler_default_filters*]
# (optional) An array of filters to be used by default
# Defaults to $::os_service_default
#
# [*scheduler_weight_classes*]
# (optional) Which weight class names to use for weighing hosts
# Defaults to 'nova.scheduler.weights.all_weighers'
#
# [*baremetal_scheduler_default_filters*]
# (optional) An array of filters to be used by default for baremetal hosts
# Defaults to $::os_service_default
#
# [*scheduler_use_baremetal_filters*]
# (optional) Use baremetal_scheduler_default_filters or not.
# Defaults to false
#
# DEPRECATED PARAMETERS
#
# [*cpu_allocation_ratio*]
# (optional) Virtual CPU to Physical CPU allocation ratio
# Defaults to undef
#
# [*ram_allocation_ratio*]
# (optional) Virtual ram to physical ram allocation ratio
# Defaults to undef
#
# [*disk_allocation_ratio*]
# (optional) Virtual disk to physical disk allocation ratio
# Defaults to undef
#
class nova::scheduler::filter (
$scheduler_host_manager = 'host_manager',
$scheduler_max_attempts = '3',
$scheduler_host_subset_size = '1',
$max_io_ops_per_host = '8',
$max_instances_per_host = '50',
$isolated_images = $::os_service_default,
$isolated_hosts = $::os_service_default,
$scheduler_available_filters = ['nova.scheduler.filters.all_filters'],
$scheduler_default_filters = $::os_service_default,
$scheduler_weight_classes = 'nova.scheduler.weights.all_weighers',
$baremetal_scheduler_default_filters = $::os_service_default,
$scheduler_use_baremetal_filters = false,
# DEPRECATED PARAMETERS
$cpu_allocation_ratio = undef,
$ram_allocation_ratio = undef,
$disk_allocation_ratio = undef,
) {
include ::nova::deps
# The following values are following this rule:
# - default is $::os_service_default so Puppet won't try to configure it.
# - if set, we'll validate it's an array that is not empty and configure the parameter.
# - Otherwise, fallback to default.
if !is_service_default($scheduler_default_filters) and !empty($scheduler_default_filters){
validate_array($scheduler_default_filters)
$scheduler_default_filters_real = join($scheduler_default_filters, ',')
} else {
$scheduler_default_filters_real = $::os_service_default
}
if is_array($scheduler_available_filters) {
$scheduler_available_filters_real = $scheduler_available_filters
} else {
warning('scheduler_available_filters must be an array and will fail in the future')
$scheduler_available_filters_real = any2array($scheduler_available_filters)
}
if !is_service_default($baremetal_scheduler_default_filters) and !empty($baremetal_scheduler_default_filters){
validate_array($baremetal_scheduler_default_filters)
$baremetal_scheduler_default_filters_real = join($baremetal_scheduler_default_filters, ',')
} else {
$baremetal_scheduler_default_filters_real = $::os_service_default
}
if !is_service_default($isolated_images) and !empty($isolated_images){
validate_array($isolated_images)
$isolated_images_real = join($isolated_images, ',')
} else {
$isolated_images_real = $::os_service_default
}
if !is_service_default($isolated_hosts) and !empty($isolated_hosts){
validate_array($isolated_hosts)
$isolated_hosts_real = join($isolated_hosts, ',')
} else {
$isolated_hosts_real = $::os_service_default
}
if $cpu_allocation_ratio {
warning('cpu_allocation_ratio is deprecated in nova::scheduler::filter, please add to nova::init instead')
}
if $ram_allocation_ratio {
warning('ram_allocation_ratio is deprecated in nova::scheduler::filter, please add to nova::init instead')
}
if $disk_allocation_ratio {
warning('disk_allocation_ratio is deprecated in nova::scheduler::filter, please add to nova::init instead')
}
nova_config {
'DEFAULT/scheduler_host_manager': value => $scheduler_host_manager;
'DEFAULT/scheduler_max_attempts': value => $scheduler_max_attempts;
'DEFAULT/scheduler_host_subset_size': value => $scheduler_host_subset_size;
'DEFAULT/max_io_ops_per_host': value => $max_io_ops_per_host;
'DEFAULT/max_instances_per_host': value => $max_instances_per_host;
'DEFAULT/scheduler_available_filters': value => $scheduler_available_filters_real;
'DEFAULT/scheduler_weight_classes': value => $scheduler_weight_classes;
'DEFAULT/scheduler_use_baremetal_filters': value => $scheduler_use_baremetal_filters;
'DEFAULT/scheduler_default_filters': value => $scheduler_default_filters_real;
'DEFAULT/baremetal_scheduler_default_filters': value => $baremetal_scheduler_default_filters_real;
'DEFAULT/isolated_images': value => $isolated_images_real;
'DEFAULT/isolated_hosts': value => $isolated_hosts_real;
}
}