294 lines
12 KiB
Puppet
294 lines
12 KiB
Puppet
# == define: cinder::backend::netapp
|
|
#
|
|
# Configures Cinder to use the NetApp unified volume driver
|
|
# Compatible for multiple backends
|
|
#
|
|
# === Parameters
|
|
#
|
|
# [*volume_backend_name*]
|
|
# (optional) The name of the cinder::backend::netapp ressource
|
|
# Defaults to $name.
|
|
#
|
|
# [*backend_availability_zone*]
|
|
# (Optional) Availability zone for this volume backend.
|
|
# If not set, the storage_availability_zone option value
|
|
# is used as the default for all backends.
|
|
# Defaults to $::os_service_default.
|
|
#
|
|
# [*netapp_login*]
|
|
# (required) Administrative user account name used to access the storage
|
|
# system or proxy server.
|
|
#
|
|
# [*netapp_password*]
|
|
# (required) Password for the administrative user account specified in the
|
|
# netapp_login option.
|
|
#
|
|
# [*netapp_server_hostname*]
|
|
# (required) The hostname (or IP address) for the storage system or proxy
|
|
# server.
|
|
#
|
|
# [*netapp_server_port*]
|
|
# (optional) The TCP port to use for communication with the storage
|
|
# system or proxy. If not specified, Data ONTAP drivers will use 80
|
|
# for HTTP and 443 for HTTPS; E-Series will use 8080 for HTTP and
|
|
# 8443 for HTTPS.
|
|
# Defaults to 80
|
|
#
|
|
# [*netapp_size_multiplier*]
|
|
# (optional) The quantity to be multiplied by the requested volume size to
|
|
# ensure enough space is available on the virtual storage server (Vserver) to
|
|
# fulfill the volume creation request.
|
|
# Defaults to 1.2
|
|
#
|
|
# [*netapp_storage_family*]
|
|
# (optional) The storage family type used on the storage system; valid values
|
|
# are ontap_7mode for using Data ONTAP operating in 7-Mode, ontap_cluster
|
|
# for using clustered Data ONTAP, or eseries for NetApp E-Series.
|
|
# Defaults to ontap_cluster
|
|
#
|
|
# [*netapp_storage_protocol*]
|
|
# (optional) The storage protocol to be used on the data path with the storage
|
|
# system. Valid values are iscsi, fc, nfs.
|
|
# Defaults to nfs
|
|
#
|
|
# [*netapp_transport_type*]
|
|
# (optional) The transport protocol used when communicating with the storage
|
|
# system or proxy server. Valid values are http or https.
|
|
# Defaults to http
|
|
#
|
|
# [*netapp_vfiler*]
|
|
# (optional) The vFiler unit on which provisioning of block storage volumes
|
|
# will be done. This parameter is only used by the driver when connecting to
|
|
# an instance with a storage family of Data ONTAP operating in 7-Mode. Only
|
|
# use this parameter when utilizing the MultiStore feature on the NetApp
|
|
# storage system.
|
|
# Defaults to undef
|
|
#
|
|
# [*netapp_vserver*]
|
|
# (optional) This option specifies the virtual storage server (Vserver)
|
|
# name on the storage cluster on which provisioning of block storage volumes
|
|
# should occur.
|
|
# Defaults to undef
|
|
#
|
|
# [*netapp_partner_backend_name*]
|
|
# (optional) The name of the config.conf stanza for a Data ONTAP (7-mode)
|
|
# HA partner. This option is only used by the driver when connecting to an
|
|
# instance with a storage family of Data ONTAP operating in 7-Mode, and it is
|
|
# required if the storage protocol selected is FC.
|
|
# Defaults to undef
|
|
#
|
|
# [*expiry_thres_minutes*]
|
|
# (optional) This parameter specifies the threshold for last access time for
|
|
# images in the NFS image cache. When a cache cleaning cycle begins, images
|
|
# in the cache that have not been accessed in the last M minutes, where M is
|
|
# the value of this parameter, will be deleted from the cache to create free
|
|
# space on the NFS share.
|
|
# Defaults to 720
|
|
#
|
|
# [*thres_avl_size_perc_start*]
|
|
# (optional) If the percentage of available space for an NFS share has
|
|
# dropped below the value specified by this parameter, the NFS image cache
|
|
# will be cleaned.
|
|
# Defaults to 20
|
|
#
|
|
# [*thres_avl_size_perc_stop*]
|
|
# (optional) When the percentage of available space on an NFS share has
|
|
# reached the percentage specified by this parameter, the driver will stop
|
|
# clearing files from the NFS image cache that have not been accessed in the
|
|
# last M minutes, where M is the value of the expiry_thres_minutes parameter.
|
|
# Defaults to 60
|
|
#
|
|
# [*nfs_shares*]
|
|
# (optional) Array of NFS exports in the form of host:/share; will be written into
|
|
# file specified in nfs_shares_config
|
|
# Defaults to undef
|
|
#
|
|
# [*nfs_shares_config*]
|
|
# (optional) File with the list of available NFS shares
|
|
# Defaults to '/etc/cinder/shares.conf'
|
|
#
|
|
# [*nfs_mount_options*]
|
|
# (optional) Mount options passed to the nfs client. See section
|
|
# of the nfs man page for details.
|
|
# Defaults to $::os_service_default
|
|
#
|
|
# [*netapp_copyoffload_tool_path*]
|
|
# (optional) This option specifies the path of the NetApp Copy Offload tool
|
|
# binary. Ensure that the binary has execute permissions set which allow the
|
|
# effective user of the cinder-volume process to execute the file.
|
|
# Defaults to undef
|
|
#
|
|
# [*netapp_controller_ips*]
|
|
# (optional) This option is only utilized when the storage family is
|
|
# configured to eseries. This option is used to restrict provisioning to the
|
|
# specified controllers. Specify the value of this option to be a comma
|
|
# separated list of controller hostnames or IP addresses to be used for
|
|
# provisioning.
|
|
# Defaults to undef
|
|
#
|
|
# [*netapp_sa_password*]
|
|
# (optional) Password for the NetApp E-Series storage array.
|
|
# Defaults to undef
|
|
#
|
|
# [*netapp_pool_name_search_pattern*]
|
|
# (optional) This option is only utilized when the Cinder driver is
|
|
# configured to use iSCSI or Fibre Channel. It is used to restrict
|
|
# provisioning to the specified FlexVol volumes. Specify the value of this
|
|
# option as a regular expression which will be applied to the names of
|
|
# FlexVol volumes from the storage backend which represent pools in Cinder.
|
|
# ^ (beginning of string) and $ (end of string) are implicitly wrapped around
|
|
# the regular expression specified before filtering.
|
|
# Defaults to (.+)
|
|
#
|
|
# [*netapp_host_type*]
|
|
# (optional) This option is used to define how the controllers will work with
|
|
# the particular operating system on the hosts that are connected to it.
|
|
# Defaults to $::os_service_default
|
|
#
|
|
# [*netapp_webservice_path*]
|
|
# (optional) This option is used to specify the path to the E-Series proxy
|
|
# application on a proxy server. The value is combined with the value of the
|
|
# netapp_transport_type, netapp_server_hostname, and netapp_server_port
|
|
# options to create the URL used by the driver to connect to the proxy
|
|
# application.
|
|
# Defaults to '/devmgr/v2'
|
|
#
|
|
# [*nas_secure_file_operations*]
|
|
# (Optional) Allow network-attached storage systems to operate in a secure
|
|
# environment where root level access is not permitted. If set to False,
|
|
# access is as the root user and insecure. If set to True, access is not as
|
|
# root. If set to auto, a check is done to determine if this is a new
|
|
# installation: True is used if so, otherwise False. Default is auto.
|
|
# Defaults to $::os_service_default
|
|
#
|
|
# [*nas_secure_file_permissions*]
|
|
# (Optional) Set more secure file permissions on network-attached storage
|
|
# volume files to restrict broad other/world access. If set to False,
|
|
# volumes are created with open permissions. If set to True, volumes are
|
|
# created with permissions for the cinder user and group (660). If set to
|
|
# auto, a check is done to determine if this is a new installation: True is
|
|
# used if so, otherwise False. Default is auto.
|
|
# Defaults to $::os_service_default
|
|
#
|
|
# [*manage_volume_type*]
|
|
# (Optional) Whether or not manage Cinder Volume type.
|
|
# If set to true, a Cinder Volume type will be created
|
|
# with volume_backend_name=$volume_backend_name key/value.
|
|
# Defaults to false.
|
|
#
|
|
# [*extra_options*]
|
|
# (optional) Hash of extra options to pass to the backend stanza
|
|
# Defaults to: {}
|
|
# Example :
|
|
# { 'netapp_backend/param1' => { 'value' => value1 } }
|
|
#
|
|
# === Examples
|
|
#
|
|
# cinder::backend::netapp { 'myBackend':
|
|
# netapp_login => 'clusterAdmin',
|
|
# netapp_password => 'password',
|
|
# netapp_server_hostname => 'netapp.mycorp.com',
|
|
# netapp_server_port => '443',
|
|
# netapp_transport_type => 'https',
|
|
# netapp_vserver => 'openstack-vserver',
|
|
# }
|
|
#
|
|
# === Authors
|
|
#
|
|
# Bob Callaway <bob.callaway@netapp.com>
|
|
#
|
|
# === Copyright
|
|
#
|
|
# Copyright 2014 NetApp, Inc.
|
|
#
|
|
define cinder::backend::netapp (
|
|
$netapp_login,
|
|
$netapp_password,
|
|
$netapp_server_hostname,
|
|
$volume_backend_name = $name,
|
|
$backend_availability_zone = $::os_service_default,
|
|
$netapp_server_port = '80',
|
|
$netapp_size_multiplier = '1.2',
|
|
$netapp_storage_family = 'ontap_cluster',
|
|
$netapp_storage_protocol = 'nfs',
|
|
$netapp_transport_type = 'http',
|
|
$netapp_vfiler = undef,
|
|
$netapp_vserver = undef,
|
|
$netapp_partner_backend_name = undef,
|
|
$expiry_thres_minutes = '720',
|
|
$thres_avl_size_perc_start = '20',
|
|
$thres_avl_size_perc_stop = '60',
|
|
$nfs_shares = undef,
|
|
$nfs_shares_config = '/etc/cinder/shares.conf',
|
|
$nfs_mount_options = $::os_service_default,
|
|
$netapp_copyoffload_tool_path = undef,
|
|
$netapp_controller_ips = undef,
|
|
$netapp_sa_password = undef,
|
|
$netapp_host_type = $::os_service_default,
|
|
$netapp_webservice_path = '/devmgr/v2',
|
|
$manage_volume_type = false,
|
|
$extra_options = {},
|
|
$netapp_pool_name_search_pattern = '(.+)',
|
|
$nas_secure_file_operations = $::os_service_default,
|
|
$nas_secure_file_permissions = $::os_service_default,
|
|
) {
|
|
|
|
include cinder::deps
|
|
|
|
if $nfs_shares {
|
|
validate_legacy(Array, 'validate_array', $nfs_shares)
|
|
|
|
file {$nfs_shares_config:
|
|
content => join($nfs_shares, "\n"),
|
|
require => Anchor['cinder::install::end'],
|
|
notify => Anchor['cinder::service::begin'],
|
|
}
|
|
}
|
|
|
|
cinder_config {
|
|
"${name}/nfs_mount_options": value => $nfs_mount_options;
|
|
"${name}/volume_backend_name": value => $volume_backend_name;
|
|
"${name}/backend_availability_zone": value => $backend_availability_zone;
|
|
"${name}/volume_driver": value => 'cinder.volume.drivers.netapp.common.NetAppDriver';
|
|
"${name}/netapp_login": value => $netapp_login;
|
|
"${name}/netapp_password": value => $netapp_password, secret => true;
|
|
"${name}/netapp_server_hostname": value => $netapp_server_hostname;
|
|
"${name}/netapp_server_port": value => $netapp_server_port;
|
|
"${name}/netapp_size_multiplier": value => $netapp_size_multiplier;
|
|
"${name}/netapp_storage_family": value => $netapp_storage_family;
|
|
"${name}/netapp_storage_protocol": value => $netapp_storage_protocol;
|
|
"${name}/netapp_transport_type": value => $netapp_transport_type;
|
|
"${name}/netapp_vfiler": value => $netapp_vfiler;
|
|
"${name}/netapp_vserver": value => $netapp_vserver;
|
|
"${name}/netapp_partner_backend_name": value => $netapp_partner_backend_name;
|
|
"${name}/expiry_thres_minutes": value => $expiry_thres_minutes;
|
|
"${name}/thres_avl_size_perc_start": value => $thres_avl_size_perc_start;
|
|
"${name}/thres_avl_size_perc_stop": value => $thres_avl_size_perc_stop;
|
|
"${name}/nfs_shares_config": value => $nfs_shares_config;
|
|
"${name}/netapp_copyoffload_tool_path": value => $netapp_copyoffload_tool_path;
|
|
"${name}/netapp_controller_ips": value => $netapp_controller_ips;
|
|
"${name}/netapp_sa_password": value => $netapp_sa_password, secret => true;
|
|
"${name}/netapp_pool_name_search_pattern": value => $netapp_pool_name_search_pattern;
|
|
"${name}/netapp_host_type": value => $netapp_host_type;
|
|
"${name}/netapp_webservice_path": value => $netapp_webservice_path;
|
|
"${name}/nas_secure_file_operations": value => $nas_secure_file_operations;
|
|
"${name}/nas_secure_file_permissions": value => $nas_secure_file_permissions;
|
|
}
|
|
|
|
if $manage_volume_type {
|
|
cinder_type { $name:
|
|
ensure => present,
|
|
properties => ["volume_backend_name=${name}"],
|
|
}
|
|
}
|
|
|
|
if $netapp_storage_family == 'eseries' {
|
|
cinder_config {
|
|
"${name}/use_multipath_for_image_xfer": value => true;
|
|
}
|
|
}
|
|
|
|
create_resources('cinder_config', $extra_options)
|
|
|
|
}
|