Support configuring multiple Netapp cinder backends

Add support for configuring multiple Netapp cinder backends. The
update also drops some legacy code related to features that were
deprecated several cycles ago (Netapp's e-series hardware, and
storage pool search name patterns).

Change-Id: I15f4828beb9db81583146fa9afdd21999ad5b078
This commit is contained in:
Alan Bishop 2020-11-12 09:29:28 -08:00
parent 6fd840642f
commit f14bdbae19
4 changed files with 99 additions and 43 deletions

View File

@ -19,8 +19,12 @@
# === Parameters # === Parameters
# #
# [*backend_name*] # [*backend_name*]
# (Optional) Name given to the Cinder backend stanza # (Optional) List of names given to the Cinder backend stanza.
# Defaults to 'tripleo_netapp' # Defaults to hiera('cinder::backend::netapp::volume_backend_name', ['tripleo_netapp'])
#
# [*multi_config*]
# (Optional) A config hash when multiple backends are used.
# Defaults to hiera('cinder::backend::netapp::volume_multi_config', {})
# #
# [*step*] # [*step*]
# (Optional) The current step in deployment. See tripleo-heat-templates # (Optional) The current step in deployment. See tripleo-heat-templates
@ -28,53 +32,67 @@
# Defaults to hiera('step') # Defaults to hiera('step')
# #
class tripleo::profile::base::cinder::volume::netapp ( class tripleo::profile::base::cinder::volume::netapp (
$backend_name = hiera('cinder::backend::netapp::volume_backend_name', 'tripleo_netapp'), $backend_name = hiera('cinder::backend::netapp::volume_backend_name', ['tripleo_netapp']),
$multi_config = hiera('cinder::backend::netapp::volume_multi_config', {}),
$step = Integer(hiera('step')), $step = Integer(hiera('step')),
) { ) {
include tripleo::profile::base::cinder::volume include tripleo::profile::base::cinder::volume
if $step >= 4 { if $step >= 4 {
if hiera('cinder::backend::netapp::nfs_shares', undef) { $backend_defaults = {
$cinder_netapp_nfs_shares = split(hiera('cinder::backend::netapp::nfs_shares', undef), ',') 'CinderNetappAvailabilityZone' => hiera('cinder::backend::netapp::backend_availability_zone', undef),
'CinderNetappLogin' => hiera('cinder::backend::netapp::netapp_login', undef),
'CinderNetappPassword' => hiera('cinder::backend::netapp::netapp_password', undef),
'CinderNetappServerHostname' => hiera('cinder::backend::netapp::netapp_server_hostname', undef),
'CinderNetappServerPort' => hiera('cinder::backend::netapp::netapp_server_port', undef),
'CinderNetappSizeMultiplier' => hiera('cinder::backend::netapp::netapp_size_multiplier', undef),
'CinderNetappStorageFamily' => hiera('cinder::backend::netapp::netapp_storage_family', undef),
'CinderNetappStorageProtocol' => hiera('cinder::backend::netapp::netapp_storage_protocol', undef),
'CinderNetappTransportType' => hiera('cinder::backend::netapp::netapp_transport_type', undef),
'CinderNetappVfiler' => hiera('cinder::backend::netapp::netapp_vfiler', undef),
'CinderNetappVserver' => hiera('cinder::backend::netapp::netapp_vserver', undef),
'CinderNetappPartnerBackendName' => hiera('cinder::backend::netapp::netapp_partner_backend_name', undef),
'CinderNetappNfsShares' => hiera('cinder::backend::netapp::nfs_shares', undef),
'CinderNetappNfsSharesConfig' => hiera('cinder::backend::netapp::nfs_shares_config', undef),
'CinderNetappNfsMountOptions' => hiera('cinder::backend::netapp::nfs_mount_options', undef),
'CinderNetappCopyOffloadToolPath' => hiera('cinder::backend::netapp::netapp_copyoffload_tool_path', undef),
'CinderNetappControllerIps' => hiera('cinder::backend::netapp::netapp_controller_ips', undef),
'CinderNetappSaPassword' => hiera('cinder::backend::netapp::netapp_sa_password', undef),
'CinderNetappHostType' => hiera('cinder::backend::netapp::netapp_host_type', undef),
'CinderNetappWebservicePath' => hiera('cinder::backend::netapp::netapp_webservice_path', undef),
'CinderNetappNasSecureFileOperations' => hiera('cinder::backend::netapp::nas_secure_file_operations', undef),
'CinderNetappNasSecureFilePermissions' => hiera('cinder::backend::netapp::nas_secure_file_permissions', undef),
'CinderNetappPoolNameSearchPattern' => hiera('cinder::backend::netapp::netapp_pool_name_search_pattern', undef),
} }
# fallback logic for search patterns since upstream puppet-cinder removed any2array($backend_name).each |String $backend| {
# these. See I286a593f0e68dc9e60852674d2fa14551acb1bbb from puppet-cinder $backend_config = merge($backend_defaults, pick($multi_config[$backend], {}))
$list = join(any2array(delete(delete_undef_values([
hiera('cinder::backend::netapp::netapp_storage_pools', undef), cinder::backend::netapp { $backend :
hiera('cinder::backend::netapp::netapp_volume_list', undef), backend_availability_zone => $backend_config['CinderNetappAvailabilityZone'],
]), '')),'|') netapp_login => $backend_config['CinderNetappLogin'],
if $list != '' { netapp_password => $backend_config['CinderNetappPassword'],
$netapp_pool_name_search_pattern_fallback = "(${list})" netapp_server_hostname => $backend_config['CinderNetappServerHostname'],
} else { netapp_server_port => $backend_config['CinderNetappServerPort'],
$netapp_pool_name_search_pattern_fallback = undef netapp_size_multiplier => $backend_config['CinderNetappSizeMultiplier'],
} netapp_storage_family => $backend_config['CinderNetappStorageFamily'],
cinder::backend::netapp { $backend_name : netapp_storage_protocol => $backend_config['CinderNetappStorageProtocol'],
backend_availability_zone => hiera('cinder::backend::netapp::backend_availability_zone', undef), netapp_transport_type => $backend_config['CinderNetappTransportType'],
netapp_login => hiera('cinder::backend::netapp::netapp_login', undef), netapp_vfiler => $backend_config['CinderNetappVfiler'],
netapp_password => hiera('cinder::backend::netapp::netapp_password', undef), netapp_vserver => $backend_config['CinderNetappVserver'],
netapp_server_hostname => hiera('cinder::backend::netapp::netapp_server_hostname', undef), netapp_partner_backend_name => $backend_config['CinderNetappPartnerBackendName'],
netapp_server_port => hiera('cinder::backend::netapp::netapp_server_port', undef), nfs_shares => any2array($backend_config['CinderNetappNfsShares']),
netapp_size_multiplier => hiera('cinder::backend::netapp::netapp_size_multiplier', undef), nfs_shares_config => $backend_config['CinderNetappNfsSharesConfig'],
netapp_storage_family => hiera('cinder::backend::netapp::netapp_storage_family', undef), nfs_mount_options => $backend_config['CinderNetappNfsMountOptions'],
netapp_storage_protocol => hiera('cinder::backend::netapp::netapp_storage_protocol', undef), netapp_copyoffload_tool_path => $backend_config['CinderNetappCopyOffloadToolPath'],
netapp_transport_type => hiera('cinder::backend::netapp::netapp_transport_type', undef), netapp_controller_ips => $backend_config['CinderNetappControllerIps'],
netapp_vfiler => hiera('cinder::backend::netapp::netapp_vfiler', undef), netapp_sa_password => $backend_config['CinderNetappSaPassword'],
netapp_vserver => hiera('cinder::backend::netapp::netapp_vserver', undef), netapp_host_type => $backend_config['CinderNetappHostType'],
netapp_partner_backend_name => hiera('cinder::backend::netapp::netapp_partner_backend_name', undef), netapp_webservice_path => $backend_config['CinderNetappWebservicePath'],
nfs_shares => $cinder_netapp_nfs_shares, nas_secure_file_operations => $backend_config['CinderNetappNasSecureFileOperations'],
nfs_shares_config => hiera('cinder::backend::netapp::nfs_shares_config', undef), nas_secure_file_permissions => $backend_config['CinderNetappNasSecureFilePermissions'],
nfs_mount_options => hiera('cinder::backend::netapp::nfs_mount_options', undef), netapp_pool_name_search_pattern => $backend_config['CinderNetappPoolNameSearchPattern'],
netapp_copyoffload_tool_path => hiera('cinder::backend::netapp::netapp_copyoffload_tool_path', undef), }
netapp_controller_ips => hiera('cinder::backend::netapp::netapp_controller_ips', undef),
netapp_sa_password => hiera('cinder::backend::netapp::netapp_sa_password', undef),
netapp_host_type => hiera('cinder::backend::netapp::netapp_host_type',
hiera('cinder::backend::netapp::netapp_eseries_host_type', undef)),
netapp_webservice_path => hiera('cinder::backend::netapp::netapp_webservice_path', undef),
nas_secure_file_operations => hiera('cinder::backend::netapp::nas_secure_file_operations', undef),
nas_secure_file_permissions => hiera('cinder::backend::netapp::nas_secure_file_permissions', undef),
netapp_pool_name_search_pattern => hiera('cinder::backend::netapp::netapp_pool_name_search_pattern',
$netapp_pool_name_search_pattern_fallback),
} }
} }

View File

@ -42,6 +42,29 @@ describe 'tripleo::profile::base::cinder::volume::netapp' do
# TODO(aschultz): check parameters via hiera # TODO(aschultz): check parameters via hiera
is_expected.to contain_cinder__backend__netapp('tripleo_netapp') is_expected.to contain_cinder__backend__netapp('tripleo_netapp')
end end
context 'with multiple backends' do
let(:params) { {
:backend_name => ['tripleo_netapp_1', 'tripleo_netapp_2'],
:multi_config => { 'tripleo_netapp_1' => {
'CinderNetappStorageProtocol' => 'iscsi',
},
'tripleo_netapp_2' => {
'CinderNetappNfsSharesConfig' => '/etc/cinder/shares_2.conf',
},
},
:step => 4,
} }
it 'should configure each backend' do
is_expected.to contain_cinder__backend__netapp('tripleo_netapp_1')
is_expected.to contain_cinder_config('tripleo_netapp_1/netapp_storage_protocol').with_value('iscsi')
is_expected.to contain_cinder_config('tripleo_netapp_1/nfs_shares_config').with_value('/etc/cinder/shares.conf')
is_expected.to contain_cinder__backend__netapp('tripleo_netapp_2')
is_expected.to contain_cinder_config('tripleo_netapp_2/netapp_storage_protocol').with_value('nfs')
is_expected.to contain_cinder_config('tripleo_netapp_2/nfs_shares_config').with_value('/etc/cinder/shares_2.conf')
end
end
end end
end end

View File

@ -279,7 +279,16 @@ describe 'tripleo::profile::base::cinder::volume' do
:enabled_backends => ['tripleo_netapp'] :enabled_backends => ['tripleo_netapp']
) )
end end
end context 'with multiple netapp backends' do
# Step 5's hiera specifies two netapp backend names
let(:params) { { :step => 5 } }
it 'should enable each backend' do
is_expected.to contain_class('cinder::backends').with(
:enabled_backends => ['tripleo_netapp_1', 'tripleo_netapp_2']
)
end
end
end
context 'with only veritas hyperscale' do context 'with only veritas hyperscale' do
before :each do before :each do

View File

@ -18,3 +18,9 @@ cinder::backend::dellemc_sc::volume_backend_name:
cinder::backend::dellemc_xtremio::volume_backend_name: cinder::backend::dellemc_xtremio::volume_backend_name:
- 'tripleo_dellemc_xtremio_1' - 'tripleo_dellemc_xtremio_1'
- 'tripleo_dellemc_xtremio_2' - 'tripleo_dellemc_xtremio_2'
cinder::backend::netapp::volume_backend_name:
- 'tripleo_netapp_1'
- 'tripleo_netapp_2'
tripleo::profile::base::cinder::volume::netapp::multi_config:
tripleo_netapp_2:
CinderNetappNfsSharesConfig: '/etc/cinder/shares_2.conf'