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 6c679be..65b7fff 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 4000751..00a14dd 100644 --- a/deployment_scripts/puppet/manifests/default_type.pp +++ b/deployment_scripts/puppet/manifests/default_type.pp @@ -5,7 +5,8 @@ $cinder_nimble = hiera_hash('cinder_nimble', {}) define plugin_cinder_nimble::check_if_default_backend_is_enabled ( ) { - if ($cinder_nimble["nimble${name}_default_backend"]) == true { + if (($cinder_nimble["nimble${name}_default_backend"]) == true) and + (($cinder_nimble["nimble${name}_backend_type"]) != '') { class { 'plugin_cinder_nimble::backend::set_default_type' : config_file => $config_file, nimble_backend_type => $cinder_nimble["nimble${name}_backend_type"], @@ -14,7 +15,8 @@ define plugin_cinder_nimble::check_if_default_backend_is_enabled ( } if ($cinder_nimble['nimble_grouping']) == true { - if ($cinder_nimble["nimble_group_default_backend"]) == true { + if (($cinder_nimble['nimble_group_default_backend']) == true) and + (($cinder_nimble["nimble_group_backend_type"]) != '') { class { 'plugin_cinder_nimble::backend::set_default_type' : config_file => $config_file, nimble_backend_type => $cinder_nimble['nimble_group_backend_type'], diff --git a/deployment_scripts/puppet/manifests/disable_default_type.pp b/deployment_scripts/puppet/manifests/disable_default_type.pp index 6a1e30e..23e039f 100644 --- a/deployment_scripts/puppet/manifests/disable_default_type.pp +++ b/deployment_scripts/puppet/manifests/disable_default_type.pp @@ -8,7 +8,8 @@ $cinder_nimble = hiera_hash('cinder_nimble', {}) define plugin_cinder_nimble::check_if_default_type_is_enabled ( ) { - if ($cinder_nimble["nimble${name}_default_backend"]) == true { + if (($cinder_nimble["nimble${name}_default_backend"]) == true) and + (($cinder_nimble["nimble${name}_backend_type"]) != '') { class { 'plugin_cinder_nimble::backend::disable_default_type' : config_file => $config_file, } @@ -16,7 +17,8 @@ define plugin_cinder_nimble::check_if_default_type_is_enabled ( } if ($cinder_nimble['nimble_grouping']) == true { - if ($cinder_nimble['nimble_group_default_backend']) == true { + if (($cinder_nimble['nimble_group_default_backend']) == true) and + (($cinder_nimble["nimble_group_backend_type"]) != '') { class { 'plugin_cinder_nimble::backend::disable_default_type' : config_file => $config_file, } diff --git a/deployment_scripts/puppet/manifests/hiera_override.pp b/deployment_scripts/puppet/manifests/hiera_override.pp index b9a4be8..e6e9a3f 100644 --- a/deployment_scripts/puppet/manifests/hiera_override.pp +++ b/deployment_scripts/puppet/manifests/hiera_override.pp @@ -21,38 +21,57 @@ if ($cinder_nimble['nimble_grouping']) == true { $content = inline_template(' storage: volume_backend_names: + __dummy__: false +<% if @cinder_nimble["nimble_group_backend_type"] != "" -%> <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_backend_name"] %> +<% end %> nimble_encryption: - <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_encryption"] -%> -<% if @cinder_nimble["nimble_group_perfpol"] != "" %> + __dummy__: __dummy__ +<% if @cinder_nimble["nimble_group_backend_type"] != "" -%> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_encryption"] %> +<% end %> nimble_perfpol: - <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_perfpol"] -%> + __dummy__: __dummy__ +<% if (@cinder_nimble["nimble_group_perfpol"] != "") and (@cinder_nimble["nimble_group_backend_type"] != "") -%> + <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_perfpol"] %> <% end %> nimble_multi_init: + __dummy__: __dummy__ +<% if @cinder_nimble["nimble_group_backend_type"] != "" -%> <%= @cinder_nimble["nimble_group_backend_type"] %>: <%= @cinder_nimble["nimble_group_multi_init"] %> +<% end %> ') } else { $content = inline_template(' storage: volume_backend_names: + __dummy__: false <% @range_array.each do |i| -%> - <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_backend_name"] %> +<% if @cinder_nimble["nimble#{i}_backend_type"] != "" -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_backend_name"] -%> +<% end %> <% end %> nimble_encryption: + __dummy__: __dummy__ <% @range_array.each do |i| -%> - <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_encryption"] %> +<% if @cinder_nimble["nimble#{i}_backend_type"] != "" -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_encryption"] -%> +<% end %> <% end %> nimble_perfpol: __dummy__: __dummy__ <% @range_array.each do |i| -%> -<% if @cinder_nimble["nimble#{i}_perfpol"] != "" -%> +<% if (@cinder_nimble["nimble#{i}_perfpol"] != "") and (@cinder_nimble["nimble#{i}_backend_type"] != "") -%> <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_perfpol"] -%> <% end %> <% end %> nimble_multi_init: + __dummy__: __dummy__ <% @range_array.each do |i| -%> - <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_multi_init"] %> +<% if @cinder_nimble["nimble#{i}_backend_type"] != "" -%> + <%= @cinder_nimble["nimble#{i}_backend_type"] %>: <%= @cinder_nimble["nimble#{i}_multi_init"] -%> +<% end %> <% end %> ') } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/enable_backend.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/enable_backend.pp index cac3958..bb0e87f 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/enable_backend.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/enable_backend.pp @@ -12,6 +12,6 @@ define plugin_cinder_nimble::backend::enable_backend ( setting => 'enabled_backends', subsetting => $name, subsetting_separator => ',', - use_exact_match => true, + use_exact_match => true, } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_encryption.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_encryption.pp index 631c06a..9424f9a 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_encryption.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_encryption.pp @@ -2,10 +2,11 @@ class plugin_cinder_nimble::backend::set_extraspecs_encryption ( ) { $storage_hash = hiera_hash('storage', {}) $nimble_encryption = $storage_hash['nimble_encryption'] - $available_backend_names = keys($nimble_encryption) + $available_backends = delete_values($nimble_encryption, '__dummy__') + $available_backend_names = keys($available_backends) ::osnailyfacter::openstack::manage_cinder_types { $available_backend_names: ensure => 'present', - volume_backend_names => $nimble_encryption, + volume_backend_names => $available_backends, key => 'nimble:encryption' } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_multi_init.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_multi_init.pp index fc5569c..de91c10 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_multi_init.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_extraspecs_multi_init.pp @@ -2,10 +2,11 @@ class plugin_cinder_nimble::backend::set_extraspecs_multi_init ( ) { $storage_hash = hiera_hash('storage', {}) $nimble_multi_init = $storage_hash['nimble_multi_init'] - $available_backend_names = keys($nimble_multi_init) + $available_backends = delete_values($nimble_multi_init, '__dummy__') + $available_backend_names = keys($available_backends) ::osnailyfacter::openstack::manage_cinder_types { $available_backend_names: ensure => 'present', - volume_backend_names => $nimble_multi_init, + volume_backend_names => $available_backends, key => 'nimble:multi-initiator' } } 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 88320aa..36ec491 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 @@ -2,13 +2,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_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 => $available_backends, - key => 'nimble:perfpol-name' - } + $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 => $available_backends, + key => 'nimble:perfpol-name' } } diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_backend.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_backend.pp index 78e93bb..ac9aee1 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_backend.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_backend.pp @@ -1,7 +1,8 @@ define plugin_cinder_nimble::backend::set_nimble_backend ( $backend_id, $index, - $cinder_nimble = $plugin_cinder_nimble::params::cinder_nimble + $cinder_nimble = $plugin_cinder_nimble::params::cinder_nimble, + $config_file = $plugin_cinder_nimble::params::config_file ) { include plugin_cinder_nimble::params @@ -28,13 +29,30 @@ define plugin_cinder_nimble::backend::set_nimble_backend ( # Check whether grouping is enabled and adjust volume_backend_name accordingly if ($cinder_nimble['nimble_grouping']) == true { - $nimble_backend_name = "${nimble_group_backend_name}_${backend_id}" + if ($cinder_nimble["nimble${backend_id}_cinder_service_name"]) != '' { + $nimble_backend_name = $cinder_nimble["nimble${backend_id}_cinder_service_name"] + } + else { + $nimble_backend_name = "${nimble_group_backend_name}_${backend_id}" + } $nimble_volume_backend_name = "${nimble_group_backend_name}" } else { - $nimble_backend_name = "${cinder_nimble["nimble${backend_id}_backend_name"]}" + if ($cinder_nimble["nimble${backend_id}_cinder_service_name"]) != '' { + $nimble_backend_name = $cinder_nimble["nimble${backend_id}_cinder_service_name"] + } + else { + $nimble_backend_name = "${cinder_nimble["nimble${backend_id}_backend_name"]}" + } $nimble_volume_backend_name = "${cinder_nimble["nimble${backend_id}_backend_name"]}" } + # Pool name selection + if ($cinder_nimble["nimble${backend_id}_pool_name"]) != '' { + $nimble_pool_name = $cinder_nimble["nimble${backend_id}_pool_name"] + } + else { + $nimble_pool_name = 'default' + } Cinder_config <||> -> Plugin_cinder_nimble::Backend::Enable_backend[$nimble_backend_name] ~> Service <||> Cinder_config <||> ~> Service <||> @@ -45,6 +63,20 @@ define plugin_cinder_nimble::backend::set_nimble_backend ( "$nimble_backend_name/san_ip": value => $cinder_nimble["nimble${backend_id}_san_ip"]; "$nimble_backend_name/san_login": value => $cinder_nimble["nimble${backend_id}_login"]; "$nimble_backend_name/san_password": value => $nimble_password; + "$nimble_backend_name/nimble_pool_name": value => $nimble_pool_name; + "$nimble_backend_name/use_multipath_for_image_xfer": value => $cinder_nimble["nimble${backend_id}_mp_img_xfer"]; + } + + # nimble_subnet_label enabled only when iSCSI and non-nil! + if (($cinder_nimble["nimble${backend_id}_subnet_label"]) != '') and (($cinder_nimble["nimble${backend_id}_backend_protocol"]) == 'iSCSI'){ + cinder_config { "$nimble_backend_name/nimble_subnet_label": + value => $cinder_nimble["nimble${backend_id}_subnet_label"], + } + } + else { + cinder_config { "$nimble_backend_name/nimble_subnet_label": + ensure => absent, + } } # Adds the backend in parameter diff --git a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_cinder_type.pp b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_cinder_type.pp index 5f93928..000fd88 100644 --- a/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_cinder_type.pp +++ b/deployment_scripts/puppet/modules/plugin_cinder_nimble/manifests/backend/set_nimble_cinder_type.pp @@ -2,10 +2,8 @@ class plugin_cinder_nimble::backend::set_nimble_cinder_type ( ) { $storage_hash = hiera_hash('storage', {}) $backends = $storage_hash['volume_backend_names'] - $available_backends = delete_values($backends, false) $available_backend_names = keys($available_backends) - ::osnailyfacter::openstack::manage_cinder_types { $available_backend_names: ensure => 'present', volume_backend_names => $available_backends, diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index 52e9dac..cbbe9a8 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -86,13 +86,13 @@ # Post Deployment tasks # Set the default volume type to the nimble type in parameter -- id: disable_default_type +- id: disable_default_type role: [primary-controller, controller] required_for: [post_deployment_end] requires: [post_deployment_start] type: puppet parameters: - puppet_manifest: puppet/manifests/disable_default_type.pp + puppet_manifest: puppet/manifests/disable_default_type.pp puppet_modules: "puppet/modules/:/etc/puppet/modules/" timeout: 360 diff --git a/environment_config.yaml b/environment_config.yaml index beb05ec..87fec81 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -6,7 +6,7 @@ attributes: # Number of Backends. Is there a dynamic way to build UI without this? no_backends: type: 'select' - weight: 11 + weight: 11 value: '1' label: 'Nimble backends' description: 'Number of Nimble backends' @@ -26,7 +26,7 @@ attributes: value: false label: 'Group all backends to same volume_backend_name' description: 'Specify if all Nimble Storage backends needs to be grouped to a volume type' - weight: 12 + weight: 12 type: 'checkbox' # Group Backend details nimble_group_backend_name: @@ -47,23 +47,26 @@ attributes: description: 'Volume Type for Nimble Storage backends group in cinder' weight: 14 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == false" action: 'hide' + - condition: "settings:cinder_nimble.nimble_group_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble_group_default_backend: type: 'checkbox' - value: false + value: false weight: 15 label: 'Set as Default Type?' - description: 'Set the Nimble backend group as the default type' + description: 'Set the Nimble backend group as the default type' restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == false" action: 'hide' + - condition: "settings:cinder_nimble.nimble_group_backend_type.value == ''" + message: "Since Group Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble_group_encryption: - value: false + value: false label: 'Encryption enabled?' description: 'Specify if Nimble Storage backends needs to be encypted' weight: 16 @@ -71,8 +74,11 @@ attributes: restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == false" action: 'hide' + - condition: "settings:cinder_nimble.nimble_group_backend_type.value == ''" + message: "Since Group Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble_group_multi_init: - value: false + value: false label: 'Multi-Initiator enabled?' description: 'Specify if Nimble Storage multi-initiator needs to be enabled' weight: 17 @@ -80,6 +86,9 @@ attributes: restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == false" action: 'hide' + - condition: "settings:cinder_nimble.nimble_group_backend_type.value == ''" + message: "Since Group Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble_group_perfpol: value: "" type: "text" @@ -90,26 +99,39 @@ attributes: - condition: "settings:cinder_nimble.nimble_grouping.value == false" action: 'hide' - condition: "settings:cinder_nimble.nimble_group_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble_group_backend_type.value == ''" + message: "Since Group Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' # Individual Backend details nimble1_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 19 + weight: 19 type: "hidden" nimble1_backend_label: - value: '' + value: '' label: 'Nimble Backend #1' description: 'Details for Nimble Backend #1' weight: 21 type: "radio" + nimble1_cinder_service_name: + value: '' + label: 'Cinder Service Name' + description: 'Stanza title for backend definition in cinder.conf, which will become the Cinder Service Name. Will be autogenerated if left blank.' + weight: 22 + type: "text" + restrictions: + - condition: "settings:cinder_nimble.nimble1_cinder_service_name.value != ''" + message: "Use with caution! For successful deployment, make sure Cinder Service Name is unique across backends. Please avoid using 'volume_backend_name_##' format or 'volume_backend_name' itself as it may conflict with autogenerated service names." + action: 'none' nimble1_backend_name: value: 'cinder_nimble1' label: 'Backend Name' description: '"volume_backend_name" for Nimble Storage backend in cinder' - weight: 22 + weight: 23 type: "text" regex: source: '^(?!\s*$).+' @@ -121,20 +143,20 @@ attributes: value: 'cinder_nimble1' label: 'Volume Type Name' description: 'Volume Type for Nimble Storage backend in cinder' - weight: 23 + weight: 24 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble1_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble1_default_backend: type: 'checkbox' - value: false - weight: 24 + value: false + weight: 25 label: 'Set as Default Type?' - description: 'Set the Nimble backend #1 as the default type' + description: 'Set the Nimble backend #1 as the default type' restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' @@ -150,6 +172,9 @@ attributes: - condition: "settings:cinder_nimble.nimble5_default_backend.value == true" action: 'disable' message: "Backend #5 is selected as default type." + - condition: "settings:cinder_nimble.nimble1_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble1_backend_protocol: value: 'iSCSI' values: @@ -161,13 +186,13 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: 'Storage Protocol to be used with Nimble Array Backend' description: '' - weight: 25 + weight: 26 type: "radio" nimble1_san_ip: value: "" label: 'Nimble Storage Management IP' description: 'The hostname (or IP address) for Nimble Storage Management IP' - weight: 26 + weight: 27 type: "text" regex: source: '^(?!\s*$).+' @@ -175,7 +200,7 @@ attributes: nimble1_login: value: "" type: "text" - weight: 27 + weight: 28 label: "User ID for Nimble Storage" description: "Nimble Storage username/ID (with admin privilages)" regex: @@ -184,65 +209,108 @@ attributes: nimble1_password: value: "" type: "password" - weight: 28 + weight: 29 label: "Password for Nimble Storage" description: "Nimble Storage password for username/ID above" regex: source: '^(?!\s*$).+' error: "Error: Password cannot be blank" - nimble1_encryption: - value: false - label: 'Encryption enabled?' - description: 'Specify if Nimble Storage backend needs to be encypted' - weight: 29 - type: 'checkbox' - restrictions: - - condition: "settings:cinder_nimble.nimble_grouping.value == true" - action: 'hide' - nimble1_multi_init: - value: false - label: 'Multi-Initiator enabled?' - description: 'Specify if Nimble Storage multi-initiator needs to be enabled' + nimble1_subnet_label: + value: "" + type: "text" weight: 30 - type: 'checkbox' + label: "Subnet Label" + description: "Nimble Storage data network Subnet Label if more than one data network" restrictions: - - condition: "settings:cinder_nimble.nimble_grouping.value == true" - action: 'hide' - nimble1_perfpol: + - condition: "settings:cinder_nimble.nimble1_backend_protocol.value != 'iSCSI'" + message: "Subnet Label is valid for iSCSI protocol only, this setting will be ignored during deployment." + action: 'none' + nimble1_pool_name: value: "" type: "text" weight: 31 + label: "Pool Name" + description: "Nimble Storage Pool Name (blank will use Nimble default storage pool)" + nimble1_mp_img_xfer: + value: false + label: 'Use multipath for Image transfer?' + description: 'Attach/Detach volumes in cinder using multipath for volume to image, and image to volume transfers' + weight: 32 + type: 'checkbox' + nimble1_encryption: + value: false + label: 'Encryption enabled?' + description: 'Specify if Nimble Storage backend needs to be encypted' + weight: 33 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.nimble_grouping.value == true" + action: 'hide' + - condition: "settings:cinder_nimble.nimble1_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' + nimble1_multi_init: + value: false + label: 'Multi-Initiator enabled?' + description: 'Specify if Nimble Storage multi-initiator needs to be enabled' + weight: 34 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.nimble_grouping.value == true" + action: 'hide' + - condition: "settings:cinder_nimble.nimble1_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' + nimble1_perfpol: + value: "" + type: "text" + weight: 35 label: "Performance policy name" description: "Performance policy name for Nimble Storage backend" restrictions: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' - condition: "settings:cinder_nimble.nimble1_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble1_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' nimble2_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 32 + weight: 36 type: "hidden" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' nimble2_backend_label: - value: '' + value: '' label: 'Nimble Backend #2' description: 'Details for Nimble Backend #2' - weight: 34 + weight: 38 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' + nimble2_cinder_service_name: + value: '' + label: 'Cinder Service Name' + description: 'Stanza title for backend definition in cinder.conf, which will become the Cinder Service Name. Will be autogenerated if left blank.' + weight: 39 + type: "text" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble2_cinder_service_name.value != ''" + message: "Use with caution! For successful deployment, make sure Cinder Service Name is unique across backends. Please avoid using 'volume_backend_name_##' format or 'volume_backend_name' itself as it may conflict with autogenerated service names." + action: 'none' nimble2_backend_name: value: 'cinder_nimble2' label: 'Backend Name' description: '"volume_backend_name" for Nimble Storage backend in cinder' - weight: 35 + weight: 40 type: "text" regex: source: '^(?!\s*$).+' @@ -256,22 +324,22 @@ attributes: value: 'cinder_nimble2' label: 'Volume Type Name' description: 'Volume Type for Nimble Storage backend in cinder' - weight: 36 + weight: 41 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble2_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble2_default_backend: type: 'checkbox' - value: false - weight: 37 + value: false + weight: 42 label: 'Set as Default Type?' - description: 'Set the Nimble backend #2 as the default type' + description: 'Set the Nimble backend #2 as the default type' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -289,6 +357,9 @@ attributes: - condition: "settings:cinder_nimble.nimble5_default_backend.value == true" action: 'disable' message: "Backend #5 is selected as default type." + - condition: "settings:cinder_nimble.nimble2_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble2_backend_protocol: value: 'iSCSI' values: @@ -300,7 +371,7 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: 'Nimble Storage Protocol' description: '' - weight: 38 + weight: 43 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -309,7 +380,7 @@ attributes: value: "" label: 'Nimble Storage Management IP' description: 'The hostname (or IP address) for Nimble Storage Management IP' - weight: 39 + weight: 44 type: "text" regex: source: '^(?!\s*$).+' @@ -320,7 +391,7 @@ attributes: nimble2_login: value: "" type: "text" - weight: 40 + weight: 45 label: "User ID for Nimble Storage" description: "Nimble Storage username/ID (with admin privilages)" regex: @@ -332,7 +403,7 @@ attributes: nimble2_password: value: "" type: "password" - weight: 41 + weight: 46 label: "Password for Nimble Storage" description: "Nimble Storage password for username/ID above" regex: @@ -341,32 +412,68 @@ attributes: restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' + nimble2_subnet_label: + value: "" + type: "text" + weight: 47 + label: "Subnet Label" + description: "Nimble Storage data network Subnet Label if more than one data network" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble2_backend_protocol.value != 'iSCSI'" + message: "Subnet Label is valid for iSCSI protocol only, this setting will be ignored during deployment." + action: 'none' + nimble2_pool_name: + value: "" + type: "text" + weight: 48 + label: "Pool Name" + description: "Nimble Storage Pool Name (blank will use Nimble default storage pool)" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + nimble2_mp_img_xfer: + value: false + label: 'Use multipath for Image transfer?' + description: 'Attach/Detach volumes in cinder using multipath for volume to image, and image to volume transfers' + weight: 49 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' nimble2_encryption: - value: false + value: false label: 'Encryption enabled?' description: 'Specify if Nimble Storage backend needs to be encypted' - weight: 42 + weight: 50 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble2_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble2_multi_init: - value: false + value: false label: 'Multi-Initiator enabled?' description: 'Specify if Nimble Storage multi-initiator needs to be enabled' - weight: 43 + weight: 51 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble2_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble2_perfpol: value: "" type: "text" - weight: 44 + weight: 52 label: "Performance policy name" description: "Performance policy name for Nimble Storage backend" restrictions: @@ -375,13 +482,16 @@ attributes: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' - condition: "settings:cinder_nimble.nimble2_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble2_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' nimble3_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 45 + weight: 53 type: "hidden" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -389,21 +499,35 @@ attributes: - condition: "settings:cinder_nimble.no_backends.value == '2'" action: 'hide' nimble3_backend_label: - value: '' + value: '' label: 'Nimble Backend #3' description: 'Details for Nimble Backend #3' - weight: 47 + weight: 55 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '2'" action: 'hide' + nimble3_cinder_service_name: + value: '' + label: 'Cinder Service Name' + description: 'Stanza title for backend definition in cinder.conf, which will become the Cinder Service Name. Will be autogenerated if left blank.' + weight: 56 + type: "text" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble3_cinder_service_name.value != ''" + message: "Use with caution! For successful deployment, make sure Cinder Service Name is unique across backends. Please avoid using 'volume_backend_name_##' format or 'volume_backend_name' itself as it may conflict with autogenerated service names." + action: 'none' nimble3_backend_name: value: 'cinder_nimble3' label: 'Backend Name' description: '"volume_backend_name" for Nimble Storage backend in cinder' - weight: 48 + weight: 57 type: "text" regex: source: '^(?!\s*$).+' @@ -419,11 +543,8 @@ attributes: value: 'cinder_nimble3' label: 'Volume Type Name' description: 'Volume Type for Nimble Storage backend in cinder' - weight: 49 + weight: 58 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -431,12 +552,15 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble3_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble3_default_backend: type: 'checkbox' - value: false - weight: 50 + value: false + weight: 59 label: 'Set as Default Type?' - description: 'Set the Nimble backend #3 as the default type' + description: 'Set the Nimble backend #3 as the default type' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -456,6 +580,9 @@ attributes: - condition: "settings:cinder_nimble.nimble5_default_backend.value == true" action: 'disable' message: "Backend #5 is selected as default type." + - condition: "settings:cinder_nimble.nimble3_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble3_backend_protocol: value: 'iSCSI' values: @@ -467,7 +594,7 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: 'Storage Protocol to be used with Nimble Array Backend' description: '' - weight: 51 + weight: 60 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -478,7 +605,7 @@ attributes: value: "" label: 'Nimble Storage Management IP' description: 'The hostname (or IP address) for Nimble Storage Management IP' - weight: 52 + weight: 61 type: "text" regex: source: '^(?!\s*$).+' @@ -491,7 +618,7 @@ attributes: nimble3_login: value: "" type: "text" - weight: 53 + weight: 62 label: "User ID for Nimble Storage" description: "Nimble Storage username/ID (with admin privilages)" regex: @@ -505,7 +632,7 @@ attributes: nimble3_password: value: "" type: "password" - weight: 54 + weight: 63 label: "Password for Nimble Storage" description: "Nimble Storage password for username/ID above" regex: @@ -516,11 +643,47 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '2'" action: 'hide' + nimble3_subnet_label: + value: "" + type: "text" + weight: 64 + label: "Subnet Label" + description: "Nimble Storage data network Subnet Label if more than one data network" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble3_backend_protocol.value != 'iSCSI'" + message: "Subnet Label is valid for iSCSI protocol only, this setting will be ignored during deployment." + action: 'none' + nimble3_pool_name: + value: "" + type: "text" + weight: 65 + label: "Pool Name" + description: "Nimble Storage Pool Name (blank will use Nimble default storage pool)" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + nimble3_mp_img_xfer: + value: false + label: 'Use multipath for Image transfer?' + description: 'Attach/Detach volumes in cinder using multipath for volume to image, and image to volume transfers' + weight: 66 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' nimble3_encryption: - value: false + value: false label: 'Encryption enabled?' description: 'Specify if Nimble Storage backend needs to be encypted' - weight: 55 + weight: 67 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -529,11 +692,14 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble3_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble3_multi_init: - value: false + value: false label: 'Multi-Initiator enabled?' description: 'Specify if Nimble Storage multi-initiator needs to be enabled' - weight: 56 + weight: 68 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -542,10 +708,13 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble3_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble3_perfpol: value: "" type: "text" - weight: 57 + weight: 69 label: "Performance policy name" description: "Performance policy name for Nimble Storage backend" restrictions: @@ -556,13 +725,16 @@ attributes: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' - condition: "settings:cinder_nimble.nimble3_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble3_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' nimble4_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 58 + weight: 70 type: "hidden" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -572,10 +744,10 @@ attributes: - condition: "settings:cinder_nimble.no_backends.value == '3'" action: 'hide' nimble4_backend_label: - value: '' + value: '' label: 'Nimble Backend #4' description: 'Details for Nimble Backend #4' - weight: 60 + weight: 72 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -584,11 +756,27 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '3'" action: 'hide' + nimble4_cinder_service_name: + value: '' + label: 'Cinder Service Name' + description: 'Stanza title for backend definition in cinder.conf, which will become the Cinder Service Name. Will be autogenerated if left blank.' + weight: 73 + type: "text" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble4_cinder_service_name.value != ''" + message: "Use with caution! For successful deployment, make sure Cinder Service Name is unique across backends. Please avoid using 'volume_backend_name_##' format or 'volume_backend_name' itself as it may conflict with autogenerated service names." + action: 'none' nimble4_backend_name: value: 'cinder_nimble4' label: 'Backend Name' description: '"volume_backend_name" for Nimble Storage backend in cinder' - weight: 61 + weight: 74 type: "text" regex: source: '^(?!\s*$).+' @@ -606,11 +794,8 @@ attributes: value: 'cinder_nimble4' label: 'Volume Type Name' description: 'Volume Type for Nimble Storage backend in cinder' - weight: 62 + weight: 75 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -620,12 +805,15 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble4_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble4_default_backend: type: 'checkbox' - value: false - weight: 63 + value: false + weight: 76 label: 'Set as Default Type?' - description: 'Set the Nimble backend #4 as the default type' + description: 'Set the Nimble backend #4 as the default type' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -647,6 +835,9 @@ attributes: - condition: "settings:cinder_nimble.nimble5_default_backend.value == true" action: 'disable' message: "Backend #5 is selected as default type." + - condition: "settings:cinder_nimble.nimble4_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble4_backend_protocol: value: 'iSCSI' values: @@ -658,7 +849,7 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: 'Storage Protocol to be used with Nimble Array Backend' description: '' - weight: 64 + weight: 77 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -671,7 +862,7 @@ attributes: value: "" label: 'Nimble Storage Management IP' description: 'The hostname (or IP address) for Nimble Storage Management IP' - weight: 65 + weight: 78 type: "text" regex: source: '^(?!\s*$).+' @@ -686,7 +877,7 @@ attributes: nimble4_login: value: "" type: "text" - weight: 66 + weight: 79 label: "User ID for Nimble Storage" description: "Nimble Storage username/ID (with admin privilages)" regex: @@ -702,7 +893,7 @@ attributes: nimble4_password: value: "" type: "password" - weight: 67 + weight: 80 label: "Password for Nimble Storage" description: "Nimble Storage password for username/ID above" regex: @@ -715,11 +906,53 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '3'" action: 'hide' + nimble4_subnet_label: + value: "" + type: "text" + weight: 81 + label: "Subnet Label" + description: "Nimble Storage data network Subnet Label if more than one data network" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble4_backend_protocol.value != 'iSCSI'" + message: "Subnet Label is valid for iSCSI protocol only, this setting will be ignored during deployment." + action: 'none' + nimble4_pool_name: + value: "" + type: "text" + weight: 82 + label: "Pool Name" + description: "Nimble Storage Pool Name (blank will use Nimble default storage pool)" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + nimble4_mp_img_xfer: + value: false + label: 'Use multipath for Image transfer?' + description: 'Attach/Detach volumes in cinder using multipath for volume to image, and image to volume transfers' + weight: 83 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' nimble4_encryption: - value: false + value: false label: 'Encryption enabled?' description: 'Specify if Nimble Storage backend needs to be encypted' - weight: 68 + weight: 84 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -730,11 +963,14 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble4_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble4_multi_init: - value: false + value: false label: 'Multi-Initiator enabled?' description: 'Specify if Nimble Storage multi-initiator needs to be enabled' - weight: 69 + weight: 85 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -745,10 +981,13 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble4_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble4_perfpol: value: "" type: "text" - weight: 70 + weight: 86 label: "Performance policy name" description: "Performance policy name for Nimble Storage backend" restrictions: @@ -761,13 +1000,16 @@ attributes: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' - condition: "settings:cinder_nimble.nimble4_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble4_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' nimble5_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 71 + weight: 87 type: "hidden" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -779,10 +1021,10 @@ attributes: - condition: "settings:cinder_nimble.no_backends.value == '4'" action: 'hide' nimble5_backend_label: - value: '' + value: '' label: 'Nimble Backend #5' description: 'Details for Nimble Backend #5' - weight: 73 + weight: 89 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -793,11 +1035,29 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '4'" action: 'hide' + nimble5_cinder_service_name: + value: '' + label: 'Cinder Service Name' + description: 'Stanza title for backend definition in cinder.conf, which will become the Cinder Service Name. Will be autogenerated if left blank.' + weight: 90 + type: "text" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '4'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble5_cinder_service_name.value != ''" + message: "Use with caution! For successful deployment, make sure Cinder Service Name is unique across backends. Please avoid using 'volume_backend_name_##' format or 'volume_backend_name' itself as it may conflict with autogenerated service names." + action: 'none' nimble5_backend_name: value: 'cinder_nimble5' label: 'Backend Name' description: '"volume_backend_name" for Nimble Storage backend in cinder' - weight: 74 + weight: 91 type: "text" regex: source: '^(?!\s*$).+' @@ -817,11 +1077,8 @@ attributes: value: 'cinder_nimble5' label: 'Volume Type Name' description: 'Volume Type for Nimble Storage backend in cinder' - weight: 75 + weight: 92 type: "text" - regex: - source: '^(?!\s*$).+' - error: 'Error: Volume Type Name cannot be blank' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -833,12 +1090,15 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble5_backend_type.value == ''" + message: "During re-deployment, Volume Type cannot be removed by setting this field blank. Old type will be retained. Delete Volume Type manually if needed." + action: 'none' nimble5_default_backend: type: 'checkbox' - value: false - weight: 76 + value: false + weight: 93 label: 'Set as Default Type?' - description: 'Set the Nimble backend #5 as the default type' + description: 'Set the Nimble backend #5 as the default type' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" action: 'hide' @@ -862,6 +1122,9 @@ attributes: - condition: "settings:cinder_nimble.nimble4_default_backend.value == true" action: 'disable' message: "Backend #4 is selected as default type." + - condition: "settings:cinder_nimble.nimble5_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble5_backend_protocol: value: 'iSCSI' values: @@ -873,7 +1136,7 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: 'Storage Protocol to be used with Nimble Array Backend' description: '' - weight: 77 + weight: 94 type: "radio" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -888,7 +1151,7 @@ attributes: value: "" label: 'Nimble Storage Management IP' description: 'The hostname (or IP address) for Nimble Storage Management IP' - weight: 78 + weight: 95 type: "text" regex: source: '^(?!\s*$).+' @@ -905,7 +1168,7 @@ attributes: nimble5_login: value: "" type: "text" - weight: 79 + weight: 96 label: "User ID for Nimble Storage" description: "Nimble Storage username/ID (with admin privilages)" regex: @@ -923,7 +1186,7 @@ attributes: nimble5_password: value: "" type: "password" - weight: 80 + weight: 97 label: "Password for Nimble Storage" description: "Nimble Storage password for username/ID above" regex: @@ -938,11 +1201,59 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.no_backends.value == '4'" action: 'hide' + nimble5_subnet_label: + value: "" + type: "text" + weight: 98 + label: "Subnet Label" + description: "Nimble Storage data network Subnet Label if more than one data network" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '4'" + action: 'hide' + - condition: "settings:cinder_nimble.nimble5_backend_protocol.value != 'iSCSI'" + message: "Subnet Label is valid for iSCSI protocol only, this setting will be ignored during deployment." + action: 'none' + nimble5_pool_name: + value: "" + type: "text" + weight: 99 + label: "Pool Name" + description: "Nimble Storage Pool Name (blank will use Nimble default storage pool)" + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '4'" + action: 'hide' + nimble5_mp_img_xfer: + value: false + label: 'Use multipath for Image transfer?' + description: 'Attach/Detach volumes in cinder using multipath for volume to image, and image to volume transfers' + weight: 100 + type: 'checkbox' + restrictions: + - condition: "settings:cinder_nimble.no_backends.value == '1'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '2'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '3'" + action: 'hide' + - condition: "settings:cinder_nimble.no_backends.value == '4'" + action: 'hide' nimble5_encryption: - value: false + value: false label: 'Encryption enabled?' description: 'Specify if Nimble Storage backend needs to be encypted' - weight: 81 + weight: 101 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -955,11 +1266,14 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble5_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble5_multi_init: - value: false + value: false label: 'Multi-Initiator enabled?' description: 'Specify if Nimble Storage multi-initiator needs to be enabled' - weight: 82 + weight: 102 type: 'checkbox' restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" @@ -972,10 +1286,13 @@ attributes: action: 'hide' - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' + - condition: "settings:cinder_nimble.nimble5_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." + action: 'none' nimble5_perfpol: value: "" type: "text" - weight: 83 + weight: 103 label: "Performance policy name" description: "Performance policy name for Nimble Storage backend" restrictions: @@ -990,13 +1307,16 @@ attributes: - condition: "settings:cinder_nimble.nimble_grouping.value == true" action: 'hide' - condition: "settings:cinder_nimble.nimble5_perfpol.value == ''" - message: "Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + message: "During re-deployment, Performance policy cannot be unset by setting this field blank. Old value will be retained. Delete extra spec value manually if needed." + action: 'none' + - condition: "settings:cinder_nimble.nimble5_backend_type.value == ''" + message: "Since Volume Type Name field is blank, this setting will be ignored during deployment." action: 'none' nimble6_backend_divider: - value: '' + value: '' label: "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" description: '' - weight: 84 + weight: 104 type: "hidden" restrictions: - condition: "settings:cinder_nimble.no_backends.value == '1'" diff --git a/metadata.yaml b/metadata.yaml index 76a4684..df3f46b 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,5 +1,5 @@ # Plugin name -name: cinder_nimble +name: cinder_nimble # Human-readable name for your plugin title: Cinder plugin for Nimble Storage # Plugin version @@ -22,7 +22,7 @@ homepage: 'https://github.com/openstack/fuel-plugin-cinder-nimble' groups: ['storage::cinder'] # Change `false` to `true` if the plugin can be installed in the environment # after the deployment. -is_hotpluggable: true +is_hotpluggable: true # The plugin is compatible with releases in the list releases: