From f9085c5294a96b3ce1a37d0aff60d7e41809e65b Mon Sep 17 00:00:00 2001 From: Andrey Volochay Date: Thu, 17 Mar 2016 18:38:33 +0300 Subject: [PATCH] Add MOS 8.0 support - The plugin has been totally refactored to accordance with changes in OpenStack Liberty and MOS 8.0 - All documented features of NetApp Cinder Driver are configurable - Plugin can change Cinder settings after deployment with wrong parameters. It requires manual actions - Defined type (backend::netapp) form upstream puppet cinder module is not used because is outdated and doesn't support last changes in Cinder NetApp driver Change-Id: Ic70ad0a99c41860502e15fe8671e6ca3f11e9f58 --- components.yaml | 6 + .../puppet/manifests/compute.pp | 17 + .../puppet/manifests/hiera_override.pp | 29 ++ deployment_scripts/puppet/manifests/site.pp | 3 + .../puppet/manifests/site_cinder.pp | 2 - .../puppet/manifests/site_compute.pp | 2 - .../puppet/manifests/site_controller.pp | 2 - .../manifests/backend/iscsi.pp | 32 +- .../manifests/backend/netapp.pp | 145 +++--- .../manifests/backend/rbd.pp | 29 +- .../manifests/backend/share.pp | 25 +- .../plugin_cinder_netapp/manifests/cinder.pp | 22 - .../manifests/cinder/type.pp | 82 ---- .../manifests/cinder/type_set.pp | 67 --- .../plugin_cinder_netapp/manifests/compute.pp | 37 -- .../manifests/controller.pp | 28 -- .../plugin_cinder_netapp/manifests/init.pp | 11 + .../manifests/multibackend.pp | 14 + .../manifests/multibackend_cinder.pp | 16 - .../manifests/multibackend_controller.pp | 59 --- .../plugin_cinder_netapp/manifests/params.pp | 49 +-- deployment_tasks.yaml | 40 +- environment_config.yaml | 416 ++++++++++-------- metadata.yaml | 22 +- 24 files changed, 472 insertions(+), 683 deletions(-) create mode 100644 components.yaml create mode 100644 deployment_scripts/puppet/manifests/compute.pp create mode 100644 deployment_scripts/puppet/manifests/hiera_override.pp create mode 100644 deployment_scripts/puppet/manifests/site.pp delete mode 100644 deployment_scripts/puppet/manifests/site_cinder.pp delete mode 100644 deployment_scripts/puppet/manifests/site_compute.pp delete mode 100644 deployment_scripts/puppet/manifests/site_controller.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type_set.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/compute.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/controller.pp create mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp create mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_cinder.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_controller.pp diff --git a/components.yaml b/components.yaml new file mode 100644 index 0000000..b6c2a42 --- /dev/null +++ b/components.yaml @@ -0,0 +1,6 @@ +- name: 'storage:block:backend:netapp' + label: 'Cinder NetApp' + description: 'Cinder with NetApp backend' + compatible: + - name: 'storage:block:backend:ceph' + - name: 'storage:block:backend:lvm' diff --git a/deployment_scripts/puppet/manifests/compute.pp b/deployment_scripts/puppet/manifests/compute.pp new file mode 100644 index 0000000..571f369 --- /dev/null +++ b/deployment_scripts/puppet/manifests/compute.pp @@ -0,0 +1,17 @@ +notice('MODULAR: netapp-compute') + +$cinder_netapp = hiera_hash('cinder_netapp', {}) + +nova_config { + 'libvirt/iscsi_use_multipath': value => $cinder_netapp['use_multipath_for_image_xfer']; +} + +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']; + } + } +} diff --git a/deployment_scripts/puppet/manifests/hiera_override.pp b/deployment_scripts/puppet/manifests/hiera_override.pp new file mode 100644 index 0000000..db3bcf7 --- /dev/null +++ b/deployment_scripts/puppet/manifests/hiera_override.pp @@ -0,0 +1,29 @@ +notice('MODULAR: netapp-hiera-override') + +$cinder_netapp = hiera_hash('cinder_netapp', {}) +$multibackend = $cinder_netapp['multibackend'] + +$hiera_dir = '/etc/hiera/plugins' +$plugin_yaml = 'cinder_netapp.yaml' +$plugin_name = 'cinder_netapp' + + +$content = inline_template(' +storage_hash: + volume_backend_names: + netapp: cinder_netapp +<% if ! @multibackend -%> + volumes_lvm: false + volumes_ceph: false +<% end -%> +') + +file { "$hiera_dir": + ensure => directory, +} + +file { "${hiera_dir}/${plugin_yaml}": + ensure => file, + content => $content, + require => File[$hiera_dir], +} diff --git a/deployment_scripts/puppet/manifests/site.pp b/deployment_scripts/puppet/manifests/site.pp new file mode 100644 index 0000000..0856e11 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site.pp @@ -0,0 +1,3 @@ +notice('MODULAR: fuel-plugin-cinder-netapp') + +class { 'plugin_cinder_netapp': } diff --git a/deployment_scripts/puppet/manifests/site_cinder.pp b/deployment_scripts/puppet/manifests/site_cinder.pp deleted file mode 100644 index 24d9d21..0000000 --- a/deployment_scripts/puppet/manifests/site_cinder.pp +++ /dev/null @@ -1,2 +0,0 @@ -$fuel_settings = parseyaml($astute_settings_yaml) -class { 'plugin_cinder_netapp::cinder': } diff --git a/deployment_scripts/puppet/manifests/site_compute.pp b/deployment_scripts/puppet/manifests/site_compute.pp deleted file mode 100644 index 854f60e..0000000 --- a/deployment_scripts/puppet/manifests/site_compute.pp +++ /dev/null @@ -1,2 +0,0 @@ -$fuel_settings = parseyaml($astute_settings_yaml) -class { 'plugin_cinder_netapp::compute': } diff --git a/deployment_scripts/puppet/manifests/site_controller.pp b/deployment_scripts/puppet/manifests/site_controller.pp deleted file mode 100644 index e459282..0000000 --- a/deployment_scripts/puppet/manifests/site_controller.pp +++ /dev/null @@ -1,2 +0,0 @@ -$fuel_settings = parseyaml($astute_settings_yaml) -class { 'plugin_cinder_netapp::controller': } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/iscsi.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/iscsi.pp index bf3674e..95a1262 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/iscsi.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/iscsi.pp @@ -1,28 +1,20 @@ -# this can be used to insert into cinder_iscsi section lvm configuration parameters -# -# [iscsi_ip_address] The IP address that the iSCSI daemon is listening on -# [iscsi_helper] iSCSI target user-land tool to use -# [volume_group] Name for the VG that will contain exported volumes -# -# === Examples -# -# class { 'plugin_cinder_netapp::backend::iscsi': -# $iscsi_ip_address = '127.0.0.1', -# $iscsi_helper, -# $volume_group = 'cinder' , -# } -# class plugin_cinder_netapp::backend::iscsi ( $volume_group = 'cinder', - $iscsi_ip_address = $::internal_address, - $iscsi_helper = $::cinder::params::iscsi_helper, -) { + $iscsi_helper = $::cinder::params::iscsi_helper, + $backend_type, +) inherits cinder::params { + + $network_scheme = hiera_hash('network_scheme', {}) + prepare_network_config($network_scheme) + + $storage_address = get_network_role_property('cinder/iscsi', 'ipaddr') cinder_config { - 'cinder_iscsi/volume_backend_name': value => 'cinder_iscsi'; - 'cinder_iscsi/iscsi_ip_address': value => $iscsi_ip_address; + 'cinder_iscsi/volume_backend_name': value => $backend_type; + 'cinder_iscsi/volume_driver': value => 'cinder.volume.drivers.lvm.LVMVolumeDriver'; 'cinder_iscsi/iscsi_helper': value => $iscsi_helper; 'cinder_iscsi/volume_group': value => $volume_group; + 'cinder_iscsi/iscsi_ip_address': value => $storage_address; + 'cinder_iscsi/host': value => $storage_address; } - } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/netapp.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/netapp.pp index 9a3b683..7d2f4f8 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/netapp.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/netapp.pp @@ -1,66 +1,99 @@ -# this can be used to create a netapp volume backend for cinder -# -# [section] name of the section of cinder.conf on which netapp parameters should be inserted -# [backends] name of the other backends in a multibackend config (optional) -# -# === Examples -# -# plugin_cinder_netapp::backend::netapp{ 'netapp': -# backends => Lvm1, -# } -# +# Defined type form upstream puppet cinder module is not used because is outdated and doesn't support last changes in Cinder NetApp driver. + define plugin_cinder_netapp::backend::netapp ( - $section = $name, - $backends = '', - $backend_name = 'cinder_netapp', - $mutlibackends = false, - $cinder_node = false, + $netapp_backend_name = $name, + $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, + $backend_name = undef, ) { - include cinder::client + include plugin_cinder_netapp::params + include cinder::params + + if ($cinder_netapp['multibackend']) { + + service { 'cinder-volume': + ensure => running, + name => $cinder::params::scheduler_service, + enable => true, + hasstatus => true, + hasrestart => true, + } + + cinder_config { + 'DEFAULT/enabled_backends': value => "${backend_name},${netapp_backend_name}"; + 'DEFAULT/scheduler_driver': value => 'cinder.scheduler.filter_scheduler.FilterScheduler'; + } -> Service['cinder-scheduler'] -> Service['cinder-volume'] + } + + if ($cinder_netapp['netapp_storage_family']) == 'eseries' { + $host_type = $cinder_netapp['netapp_eseries_host_type'] + } else { + $host_type = $cinder_netapp['netapp_host_type'] + } + + if ($cinder_netapp['netapp_lun_space_reservation']) { + $lun_space_reservation = 'enabled' + } else { + $lun_space_reservation = 'disabled' + } + + # To set up NFS shares + if ($cinder_netapp['netapp_storage_protocol']) == 'nfs' { + package { 'nfs-common': } + + $index = $cinder_netapp['nb_share'] + plugin_cinder_netapp::backend::share { "share-$index": + index => $index, + cinder_netapp => $cinder_netapp, + } + } + + # To create a root volume during an instance spawning + if ($cinder_netapp['netapp_storage_protocol']) == 'iscsi' { + package { 'open-iscsi': } + } # Ensure that $ symbole is correctly escaped in netapp password - $netapp_password = regsubst($::fuel_settings['cinder_netapp']['netapp_password'],'\$','$$','G') + $netapp_password = regsubst($cinder_netapp['netapp_password'],'\$','$$','G') - cinder::backend::netapp { $backend_name: - volume_backend_name => $section, - netapp_login => $::fuel_settings['cinder_netapp']['netapp_login'], - netapp_password => $netapp_password, - netapp_server_hostname => $::fuel_settings['cinder_netapp']['netapp_server_hostname'], - netapp_server_port => $::fuel_settings['cinder_netapp']['netapp_server_port'], - netapp_transport_type => $::fuel_settings['cinder_netapp']['netapp_transport_type'], - netapp_storage_family => $::fuel_settings['cinder_netapp']['netapp_storage_family'], - netapp_storage_protocol => $::fuel_settings['cinder_netapp']['netapp_storage_protocol'], - netapp_vserver => $::fuel_settings['cinder_netapp']['netapp_vserver'], - netapp_controller_ips => $::fuel_settings['cinder_netapp']['netapp_controller_ips'], - netapp_sa_password => $::fuel_settings['cinder_netapp']['netapp_sa_password'], - netapp_storage_pools => $::fuel_settings['cinder_netapp']['netapp_storage_pools'], - netapp_size_multiplier => $::fuel_settings['cinder_netapp']['netapp_size_multiplier'], - netapp_vfiler => $::fuel_settings['cinder_netapp']['netapp_vfiler'], - netapp_volume_list => $::fuel_settings['cinder_netapp']['netapp_volume_list'], - expiry_thres_minutes => $::fuel_settings['cinder_netapp']['expiry_thres_minutes'], - thres_avl_size_perc_start => $::fuel_settings['cinder_netapp']['thres_avl_size_perc_start'], - thres_avl_size_perc_stop => $::fuel_settings['cinder_netapp']['thres_avl_size_perc_stop'], - netapp_copyoffload_tool_path => $::fuel_settings['cinder_netapp']['netapp_copyoffload_tool_path'], - nfs_mount_options => $::fuel_settings['cinder_netapp']['nfs_mount_options'], - } + 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 => '/devmgr/v2'; + "$netapp_backend_name/nfs_shares_config": value => '/etc/cinder/shares.conf'; + "$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/host": value => 'str:netapp'; # for NetApp HA + } -> Service['cinder-volume'] - $index = $::fuel_settings['cinder_netapp']['nb_share'] - - if $mutlibackends { - cinder_config { - 'DEFAULT/enabled_backends': value => "${backends},${backend_name}"; - } - } else { - cinder_config { - 'DEFAULT/enabled_backends': value => "${backend_name}"; - } - } - - if $cinder_node { - plugin_cinder_netapp::backend::share{ "share-${index}": - index => $index - } + service { 'cinder-volume': + ensure => running, + name => $cinder::params::volume_service, + enable => true, + hasstatus => true, + hasrestart => true, } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/rbd.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/rbd.pp index 6046e30..5035449 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/rbd.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/rbd.pp @@ -1,29 +1,3 @@ -# this can be used to insert into cinder_rbd section rbd configuration parameters -# -# [rbd_pool] The RADOS pool where rbd volumes are stored -# [rbd_user] The RADOS client name for accessing rbd volumes -# [rbd_ceph_conf] Path to the ceph configuration file -# [rbd_flatten_volume_from_snapshot] Flatten volumes created from snapshots to remove dependency -# [rbd_secret_uuid] The libvirt uuid of the secret for the rbd_user volumes -# [volume_tmp_dir] Directory where temporary image files are stored when the -# volume driver does not write them directly to the volume) -# [rbd_max_clone_depth] Maximum number of nested volume clones that are taken before -# a flatten occurs. Set to 0 to disable cloning. -# [glance_api_version] Version of the glance API to use -# -# === Examples -# -# class { 'plugin_cinder_netapp::backend::rbdi': -# $rbd_pool = 'volumes', -# $rbd_user = 'volumes', -# $rbd_ceph_conf = '/etc/ceph/ceph.conf', -# $rbd_flatten_volume_from_snapshot = false, -# $rbd_secret_uuid = 'a5d0dd94-57c4-ae55-ffe0-7e3732a24455', -# $volume_tmp_dir = false, -# $rbd_max_clone_depth = '5', -# $glance_api_version = undef, -# } -# class plugin_cinder_netapp::backend::rbd ( $rbd_pool = 'volumes', $rbd_user = 'volumes', @@ -33,10 +7,11 @@ class plugin_cinder_netapp::backend::rbd ( $volume_tmp_dir = false, $rbd_max_clone_depth = '5', $glance_api_version = undef, + $backend_type, ) { cinder_config { - 'cinder_rbd/volume_backend_name': value => 'cinder_rbd'; + 'cinder_rbd/volume_backend_name': value => $backend_type; 'cinder_rbd/volume_driver': value => 'cinder.volume.drivers.rbd.RBDDriver'; 'cinder_rbd/rbd_ceph_conf': value => $rbd_ceph_conf; 'cinder_rbd/rbd_user': value => $rbd_user; diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/share.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/share.pp index 662beb0..8f34b71 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/share.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/share.pp @@ -1,22 +1,12 @@ -# this can be used to create recursively in shares for netapp volume backend -# [index] index of the current share -# [shares] shares previously created of the following format :\n>:\n.... -# -# === Examples -# -# plugin_cinder_netapp::backend::share{ 'share1': -# index => 1, -# shares => 192.168.0.3:/vol1\n -# } -# define plugin_cinder_netapp::backend::share ( $index, - $shares = '', + $shares = undef, + $cinder_netapp, ) { - $ip = $::fuel_settings['cinder_netapp']['nfs_server_ip'] - $share = $::fuel_settings['cinder_netapp']["nfs_server_share${index}"] - $minus1 = inline_template('<%= index.to_i - 1 %>') + $ip = $cinder_netapp['nfs_server_ip'] + $share = $cinder_netapp["nfs_server_share${index}"] + $minus1 = $index - 1 if ($minus1 == '0') { # last share is reached, write information into shares.conf @@ -27,8 +17,9 @@ define plugin_cinder_netapp::backend::share ( } else { # recurse until index 1 is reached plugin_cinder_netapp::backend::share { "share-${minus1}": - index => $minus1, - shares => "${ip}:${share}\n${shares}", + index => $minus1, + shares => "${ip}:${share}\n${shares}", + cinder_netapp => $cinder_netapp, } } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder.pp deleted file mode 100644 index 9d357a3..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder.pp +++ /dev/null @@ -1,22 +0,0 @@ -# The plugin_cinder_netapp class is able to inder to use netapp as a storage backend -# (7Mode and cluster mode storage familly). If the multibackend option is checked -# cinder will used the netapp backend and the ceph or lvm (according to intial configuration) -# as multibackend storage -# -class plugin_cinder_netapp::cinder ( - $cinder_hash = $::fuel_settings['cinder'], -) { - - include plugin_cinder_netapp::params - - if $::fuel_settings['cinder_netapp']['multibackend'] { - class { 'plugin_cinder_netapp::multibackend_cinder': } - } else { - $section = 'DEFAULT' - plugin_cinder_netapp::backend::netapp{ 'cinder_netapp': - section => $section, - cinder_node => true, - } - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type.pp deleted file mode 100644 index 1ee5258..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type.pp +++ /dev/null @@ -1,82 +0,0 @@ -# ==Define: plugin_cinder_netapp::cinder::type -# -# #TODO to remove when https://bugs.launchpad.net/fuel/+bug/1461485 will be fix -# Creates cinder type and assigns backends. -# -# === Parameters -# -# [*os_password*] -# (required) The keystone tenant:username password. -# -# [*set_key*] -# (optional) Must be used with set_value. Accepts a single string be used -# as the key in type_set -# -# [*set_value*] -# (optional) Accepts list of strings or singular string. A list of values -# passed to type_set -# -# [*os_tenant_name*] -# (optional) The keystone tenant name. Defaults to 'admin'. -# -# [*os_username*] -# (optional) The keystone user name. Defaults to 'admin. -# -# [*os_auth_url*] -# (optional) The keystone auth url. Defaults to 'http://127.0.0.1:5000/v2.0/'. -# -# [*os_region_name*] -# (optional) The keystone region name. Default is unset. -# -# Author: Andrew Woodward - -define plugin_cinder_netapp::cinder::type ( - $os_password, - $volume_name = $name, - $set_key = undef, - $set_value = undef, - $os_tenant_name = 'admin', - $os_username = 'admin', - $os_auth_url = 'http://127.0.0.1:5000/v2.0/', - $os_region_name = undef, -) { - - # TODO: (xarses) This should be moved to a ruby provider so that among other - # reasons, the credential discovery magic can occur like in neutron. - - $cinder_env = [ - "OS_TENANT_NAME=${os_tenant_name}", - "OS_USERNAME=${os_username}", - "OS_PASSWORD=${os_password}", - "OS_AUTH_URL=${os_auth_url}", - ] - - if $os_region_name { - $region_env = ["OS_REGION_NAME=${os_region_name}"] - } - else { - $region_env = [] - } - - exec { "cinder type-create ${volume_name}": - command => "cinder type-create ${volume_name}", - unless => "cinder type-list | grep -qP '\\b${volume_name}\\b'", - environment => concat($cinder_env, $region_env), - require => Package['python-cinderclient'], - path => ['/usr/bin', '/bin'], - } - - if ($set_value and $set_key) { - Exec["cinder type-create ${volume_name}"] -> - plugin_cinder_netapp::cinder::type_set { $set_value: - type => $volume_name, - key => $set_key, - os_password => $os_password, - os_tenant_name => $os_tenant_name, - os_username => $os_username, - os_auth_url => $os_auth_url, - os_region_name => $os_region_name, - } - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type_set.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type_set.pp deleted file mode 100644 index 5683844..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/cinder/type_set.pp +++ /dev/null @@ -1,67 +0,0 @@ -# ==Define: plugin_cinder_netapp::cinder::type_set -# -# #TODO to remove when https://bugs.launchpad.net/fuel/+bug/1461485 will be fix -# Assigns keys after the volume type is set. -# -# === Parameters -# -# [*os_password*] -# (required) The keystone tenant:username password. -# -# [*type*] -# (required) Accepts single name of type to set. -# -# [*key*] -# (required) the key name that we are setting the value for. -# -# [*os_tenant_name*] -# (optional) The keystone tenant name. Defaults to 'admin'. -# -# [*os_username*] -# (optional) The keystone user name. Defaults to 'admin. -# -# [*os_auth_url*] -# (optional) The keystone auth url. Defaults to 'http://127.0.0.1:5000/v2.0/'. -# -# [*os_region_name*] -# (optional) The keystone region name. Default is unset. -# -# Author: Andrew Woodward - - -define plugin_cinder_netapp::cinder::type_set ( - $type, - $key, - $os_password, - $os_tenant_name = 'admin', - $os_username = 'admin', - $os_auth_url = 'http://127.0.0.1:5000/v2.0/', - $os_region_name = undef, -) { - - # TODO: (xarses) This should be moved to a ruby provider so that among other - # reasons, the credential discovery magic can occur like in neutron. - - $cinder_env = [ - "OS_TENANT_NAME=${os_tenant_name}", - "OS_USERNAME=${os_username}", - "OS_PASSWORD=${os_password}", - "OS_AUTH_URL=${os_auth_url}", - ] - - if $os_region_name { - $region_env = ["OS_REGION_NAME=${os_region_name}"] - } - else { - $region_env = [] - } - - exec {"cinder type-key ${type} set ${key}=${name}": - path => ['/usr/bin', '/bin'], - command => "cinder type-key ${type} set ${key}=${name}", - unless => "cinder extra-specs-list | grep -Eq '\\b${type}\\b.*\\b${key}\\b.*\\b${name}\\b'", - environment => concat($cinder_env, $region_env), - require => Package['python-cinderclient'] - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/compute.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/compute.pp deleted file mode 100644 index dc8cd48..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/compute.pp +++ /dev/null @@ -1,37 +0,0 @@ -# This can be used to install on compute required depedencies to use netapp volume -# -class plugin_cinder_netapp::compute { - - include cinder::params - - $cinder_hash = $::fuel_settings['cinder'] - - case $::osfamily { - 'Debian': { - package { 'nfs-common': - } - } - 'RedHat': { - package { 'nfs-utils': } -> - service {'rpcbind': - ensure => running, - } -> - service {'rpcidmapd': - ensure => running, - } -> - service {'nfs': - ensure => running, - } - } - default: { - fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} currently only supports osfamily RedHat and Debian") - } - } - - if $::fuel_settings['cinder_netapp']['nfs_mount_options'] { - nova_config { - 'DEFAULT/nfs_mount_options': value => $::fuel_settings['cinder_netapp']['nfs_mount_options']; - } - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/controller.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/controller.pp deleted file mode 100644 index 50bd9f9..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/controller.pp +++ /dev/null @@ -1,28 +0,0 @@ -# The plugin_cinder_netapp class is able to cinder to use netapp as a storage backend -# (7Mode and cluster mode storage familly). If the multibackend option is checked -# cinder will used the netapp backend and the ceph or lvm (according to intial configuration) -# as multibackend storage -# -class plugin_cinder_netapp::controller { - - include plugin_cinder_netapp::params - - cinder_config { - 'DEFAULT/host': value => 'str:netapp'; - } - - $cinder_hash = $::fuel_settings['cinder'] - - if $::fuel_settings['cinder_netapp']['multibackend'] { - class { 'plugin_cinder_netapp::multibackend_controller': - cinder_user_password => $cinder_hash['user_password'], - auth_host => hiera('management_vip', undef), - } - } else { - $section = 'DEFAULT' - plugin_cinder_netapp::backend::netapp{ 'cinder_netapp': - section => $section, - } - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp new file mode 100644 index 0000000..7f9deff --- /dev/null +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp @@ -0,0 +1,11 @@ +class plugin_cinder_netapp ( + $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, +) inherits plugin_cinder_netapp::params { + + if ($cinder_netapp['multibackend']) { + class { 'plugin_cinder_netapp::multibackend': } + } else { + plugin_cinder_netapp::backend::netapp { 'DEFAULT': } + } + +} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp new file mode 100644 index 0000000..053ce17 --- /dev/null +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp @@ -0,0 +1,14 @@ +class plugin_cinder_netapp::multibackend ( + $backend_name = $plugin_cinder_netapp::params::backend_name, + $backend_type = $plugin_cinder_netapp::params::backend_type, + $backend_class = $plugin_cinder_netapp::params::backend_class, +) inherits plugin_cinder_netapp::params { + + class { "$backend_class": + backend_type => $backend_type, + } -> + plugin_cinder_netapp::backend::netapp { 'cinder_netapp': + backend_name => $backend_name, + } + +} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_cinder.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_cinder.pp deleted file mode 100644 index 4016181..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_cinder.pp +++ /dev/null @@ -1,16 +0,0 @@ -# this can be used to insert into cinder_iscsi section lvm configuration parameters -# - -class plugin_cinder_netapp::multibackend_cinder { - - include plugin_cinder_netapp::params - include cinder::params - - class { $plugin_cinder_netapp::params::backend_class: } -> - plugin_cinder_netapp::backend::netapp{ 'cinder_netapp': - backends => $plugin_cinder_netapp::params::backends, - mutlibackends => true, - cinder_node => true, - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_controller.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_controller.pp deleted file mode 100644 index b363da3..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend_controller.pp +++ /dev/null @@ -1,59 +0,0 @@ -# this can be used to insert into cinder_iscsi section lvm configuration parameters -# and setup multibackend configuration controller -# -# [$cinder_user_password] password of the cinder user -# [$keystone_tenant] tenant services -# [$keystone_user] name of the cinder user -# [$keystone_auth_protocol] auth protocol for keystone -# [$auth_host] ip/hostname for authentication endpoint -# [$keystone_auth_port] port for keystone -# -# === Examples -# -# class { 'plugin_cinder_netapp::backend::iscsi': -# $cinder_user_password = 'password', -# $keystone_tenant = 'services', -# $keystone_user = 'cinder', -# $keystone_auth_protocol = 'http', -# $auth_host = '127.0.0.1', -# $keystone_auth_port = '35357', , -# } -# -class plugin_cinder_netapp::multibackend_controller ( - $cinder_user_password, - $auth_host, - $keystone_tenant = 'services', - $keystone_user = 'cinder', - $keystone_auth_protocol = 'http', - $keystone_auth_port = '35357', - $os_region_name = 'RegionOne', - $os_auth_url = "${keystone_auth_protocol}://${auth_host}:${keystone_auth_port}/v2.0/", -) { - - include plugin_cinder_netapp::params - include cinder::params - - Plugin_cinder_netapp::Cinder::Type { - os_password => $cinder_user_password, - os_tenant_name => $keystone_tenant, - os_username => $keystone_user, - os_auth_url => $os_auth_url, - os_region_name => $os_region_name, - } - - #TODO use type from cinder module when bug 1461485 is fix - class { $plugin_cinder_netapp::params::backend_class: } -> - plugin_cinder_netapp::backend::netapp{ 'cinder_netapp': - backends => $plugin_cinder_netapp::params::backends, - mutlibackends => true, - } -> - plugin_cinder_netapp::cinder::type { 'netapp': - set_key => 'volume_backend_name', - set_value => 'cinder_netapp', - } -> - plugin_cinder_netapp::cinder::type { $plugin_cinder_netapp::params::backends: - set_key => 'volume_backend_name', - set_value => $plugin_cinder_netapp::params::backends, - } - -} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp index 6c552e6..6dcc8ce 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp @@ -1,38 +1,19 @@ -class plugin_cinder_netapp::params { +class plugin_cinder_netapp::params ( +) { - include cinder::params + $cinder_netapp = hiera_hash('cinder_netapp', {}) + $storage_hash = hiera_hash('storage_hash', {}) - $cinder_hash = $::fuel_settings['cinder'] - $storage_hash = $::fuel_settings['storage'] - - case $::osfamily { - 'Debian': { - package { 'nfs-common': - before => Cinder::Backend::Netapp['cinder_netapp'], - } - } - 'RedHat': { - package { 'nfs-utils': } -> - service {'rpcbind': - ensure => running, - } -> - service {'rpcidmapd': - ensure => running, - } -> - service {'nfs': - ensure => running, - before => Cinder::Backend::Netapp['cinder_netapp'], - } - } - default: { - fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} currently only supports osfamily RedHat and Debian") - } - } - if ($storage_hash['volumes_lvm']) { - $backends = 'cinder_iscsi' - $backend_class = 'plugin_cinder_netapp::backend::iscsi' - } elsif ($storage_hash['volumes_ceph']) { - $backends = 'cinder_rbd' - $backend_class = 'plugin_cinder_netapp::backend::rbd' + if ($storage_hash['volume_backend_names']['volumes_lvm']) { + $backend_type = $storage_hash['volume_backend_names']['volumes_lvm'] + $backend_name = 'cinder_iscsi' + $volume_backend_name = 'volumes_lvm' + $backend_class = 'plugin_cinder_netapp::backend::iscsi' + } elsif ($storage_hash['volume_backend_names']['volumes_ceph']) { + $backend_type = $storage_hash['volume_backend_names']['volumes_ceph'] + $backend_name = 'cinder_rbd' + $volume_backend_name = 'volumes_ceph' + $backend_class = 'plugin_cinder_netapp::backend::rbd' } + } diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index eb33140..b5fd971 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -1,30 +1,32 @@ -# Deployment tasks -- id: controller-netapp +- id: netapp_hiera_override type: puppet - role: [primary-controller, controller] - required_for: [post_deployment_end] - requires: [post_deployment_start] + version: 2.0.0 + groups: [primary-controller, controller] + requires: [openstack-cinder, deploy_start] + required_for: [create-cinder-types, deploy_end] parameters: - puppet_manifest: puppet/manifests/site_controller.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" + puppet_manifest: puppet/manifests/hiera_override.pp + puppet_modules: /etc/puppet/modules timeout: 360 -- id: compute-netapp +- id: netapp_cinder type: puppet - role: [compute] - required_for: [post_deployment_end] - requires: [post_deployment_start] + version: 2.0.0 + groups: [cinder] + requires: [top-role-cinder, deploy_start] + required_for: [deploy_end] parameters: - puppet_manifest: puppet/manifests/site_compute.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" + puppet_manifest: puppet/manifests/site.pp + puppet_modules: puppet/modules:/etc/puppet/modules timeout: 360 -- id: cinder-netapp +- id: netapp_compute type: puppet - role: [cinder] - required_for: [post_deployment_end] - requires: [post_deployment_start] + version: 2.0.0 + groups: [compute] + requires: [top-role-compute, deploy_start] + required_for: [deploy_end] parameters: - puppet_manifest: puppet/manifests/site_cinder.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" + puppet_manifest: puppet/manifests/compute.pp + puppet_modules: /etc/puppet/modules timeout: 360 diff --git a/environment_config.yaml b/environment_config.yaml index 0d56446..637020c 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -1,264 +1,320 @@ attributes: + metadata: + group: 'storage' multibackend: value: false - label: 'Multibackend enabled' + label: 'Multibackend Enabled' description: 'NetApp driver will be used as a Cinder Multibackend feature' - weight: 35 - type: "checkbox" + weight: 10 + type: 'checkbox' # Storage Type netapp_storage_family: - value: "ontap_cluster" + value: 'ontap_cluster' values: - - data: "ontap_cluster" - label: "Ontap Cluster" - description: "Data ONTAP operating in Clustered storage family" - - data: "ontap_7mode" - label: "Ontap 7mode" - description: "Data ONTAP operating in 7Mode storage family" - - data: "eseries" - label: "E-Series" - description: "E-Series storage family" - label: "Netapp storage family" - weight: 40 - type: "radio" + - data: 'ontap_cluster' + label: 'Ontap Cluster' + description: 'Data ONTAP operating in Clustered storage family' + - data: 'ontap_7mode' + label: 'Ontap 7-Mode' + description: 'Data ONTAP operating in 7-Mode storage family' + - data: 'eseries' + label: 'E-Series' + description: 'E-Series storage family' + label: 'Netapp Storage Family' + weight: 11 + type: 'radio' netapp_storage_protocol: - value: "iscsi" + value: 'iscsi' values: - - data: "iscsi" - label: "iscsi" - description: "" - - data: "nfs" - label: "nfs" - description: "" + - data: 'iscsi' + label: 'iSCSI' + description: '' + - data: 'nfs' + label: 'NFS' + description: '' restrictions: - condition: "settings:cinder_netapp.netapp_storage_family.value == 'eseries'" - action: "hide" - label: "Netapp storage protocol" + action: 'hide' + label: 'Netapp Storage Protocol' description: 'The storage protocol to be used on the data path with the storage system' - weight: 42 - type: "radio" + weight: 12 + type: 'radio' # Authorisation netapp_login: value: '' label: 'Username' - description: 'Administrative user account name used to access the storage system or proxy server.' - weight: 45 - type: "text" + description: 'Administrative user account name used to access the storage system or proxy server' + weight: 21 + type: 'text' netapp_password: value: '' label: 'Password' - description: 'Password for the administrative user account specified in the netapp_login option.' - weight: 46 - type: "password" + description: 'Password for the administrative user account' + weight: 22 + type: 'password' # Connection netapp_server_hostname: value: '' - label: 'NetApp Hostname/IP' - description: 'The hostname (or IP address) for the storage system or proxy server.' - weight: 55 - type: "text" + label: 'NetApp Hostname' + description: 'The hostname or IP address for the storage system or proxy server' + weight: 31 + type: 'text' netapp_server_port: value: '' - label: 'NetApp server port' - description: 'The TCP port to use for communication with the storage system or proxy server. 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.' - weight: 56 - type: "text" + label: 'NetApp Server Port' + description: 'The TCP port to use for communication with the storage system or proxy server. 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' + weight: 32 + type: 'text' netapp_transport_type: - value: "http" + value: 'http' values: - - data: "http" - label: "http" - description: "" - - data: "https" - label: "https" - description: "" - label: "Netapp transport type" + - data: 'http' + label: 'http' + description: '' + - data: 'https' + label: 'https' + description: '' + label: 'Netapp Transport Type' description: 'The transport protocol used for communication with the storage system or proxy server' - weight: 57 - type: "radio" + weight: 33 + type: 'radio' -# NFS +# NFS Shares nfs_server_ip: value: '' label: 'NetApp NFS server' - description: 'The hostname (or IP address) for NFS server started on NetApp apliance' - weight: 70 - type: "text" + description: 'The hostname or IP address for NFS server started on NetApp apliance' + weight: 41 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" + action: 'hide' nb_share: - type: "select" - weight: 71 - value: "1" - label: "NFS shares" - description: "Number of Netapp NFS shares" + type: 'select' + weight: 42 + value: '1' + label: 'NFS shares' + description: 'Number of Netapp NFS shares' values: - - data: "1" - label: "1" - - data: "2" - label: "2" - - data: "3" - label: "3" - - data: "4" - label: "4" + - data: '1' + label: '1' + - data: '2' + label: '2' + - data: '3' + label: '3' + - data: '4' + label: '4' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" + action: 'hide' nfs_server_share1: value: '' label: 'NFS share' - description: 'The NFS share path (e.g. /vol2)' - weight: 72 - type: "text" + description: 'The NFS share path (e.g. /vol1)' + weight: 43 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" + action: 'hide' nfs_server_share2: value: '' label: 'NFS share 2' description: 'The NFS share path (e.g. /vol2)' - weight: 73 - type: "text" + weight: 44 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs' or settings:cinder_netapp.nb_share.value != '2' and settings:cinder_netapp.nb_share.value != '3' and settings:cinder_netapp.nb_share.value != '4'" - action: "hide" + action: 'hide' nfs_server_share3: value: '' label: 'NFS share 3' - description: 'The NFS share path (e.g. /vol2)' - weight: 74 - type: "text" + description: 'The NFS share path (e.g. /vol3)' + weight: 45 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs' or settings:cinder_netapp.nb_share.value != '3' and settings:cinder_netapp.nb_share.value != '4'" action: "hide" nfs_server_share4: value: '' label: 'NFS share 4' - description: 'The NFS share path (e.g. /vol2)' - weight: 75 - type: "text" + description: 'The NFS share path (e.g. /vol4)' + weight: 46 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs' or settings:cinder_netapp.nb_share.value != '4'" - action: "hide" - expiry_thres_minutes: - value: '720' - label: 'NFS expiry thres minutes' - description: 'This option specifies the threshold for last access time for images in the NFS image cache (NFS protocol only)' - weight: 76 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" - thres_avil_size_perc_start: - value: '20' - label: 'NFS thres avl size perc start' - description: 'The percentage of available space from which the NFS image cache will be cleaned (NFS protocol only)' - weight: 77 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" - thres_avil_size_perc_stop: - value: '60' - label: 'NFS thres avl size perc stop' - description: 'The percentage of available space from which the driver will stop cleaning the NFS image cache (NFS protocol only)' - weight: 78 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" - nfs_mount_options: - value: '' - label: 'NFS mount options' - description: '(Optional) Will be used when mouning shares on the Storage and Compute nodes' - weight: 79 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" - action: "hide" + action: 'hide' # Ontap Cluster netapp_vserver: value: '' - label: 'CMode vserver' - description: 'This option specifies the virtual storage server (Vserver) name on the storage cluster on which provisioning of block storage volumes should occur. (Cluster-Mode only and mandatory for NFS Storage protocol)' - weight: 80 - type: "text" + label: 'Vserver' + description: 'This option specifies the virtual storage server (Vserver) name on the storage cluster on which provisioning of block storage volumes should occur' + weight: 51 + type: 'text' restrictions: - condition: "settings:cinder_netapp.netapp_storage_family.value != 'ontap_cluster'" - action: "hide" + action: 'hide' -# Ontap Cluster with NFS - netapp_copyoffload_tool_path: - value: '' - label: 'CMode copyoffload tool path' - description: '(Optionnal) This option specifies the path of the Netapp copy offload tool binary (NFS protocol only)' - weight: 81 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs' or settings:cinder_netapp.netapp_storage_family.value != 'ontap_cluster'" - action: "hide" - -# Ontap 7Mode with iSCSI +# 7-Mode netapp_vfiler: value: '' - label: '7Mode vfiler' - description: '(Optionnal) The vFiler unti on which provisioning of block storage volumes will be done (iSCSI configuration in 7-Mode only)' - weight: 81 - type: "text" + label: 'vFiler' + description: '(Optionnal) The vFiler unit on which provisioning of block storage volumes will be done' + weight: 51 + type: 'text' restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value != 'ontap_7mode'" - action: "hide" - netapp_volume_list: - value: '' - label: '7Mode volume list' - description: '(Optionnal) This option is used to restrict provisionning to the specified controller volumes (iSCSI configuration in 7-Mode only)' - weight: 82 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value != 'ontap_7mode'" - action: "hide" - -# Ontap Cluster or 7Mode with iSCSI - netapp_size_multiplier: - value: '1.2' - label: 'NetApp size multiplier' - description: 'Mutiplication factor used to chack available space on the virtual storage server (iSCSI configuration only)' - weight: 83 - type: "text" - restrictions: - - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value == 'eseries'" - action: "hide" + - condition: "settings:cinder_netapp.netapp_storage_family.value != 'ontap_7mode'" + action: 'hide' # E-Series netapp_controller_ips: value: '' - label: 'E-Series controller IPs' - description: '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.' - weight: 80 - type: "text" + label: 'Controller IPs' + description: '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 management hostnames or IP addresses to be used for provisioning' + weight: 51 + type: 'text' restrictions: - - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries' or settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi'" - action: "hide" + - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries'" + action: 'hide' netapp_sa_password: value: '' - label: 'E-Series storage array password' - description: 'Password for the NetApp E-Series storage array.' - weight: 81 - type: "password" + label: 'Storage Array Password' + description: 'Password for the NetApp E-Series storage array' + weight: 52 + type: 'password' restrictions: - - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries' or settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi'" + - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries'" + action: 'hide' + netapp_eseries_host_type: + value: 'linux_dm_mp' + label: 'Host Type' + description: '(Optionnal) This option defines the type of operating system for all initiators that can access a LUN' + weight: 62 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries'" + action: 'hide' + netapp_enable_multiattach: + value: false + label: 'Multiattach' + description: '(Optionnal) This option specifies whether the driver should allow operations that require multiple attachments to a volume' + weight: 63 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries'" action: "hide" - netapp_storage_pools: + +# NFS Options + nfs_mount_options: value: '' - label: 'E-Series storage pools' - description: 'This option is used to restrict provisioning to the specified storage pools. Only dynamic disk pools are currently supported. Specify the value of this option to be a comma separated list of disk pool names to be used for provisioning.' - weight: 82 - type: "text" + label: 'NFS Mount Options' + description: '(Optional) Will be used when mouning shares on the Storage and Compute nodes' + weight: 61 + type: 'text' restrictions: - - condition: "settings:cinder_netapp.netapp_storage_family.value != 'eseries' or settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi'" + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" + action: 'hide' + thres_avl_size_perc_start: + value: '20' + label: 'Thres Avl Size Perc Start' + description: '(Optionnal) If the percentage of available space for an NFS share has dropped below the value specified by this option, the NFS image cache will be cleaned' + weight: 62 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" action: "hide" + thres_avl_size_perc_stop: + value: '60' + label: 'Thres Avl Size Perc Stop' + description: '(Optionnal) When the percentage of available space on an NFS share has reached the percentage specified by this option, the driver will stop clearing files from the NFS image cache' + weight: 63 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" + action: 'hide' + expiry_thres_minutes: + value: '720' + label: 'Expiry Thres Minutes' + description: '(Optionnal) This option specifies the threshold for last access time for images in the NFS image cache' + weight: 64 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs'" + action: 'hide' + +# Ontap Cluster with NFS + netapp_copyoffload_tool_path: + value: '' + label: 'Copyoffload Tool Path' + description: '(Optionnal) This option specifies the path of the NetApp copy offload tool binary' + weight: 65 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'nfs' or settings:cinder_netapp.netapp_storage_family.value != 'ontap_cluster'" + action: 'hide' + +# iSCSI + netapp_pool_name_search_pattern: + value: '(.+)' + label: 'Pool Search Pattern' + description: '(Optionnal) It is used to restrict provisioning to the specified volume groups or disk pools. Specify the value of this option as a regular expression which will be applied to the names of volume groups or disk pools from the storage backend which represent pools in Cinder' + weight: 61 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi'" + action: "hide" + use_multipath_for_image_xfer: + value: false + label: 'Multipath for Image Xfer' + description: '(Optionnal) Using this option will permit Cinder to use multiple paths for increased bandwidth. It affects Nova settings' + weight: 65 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi'" + action: 'hide' + +# iSCSI with ONTAP + netapp_host_type: + value: 'linux' + label: 'Host Type' + description: '(Optionnal) This option defines the type of operating system for all initiators that can access a LUN' + weight: 62 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value == 'eseries'" + action: "hide" + netapp_lun_ostype: + value: 'linux' + label: 'LUN OS type' + description: '(Optionnal) This option defines the type of operating system that will access a LUN exported from Data ONTAP' + weight: 63 + type: 'text' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value == 'eseries'" + action: 'hide' + netapp_lun_space_reservation: + value: true + label: 'LUN Space Reservation' + description: '(Optionnal) This option specifies whether space will be reserved when creating Cinder volumes on NetApp backends using the iSCSI protocol' + weight: 64 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_netapp.netapp_storage_protocol.value != 'iscsi' or settings:cinder_netapp.netapp_storage_family.value == 'eseries'" + action: 'hide' + +# Common + reserved_percentage: + value: '0' + label: 'Reserved Percentage' + description: '(Optionnal) This option represents the amount of total capacity of a storage pool that will be reserved and cannot be utilized for provisioning Cinder volumes' + weight: 71 + type: 'text' + max_oversubscription_ratio: + value: '1.0' + label: 'Oversubscription Ratio' + description: '(Optionnal) This option is defined as a float, and specifies the amount of over-provisioning to allow when thin provisioning is being used in the storage pool. A value of 1.0 will mean that the provisioned capacity will not be able to exceed the total capacity, while larger values will result in increased levels of allowed over-provisioning' + weight: 72 + type: 'text' diff --git a/metadata.yaml b/metadata.yaml index 7c51161..241dde5 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -3,30 +3,26 @@ name: cinder_netapp # Human-readable name for your plugin title: Cinder and NetApp integration # Plugin version -version: 3.2.1 +version: '4.0.0' # Description -description: Enable to use NetApp nfs driver as a Cinder backend +description: Enables using NetApp as a Cinder backend # Required fuel version -fuel_version: ['7.0'] +fuel_version: ['8.0'] -authors: ['Mirantis Inc','Orange'] +authors: ['Mirantis','Orange'] licenses: ['Apache License Version 2.0'] homepage: 'https://github.com/openstack/fuel-plugin-cinder-netapp' -groups: ['storage::cinder'] +groups: ['storage::cinder'] +is_hotpluggable: true # The plugin is compatible with releases in the list releases: - os: ubuntu - version: 2015.1.0-7.0 - mode: ['ha', 'multinode'] + version: liberty-8.0 + mode: ['ha'] deployment_scripts_path: deployment_scripts/ repository_path: repositories/ubuntu - - os: centos - version: 2015.1.0-7.0 - mode: ['ha', 'multinode'] - deployment_scripts_path: deployment_scripts/ - repository_path: repositories/centos # Version of plugin package -package_version: '3.0.0' +package_version: '4.0.0'