From 3b6b4a9de0286dc803e1d2c1a0abcff7df40f5fa Mon Sep 17 00:00:00 2001 From: wenchma Date: Mon, 18 May 2015 18:28:59 +0800 Subject: [PATCH] Add "scheduler_use_baremetal_filters" option in nova conf for ironic This attribute decides whether to use baremetal_scheduler_default_filters or not. Set the ironic default attributes for True case. Change-Id: I2c58707140a1e54fb8fdd7627d23aa23f1a236ea Closes-Bug: #1444860 --- README.md | 12 ++++++++++++ attributes/default.rb | 22 ++++++++++++++++++++++ spec/nova-common_spec.rb | 27 +++++++++++++++++++++++++-- templates/default/nova.conf.erb | 6 ++++++ 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8bdb6693..69cff27f 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,18 @@ Libvirt Configuration Attributes * `openstack["compute"]["libvirt"]["rbd"]["cinder"]["secret_uuid"]` - A shared secret between cinder and libvirt. It should be the same as the secret_uuid that is defined in block-storage. * `openstack["compute"]["libvirt"]["rng_dev_path"]` - A path to a device that will be used as source of entropy on the host. Permitted options are: /dev/random or /dev/hwrng (string value) +Bare Metal Configuration Attributes +----------------------------------- + +* `openstack['compute']['scheduler']['use_baremetal_filters']` Boolean that decides whether to use baremetal_scheduler_default_filters or not. + If this attribute is set to true, the following attributes will be overwritten: + `openstack['compute']['driver']` + `openstack['compute']['manager']` + `openstack['compute']['scheduler']['scheduler_host_manager']` + `openstack['compute']['config']['ram_allocation_ratio']` + `openstack['compute']['config']['reserved_host_memory_mb']` +* `openstack['compute']['scheduler']['baremetal_default_filters']` A list of filters enabled for baremetal schedulers that support them. + Scheduler Configuration Attributes ---------------------------------- diff --git a/attributes/default.rb b/attributes/default.rb index 50e76ae7..720e4d33 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -587,6 +587,28 @@ default['openstack']['compute']['vmware']['integration_bridge'] = 'br-int' default['openstack']['compute']['bare-metal']['admin_username'] = 'ironic' default['openstack']['compute']['bare-metal']['admin_tenant_name'] = 'service' +# Boolean to decide whether to use baremetal_scheduler_default_filters or not. +default['openstack']['compute']['scheduler']['use_baremetal_filters'] = false + +default['openstack']['compute']['scheduler']['baremetal_default_filters'] = %w( + RetryFilter + AvailabilityZoneFilter + ComputeFilter + ComputeCapabilitiesFilter + ImagePropertiesFilter + ExactRamFilter + ExactDiskFilter + ExactCoreFilter) + +# For true case, this logic allows the following ironic-related attribtes to be overwritten automatically. +if node['openstack']['compute']['scheduler']['use_baremetal_filters'] + default['openstack']['compute']['driver'] = 'nova.virt.ironic.IronicDriver' + default['openstack']['compute']['manager'] = 'ironic.nova.compute.manager.ClusteredComputeManager' + default['openstack']['compute']['scheduler']['scheduler_host_manager'] = 'nova.scheduler.ironic_host_manager.IronicHostManager' + default['openstack']['compute']['config']['ram_allocation_ratio'] = 1.0 + default['openstack']['compute']['config']['reserved_host_memory_mb'] = 0 +end + # Lock the version of RPC messages and allow live upgrading of the services # without interruption caused by version mismatch. # The configuration options allow the specification of RPC version numbers if desired, diff --git a/spec/nova-common_spec.rb b/spec/nova-common_spec.rb index 1b340751..a9c6d4ac 100644 --- a/spec/nova-common_spec.rb +++ b/spec/nova-common_spec.rb @@ -725,13 +725,36 @@ describe 'openstack-compute::nova-common' do end it 'has scheduler options' do - [/^scheduler_manager=nova.scheduler.manager.SchedulerManager$/, + [/^scheduler_use_baremetal_filters=false$/, + /^baremetal_scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ExactRamFilter,ExactDiskFilter,ExactCoreFilter$/, + /^scheduler_manager=nova.scheduler.manager.SchedulerManager$/, /^scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler$/, /^scheduler_host_manager=nova.scheduler.host_manager.HostManager$/, /^scheduler_available_filters=nova.scheduler.filters.all_filters$/, /^scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter$/ ].each do |line| - expect(chef_run).to render_file(file.name).with_content(line) + expect(chef_run).to render_config_file(file.name).with_section_content('DEFAULT', line) + end + end + + it 'sets to use baremetal default attributes' do + node.set['openstack']['compute']['scheduler']['use_baremetal_filters'] = true + + expect(chef_run.node['openstack']['compute']['driver']).to eq('nova.virt.ironic.IronicDriver') + expect(chef_run.node['openstack']['compute']['manager']).to eq('ironic.nova.compute.manager.ClusteredComputeManager') + expect(chef_run.node['openstack']['compute']['scheduler']['scheduler_host_manager']).to eq('nova.scheduler.ironic_host_manager.IronicHostManager') + expect(chef_run.node['openstack']['compute']['config']['ram_allocation_ratio']).to eq(1.0) + expect(chef_run.node['openstack']['compute']['config']['reserved_host_memory_mb']).to eq(0) + + [ + /^scheduler_use_baremetal_filters=true$/, + /^compute_driver=nova.virt.ironic.IronicDriver$/, + /^compute_manager=ironic.nova.compute.manager.ClusteredComputeManager$/, + /^scheduler_host_manager=nova.scheduler.ironic_host_manager.IronicHostManager$/, + /^ram_allocation_ratio=1.0$/, + /^reserved_host_memory_mb=0$/ + ].each do |line| + expect(chef_run).to render_config_file(file.name).with_section_content('DEFAULT', line) end end diff --git a/templates/default/nova.conf.erb b/templates/default/nova.conf.erb index 80d88ce5..2a004147 100644 --- a/templates/default/nova.conf.erb +++ b/templates/default/nova.conf.erb @@ -38,6 +38,12 @@ rpc_backend=<%= node["openstack"]["compute"]["rpc_backend"] %> ##### SCHEDULER ##### +# Flag to decide whether to use baremetal_scheduler_default_filters or not (boolean value). +scheduler_use_baremetal_filters=<%= node["openstack"]["compute"]["scheduler"]["use_baremetal_filters"] %> + +# Which filter class names to use for filtering baremetal hosts when not specified in the request. +baremetal_scheduler_default_filters=<%= node["openstack"]["compute"]["scheduler"]["baremetal_default_filters"].join(",") %> + scheduler_manager=<%= node["openstack"]["compute"]["scheduler"]["scheduler_manager"] %> scheduler_driver=<%= node["openstack"]["compute"]["scheduler"]["scheduler_driver"] %> scheduler_available_filters=<%= node["openstack"]["compute"]["scheduler"]["available_filters"] %>