Add support for using up to 3 devices simultaneously

- The number of simultaneously supported devices has been increased
   up to 3 NetApp devices
 - ONTAP 7-Mode support has been disabled
 - SolidFire support has been added

Change-Id: Iae2d5a78e262a3e7dc3d8fbb02fba36b56b5ba01
This commit is contained in:
Andrey Volochay 2016-10-15 17:24:01 +03:00
parent 8bc5e53242
commit 73c5e6fb5f
10 changed files with 1343 additions and 193 deletions

View File

@ -6,22 +6,17 @@ $cinder_netapp = hiera_hash('cinder_netapp', {})
Nova_config <||> ~> Service <||>
package { 'multipath-tools': }
package { 'nfs-common': }
nova_config {
'libvirt/iscsi_use_multipath': value => $cinder_netapp['use_multipath_for_image_xfer'];
}
if ($cinder_netapp['netapp_storage_protocol']) == 'iscsi' and ($cinder_netapp['use_multipath_for_image_xfer']) {
package { 'multipath-tools': }
}
if ($cinder_netapp['netapp_storage_protocol']) == 'nfs' {
package { 'nfs-common': }
if $cinder_netapp['nfs_mount_options'] {
nova_config {
'libvirt/nfs_mount_options': value => $cinder_netapp['nfs_mount_options'];
}
if $cinder_netapp['nfs_mount_options'] {
nova_config {
'libvirt/nfs_mount_options': value => $cinder_netapp['nfs_mount_options'];
}
}
service { "$nova::params::compute_service_name": }
service { $nova::params::compute_service_name : }

View File

@ -4,9 +4,11 @@ notice('MODULAR: netapp-hiera-override')
$cinder_netapp = hiera_hash('cinder_netapp', {})
$hiera_dir = '/etc/hiera/plugins'
$plugin_yaml = 'cinder_netapp.yaml'
$plugin_name = 'cinder_netapp'
$hiera_dir = '/etc/hiera/plugins'
$plugin_yaml = 'cinder_netapp.yaml'
$plugin_name = 'cinder_netapp'
$number_netapp_backends = $cinder_netapp['number_netapp_backends']
file { $hiera_dir:
ensure => directory,

View File

@ -1,11 +1,12 @@
module Puppet::Parser::Functions
newfunction(:get_nfs_shares, :type => :rvalue) do |args|
data = args[0]
nb_share = data['nb_share'].to_i
ip = data['nfs_server_ip']
backend_number = args[1]
nb_share = data['nb_share' + backend_number.to_s].to_i
ip = data['nfs_server_ip' + backend_number.to_s]
shares = ''
nb_share.downto(1) { |share|
shares += ip + ':' + data['nfs_server_share' + share.to_s] + "\n"
shares += ip + ':' + data['nfs_server_share' + backend_number.to_s + share.to_s] + "\n"
}
return shares
end

View File

@ -1,91 +1,103 @@
# Defined type form upstream puppet cinder module is not used because is outdated and doesn't support last changes in Cinder NetApp driver.
# It's actual for Mitaka upstream puppet cinder module
class plugin_cinder_netapp::backend::netapp (
$netapp_backend_name = 'cinder_netapp',
define plugin_cinder_netapp::backend::netapp (
$netapp_backend_name = "netapp_backend_${name}",
$cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp,
$nfs_shares_config = '/etc/cinder/shares.conf',
$nfs_shares_config = "/etc/cinder/shares_${name}.conf",
$netapp_webservice_path = '/devmgr/v2',
) {
if ($cinder_netapp["netapp_storage_family${name}"] in ['eseries', 'ontap_cluster']) {
include plugin_cinder_netapp::params
include cinder::params
# Sets correct parameter for <host_type> depending on storage family
if ($cinder_netapp['netapp_storage_family']) == 'eseries' {
$host_type = $cinder_netapp['netapp_eseries_host_type']
if ($cinder_netapp["netapp_storage_family${name}"]) == 'eseries' {
$host_type = $cinder_netapp["netapp_eseries_host_type${name}"]
} else {
$host_type = $cinder_netapp['netapp_host_type']
$host_type = $cinder_netapp["netapp_host_type${name}"]
}
# NetApp driver does not understand boolean types for <lun_space_reservation> parameter
if ($cinder_netapp['netapp_lun_space_reservation']) {
if ($cinder_netapp["netapp_lun_space_reservation${name}"]) {
$lun_space_reservation = 'enabled'
} else {
$lun_space_reservation = 'disabled'
}
# Sets up NFS shares
if ($cinder_netapp['netapp_storage_protocol']) == 'nfs' {
package { 'nfs-common': }
if ($cinder_netapp["netapp_storage_protocol${name}"]) == 'nfs' {
if ! defined( Package['nfs-common'] ) {
package { 'nfs-common': }
}
$shares = get_nfs_shares($cinder_netapp)
$shares = get_nfs_shares($cinder_netapp, $name)
file { $nfs_shares_config:
content => $shares,
notify => Service["$cinder::params::volume_service"],
notify => Service[$cinder::params::volume_service],
}
}
# We need following packages to create a root volume during an instance spawning
if ($cinder_netapp['netapp_storage_protocol']) == 'iscsi' {
package { 'open-iscsi': }
if ($cinder_netapp["netapp_storage_protocol${name}"]) == 'iscsi' {
if ! defined( Package['open-iscsi'] ) {
package { 'open-iscsi': }
}
if ($cinder_netapp['use_multipath_for_image_xfer']) {
package { 'multipath-tools': }
if ! defined( Package['multipath-tools'] ) {
package { 'multipath-tools': }
}
}
}
# To be ensure that $ symbol is correctly escaped in netapp password
$netapp_password = regsubst($cinder_netapp['netapp_password'],'\$','$$','G')
$netapp_password = regsubst($cinder_netapp["netapp_password${name}"],'\$','$$','G')
Cinder_config <||> -> Plugin_cinder_netapp::Backend::Enable_backend[$netapp_backend_name] ~> Service <||>
Cinder_config <||> ~> Service <||>
cinder_config {
"$netapp_backend_name/volume_backend_name": value => 'cinder_netapp';
"$netapp_backend_name/volume_driver": value => 'cinder.volume.drivers.netapp.common.NetAppDriver';
"$netapp_backend_name/netapp_login": value => $cinder_netapp['netapp_login'];
"$netapp_backend_name/netapp_password": value => $netapp_password;
"$netapp_backend_name/netapp_server_hostname": value => $cinder_netapp['netapp_server_hostname'];
"$netapp_backend_name/netapp_server_port": value => $cinder_netapp['netapp_server_port'];
"$netapp_backend_name/netapp_transport_type": value => $cinder_netapp['netapp_transport_type'];
"$netapp_backend_name/netapp_storage_family": value => $cinder_netapp['netapp_storage_family'];
"$netapp_backend_name/netapp_storage_protocol": value => $cinder_netapp['netapp_storage_protocol'];
"$netapp_backend_name/netapp_vserver": value => $cinder_netapp['netapp_vserver'];
"$netapp_backend_name/netapp_vfiler": value => $cinder_netapp['netapp_vfiler'];
"$netapp_backend_name/netapp_controller_ips": value => $cinder_netapp['netapp_controller_ips'];
"$netapp_backend_name/netapp_sa_password": value => $cinder_netapp['netapp_sa_password'];
"$netapp_backend_name/netapp_webservice_path": value => $netapp_webservice_path;
"$netapp_backend_name/nfs_shares_config": value => $nfs_shares_config;
"$netapp_backend_name/thres_avl_size_perc_start": value => $cinder_netapp['thres_avl_size_perc_start'];
"$netapp_backend_name/thres_avl_size_perc_stop": value => $cinder_netapp['thres_avl_size_perc_stop'];
"$netapp_backend_name/expiry_thres_minutes": value => $cinder_netapp['expiry_thres_minutes'];
"$netapp_backend_name/netapp_copyoffload_tool_path": value => $cinder_netapp['netapp_copyoffload_tool_path'];
"$netapp_backend_name/netapp_host_type": value => $host_type;
"$netapp_backend_name/netapp_lun_space_reservation": value => $lun_space_reservation;
"$netapp_backend_name/netapp_lun_ostype": value => $cinder_netapp['netapp_lun_ostype'];
"$netapp_backend_name/use_multipath_for_image_xfer": value => $cinder_netapp['use_multipath_for_image_xfer'];
"$netapp_backend_name/netapp_enable_multiattach": value => $cinder_netapp['netapp_enable_multiattach'];
"$netapp_backend_name/netapp_pool_name_search_pattern": value => $cinder_netapp['netapp_pool_name_search_pattern'];
"$netapp_backend_name/reserved_percentage": value => $cinder_netapp['reserved_percentage'];
"$netapp_backend_name/max_oversubscription_ratio": value => $cinder_netapp['max_oversubscription_ratio'];
"$netapp_backend_name/nfs_mount_options": value => $cinder_netapp['nfs_mount_options'];
"$netapp_backend_name/backend_host": value => 'str:netapp'; # for NetApp HA
"${netapp_backend_name}/volume_backend_name": value => "cinder_netapp_backend_${name}";
"${netapp_backend_name}/volume_driver": value => 'cinder.volume.drivers.netapp.common.NetAppDriver';
"${netapp_backend_name}/netapp_login": value => $cinder_netapp["netapp_login${name}"];
"${netapp_backend_name}/netapp_password": value => $netapp_password;
"${netapp_backend_name}/netapp_server_hostname": value => $cinder_netapp["netapp_server_hostname${name}"];
"${netapp_backend_name}/netapp_server_port": value => $cinder_netapp["netapp_server_port${name}"];
"${netapp_backend_name}/netapp_transport_type": value => $cinder_netapp["netapp_transport_type${name}"];
"${netapp_backend_name}/netapp_storage_family": value => $cinder_netapp["netapp_storage_family${name}"];
"${netapp_backend_name}/netapp_storage_protocol": value => $cinder_netapp["netapp_storage_protocol${name}"];
"${netapp_backend_name}/netapp_vserver": value => $cinder_netapp["netapp_vserver${name}"];
"${netapp_backend_name}/netapp_vfiler": value => $cinder_netapp["netapp_vfiler${name}"];
"${netapp_backend_name}/netapp_controller_ips": value => $cinder_netapp["netapp_controller_ips${name}"];
"${netapp_backend_name}/netapp_sa_password": value => $cinder_netapp["netapp_sa_password${name}"];
"${netapp_backend_name}/netapp_webservice_path": value => $netapp_webservice_path;
"${netapp_backend_name}/nfs_shares_config": value => $nfs_shares_config;
"${netapp_backend_name}/thres_avl_size_perc_start": value => $cinder_netapp["thres_avl_size_perc_start${name}"];
"${netapp_backend_name}/thres_avl_size_perc_stop": value => $cinder_netapp["thres_avl_size_perc_stop${name}"];
"${netapp_backend_name}/expiry_thres_minutes": value => $cinder_netapp["expiry_thres_minutes${name}"];
"${netapp_backend_name}/netapp_copyoffload_tool_path": value => $cinder_netapp["netapp_copyoffload_tool_path${name}"];
"${netapp_backend_name}/netapp_host_type": value => $host_type;
"${netapp_backend_name}/netapp_lun_space_reservation": value => $lun_space_reservation;
"${netapp_backend_name}/netapp_lun_ostype": value => $cinder_netapp["netapp_lun_ostype${name}"];
"${netapp_backend_name}/use_multipath_for_image_xfer": value => $cinder_netapp["use_multipath_for_image_xfer"];
"${netapp_backend_name}/netapp_enable_multiattach": value => $cinder_netapp["netapp_enable_multiattach${name}"];
"${netapp_backend_name}/netapp_pool_name_search_pattern": value => $cinder_netapp["netapp_pool_name_search_pattern${name}"];
"${netapp_backend_name}/reserved_percentage": value => $cinder_netapp["reserved_percentage${name}"];
"${netapp_backend_name}/max_oversubscription_ratio": value => $cinder_netapp["max_oversubscription_ratio${name}"];
"${netapp_backend_name}/nfs_mount_options": value => $cinder_netapp["nfs_mount_options"];
"${netapp_backend_name}/backend_host": value => 'str:netapp'; # for NetApp HA
}
# Adds the backend in <enabled_backends> parameter
plugin_cinder_netapp::backend::enable_backend { $netapp_backend_name: }
plugin_cinder_netapp::backend::enable_backend { $netapp_backend_name : }
service { $cinder::params::volume_service: }
if ! defined( Service ) {
service { $cinder::params::volume_service : }
}
}
}

View File

@ -0,0 +1,54 @@
# Copyright 2015 SolidFire, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
define plugin_cinder_netapp::backend::solidfire (
$netapp_backend_name = "netapp_backend_${name}",
$cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp,
) {
if ($cinder_netapp["netapp_storage_family${name}"] in ['solidfire']) {
include cinder::params
include cinder::client
if ! defined( Package['open-iscsi'] ) {
package { 'open-iscsi': }
}
Cinder::Backend::Solidfire <||> -> Plugin_cinder_netapp::Backend::Enable_backend[$netapp_backend_name] ~> Service <||>
cinder::backend::solidfire { $netapp_backend_name :
san_ip => $cinder_netapp["solidfire_mvip${name}"],
san_login => $cinder_netapp["solidfire_admin_login${name}"],
san_password => $cinder_netapp["solidfire_admin_password${name}"],
volume_backend_name => "cinder_netapp_backend_${name}",
sf_emulate_512 => true,
sf_api_port => $cinder_netapp["solidfire_api_port${name}"],
sf_account_prefix => $cinder_netapp["solidfire_account_prefix${name}"],
sf_allow_template_caching => $cinder_netapp["solidfire_allow_template_caching${name}"],
sf_template_account_name => $cinder_netapp["solidfire_template_account${name}"],
sf_volume_prefix => $cinder_netapp["solidfire_volume_prefix${name}"],
extra_options => { "${netapp_backend_name}/backend_host" => { value => 'str:netapp' },},
}
# Adds the backend in <enabled_backends> parameter
plugin_cinder_netapp::backend::enable_backend { $netapp_backend_name : }
if ! defined( Service ) {
service { $cinder::params::volume_service : }
}
}
}

View File

@ -1,5 +1,10 @@
class plugin_cinder_netapp (
$cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp,
) inherits plugin_cinder_netapp::params {
class { $netapp_backend_class: }
$backends = range('1', $cinder_netapp['number_netapp_backends'])
plugin_cinder_netapp::backend::netapp { $backends : }
plugin_cinder_netapp::backend::solidfire { $backends : }
}

View File

@ -3,5 +3,4 @@ class plugin_cinder_netapp::params (
$config_file = '/etc/cinder/cinder.conf'
$cinder_netapp = hiera_hash('cinder_netapp', {})
$netapp_backend_class = 'plugin_cinder_netapp::backend::netapp'
}

View File

@ -1,3 +1,11 @@
storage:
volume_backend_names:
netapp: cinder_netapp
<% if @number_netapp_backends.to_i >= 1 -%>
NetApp_Backend_1 : cinder_netapp_backend_1
<% end -%>
<% if @number_netapp_backends.to_i >= 2 -%>
NetApp_Backend_2 : cinder_netapp_backend_2
<% end -%>
<% if @number_netapp_backends.to_i >= 3 -%>
NetApp_Backend_3 : cinder_netapp_backend_3
<% end -%>

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ name: cinder_netapp
# Human-readable name for your plugin
title: Cinder and NetApp integration
# Plugin version
version: '5.0.0'
version: '6.0.0'
# Description
description: Enables using NetApp as a Cinder backend
# Required fuel version