diff --git a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf.stub b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf similarity index 53% rename from deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf.stub rename to deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf index e095b64..d10f64a 100755 --- a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf.stub +++ b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/files/multipath.conf @@ -1,3 +1,19 @@ +blacklist { + devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" + devnode "^hd[a-z][0-9]*" + devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]" +} + +defaults { + verbosity 2 + polling_interval 10 + wwids_file /etc/multipath/wwids +} + +blacklist_exceptions { +} + + devices { device { vendor "PURE" diff --git a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/common.pp b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/common.pp index 572fb31..b66664f 100755 --- a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/common.pp +++ b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/common.pp @@ -23,6 +23,9 @@ class plugin_purestorage_cinder::common { package {$plugin_purestorage_cinder::params::iscsi_package_name: ensure => 'installed' } + package {$plugin_purestorage_cinder::params::multipath_package_name: + ensure => 'installed' + } case $::osfamily { 'Debian': { service {$plugin_purestorage_cinder::params::iscsi_service_name: @@ -52,9 +55,7 @@ class plugin_purestorage_cinder::common { fail("unsuported osfamily ${::osfamily}, currently Debian and Redhat are the only supported platforms") } } - package {$plugin_purestorage_cinder::params::multipath_package_name: - ensure => 'installed' - } + service {$plugin_purestorage_cinder::params::multipath_service_name: ensure => 'running', enable => true, @@ -63,4 +64,13 @@ class plugin_purestorage_cinder::common { status => 'pgrep multipathd', require => Package[$plugin_purestorage_cinder::params::multipath_package_name], } + + file {'multipath.conf': + path => '/etc/multipath.conf', + mode => '0644', + owner => root, + group => root, + source => 'puppet:///modules/plugin_purestorage_cinder/multipath.conf', + require => Package[$plugin_purestorage_cinder::params::multipath_package_name], + notify => Service[$plugin_purestorage_cinder::params::multipath_package_name], } diff --git a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/controller.pp b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/controller.pp index 198209c..5b72b66 100755 --- a/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/controller.pp +++ b/deployment_scripts/puppet/modules/plugin_purestorage_cinder/manifests/controller.pp @@ -58,6 +58,7 @@ class plugin_purestorage_cinder::controller ( } } +# Insert Glance Image Cache for Cinder settings if $plugin_settings['image_volume_cache_enabled'] { keystone_tenant { 'cinder_internal_tenant': ensure => present, @@ -89,6 +90,95 @@ class plugin_purestorage_cinder::controller ( } } +# If protocol is FC then meed to add zoning_mode. Put in $section as this has already been set by multibackend + if ($plugin_settings['pure_protocol'] == 'FC') and ($plugin_settings['pure_fczm_config'] == 'automatic') { + cinder_config { + "$section/zoning_mode": value => "Fabric"; + } +# Now add in the [fc-zone-manager] stanza + case $plugin_settings['pure_switch_vendor'] { + 'Brocade': { + cinder_config { + "fc-zone-manager/brcd_sb_connector": value => "cinder.zonemanager.drivers.brocade.brcd_fc_zone_client_cli.BrcdFCZoneClientCLI"; + "fc-zone-manager/fc_san_lookup_service": value => "cinder.zonemanager.drivers.brocade.brcd_fc_san_lookup_service.BrcdFCSanLookupService"; + "fc-zone-manager/zone_driver": value => "cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver.BrcdFCZoneDriver"; + } + } + 'Cisco': { + cinder_config { + "fc-zone-manager/cisco_sb_connector": value => "cinder.zonemanager.drivers.cisco.cisco_fc_zone_client_cli.CiscoFCZoneClientCLI"; + "fc-zone-manager/fc_san_lookup_service": value => "cinder.zonemanager.drivers.cisco.cisco_fc_san_lookup_service.CiscoFCSanLookupService"; + "fc-zone-manager/zone_driver": value => "cinder.zonemanager.drivers.cisco.cisco_fc_zone_driver.CiscoFCZoneDriver"; + } + } + } + case $plugin_settings['pure_fabric_count'] { + '1': { + cinder_config { + "fc-zone-manager/fc_fabric_names": value => $plugin_settings["pure_fabric_name_1"]; + } + } + '2': { + cinder_config { + "fc-zone-manager/fc_fabric_names": value => join($plugin_settings["pure_fabric_name_1"],', ',$plugin_settings["pure_fabric_name_2"]); + } + } + } + + $fabric_zone_1 = $plugin_settings["pure_fabric_name_1"] + $fabric_zone_2 = $plugin_settings["pure_fabric_name_2"] + +# Now add in stanzas for each fabric zone depending on the switch vendor + case $plugin_settings['pure_switch_vendor'] { + 'Brocade': { + cinder_config { + "$fabric_zone_1/fc_fabric_address": value => $plugin_settings["pure_fabric_ip_1"]; + "$fabric_zone_1/fc_fabric_user": value => $plugin_settings["pure_username_1"]; + "$fabric_zone_1/fc_fabric_password": value => $plugin_settings["pure_password_1"]; + "$fabric_zone_1/fc_fabric_port": value => '22'; + "$fabric_zone_1/zoning_policy": value => 'initiator-target'; + "$fabric_zone_1/zone_activate": value => 'true'; + "$fabric_zone_1/zone_name_prefix": value => join($plugin_settings["pure_fabric_name_1"],'_'); + } + if $plugin_settings['pure_fabric_count'] == '2' { + cinder_config { + "$fabric_zone_2/fc_fabric_address": value => $plugin_settings["pure_fabric_ip_2"]; + "$fabric_zone_2/fc_fabric_user": value => $plugin_settings["pure_username_2"]; + "$fabric_zone_2/fc_fabric_password": value => $plugin_settings["pure_password_2"]; + "$fabric_zone_2/fc_fabric_port": value => '22'; + "$fabric_zone_2/zoning_policy": value => 'initiator-target'; + "$fabric_zone_2/zone_activate": value => 'true'; + "$fabric_zone_2/zone_name_prefix": value => join($plugin_settings["pure_fabric_name_2"],'_'); + } + } + } + 'Cisco': { + cinder_config { + "$fabric_zone_1/cisco_fc_fabric_address": value => $plugin_settings["pure_fabric_ip_1"]; + "$fabric_zone_1/cisco_fc_fabric_user": value => $plugin_settings["pure_username_1"]; + "$fabric_zone_1/cisco_fc_fabric_password": value => $plugin_settings["pure_password_1"]; + "$fabric_zone_1/cisco_fc_fabric_port": value => '22'; + "$fabric_zone_1/cisco_zoning_vsan": value => $plugin_settings["pure_vsan_1"]; + "$fabric_zone_1/cisco_zoning_policy": value => 'initiator-target'; + "$fabric_zone_1/cisco_zone_activate": value => 'true'; + "$fabric_zone_1/cisco_zone_name_prefix": value => join($plugin_settings["pure_fabric_name_1"],'_'); + } + if $plugin_settings['pure_fabric_count'] == '2' { + cinder_config { + "$fabric_zone_2/cisco_fc_fabric_address": value => $plugin_settings["pure_fabric_ip_2"]; + "$fabric_zone_2/cisco_fc_fabric_user": value => $plugin_settings["pure_username_2"]; + "$fabric_zone_2/cisco_fc_fabric_password": value => $plugin_settings["pure_password_2"]; + "$fabric_zone_2/cisco_fc_fabric_port": value => '22'; + "$fabric_zone_2/cisco_zoning_vsan": value => $plugin_settings["pure_vsan_2"]; + "$fabric_zone_2/cisco_zoning_policy": value => 'initiator-target'; + "$fabric_zone_2/cisco_zone_activate": value => 'true'; + "$fabric_zone_2/cisco_zone_name_prefix": value => join($plugin_settings["pure_fabric_name_2"],'_'); + } + } + } + } + } + Cinder_config<||> ~> Service['cinder_volume'] service { 'cinder_volume': diff --git a/docs/figures/API-Collection.png b/docs/figures/API-Collection.png new file mode 100644 index 0000000..163a3ab Binary files /dev/null and b/docs/figures/API-Collection.png differ diff --git a/docs/figures/VIP-Collection.png b/docs/figures/VIP-Collection.png new file mode 100644 index 0000000..ad6d720 Binary files /dev/null and b/docs/figures/VIP-Collection.png differ diff --git a/docs/purestorage-cinder-guide.rst b/docs/purestorage-cinder-guide.rst index 73029a0..e42ead2 100644 --- a/docs/purestorage-cinder-guide.rst +++ b/docs/purestorage-cinder-guide.rst @@ -90,22 +90,58 @@ Pure Storage Cinder Plugin installation :width: 100% #. Enter the Purity API Token and the IP address of the management VIP of the Pure Storage FlashArray. + Obtain the Purity API token from the Pure Storage GUI -#. Select the defaults for all other Pure Storage options. + (System->Users->API Tokens: Select User, click gear icon by use select 'Show API Token') + + .. image:: figures/API-collection.png + :width: 100% + + or use the following Purity CLI command to obtain the API token: + + :: + + # pureadmin list --api-token --expose + + Obtain the Pure Storage VIP from the Pure Storage GUI + + (System->System->Configuration->Networking: e IP addresses associated with 'vir0') + + .. image:: figures/VIP-collection.png + :width: 100% + + or use the following Purity CLI command to obtain the VIP address: + + :: + + # purenetwork list vir0 + +#. Select the defaults for all other Pure Storage options. More details on these options can be found in the + `Pure Storage Fuel Plugin documentation `_. User Guide ========== Once the OpenStack instance is deployed by Fuel the Pure Storage plugin provides no -user configurable or maintainable options. +user configurable or maintainable options. As part of this installation a new multipath.conf +file is provided to all nodes. Ensure that other device entries required for your +local environment are added to these files and multipath is restarted to accept any changes. The Pure Storage driver (Once configured by Fuel) will output all logs into the cinder-volume process log file with the 'Pure Storage' title. + Known issues ============ -There are no known issues at this time. +#. Ensure your controller nodes have access to the public internet to allow for correct Python module + installation required by the Fuel plugin + +#. If you environment is deployed with multiple controllers for HA, you cannot run all the + Cinder Volume services at the same time in Active-Active mode + +#. There are specific changes that need to be made to the local deb packages. More details can be found + in the Pure Storage/Mirantis Reference Architecture. Appendix ======== diff --git a/environment_config.yaml b/environment_config.yaml index 06034e6..abf9b87 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -6,7 +6,7 @@ attributes: weight: 10 type: "checkbox" pure_san_ip: - value: '' + value: "" label: 'Pure Storage Management IP (san_ip)' description: 'The hostname (or IP address) for the Pure Storage Management VIP.' weight: 15 @@ -15,14 +15,40 @@ attributes: source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' error: "Error: Enter in regular IP address dot notation" pure_api: - value: '' + value: "" label: 'API Token for Pure Storage (pure_api_token)' description: 'Purity API token used to perform actions on the FlashArray.' weight: 20 type: "text" regex: - source: '\S' + source: '^(?!\s*$).+' error: "Error: API token field cannot be empty" + pure_multipath: + value: "true" + values: + - data: "true" + label: "True" + description: "Enables multipathing for image transfers" + - data: "false" + label: "False" + description: "Disables multipathing for image transfers" + label: "Pure Storage Multipath for Image Transfers (use_multipath_for_image_xfer)" + description: 'Enable/Disable multipathing for image transfers.' + weight: 25 + type: "radio" + pure_nova_multipath: + value: "false" + values: + - data: "true" + label: "True" + description: "Enables multipathing for Nova compute servers" + - data: "false" + label: "False" + description: "Disables multipathing for Nova compute servers" + label: "Multipathing for Nova Compute servers (iscsi_use_multipath)" + description: 'Enable/Disable multipathing for Nova compute servers.' + weight: 26 + type: "radio" pure_glance_image_cache: value: "false" values: @@ -40,7 +66,7 @@ attributes: value: '0' label: 'Glance Image Cache Max Count (image_volume_cache_max_count)' description: 'Maximum number of images in Glance Image Cache (0 = no limit)' - weight: 35 + weight: 31 type: "text" restrictions: - condition: "settings:fuel-plugin-purestorage-cinder.pure_glance_image_cache.value != 'true'" @@ -71,226 +97,24 @@ attributes: description: "Enables Fibre Channel protocol for block storage volumes" label: "Protocol for Pure Storage block access" description: 'Select block storage protocol for FlashArray.' - weight: 60 + weight: 38 type: "radio" - pure_fabric_count: - value: '2' - type: "radio" - weight: 61 + pure_fczm_config: + value: "manual" values: - - data: '1' - label: "1" - - data: '2' - label: "2" - label: "Number of SAN fabrics" - description: "Number of SAN fabrics connected to compute and controller nodes" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - pure_fabric_name_1: - value: '' - label: "Name of Fabric 1" - description: "Name of the active zone set for the zoning VSAN if your switch vendor is CISCO, or name of active zone configuration if Brocade. Additionally used to define zone_name_prefix." - weight: 61 - type: "text" + - data: "automatic" + label: "Automatic" + description: "Use automated Fibre Channel Zone Manager for zoning" + - data: "manual" + label: "Manual" + description: "Use manual fibre channel zoning" + label: "Fibre Channel Zoning Manager" + description: "Method for configuring fibre channel zones" restrictions: - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" action: "hide" - regex: - source: '/S' - error: "Error: Fabric name cannot be blank" - pure_switch_vendor_1: - value: '' - values: - - data: "Brocade" - label: "Brocade" - description: 'Fibre Channel SAN Switch provider' - - data: "CISCO" - label: "CISCO" - description: 'Fibre Channel SAN Switch provider' - label: "Fibre Channel SAN Switch Provider for Fabric 1" - description: "FC Vendor" - weight: 61 + weight: 39 type: "radio" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - pure_fabric_ip_1: - value: '' - type: "text" - weight: 61 - label: "IP address" - description: "Management IP address of SAN switch for fabric number 1" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - regex: - source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' - error: "Error: Enter in regular IP address dot notation" - pure_username_1: - value: '' - type: "text" - weight: 61 - label: "Fabric User ID for Fabric 1" - description: "Fabric switch username (with admin privilages)" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - regex: - source: '/S' - error: "Error: Username cannot be blank" - pure_password_1: - value: '' - type: "text" - weight: 61 - label: "Password for fabric switch in Fabric 1" - description: "Fabric switch password for username above" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - regex: - source: '/S' - error: "Error: Password cannot be blank" - pure_zoning_policy_1: - value: 'initiator-target' - values: - - data: "initiator-target" - label: "initiator-target" - - data: "target" - label: "target" - label: "Zoning Policy" - description: "Fabric 1 Zoning Policy" - weight: 61 - type: "radio" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC'" - action: "hide" - pure_vsan_1: - value: '' - label: "VSAN" - description: "Number of zoning VSAN with active zone set which is the same as the name of Fabric 1" - weight: 61 - type: "text" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor_1 != 'CISCO'" - action: "hide" - regex: - source: '^[0-9]{1, 4093}$`' - error: "Error: VSAN must be in range 1-4093" - pure_principal_wwn_1: - value: '' - label: "Principal Switch WWN" - description: "WWN of switch designated as principal in your fabric. Determine from FOS command fabricShow." - weight: 61 - type: "text" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor_1 != 'Brocade'" - action: "hide" - regex: - source: '^([0-9a-fA-F][0-9a-fA-F]:){7}([0-9a-fA-F][0-9a-fA-F])$' - error: "Error: Enter in WWN address format xx:xx:xx:xx:xx:xx:xx:xx" - pure_fabric_name_2: - value: '' - label: "Name of Fabric 2" - description: "Name of the active zone set for zoning VSAN if your switch vendor is CISCO, or name of active zone configuration if Brocade. Additionally used to define zone_name_prefix." - weight: 62 - type: "text" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - regex: - source: '/S' - error: "Error: Fabric name cannot be blank" - pure_switch_vendor_2: - value: '' - values: - - data: "Brocade" - label: "Brocade" - description: 'Fibre Channel SAN Switch provider' - - data: "CISCO" - label: "CISCO" - description: 'Fibre Channel SAN Switch provider' - label: "Fibre Channel SAN Switch Provider for Fabric 2" - description: "FC Vendor" - weight: 62 - type: "radio" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - pure_fabric_ip_2: - value: '' - type: "text" - weight: 62 - label: "IP address" - description: "Management IP address of SAN switch for fabric number 2" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - regex: - source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' - error: "Error: Enter in regular IP address dot notation" - pure_username_2: - value: '' - type: "text" - weight: 62 - label: "Fabric User ID for Fabric 2" - description: "Fabric switch username (with admin privilages)" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - regex: - source: '/S' - error: "Error: Username cannot be blank" - pure_password_2: - value: '' - type: "text" - weight: 62 - label: "Password for fabric switch in Fabric 2" - description: "Fabric switch password for username above" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - regex: - source: '/S' - error: "Error: Password cannot be blank" - pure_zoning_policy_2: - value: 'initiator-target' - values: - - data: "initiator-target" - label: "initiator-target" - - data: "target" - label: "target" - label: "Zoning Policy" - description: "Fabric 2 Zoning Policy" - weight: 62 - type: "radio" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - pure_vsan_2: - value: '' - label: "VSAN" - description: "Number of zoning VSAN with active zone set which is the same as the name of Fabric 2" - weight: 62 - type: "text" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor_2 != 'Brocade' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2'" - action: "hide" - regex: - source: '^[0-9]{1, 4093}$`' - error: "Error: VSAN must be in range 1-4093" - pure_principal_wwn_2: - value: '' - label: "Principal Switch WWN" - description: "WWN of switch designated as principal in your fabric. Determine from FOS command fabricShow." - weight: 62 - type: "text" - restrictions: - - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count != '2' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor_1 != 'Brocade'" - action: "hide" - regex: - source: '^([0-9a-fA-F][0-9a-fA-F]:){7}([0-9a-fA-F][0-9a-fA-F])$' - error: "Error: Enter in WWN address format xx:xx:xx:xx:xx:xx:xx:xx" pure_chap: value: "false" values: @@ -302,31 +126,174 @@ attributes: description: "Disables CHAP on iSCSI connections to FlashArray" label: "Pure Storage iSCSI CHAP (use_chap_auth)" description: 'Enable/Disable CHAP on iSCSI connections to the FlashArray.' - weight: 60 + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'iSCSI'" + action: "hide" + weight: 40 type: "radio" - pure_multipath: - value: "true" + pure_switch_vendor: + value: "Brocade" values: - - data: "true" - label: "True" - description: "Enables multipathing for image transfers" - - data: "false" - label: "False" - description: "Disables multipathing for image transfers" - label: "Pure Storage Multipath for Image Transfers (use_multipath_for_image_xfer)" - description: 'Enable/Disable multipathing for image transfers.' - weight: 60 - type: "radio" - pure_nova_multipath: - value: "false" + - data: "Brocade" + label: "Brocade" + - data: "Cisco" + label: "Cisco" + label: "Fibre Channel SAN Switch Provider" + description: "FC Vendor" + weight: 40 + type: "select" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + pure_fabric_count: + value: '2' + type: "select" + weight: 41 values: - - data: "true" - label: "True" - description: "Enables multipathing for Nova compute servers" - - data: "false" - label: "False" - description: "Disables multipathing for Nova compute servers" - label: "Multipathing for Nova Compute servers (iscsi_use_multipath)" - description: 'Enable/Disable multipathing for Nova compute servers.' - weight: 60 - type: "radio" + - data: '1' + label: "1" + - data: '2' + label: "2" + label: "Number of SAN fabrics" + description: "Number of SAN fabrics connected to compute and controller nodes" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + pure_fabric_name_1: + value: "" + label: "Name of Fabric 1" + description: "Name of the active zone set for the zoning VSAN if your switch vendor is Cisco, or name of active zone configuration if Brocade. Used in definition of 'zone_name_prefix'." + weight: 42 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Fabric name cannot be blank" + pure_fabric_ip_1: + value: "" + type: "text" + weight: 43 + label: "IP address of Fabric 1 switch" + description: "Management IP address of SAN switch for fabric number 1" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + regex: + source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' + error: "Error: Enter in regular IP address dot notation" + pure_username_1: + value: "" + type: "text" + weight: 44 + label: "User ID for Fabric 1 switch" + description: "Fabric switch username (with admin privilages)" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Username cannot be blank" + pure_password_1: + value: "" + type: "password" + weight: 45 + label: "Password for Fabric 1 switch" + description: "Fabric switch password for username above" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Password cannot be blank" + pure_vsan_1: + value: "" + label: "VSAN for Fabric 1" + description: "Number of zoning VSAN with active zone set which is the same as the name of Fabric 1" + weight: 46 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor.value != 'Cisco')" + action: "hide" + regex: + source: '^(409[0-3]|40[1-8][0-9]|[1-3][0-9][0-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9]|[1-9])$' + error: "Error: VSAN must be in range 1-4093" + pure_zone_prefix_1: + value: "" + label: "Zoning prefix for Fabric 1" + description: "Prefix for zone name created by FCZM (Blank field will use default of 'openstack')" + weight: 47 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value == 'manual')" + action: "hide" + pure_fabric_name_2: + value: "" + label: "Name of Fabric 2" + description: "Name of the active zone set for the zoning VSAN if your switch vendor is Cisco, or name of active zone configuration if Brocade. Used in definition of 'zone_name_prefix'." + weight: 51 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Fabric name cannot be blank" + pure_fabric_ip_2: + value: "" + type: "text" + weight: 52 + label: "IP address of Fabric 2 switch" + description: "Management IP address of SAN switch for fabric number 2" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2')" + action: "hide" + regex: + source: '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' + error: "Error: Enter in regular IP address dot notation" + pure_username_2: + value: "" + type: "text" + weight: 53 + label: "User ID for Fabric 2 switch" + description: "Fabric switch username (with admin privilages)" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Username cannot be blank" + pure_password_2: + value: "" + type: "password" + weight: 54 + label: "Password for fabric 2 switch" + description: "Fabric switch password for username above" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2')" + action: "hide" + regex: + source: '^(?!\s*$).+' + error: "Error: Password cannot be blank" + pure_vsan_2: + value: "" + label: "VSAN for Fabric 2" + description: "Number of zoning VSAN with active zone set which is the same as the name of Fabric 2" + weight: 56 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2' or (settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value == '2' and settings:fuel-plugin-purestorage-cinder.pure_switch_vendor.value == 'Brocade'))" + action: "hide" + regex: + source: '^(409[0-3]|40[1-8][0-9]|[1-3][0-9][0-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9]|[1-9])$' + error: "Error: VSAN must be in range 1-4093" + pure_zone_prefix_2: + value: "" + label: "Zoning prefix for Fabric 2" + description: "Prefix for zone name created by FCZM (Blank field will use default of 'openstack')" + weight: 57 + type: "text" + restrictions: + - condition: "settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'automatic' or settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'iSCSI' or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value != 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual') or (settings:fuel-plugin-purestorage-cinder.pure_protocol.value == 'FC' and settings:fuel-plugin-purestorage-cinder.pure_fczm_config.value != 'manual' and settings:fuel-plugin-purestorage-cinder.pure_fabric_count.value != '2')" + action: "hide"