From 23c242c16eb5222e82fd8824843aeb517a834469 Mon Sep 17 00:00:00 2001 From: Rajesh Tailor Date: Tue, 24 Mar 2020 14:52:05 +0530 Subject: [PATCH] Expose placement_aggregate_required_for_tenants parameter Add support for configuring scheduler parameter option `placement_aggregate_required_for_tenants` which controls whether or not a tenant with no aggregate affinity will be allowed to schedule to any available node. Change-Id: I61e3784ff40665ced25a52f864455c2a3518def0 --- manifests/scheduler.pp | 41 ++++++++++++------- ...required_for_tenants-362ddd5777c44ab4.yaml | 9 ++++ spec/classes/nova_scheduler_spec.rb | 9 ++++ 3 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 releasenotes/notes/nova_scheduler_placement_aggregate_required_for_tenants-362ddd5777c44ab4.yaml diff --git a/manifests/scheduler.pp b/manifests/scheduler.pp index f6f1dd43a..c4a7ea9f9 100644 --- a/manifests/scheduler.pp +++ b/manifests/scheduler.pp @@ -41,21 +41,31 @@ # zones will only be available to specific set of tenants. # Defaults to $::os_service_default # +# [*placement_aggregate_required_for_tenants*] +# (Optional) This setting controls if a tenant with no aggregate affinity +# will be allowed to schedule to any availalbe node when +# ``limit_tenants_to_placement_aggregate`` is set to True. +# If aggregates are used to limit some tenants but not all, then this should +# be False. +# If all tenants should be confined via aggregate, then this should be True. +# Defaults to $::os_service_default +# # [*max_placement_results*] # (Optional) This setting determines the maximum limit on results received # from the placement service during a scheduling operation. # Defaults to $::os_service_default # class nova::scheduler( - $enabled = true, - $manage_service = true, - $ensure_package = 'present', - $workers = $::os_workers, - $scheduler_driver = 'filter_scheduler', - $discover_hosts_in_cells_interval = $::os_service_default, - $query_placement_for_image_type_support = $::os_service_default, - $limit_tenants_to_placement_aggregate = $::os_service_default, - $max_placement_results = $::os_service_default, + $enabled = true, + $manage_service = true, + $ensure_package = 'present', + $workers = $::os_workers, + $scheduler_driver = 'filter_scheduler', + $discover_hosts_in_cells_interval = $::os_service_default, + $query_placement_for_image_type_support = $::os_service_default, + $limit_tenants_to_placement_aggregate = $::os_service_default, + $placement_aggregate_required_for_tenants = $::os_service_default, + $max_placement_results = $::os_service_default, ) { include nova::deps @@ -72,11 +82,12 @@ class nova::scheduler( } nova_config { - 'scheduler/workers': value => $workers; - 'scheduler/driver': value => $scheduler_driver; - 'scheduler/discover_hosts_in_cells_interval': value => $discover_hosts_in_cells_interval; - 'scheduler/query_placement_for_image_type_support': value => $query_placement_for_image_type_support; - 'scheduler/limit_tenants_to_placement_aggregate': value => $limit_tenants_to_placement_aggregate; - 'scheduler/max_placement_results': value => $max_placement_results; + 'scheduler/workers': value => $workers; + 'scheduler/driver': value => $scheduler_driver; + 'scheduler/discover_hosts_in_cells_interval': value => $discover_hosts_in_cells_interval; + 'scheduler/query_placement_for_image_type_support': value => $query_placement_for_image_type_support; + 'scheduler/limit_tenants_to_placement_aggregate': value => $limit_tenants_to_placement_aggregate; + 'scheduler/placement_aggregate_required_for_tenants': value => $placement_aggregate_required_for_tenants; + 'scheduler/max_placement_results': value => $max_placement_results; } } diff --git a/releasenotes/notes/nova_scheduler_placement_aggregate_required_for_tenants-362ddd5777c44ab4.yaml b/releasenotes/notes/nova_scheduler_placement_aggregate_required_for_tenants-362ddd5777c44ab4.yaml new file mode 100644 index 000000000..20e106ddb --- /dev/null +++ b/releasenotes/notes/nova_scheduler_placement_aggregate_required_for_tenants-362ddd5777c44ab4.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Add parameter `placement_aggregate_required_for_tenants` which controls + whether or not a tenant with no aggregate affinity will be allowed to + schedule to any available node, when `limit_tenants_to_placement_aggregate` + is set to True. + Default value for this parameter is False. + diff --git a/spec/classes/nova_scheduler_spec.rb b/spec/classes/nova_scheduler_spec.rb index 1ec1e0699..41a43931d 100644 --- a/spec/classes/nova_scheduler_spec.rb +++ b/spec/classes/nova_scheduler_spec.rb @@ -22,6 +22,7 @@ describe 'nova::scheduler' do it { is_expected.to contain_nova_config('scheduler/discover_hosts_in_cells_interval').with_value('') } it { is_expected.to contain_nova_config('scheduler/query_placement_for_image_type_support').with_value('') } it { is_expected.to contain_nova_config('scheduler/limit_tenants_to_placement_aggregate').with_value('') } + it { is_expected.to contain_nova_config('scheduler/placement_aggregate_required_for_tenants').with_value('') } it { is_expected.to contain_nova_config('scheduler/max_placement_results').with_value('') } it { is_expected.to contain_class('nova::availability_zone') } @@ -85,6 +86,14 @@ describe 'nova::scheduler' do it { is_expected.to contain_nova_config('scheduler/limit_tenants_to_placement_aggregate').with_value(true) } end + context 'with placement_aggregate_required_for_tenants' do + let :params do + { :placement_aggregate_required_for_tenants => true } + end + + it { is_expected.to contain_nova_config('scheduler/placement_aggregate_required_for_tenants').with_value(true) } + end + context 'with max_placement_results' do let :params do { :max_placement_results => 10 }