From 3c81436a3ac608ee03002d820bbd2b9867346eeb Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 13 Nov 2023 01:51:29 +0900 Subject: [PATCH] api: Prepare to remove nova_metadata_wsgi_enabled The nova::api::nova_metadata_wsgi_enabled parameter has been deprecated but in fact users have had to set the options to deploy nova API by httpd and mod_wsgi. This removes the logic to deploy api run by httpd and mod_wsgi along with metadata api run by eventlet, so that we can remove the option in the next cycle. Change-Id: Ic28c6783d7e7ccebc0a18878155d02521f504091 --- manifests/api.pp | 41 +++++--------- ...etadata_wsgi_enabled-8eef0b780230bd4c.yaml | 6 ++ spec/classes/nova_api_spec.rb | 55 +------------------ 3 files changed, 21 insertions(+), 81 deletions(-) create mode 100644 releasenotes/notes/update-nova_metadata_wsgi_enabled-8eef0b780230bd4c.yaml diff --git a/manifests/api.pp b/manifests/api.pp index 7476536b2..ad6fbeb56 100644 --- a/manifests/api.pp +++ b/manifests/api.pp @@ -193,7 +193,7 @@ class nova::api( $instance_list_cells_batch_fixed_size = $facts['os_service_default'], $list_records_by_skipping_down_cells = $facts['os_service_default'], # DEPRECATED PARAMETER - Boolean $nova_metadata_wsgi_enabled = false, + $nova_metadata_wsgi_enabled = undef, $use_forwarded_for = undef, ) inherits nova::params { @@ -204,40 +204,26 @@ class nova::api( include nova::availability_zone include nova::pci - if !$nova_metadata_wsgi_enabled { - warning('Running nova metadata api via evenlet is deprecated and will be removed in Stein release.') + if $nova_metadata_wsgi_enabled != undef { + warning('The nova_metadata_wsgi_enabled parameter has been deprecated and has no effect') } if $use_forwarded_for != undef { warning('The use_forwarded_for parameter has been deprecated.') } - # enable metadata in eventlet if we do not run metadata via wsgi (nova::metadata) - if ('metadata' in $enabled_apis and $service_name == 'httpd' and !$nova_metadata_wsgi_enabled) { - $enable_metadata = true - } else { - $enable_metadata = false - } - # sanitize service_name and prepare DEFAULT/enabled_apis parameter if $service_name == $::nova::params::api_service_name { - # if running evenlet, we use the original puppet parameter - # so people can enable custom service names and we keep backward compatibility. - $enabled_apis_real = $enabled_apis - $service_enabled = $enabled - } elsif $service_name == 'httpd' { - # when running wsgi, we want to enable metadata in eventlet if part of enabled_apis - # but only if we do not run metadata via wsgi (nova::metadata) - if $enable_metadata { - $enabled_apis_real = ['metadata'] - $service_enabled = $enabled - } else { - # otherwise, set it to empty list - $enabled_apis_real = [] - # if running wsgi for compute, and metadata disabled - # we don't need to enable nova-api service. - $service_enabled = false + nova_config { + 'DEFAULT/enabled_apis': value => join(any2array($enabled_apis), ','); } + $service_enabled = $enabled + } elsif $service_name == 'httpd' { + nova_config { + 'DEFAULT/enabled_apis': ensure => absent; + } + $service_enabled = false + policy_rcd { 'nova-api': ensure => present, set_code => '101', @@ -272,7 +258,7 @@ as a standalone service, or httpd for being run by a httpd server") } } - if !$nova_metadata_wsgi_enabled { + if $service_name != 'httpd' { nova_config { 'DEFAULT/metadata_workers': value => $metadata_workers; 'DEFAULT/metadata_listen': value => $metadata_listen; @@ -292,7 +278,6 @@ as a standalone service, or httpd for being run by a httpd server") } nova_config { - 'DEFAULT/enabled_apis': value => join($enabled_apis_real, ','); 'wsgi/api_paste_config': value => $api_paste_config; 'DEFAULT/osapi_compute_listen': value => $api_bind_address; 'DEFAULT/osapi_compute_listen_port': value => $osapi_compute_listen_port; diff --git a/releasenotes/notes/update-nova_metadata_wsgi_enabled-8eef0b780230bd4c.yaml b/releasenotes/notes/update-nova_metadata_wsgi_enabled-8eef0b780230bd4c.yaml new file mode 100644 index 000000000..829b00678 --- /dev/null +++ b/releasenotes/notes/update-nova_metadata_wsgi_enabled-8eef0b780230bd4c.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + The ``nova::api::nova_metadata_wsgi_enabled`` parameter has no effect now. + When nova API service is deployed using httpd and mod_wsgi, nova-api + service is no longer started. Use httpd + mod_wsgi to run metadata api. diff --git a/spec/classes/nova_api_spec.rb b/spec/classes/nova_api_spec.rb index c93c9dfdc..e41783aa4 100644 --- a/spec/classes/nova_api_spec.rb +++ b/spec/classes/nova_api_spec.rb @@ -156,62 +156,10 @@ describe 'nova::api' do it { is_expected.to_not contain_service('nova-api') } end - context 'when running nova API in wsgi compute, and enabling metadata' do - before do - params.merge!({ :service_name => 'httpd' }) - end - - let :pre_condition do - "include apache - include nova - class { 'nova::keystone::authtoken': - password => 'a_big_secret', - }" - end - - it 'enable nova API service' do - is_expected.to contain_service('nova-api').with( - :ensure => 'running', - :name => platform_params[:nova_api_service], - :enable => true, - :tag => 'nova-service', - ) - end - it 'enable metadata in evenlet configuration' do - is_expected.to contain_nova_config('DEFAULT/enabled_apis').with_value('metadata') - end - end - - context 'when running nova API in wsgi for compute, and disabling metadata' do + context 'when running nova API in wsgi for compute' do before do params.merge!({ :service_name => 'httpd', - :enabled_apis => ['osapi_compute'] }) - end - - let :pre_condition do - "include apache - include nova - class { 'nova::keystone::authtoken': - password => 'a_big_secret', - }" - end - - it 'disable nova API service' do - is_expected.to contain_service('nova-api').with( - :ensure => 'stopped', - :name => platform_params[:nova_api_service], - :enable => false, - :tag => 'nova-service', - ) - end - end - - context 'when running nova API in wsgi for compute, and metadata in wsgi' do - before do - params.merge!({ - :service_name => 'httpd', - :nova_metadata_wsgi_enabled => true }) end @@ -230,6 +178,7 @@ describe 'nova::api' do :enable => false, :tag => 'nova-service', ) + is_expected.to contain_nova_config('DEFAULT/enabled_apis').with_ensure('absent') is_expected.to contain_nova_config('DEFAULT/metadata_workers').with_ensure('absent') is_expected.to contain_nova_config('DEFAULT/metadata_listen').with_ensure('absent') is_expected.to contain_nova_config('DEFAULT/metadata_listen_port').with_ensure('absent')