diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b46c00..c5cbd07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ This file is used to list changes made in each version of the openstack-block-st ## 8.0.0 ### New version * Upgrade to upstream Havana release +* Add support for Storwize/SVC configuration attributes ## 7.2.2 ### Bug diff --git a/README.md b/README.md index f0cd48f..0c2f869 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,9 @@ TODO: move rabbit parameters under openstack["block-storage"]["mq"] * `openstack["block-storage"]["mq"]["qpid"]["protocol"]` - Protocol to use. Default tcp. * `openstack["block-storage"]["mq"]["qpid"]["tcp_nodelay"]` - Disable the Nagle algorithm. default disabled. +Cinder attributes +----------------- + * `openstack["block-storage"]["service_tenant_name"]` - name of tenant to use for the cinder service account in keystone * `openstack["block-storage"]["service_user"]` - cinder service user in keystone * `openstack["block-storage"]["service_role"]` - role for the cinder service user in keystone @@ -108,6 +111,24 @@ TODO: move rabbit parameters under openstack["block-storage"]["mq"] * `openstack["block-storage"]["rpc_conn_pool_size"]` - Size of RPC connection pool * `openstack["block-storage"]["rpc_response_timeout"]` - Seconds to wait for a response from call or multicall +### Storwize/SVC attributes ### +* `openstack['block-storage']['san']['san_ip'] - IP address of SAN controller +* `openstack['block-storage']['san']['san_login'] - Username for SAN controller +* `openstack['block-storage']['san']['san_private_key'] - Filename of private key to use for SSH authentication +* `openstack['block-storage']['storwize']['storwize_svc_volpool_name'] - Storage system storage pool for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_rsize'] - Storage system space-efficiency parameter for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_warning'] - Storage system threshold for volume capacity warnings +* `openstack['block-storage']['storwize']['storwize_svc_vol_autoexpand'] - Storage system autoexpand parameter for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_grainsize'] - Storage system grain size parameter for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_compression'] - Storage system compression option for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_easytier'] - Enable Easy Tier for volumes +* `openstack['block-storage']['storwize']['storwize_svc_vol_iogrp'] - The I/O group in which to allocate volumes +* `openstack['block-storage']['storwize']['storwize_svc_flashcopy_timeout'] - Maximum number of seconds to wait for FlashCopy to be prepared +* `openstack['block-storage']['storwize']['storwize_svc_connection_protocol'] - Connection protocol (iSCSI/FC) +* `openstack['block-storage']['storwize']['storwize_svc_iscsi_chap_enabled'] - Configure CHAP authentication for iSCSI connections +* `openstack['block-storage']['storwize']['storwize_svc_multipath_enabled'] - Connect with multipath (FC only; iSCSI multipath is controlled by Nova) +* `openstack['block-storage']['storwize']['storwize_svc_multihostmap_enabled'] - Allows vdisk to multi host mapping + Testing ===== diff --git a/attributes/default.rb b/attributes/default.rb index 92cab33..4669fdf 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -127,6 +127,24 @@ default['openstack']['block-storage']['nfs']['mount_point_base'] = '/mnt/cinder- default['openstack']['block-storage']['nfs']['nfs_disk_util'] = 'df' default['openstack']['block-storage']['nfs']['nfs_sparsed_volumes'] = 'true' +# Storwize/SVC Support +default['openstack']['block-storage']['san']['san_ip'] = '127.0.0.1' +default['openstack']['block-storage']['san']['san_login'] = 'admin' +default['openstack']['block-storage']['san']['san_private_key'] = '/v7000_rsa' +default['openstack']['block-storage']['storwize']['storwize_svc_volpool_name'] = 'volpool' +default['openstack']['block-storage']['storwize']['storwize_svc_vol_rsize'] = '2%' +default['openstack']['block-storage']['storwize']['storwize_svc_vol_warning'] = 0 +default['openstack']['block-storage']['storwize']['storwize_svc_vol_autoexpand'] = true +default['openstack']['block-storage']['storwize']['storwize_svc_vol_grainsize'] = 256 +default['openstack']['block-storage']['storwize']['storwize_svc_vol_compression'] = false +default['openstack']['block-storage']['storwize']['storwize_svc_vol_easytier'] = true +default['openstack']['block-storage']['storwize']['storwize_svc_flashcopy_timeout'] = 120 +default['openstack']['block-storage']['storwize']['storwize_svc_vol_iogrp'] = 0 +default['openstack']['block-storage']['storwize']['storwize_svc_connection_protocol'] = 'iSCSI' +default['openstack']['block-storage']['storwize']['storwize_svc_iscsi_chap_enabled'] = true +default['openstack']['block-storage']['storwize']['storwize_svc_multipath_enabled'] = false +default['openstack']['block-storage']['storwize']['storwize_svc_multihostmap_enabled'] = true + # logging attribute default['openstack']['block-storage']['syslog']['use'] = false default['openstack']['block-storage']['syslog']['facility'] = 'LOG_LOCAL2' diff --git a/recipes/volume.rb b/recipes/volume.rb index 19a85ec..4921502 100644 --- a/recipes/volume.rb +++ b/recipes/volume.rb @@ -86,6 +86,13 @@ when "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver" end end +when "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" + file node['openstack']['block-storage']['san']['san_private_key'] do + mode "0400" + owner node["openstack"]["block-storage"]["user"] + group node["openstack"]["block-storage"]["group"] +end + when "cinder.volume.drivers.lvm.LVMISCSIDriver" if node["openstack"]["block-storage"]["volume"]["create_volume_group"] volume_size = node["openstack"]["block-storage"]["volume"]["volume_group_size"] diff --git a/spec/volume_spec.rb b/spec/volume_spec.rb index 48a6d6b..db5bc85 100644 --- a/spec/volume_spec.rb +++ b/spec/volume_spec.rb @@ -83,6 +83,40 @@ describe "openstack-block-storage::volume" do expect(n).to eq "rbd-pass" end + it "configures storewize private key" do + chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n| + n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" + end + chef_run.converge "openstack-block-storage::volume" + + san_key = chef_run.file chef_run.node["openstack"]["block-storage"]["san"]["san_private_key"] + expect(san_key.mode).to eq('0400') + end + + it "configures storewize with iscsi" do + chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n| + n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" + n.set["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] = "iSCSI" + end + conf = "/etc/cinder/cinder.conf" + chef_run.converge "openstack-block-storage::volume" + + # Test that the FC specific options are not set when connected via iSCSI + expect(chef_run).not_to render_file(conf).with_content("storwize_svc_multipath_enabled") + end + + it "configures storewize with fc" do + chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n| + n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" + n.set["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] = "FC" + end + conf = "/etc/cinder/cinder.conf" + chef_run.converge "openstack-block-storage::volume" + + # Test that the iSCSI specific options are not set when connected via FC + expect(chef_run).not_to render_file(conf).with_content("storwize_svc_iscsi_chap_enabled") + end + it "starts cinder volume" do expect(@chef_run).to start_service "cinder-volume" end diff --git a/templates/default/cinder.conf.erb b/templates/default/cinder.conf.erb index 0d5fd26..eb4892c 100644 --- a/templates/default/cinder.conf.erb +++ b/templates/default/cinder.conf.erb @@ -694,6 +694,18 @@ nfs_sparsed_volumes=<%= node["openstack"]["block-storage"]["nfs"]["nfs_sparsed_v ######## defined in cinder.volume.san ######## +<% if node["openstack"]["block-storage"]["volume"]["driver"] == "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" %> + +san_ip=<%= node["openstack"]["block-storage"]["san"]["san_ip"] %> +#### (StrOpt) IP address of SAN controller + +san_login=<%= node["openstack"]["block-storage"]["san"]["san_login"] %> +#### (StrOpt) Username for SAN controller + +san_private_key=<%= node["openstack"]["block-storage"]["san"]["san_private_key"] %> +#### (StrOpt) Filename of private key to use for SSH authentication + +<% else %> # san_thin_provision=true #### (BoolOpt) Use thin provisioning for SAN volumes? @@ -721,7 +733,7 @@ nfs_sparsed_volumes=<%= node["openstack"]["block-storage"]["nfs"]["nfs_sparsed_v # san_zfs_volume_base=rpool/ #### (StrOpt) The ZFS path under which to create zvols for volumes. - +<% end %> ######## defined in cinder.volume.solidfire ######## @@ -740,35 +752,57 @@ nfs_sparsed_volumes=<%= node["openstack"]["block-storage"]["nfs"]["nfs_sparsed_v # sf_allow_tenant_qos=true #### (BoolOpt) Allow tenants to specify QOS on create - +<% if node["openstack"]["block-storage"]["volume"]["driver"] == "cinder.volume.drivers.storwize_svc.StorwizeSVCDriver" %> ######## defined in cinder.volume.storwize_svc ######## -# storwize_svc_volpool_name=volpool +storwize_svc_volpool_name=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_volpool_name"] %> #### (StrOpt) Storage system storage pool for volumes -# storwize_svc_vol_rsize=2% +storwize_svc_vol_rsize=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_rsize"] %> #### (StrOpt) Storage system space-efficiency parameter for volumes -# storwize_svc_vol_warning=0 +storwize_svc_vol_warning=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_warning"] %> #### (StrOpt) Storage system threshold for volume capacity warnings -# storwize_svc_vol_autoexpand=true +storwize_svc_vol_autoexpand=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_autoexpand"] %> #### (BoolOpt) Storage system autoexpand parameter for volumes (True/False) -# storwize_svc_vol_grainsize=256 +storwize_svc_vol_grainsize=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_grainsize"] %> #### (StrOpt) Storage system grain size parameter for volumes #### (32/64/128/256) -# storwize_svc_vol_compression=false +storwize_svc_vol_compression=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_compression"] %> #### (BoolOpt) Storage system compression option for volumes -# storwize_svc_vol_easytier=true +storwize_svc_vol_easytier=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_easytier"] %> #### (BoolOpt) Enable Easy Tier for volumes -# storwize_svc_flashcopy_timeout=120 +# The I/O group in which to allocate volumes (integer value) +storwize_svc_vol_iogrp=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_vol_iogrp"] %> + +storwize_svc_flashcopy_timeout=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_flashcopy_timeout"] %> #### (StrOpt) Maximum number of seconds to wait for FlashCopy to be #### prepared. Maximum value is 600 seconds (10 minutes). +# Connection protocol (iSCSI/FC) (string value) +storwize_svc_connection_protocol=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] %> + +<% if node["openstack"]["block-storage"]["storwize"]["storwize_svc_connection_protocol"] == "iSCSI" %> +# Configure CHAP authentication for iSCSI connections +# (Default: Enabled) (boolean value) +storwize_svc_iscsi_chap_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_iscsi_chap_enabled"] %> + +<% else %> + +# Connect with multipath (FC only; iSCSI multipath is +# controlled by Nova) (boolean value) +storwize_svc_multipath_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_multipath_enabled"] %> + +<% end %> +# Allows vdisk to multi host mapping (boolean value) +storwize_svc_multihostmap_enabled=<%= node["openstack"]["block-storage"]["storwize"]["storwize_svc_multihostmap_enabled"] %> + +<% end %> ######## defined in cinder.volume.xiv ########