Add local_metadata_per_cell option

Indicates that the nova-metadata API service has been deployed
per-cell, so that we can have better performance and data isolation in a
multi-cell deployment. Users should consider the use of this configuration
depending on how neutron is setup. If networks span cells, you might need
to run nova-metadata API service globally. If your networks are segmented
along cell boundaries, then you can run nova-metadata API service per cell.
When running nova-metadata API service per cell, you should also configure
each Neutron metadata-agent to point to the corresponding nova-metadata API
service.

Related-Bug: #1823760

Change-Id: Ia4dc22b2d013e00629f5945b230ab57a3e3a6465
This commit is contained in:
Martin Schuppert 2019-04-08 17:51:59 +02:00
parent 6afa191975
commit 4ee717dd8c
3 changed files with 29 additions and 0 deletions

View File

@ -21,6 +21,18 @@
# (optional) This option is the time (in seconds) to cache metadata.
# Defaults to $::os_service_default
#
# [*local_metadata_per_cell*]
# (optional) Indicates that the nova-metadata API service has been deployed
# per-cell, so that we can have better performance and data isolation in a
# multi-cell deployment. Users should consider the use of this configuration
# depending on how neutron is setup. If networks span cells, you might need
# to run nova-metadata API service globally. If your networks are segmented
# along cell boundaries, then you can run nova-metadata API service per cell.
# When running nova-metadata API service per cell, you should also configure
# each Neutron metadata-agent to point to the corresponding nova-metadata API
# service.
# Defaults to $::os_service_default
#
# DEPRECATED
#
# [*vendordata_jsonfile_path*]
@ -94,6 +106,7 @@ class nova::metadata(
$neutron_metadata_proxy_shared_secret = undef,
$enable_proxy_headers_parsing = $::os_service_default,
$metadata_cache_expiration = $::os_service_default,
$local_metadata_per_cell = $::os_service_default,
# DEPRECATED PARAMETERS
$vendordata_jsonfile_path = undef,
$vendordata_providers = undef,
@ -138,6 +151,7 @@ class nova::metadata(
nova_config {
'DEFAULT/enabled_apis': value => $enabled_apis;
'api/metadata_cache_expiration': value => $metadata_cache_expiration;
'api/local_metadata_per_cell': value => $local_metadata_per_cell;
}
oslo::middleware {'nova_config':

View File

@ -0,0 +1,12 @@
---
features:
- |
Indicates that the nova-metadata API service has been deployed
per-cell, so that we can have better performance and data isolation in a
multi-cell deployment. Users should consider the use of this configuration
depending on how neutron is setup. If networks span cells, you might need
to run nova-metadata API service globally. If your networks are segmented
along cell boundaries, then you can run nova-metadata API service per cell.
When running nova-metadata API service per cell, you should also configure
each Neutron metadata-agent to point to the corresponding nova-metadata API
service.

View File

@ -26,6 +26,7 @@ describe 'nova::metadata' do
:enable_proxy_headers_parsing => '<SERVICE DEFAULT>',
)
is_expected.to contain_nova_config('api/metadata_cache_expiration').with('value' => '<SERVICE DEFAULT>')
is_expected.to contain_nova_config('api/local_metadata_per_cell').with('value' => '<SERVICE DEFAULT>')
end
it 'unconfigures neutron_metadata proxy' do
@ -39,6 +40,7 @@ describe 'nova::metadata' do
params.merge!({
:neutron_metadata_proxy_shared_secret => 'secrete',
:enable_proxy_headers_parsing => true,
:local_metadata_per_cell => true,
:metadata_cache_expiration => 15,
:vendordata_jsonfile_path => '/tmp',
:vendordata_providers => ['StaticJSON', 'DynamicJSON'],
@ -58,6 +60,7 @@ describe 'nova::metadata' do
end
it 'configures various stuff' do
is_expected.to contain_nova_config('api/local_metadata_per_cell').with('value' => true)
is_expected.to contain_nova_config('api/metadata_cache_expiration').with('value' => '15')
is_expected.to contain_nova_config('api/vendordata_jsonfile_path').with('value' => '/tmp')
is_expected.to contain_nova_config('api/vendordata_providers').with('value' => 'StaticJSON,DynamicJSON')