diff --git a/cinder_nimble-1.0-1.0.0-1.noarch.rpm b/cinder_nimble-1.0-1.0.0-1.noarch.rpm index 2ec0468..cd193fe 100644 Binary files a/cinder_nimble-1.0-1.0.0-1.noarch.rpm and b/cinder_nimble-1.0-1.0.0-1.noarch.rpm differ diff --git a/deployment_scripts/puppet/manifests/default_type.pp b/deployment_scripts/puppet/manifests/default_type.pp index 3812cbc..4000751 100644 --- a/deployment_scripts/puppet/manifests/default_type.pp +++ b/deployment_scripts/puppet/manifests/default_type.pp @@ -3,35 +3,35 @@ notice('MODULAR: nimble-default-volume-type') $config_file = '/etc/cinder/cinder.conf' $cinder_nimble = hiera_hash('cinder_nimble', {}) -if ($cinder_nimble['nimble_grouping']) == true { - $nimble_default_type_set = $cinder_nimble['nimble_group_default_backend'] - $nimble_default_type = $cinder_nimble['nimble_group_backend_type'] -} -else { - $nimble_default_type_set = $cinder_nimble['nimble1_default_backend'] or - $cinder_nimble['nimble2_default_backend'] or - $cinder_nimble['nimble3_default_backend'] or - $cinder_nimble['nimble4_default_backend'] or - $cinder_nimble['nimble5_default_backend'] - if ($cinder_nimble['nimble1_default_backend']) == true { - $nimble_default_type = $cinder_nimble['nimble1_backend_type'] - } - elsif ($cinder_nimble['nimble2_default_backend']) == true { - $nimble_default_type = $cinder_nimble['nimble2_backend_type'] - } - elsif ($cinder_nimble['nimble3_default_backend']) == true { - $nimble_default_type = $cinder_nimble['nimble3_backend_type'] - } - elsif ($cinder_nimble['nimble4_default_backend']) == true { - $nimble_default_type = $cinder_nimble['nimble4_backend_type'] - } - elsif ($cinder_nimble['nimble5_default_backend']) == true { - $nimble_default_type = $cinder_nimble['nimble5_backend_type'] +define plugin_cinder_nimble::check_if_default_backend_is_enabled ( +) { + if ($cinder_nimble["nimble${name}_default_backend"]) == true { + class { 'plugin_cinder_nimble::backend::set_default_type' : + config_file => $config_file, + nimble_backend_type => $cinder_nimble["nimble${name}_backend_type"], + } } } -class { 'plugin_cinder_nimble::backend::set_default_type' : - config_file => $config_file, - nimble_default_type_set => $nimble_default_type_set, - nimble_backend_type => $nimble_default_type, +if ($cinder_nimble['nimble_grouping']) == true { + if ($cinder_nimble["nimble_group_default_backend"]) == true { + class { 'plugin_cinder_nimble::backend::set_default_type' : + config_file => $config_file, + nimble_backend_type => $cinder_nimble['nimble_group_backend_type'], + } + } +} +else { + # Should work from Puppet >= 4.0.0 onwards which has Future parser + /* + range("1", "$cinder_nimble['no_backends']").each |Integer $index, String $value| { + if ($cinder_nimble["nimble${value}_default_backend"]) == true { + $nimble_default_type = $cinder_nimble["nimble${value}_backend_type"] + $nimble_default_type_set = true + } + } + */ + + $range_array = range("1", $cinder_nimble['no_backends']) + plugin_cinder_nimble::check_if_default_backend_is_enabled { $range_array: } } diff --git a/deployment_scripts/puppet/manifests/disable_default_type.pp b/deployment_scripts/puppet/manifests/disable_default_type.pp index 5d1ab2e..6a1e30e 100644 --- a/deployment_scripts/puppet/manifests/disable_default_type.pp +++ b/deployment_scripts/puppet/manifests/disable_default_type.pp @@ -1,7 +1,37 @@ notice('MODULAR: nimble-disable-default-volume-type') -$config_file = '/etc/cinder/cinder.conf' +include plugin_cinder_nimble::params +include cinder::params -class { 'plugin_cinder_nimble::backend::disable_default_type' : - config_file => $config_file, +$config_file = '/etc/cinder/cinder.conf' +$cinder_nimble = hiera_hash('cinder_nimble', {}) + +define plugin_cinder_nimble::check_if_default_type_is_enabled ( +) { + if ($cinder_nimble["nimble${name}_default_backend"]) == true { + class { 'plugin_cinder_nimble::backend::disable_default_type' : + config_file => $config_file, + } + } +} + +if ($cinder_nimble['nimble_grouping']) == true { + if ($cinder_nimble['nimble_group_default_backend']) == true { + class { 'plugin_cinder_nimble::backend::disable_default_type' : + config_file => $config_file, + } + } +} +else { + # Should work from Puppet >= 4.0.0 onwards which has Future parser + /* + range("1", "$cinder_nimble['no_backends']").each |Integer $index, String $value| { + if ($cinder_nimble["nimble${value}_default_backend"]) == true { + $nimble_default_type_set = true + } + } + */ + + $range_array = range("1", $cinder_nimble['no_backends']) + plugin_cinder_nimble::check_if_default_type_is_enabled { $range_array: } } diff --git a/deployment_scripts/puppet/manifests/hiera_override.pp b/deployment_scripts/puppet/manifests/hiera_override.pp index e7af9bf..b9a4be8 100644 --- a/deployment_scripts/puppet/manifests/hiera_override.pp +++ b/deployment_scripts/puppet/manifests/hiera_override.pp @@ -3,76 +3,56 @@ notice('MODULAR: nimble-hiera-override') $cinder_nimble = hiera_hash('cinder_nimble', {}) -$nimble_group_backend_type = $cinder_nimble['nimble_group_backend_type'] -$nimble_group_backend_name = $cinder_nimble['nimble_group_backend_name'] -$no_backends = $cinder_nimble['no_backends'] -$nimble1_backend_type = $cinder_nimble['nimble1_backend_type'] -$nimble1_backend_name = $cinder_nimble['nimble1_backend_name'] -$nimble2_backend_type = $cinder_nimble['nimble2_backend_type'] -$nimble2_backend_name = $cinder_nimble['nimble2_backend_name'] +$no_backends = $cinder_nimble['no_backends'] $hiera_dir = '/etc/hiera/plugins' $plugin_yaml = 'cinder_nimble.yaml' $plugin_name = 'cinder_nimble' -# extraspecs -$nimble_group_encryption = $cinder_nimble['nimble_group_encryption'] -$nimble_group_perfpol = $cinder_nimble['nimble_group_perfpol'] -$nimble_group_multi_init = $cinder_nimble['nimble_group_multi_init'] -$nimble1_encryption = $cinder_nimble['nimble1_encryption'] -$nimble1_perfpol = $cinder_nimble['nimble1_perfpol'] -$nimble1_multi_init = $cinder_nimble['nimble1_multi_init'] -$nimble2_encryption = $cinder_nimble['nimble2_encryption'] -$nimble2_perfpol = $cinder_nimble['nimble2_perfpol'] -$nimble2_multi_init = $cinder_nimble['nimble2_multi_init'] - file { $hiera_dir: ensure => directory, } +$range_array = range("1", $no_backends) + # Create content based on grouping flag. # This is separated to keep the inline content and conditions tidy. if ($cinder_nimble['nimble_grouping']) == true { $content = inline_template(' storage: volume_backend_names: - <%= nimble_group_backend_type %>: <%= nimble_group_backend_name %> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_backend_name"] %> nimble_encryption: - <%= nimble_group_backend_type %>: <%= nimble_group_encryption -%> -<% if nimble_group_perfpol != "" %> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_encryption"] -%> +<% if @cinder_nimble["nimble_group_perfpol"] != "" %> nimble_perfpol: - <%= nimble_group_backend_type %>: <%= nimble_group_perfpol -%> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_perfpol"] -%> <% end %> nimble_multi_init: - <%= nimble_group_backend_type %>: <%= nimble_group_multi_init %> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_multi_init"] %> ') } else { $content = inline_template(' storage: volume_backend_names: - <%= nimble1_backend_type %>: <%= nimble1_backend_name -%> -<% if no_backends != "1" %> - <%= nimble2_backend_type %>: <%= nimble2_backend_name -%> +<% @range_array.each do |i| -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_backend_name"] %> <% end %> nimble_encryption: - <%= nimble1_backend_type %>: <%= nimble1_encryption -%> -<% if no_backends != "1" %> - <%= nimble2_backend_type %>: <%= nimble2_encryption -%> -<% end -%> -<% if nimble1_perfpol != "" or nimble2_perfpol != "" %> - nimble_perfpol: -<% if nimble1_perfpol != "" -%> - <%= nimble1_backend_type %>: <%= nimble1_perfpol -%> +<% @range_array.each do |i| -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_encryption"] %> <% end %> -<% if no_backends != "1" and nimble2_perfpol != "" -%> - <%= nimble2_backend_type %>: <%= nimble2_perfpol -%> + nimble_perfpol: + __dummy__: __dummy__ +<% @range_array.each do |i| -%> +<% if @cinder_nimble["nimble#{i}_perfpol"] != "" -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_perfpol"] -%> <% end %> <% end %> nimble_multi_init: - <%= nimble1_backend_type %>: <%= nimble1_multi_init -%> -<% if no_backends != "1" %> - <%= nimble2_backend_type %>: <%= nimble2_multi_init -%> +<% @range_array.each do |i| -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_multi_init"] %> <% end %> ') } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/disable_default_type.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/disable_default_type.pp index 80bca0d..1ce0966 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/disable_default_type.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/disable_default_type.pp @@ -5,35 +5,20 @@ class plugin_cinder_nimble::backend::disable_default_type ( include plugin_cinder_nimble::params include cinder::params - $cinder_nimble = hiera_hash('cinder_nimble', {}) - - if ($cinder_nimble['nimble_grouping']) == true { - $nimble_default_type_set = $cinder_nimble['nimble_group_default_backend'] - } - else { - $nimble_default_type_set = $cinder_nimble['nimble1_default_backend'] or - $cinder_nimble['nimble2_default_backend'] or - $cinder_nimble['nimble3_default_backend'] or - $cinder_nimble['nimble4_default_backend'] or - $cinder_nimble['nimble5_default_backend'] + ini_setting {"disable_default_type_${nimble_backend_type}": + ensure => absent, + section => 'DEFAULT', + path => $config_file, + setting => 'default_volume_type', } - if ($nimble_default_type_set) == true { - ini_setting {"disable_default_type_${nimble_backend_type}": - ensure => absent, - section => 'DEFAULT', - path => $config_file, - setting => 'default_volume_type', - } + Cinder_config<||> ~> Service['cinder-api'] - Cinder_config<||> ~> Service['cinder-api'] - - service { 'cinder-api': - ensure => stopped, - name => $::cinder::params::api_service, - enable => true, - hasstatus => true, - hasrestart => true, - } + service { 'cinder-api': + ensure => stopped, + name => $::cinder::params::api_service, + enable => true, + hasstatus => true, + hasrestart => true, } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/nimble.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/nimble.pp index 84679f5..60f3469 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/nimble.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/nimble.pp @@ -2,91 +2,41 @@ class plugin_cinder_nimble::backend::nimble ( $cinder_nimble = $plugin_cinder_nimble::params::cinder_nimble ) { - include plugin_cinder_nimble::params include cinder::params - # Get the group backend name as configured by the user - $nimble_group_backend_name = $cinder_nimble['nimble_group_backend_name'] + define plugin_cinder_nimble::add_backend ( + $array, # pass the original $name + ) { + #notice(inline_template('NAME: <%= name.inspect %>')) - # Sets correct driver depending on backend protocol - if ($cinder_nimble['nimble1_backend_protocol']) == 'iSCSI' { - if ! defined(Package['open-iscsi']) { - # We need following packages to create a root volume during an instance spawning - package { 'open-iscsi': } + # build a unique name... + $length = inline_template('<%= array.length %>') + $ulength = inline_template('<%= array.uniq.length %>') + if ( "${length}" != '0' ) and ( "${length}" != "${ulength}" ) { + fail('Array must not have duplicates.') + } + # if array had duplicates, this wouldn't be a unique index + $index = inline_template('<%= array.index(name) %>') + + plugin_cinder_nimble::backend::set_nimble_backend { "$index" : + backend_id => $name, + index => "$index", } - $nimble1_cinder_driver = 'cinder.volume.drivers.nimble.NimbleISCSIDriver' - } - elsif ($cinder_nimble['nimble1_backend_protocol']) == 'FC' { - $nimble1_cinder_driver = 'cinder.volume.drivers.nimble.NimbleFCDriver' } - # To be ensure that $ symbol is correctly escaped in cinder password - $nimble1_password = regsubst($cinder_nimble['nimble1_password'],'\$','$$','G') - - # Check whether grouping is enabled and adjust volume_backend_name accordingly - if ($cinder_nimble['nimble_grouping']) == true { - $nimble1_backend_name = "${nimble_group_backend_name}_1" - $nimble1_volume_backend_name = "${nimble_group_backend_name}" + # Should work from Puppet >= 4.0.0 onwards which has Future parser + /* + range("1", "$cinder_nimble['no_backends']").each |$id| { + # Set backend details + class { 'plugin_cinder_nimble::backend::set_nimble_backend' : + $backend_id => $id, + } } - else { - $nimble1_backend_name = "${cinder_nimble['nimble1_backend_name']}" - $nimble1_volume_backend_name = "${cinder_nimble['nimble1_backend_name']}" + */ + + $range_array = range("1", $cinder_nimble['no_backends']) + plugin_cinder_nimble::add_backend { $range_array: + array => $range_array, } - - Cinder_config <||> -> Plugin_cinder_nimble::Backend::Enable_backend[$nimble1_backend_name] ~> Service <||> - Cinder_config <||> ~> Service <||> - - cinder_config { - "$nimble1_backend_name/volume_backend_name": value => $nimble1_volume_backend_name; - "$nimble1_backend_name/volume_driver": value => $nimble1_cinder_driver; - "$nimble1_backend_name/san_ip": value => $cinder_nimble['nimble1_san_ip']; - "$nimble1_backend_name/san_login": value => $cinder_nimble['nimble1_login']; - "$nimble1_backend_name/san_password": value => $nimble1_password; - } - - # Adds the backend in parameter - plugin_cinder_nimble::backend::enable_backend { $nimble1_backend_name: } - - if ($cinder_nimble['no_backends']) >= '2' { - # Sets correct driver depending on backend protocol - if ($cinder_nimble['nimble2_backend_protocol']) == 'iSCSI' { - if ! defined(Package['open-iscsi']) { - # We need following packages to create a root volume during an instance spawning - package { 'open-iscsi': } - } - $nimble2_cinder_driver = 'cinder.volume.drivers.nimble.NimbleISCSIDriver' - } - elsif ($cinder_nimble['nimble2_backend_protocol']) == 'FC' { - $nimble2_cinder_driver = 'cinder.volume.drivers.nimble.NimbleFCDriver' - } - - # To be ensure that $ symbol is correctly escaped in cinder password - $nimble2_password = regsubst($cinder_nimble['nimble2_password'],'\$','$$','G') - - # Check whether grouping is enabled and adjust volume_backend_name accordingly - if ($cinder_nimble['nimble_grouping']) == true { - $nimble2_backend_name = "${nimble_group_backend_name}_2" - $nimble2_volume_backend_name = "${nimble_group_backend_name}" - } - else { - $nimble2_backend_name = "${cinder_nimble['nimble2_backend_name']}" - $nimble2_volume_backend_name = "${cinder_nimble['nimble2_backend_name']}" - } - - Cinder_config <||> -> Plugin_cinder_nimble::Backend::Enable_backend[$nimble2_backend_name] ~> Service <||> - Cinder_config <||> ~> Service <||> - - cinder_config { - "$nimble2_backend_name/volume_backend_name": value => $nimble2_volume_backend_name; - "$nimble2_backend_name/volume_driver": value => $nimble2_cinder_driver; - "$nimble2_backend_name/san_ip": value => $cinder_nimble['nimble2_san_ip']; - "$nimble2_backend_name/san_login": value => $cinder_nimble['nimble2_login']; - "$nimble2_backend_name/san_password": value => $nimble2_password; - } - - # Adds the backend in parameter - plugin_cinder_nimble::backend::enable_backend { $nimble2_backend_name: } - } - service { $cinder::params::volume_service: } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_default_type.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_default_type.pp index 0fc6d2d..01d25bf 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_default_type.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_default_type.pp @@ -1,30 +1,27 @@ class plugin_cinder_nimble::backend::set_default_type ( $config_file, - $nimble_default_type_set, $nimble_backend_type ) { include plugin_cinder_nimble::params include cinder::params - if ($nimble_default_type_set) == true { - ini_subsetting {"set_default_type_${nimble_backend_type}": - ensure => present, - section => 'DEFAULT', - key_val_separator => '=', - path => $config_file, - setting => 'default_volume_type', - subsetting => $nimble_backend_type, - } + ini_subsetting {"set_default_type_${nimble_backend_type}": + ensure => present, + section => 'DEFAULT', + key_val_separator => '=', + path => $config_file, + setting => 'default_volume_type', + subsetting => $nimble_backend_type, + } - Cinder_config<||> ~> Service['cinder-api'] + Cinder_config<||> ~> Service['cinder-api'] - service { 'cinder-api': - ensure => running, - name => $::cinder::params::api_service, - enable => true, - hasstatus => true, - hasrestart => true, - } + service { 'cinder-api': + ensure => running, + name => $::cinder::params::api_service, + enable => true, + hasstatus => true, + hasrestart => true, } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_perfpol.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_perfpol.pp index f0ca982..88320aa 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_perfpol.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_perfpol.pp @@ -3,10 +3,11 @@ class plugin_cinder_nimble::backend::set_extraspecs_perfpol ( $storage_hash = hiera_hash('storage', {}) $nimble_perfpol = $storage_hash['nimble_perfpol'] if ! empty($nimble_perfpol) { - $available_backend_names = keys($nimble_perfpol) + $available_backends = delete_values($nimble_perfpol, '__dummy__') + $available_backend_names = keys($available_backends) ::osnailyfacter::openstack::manage_cinder_types { $available_backend_names: ensure => 'present', - volume_backend_names => $nimble_perfpol, + volume_backend_names => $available_backends, key => 'nimble:perfpol-name' } }