From c04fc82947d865cb17d50bf867b7b9d2645684ba Mon Sep 17 00:00:00 2001 From: Andrey Volochay Date: Fri, 10 Jun 2016 18:02:53 +0300 Subject: [PATCH] Add full support of multi backends - Added full support of multi backends. The plugin does not overwrite "enabled_backends" option that allows to use it with other plugins for Cinder backends. - Since FilterScheduler is default scheduler driver starting Grizzly, it has been deleted from set up. This change allows to set Cinder or Ceph-OSD roles wherever you need. - Added small changes in site.pp to get free allocation of roles - The code has been refactored and commented, slightly. Change-Id: I117fed67553af4065b3ebd3673a17b51cf42dc9a Closes-Bug: #1581960 --- README.md | 8 +++++ .../puppet/manifests/compute.pp | 4 ++- .../puppet/manifests/hiera_override.pp | 19 +++------- deployment_scripts/puppet/manifests/site.pp | 5 ++- .../manifests/backend/enable_backend.pp | 16 +++++++++ .../manifests/backend/iscsi.pp | 23 +++++++----- .../manifests/backend/netapp.pp | 35 +++++++++---------- .../manifests/backend/rbd.pp | 20 ++++++----- .../plugin_cinder_netapp/manifests/init.pp | 19 +++++++--- .../manifests/multibackend.pp | 14 -------- .../plugin_cinder_netapp/manifests/params.pp | 3 ++ .../templates/cinder_netapp.yaml.erb | 7 ++++ deployment_tasks.yaml | 21 ++++++----- environment_config.yaml | 6 ++-- metadata.yaml | 2 +- 15 files changed, 119 insertions(+), 83 deletions(-) create mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/enable_backend.pp delete mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp create mode 100644 deployment_scripts/puppet/modules/plugin_cinder_netapp/templates/cinder_netapp.yaml.erb diff --git a/README.md b/README.md index 6bc8ff3..3c7265b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,14 @@ Requirements Release Notes ------------- +**4.2.0** + +* Added full support of multi backends + +* The code has been refactored and commented, slightly + +* Added small changes to get free allocation of roles + **4.1.1** * Fix bug with multibackend when Ceph is used (bug: 1581028) diff --git a/deployment_scripts/puppet/manifests/compute.pp b/deployment_scripts/puppet/manifests/compute.pp index 6ff8140..da8ef41 100644 --- a/deployment_scripts/puppet/manifests/compute.pp +++ b/deployment_scripts/puppet/manifests/compute.pp @@ -4,7 +4,7 @@ include nova::params $cinder_netapp = hiera_hash('cinder_netapp', {}) -Nova_config <||> ~> service { "$nova::params::compute_service_name": } +Nova_config <||> ~> Service <||> if ($cinder_netapp['netapp_storage_protocol']) == 'iscsi' and ($cinder_netapp['use_multipath_for_image_xfer']) { package { 'multipath-tools': } @@ -23,3 +23,5 @@ if ($cinder_netapp['netapp_storage_protocol']) == 'nfs' { } } } + +service { "$nova::params::compute_service_name": } diff --git a/deployment_scripts/puppet/manifests/hiera_override.pp b/deployment_scripts/puppet/manifests/hiera_override.pp index d6f6bd6..4bb98f2 100644 --- a/deployment_scripts/puppet/manifests/hiera_override.pp +++ b/deployment_scripts/puppet/manifests/hiera_override.pp @@ -1,28 +1,19 @@ +# Since Fuel 8.0 has its own task to set Cinder volume-types. We add our modifications before this task is executed. + notice('MODULAR: netapp-hiera-override') -$cinder_netapp = hiera_hash('cinder_netapp', {}) -$multibackend = $cinder_netapp['multibackend'] +$cinder_netapp = hiera_hash('cinder_netapp', {}) +$default_backend = $cinder_netapp['default_backend'] $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, + content => template('plugin_cinder_netapp/cinder_netapp.yaml.erb'), } diff --git a/deployment_scripts/puppet/manifests/site.pp b/deployment_scripts/puppet/manifests/site.pp index 0856e11..cf7e3a5 100644 --- a/deployment_scripts/puppet/manifests/site.pp +++ b/deployment_scripts/puppet/manifests/site.pp @@ -1,3 +1,6 @@ notice('MODULAR: fuel-plugin-cinder-netapp') -class { 'plugin_cinder_netapp': } +# The manifest is executed on nodes with cinder role or on nodes with controller role when Ceph is used. +if ('cinder' in hiera('roles')) or (!empty(filter_nodes(hiera('nodes'), 'role', 'ceph-osd'))) { + class { 'plugin_cinder_netapp': } +} diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/enable_backend.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/enable_backend.pp new file mode 100644 index 0000000..fef12df --- /dev/null +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/backend/enable_backend.pp @@ -0,0 +1,16 @@ +define plugin_cinder_netapp::backend::enable_backend ( + $config_file = $plugin_cinder_netapp::params::config_file +) { + + include plugin_cinder_netapp::params + + ini_subsetting {"enable_${name}_backend": + ensure => present, + section => 'DEFAULT', + key_val_separator => '=', + path => $config_file, + setting => 'enabled_backends', + subsetting => $name, + subsetting_separator => ',', + } +} 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 5cc28c7..ce37911 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,20 +1,25 @@ class plugin_cinder_netapp::backend::iscsi ( $volume_group = 'cinder', - $iscsi_helper = $cinder::params::iscsi_helper, + $iscsi_helper = 'tgtadm', $backend_type, -) inherits cinder::params { + $backend_name, +) { + # Get IP address in storage subnet $network_scheme = hiera_hash('network_scheme', {}) prepare_network_config($network_scheme) - $storage_address = get_network_role_property('cinder/iscsi', 'ipaddr') + # Creates separate section for backend cinder_config { - '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/backend_host': value => $storage_address; + "$backend_name/volume_backend_name": value => $backend_type; + "$backend_name/volume_driver": value => 'cinder.volume.drivers.lvm.LVMVolumeDriver'; + "$backend_name/iscsi_helper": value => $iscsi_helper; + "$backend_name/volume_group": value => $volume_group; + "$backend_name/iscsi_ip_address": value => $storage_address; + "$backend_name/backend_host": value => $storage_address; } + + # Adds the backend in parameter + plugin_cinder_netapp::backend::enable_backend { $backend_name: } } 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 d31f9c5..faa8107 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,34 +1,30 @@ # 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 ( - $netapp_backend_name = $name, - $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, - $backend_name = undef, - $nfs_shares_config = '/etc/cinder/shares.conf', +class plugin_cinder_netapp::backend::netapp ( + $netapp_backend_name = 'cinder_netapp', + $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, + $nfs_shares_config = '/etc/cinder/shares.conf', + $netapp_webservice_path = '/devmgr/v2', ) { include plugin_cinder_netapp::params include cinder::params - if ($cinder_netapp['multibackend']) { - $enabled_backends = "$backend_name,$netapp_backend_name" - } else { - $enabled_backends = $netapp_backend_name - } - + # Sets correct parameter for depending on storage family if ($cinder_netapp['netapp_storage_family']) == 'eseries' { $host_type = $cinder_netapp['netapp_eseries_host_type'] } else { $host_type = $cinder_netapp['netapp_host_type'] } + # NetApp driver does not understand boolean types for parameter if ($cinder_netapp['netapp_lun_space_reservation']) { $lun_space_reservation = 'enabled' } else { $lun_space_reservation = 'disabled' } - # To set up NFS shares + # Sets up NFS shares if ($cinder_netapp['netapp_storage_protocol']) == 'nfs' { package { 'nfs-common': } @@ -40,7 +36,7 @@ define plugin_cinder_netapp::backend::netapp ( } } - # To have an ability to create a root volume during an instance spawning + # We need following packages to create a root volume during an instance spawning if ($cinder_netapp['netapp_storage_protocol']) == 'iscsi' { package { 'open-iscsi': } @@ -49,14 +45,13 @@ define plugin_cinder_netapp::backend::netapp ( } } - # Ensure that $ symbol is correctly escaped in netapp password + # To be ensure that $ symbol is correctly escaped in netapp password $netapp_password = regsubst($cinder_netapp['netapp_password'],'\$','$$','G') - Cinder_config <||> ~> service { "$cinder::params::scheduler_service": } ~> service { "$cinder::params::volume_service": } + + Cinder_config <||> -> Plugin_cinder_netapp::Backend::Enable_backend[$netapp_backend_name] ~> Service <||> cinder_config { - 'DEFAULT/enabled_backends': value => $enabled_backends; - 'DEFAULT/scheduler_driver': value => 'cinder.scheduler.filter_scheduler.FilterScheduler'; "$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']; @@ -70,7 +65,7 @@ define plugin_cinder_netapp::backend::netapp ( "$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/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']; @@ -88,4 +83,8 @@ define plugin_cinder_netapp::backend::netapp ( "$netapp_backend_name/backend_host": value => 'str:netapp'; # for NetApp HA } + # Adds the backend in parameter + plugin_cinder_netapp::backend::enable_backend { $netapp_backend_name: } + + service { $cinder::params::volume_service: } } 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 093a999..f9d13a0 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 @@ -8,17 +8,21 @@ class plugin_cinder_netapp::backend::rbd ( $rbd_max_clone_depth = '5', $glance_api_version = undef, $backend_type, + $backend_name, ) { + # Creates separate section for Ceph backend cinder_config { - '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; - 'cinder_rbd/rbd_pool': value => $rbd_pool; - 'cinder_rbd/rbd_max_clone_depth': value => $rbd_max_clone_depth; - 'cinder_rbd/rbd_flatten_volume_from_snapshot': value => $rbd_flatten_volume_from_snapshot; - 'cinder_rbd/backend_host': value => "rbd:${rbd_pool}"; + "$backend_name/volume_backend_name": value => $backend_type; + "$backend_name/volume_driver": value => 'cinder.volume.drivers.rbd.RBDDriver'; + "$backend_name/rbd_ceph_conf": value => $rbd_ceph_conf; + "$backend_name/rbd_user": value => $rbd_user; + "$backend_name/rbd_pool": value => $rbd_pool; + "$backend_name/rbd_max_clone_depth": value => $rbd_max_clone_depth; + "$backend_name/rbd_flatten_volume_from_snapshot": value => $rbd_flatten_volume_from_snapshot; + "$backend_name/backend_host": value => "rbd:${rbd_pool}"; } + # Adds the backend in parameter + plugin_cinder_netapp::backend::enable_backend { $backend_name: } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp index 96fa8e5..0882799 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/init.pp @@ -1,11 +1,20 @@ class plugin_cinder_netapp ( - $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, + $cinder_netapp = $plugin_cinder_netapp::params::cinder_netapp, + $backend_name = $plugin_cinder_netapp::params::backend_name, + $backend_type = $plugin_cinder_netapp::params::backend_type, + $backend_class = $plugin_cinder_netapp::params::backend_class, + $netapp_backend_class = $plugin_cinder_netapp::params::netapp_backend_class, ) inherits plugin_cinder_netapp::params { - if ($cinder_netapp['multibackend']) { - class { 'plugin_cinder_netapp::multibackend': } - } else { - plugin_cinder_netapp::backend::netapp { 'cinder_netapp': } + if ($cinder_netapp['default_backend']) { + + Class[$backend_class] -> Class[$netapp_backend_class] + + class { $backend_class: + backend_type => $backend_type, + backend_name => $backend_name, + } } + class { $netapp_backend_class: } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp deleted file mode 100644 index 36422b2..0000000 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/multibackend.pp +++ /dev/null @@ -1,14 +0,0 @@ -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/params.pp b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp index 6dcc8ce..7d283d8 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/manifests/params.pp @@ -1,6 +1,8 @@ class plugin_cinder_netapp::params ( ) { + $config_file = '/etc/cinder/cinder.conf' + $cinder_netapp = hiera_hash('cinder_netapp', {}) $storage_hash = hiera_hash('storage_hash', {}) @@ -16,4 +18,5 @@ class plugin_cinder_netapp::params ( $backend_class = 'plugin_cinder_netapp::backend::rbd' } + $netapp_backend_class = 'plugin_cinder_netapp::backend::netapp' } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_netapp/templates/cinder_netapp.yaml.erb b/deployment_scripts/puppet/modules/plugin_cinder_netapp/templates/cinder_netapp.yaml.erb new file mode 100644 index 0000000..4e9560a --- /dev/null +++ b/deployment_scripts/puppet/modules/plugin_cinder_netapp/templates/cinder_netapp.yaml.erb @@ -0,0 +1,7 @@ +storage_hash: + volume_backend_names: + netapp: cinder_netapp +<% if ! @default_backend -%> + volumes_lvm: false + volumes_ceph: false +<% end -%> diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index 49a5d26..7bf9402 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -1,20 +1,23 @@ +# The task modifies hiera data to have right set cinder-types - id: netapp_hiera_override type: puppet version: 2.0.0 - groups: [primary-controller, controller] - requires: [openstack-cinder, deploy_start] - required_for: [create-cinder-types, deploy_end] + groups: [primary-controller, controller, cinder] + requires: [hiera] + required_for: [create-cinder-types] parameters: puppet_manifest: puppet/manifests/hiera_override.pp - puppet_modules: /etc/puppet/modules + puppet_modules: puppet/modules:/etc/puppet/modules timeout: 360 +# The task is executed on controller nodes only in particular cases +# See site.pp for more details - id: netapp_cinder type: puppet version: 2.0.0 - groups: [cinder, ceph-osd] - requires: [top-role-cinder, top-role-ceph-osd, deploy_start] - required_for: [deploy_end] + role: [primary-controller, controller, cinder] + requires: [post_deployment_start] + required_for: [post_deployment_end] parameters: puppet_manifest: puppet/manifests/site.pp puppet_modules: puppet/modules:/etc/puppet/modules @@ -24,11 +27,11 @@ type: puppet version: 2.0.0 groups: [compute] - requires: [top-role-compute, deploy_start] + requires: [top-role-compute] required_for: [deploy_end] parameters: puppet_manifest: puppet/manifests/compute.pp - puppet_modules: /etc/puppet/modules + puppet_modules: puppet/modules:/etc/puppet/modules timeout: 360 - id: deleting_old_cinder_volume_services diff --git a/environment_config.yaml b/environment_config.yaml index dce1f3d..20c25e8 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -1,10 +1,10 @@ attributes: metadata: group: 'storage' - multibackend: + default_backend: value: false - label: 'Multibackend Enabled' - description: 'NetApp driver will be used as a Cinder Multibackend feature' + label: 'MOS Backend Enabled' + description: 'If the option is checked, MOS default backend (LVM over iSCSI\Ceph) will be used along with NetApp' weight: 10 type: 'checkbox' diff --git a/metadata.yaml b/metadata.yaml index 0ecd3e7..347f2c1 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -3,7 +3,7 @@ name: cinder_netapp # Human-readable name for your plugin title: Cinder and NetApp integration # Plugin version -version: '4.1.1' +version: '4.2.0' # Description description: Enables using NetApp as a Cinder backend # Required fuel version