Add support for PowerMax driver

Dell EMC VMax was rebranded to PowerMax and the related driver and
its parameters were renamed[1]. This change introduces a new resource
type to follow that rebranding.
The existing implementation to use old parameters will be deprecated
and removed in a separate change.

[1] 6995b9f9758f4b8526011954670da5602acb60cb
Partial-bug: #1951131
Change-Id: Ifde59b58915dd00ec8edf136f4bb4a48d8446025
(cherry picked from commit 2e56767d7a)
(cherry picked from commit 636043245f)
(cherry picked from commit 5ad631af09)
(cherry picked from commit cc3762cbfa)
(cherry picked from commit 298ebe6bfb)
This commit is contained in:
David Hill 2021-11-16 10:34:01 -05:00 committed by Goutham Pacha Ravi
parent 89c305c5c7
commit 8e02a37de1
3 changed files with 198 additions and 0 deletions

View File

@ -0,0 +1,116 @@
# == define: manila::backend::dellemc_powermax
#
# Configures Manila to use the Dell EMC PowerMax share driver
# Compatible for multiple backends
#
# === Parameters
#
# [*emc_nas_login*]
# (required) Administrative user account name used to access the storage
# system.
#
# [*emc_nas_password*]
# (required) Password for the administrative user account specified in the
# emc_nas_login parameter.
#
# [*emc_nas_server*]
# (required) The hostname (or IP address) for the storage system.
#
# [*emc_share_backend*]
# (optional) Share backend.
# Defaults to 'powermax'
#
# [*share_backend_name*]
# (optional) Name of the backend in manila.conf that
# these settings will reside in
#
# [*backend_availability_zone*]
# (Optional) Availability zone for this share backend.
# If not set, the storage_availability_zone option value
# is used as the default for all backends.
# Defaults to $::os_service_default.
#
# [*powermax_server_container*]
# (optional) Name of the Data Mover to serve the share service.
# Defaults to $::os_service_default
#
# [*powermax_share_data_pools*]
# (optional) Comma separated list specifying the name of the pools to be
# used by this back end. Do not set this option if all storage pools on the
# system can be used. Wild card character is supported
# Defaults to $::os_service_default
#
# [*powermax_ethernet_ports*]
# (optional) Comma-separated list specifying the ports (devices) of Data Mover
# that can be used for share server interface. Do not set this option if all
# ports on the Data Mover can be used. Wild card character is supported.
# Defaults to $::os_service_default
#
# [*emc_nas_server_secure*]
# (optional) Use SSL validation
# Defaults to $::os_service_default
#
# [*emc_ssl_cert_path*]
# (optional) Path to SSL certificates
# Defaults to $::os_service_default
#
# [*emc_ssl_cert_verify*]
# (optional) Verify SSL certificates
# Defaults to $::os_service_default
#
# [*package_ensure*]
# (optional) Ensure state for package. Defaults to 'present'.
#
# === Examples
#
# manila::backend::dellemc_powermax { 'myBackend':
# emc_nas_login => 'admin',
# emc_nas_password => 'password',
# emc_nas_server => <IP address of Unity Syste,>,
# }
#
define manila::backend::dellemc_powermax (
$emc_nas_login,
$emc_nas_password,
$emc_nas_server,
$emc_share_backend = 'powermax',
$share_backend_name = $name,
$backend_availability_zone = $::os_service_default,
$powermax_server_container = $::os_service_default,
$powermax_share_data_pools = $::os_service_default,
$powermax_ethernet_ports = $::os_service_default,
$emc_nas_server_secure = $::os_service_default,
$emc_ssl_cert_path = $::os_service_default,
$emc_ssl_cert_verify = $::os_service_default,
$package_ensure = 'present',
) {
include ::manila::deps
validate_legacy(String, 'validate_string', $emc_nas_password)
$powermax_share_driver = 'manila.share.drivers.dell_emc.driver.EMCShareDriver'
manila_config {
"${share_backend_name}/share_driver": value => $powermax_share_driver;
"${share_backend_name}/driver_handles_share_servers": value => true;
"${share_backend_name}/emc_nas_login": value => $emc_nas_login;
"${share_backend_name}/emc_nas_password": value => $emc_nas_password, secret => true;
"${share_backend_name}/emc_nas_server": value => $emc_nas_server;
"${share_backend_name}/share_backend_name": value => $share_backend_name;
"${share_backend_name}/backend_availability_zone": value => $backend_availability_zone;
"${share_backend_name}/emc_share_backend": value => $emc_share_backend;
"${share_backend_name}/powermax_server_container": value => $powermax_server_container;
"${share_backend_name}/powermax_share_data_pools": value => join(any2array($powermax_share_data_pools), ',');
"${share_backend_name}/powermax_ethernet_ports": value => join(any2array($powermax_ethernet_ports), ',');
"${share_backend_name}/emc_nas_server_secure": value => $emc_nas_server_secure;
"${share_backend_name}/emc_ssl_cert_path": value => $emc_ssl_cert_path;
"${share_backend_name}/emc_ssl_cert_verify": value => $emc_ssl_cert_verify;
}
ensure_resource('package','nfs-utils',{
ensure => $package_ensure,
tag => 'manila-support-package',
})
}

View File

@ -0,0 +1,4 @@
---
features:
- |
Support for Dell EMC PowerMax backend has been added.

View File

@ -0,0 +1,78 @@
require 'spec_helper'
describe 'manila::backend::dellemc_powermax' do
let(:title) {'dellemc_powermax'}
let :required_params do
{
:emc_nas_login => 'admin',
:emc_nas_password => 'password',
:emc_nas_server => '127.0.0.2',
}
end
let :default_params do
{
:emc_share_backend => 'powermax',
:powermax_server_container => '<SERVICE DEFAULT>',
:powermax_share_data_pools => '<SERVICE DEFAULT>',
:powermax_ethernet_ports => '<SERVICE DEFAULT>',
:backend_availability_zone => '<SERVICE DEFAULT>',
}
end
shared_examples_for 'dell emc powermax share driver' do
let :params_hash do
default_params.merge(params)
end
it 'configures dell emc powermax share driver' do
is_expected.to contain_manila_config("dellemc_powermax/share_driver").with_value(
'manila.share.drivers.dell_emc.driver.EMCShareDriver')
is_expected.to contain_manila_config("dellemc_powermax/driver_handles_share_servers").with_value(true)
params_hash.each_pair do |config,value|
is_expected.to contain_manila_config("dellemc_powermax/#{config}").with_value( value )
end
end
it 'marks emc_nas_password as secret' do
is_expected.to contain_manila_config("dellemc_powermax/emc_nas_password").with_secret( true )
end
end
shared_examples 'manila::backend::dellemc_powermax' do
context 'with default parameters' do
let :params do
required_params
end
it_configures 'dell emc powermax share driver'
end
context 'with provided parameters' do
let :params do
required_params.merge!({
:powermax_server_container => 'container1',
:powermax_share_data_pools => '*',
:powermax_ethernet_ports => 'eth1',
:backend_availability_zone => 'my_zone',
})
end
it_configures 'dell emc powermax share driver'
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
it_behaves_like 'manila::backend::dellemc_powermax'
end
end
end