The ZTE volume drivers allow ZTE KS3200 or KU5200 arrays to be used for Block Storage in OpenStack deployments.
To use the ZTE drivers, the following prerequisites:
Verify that the array can be managed using an HTTPS connection. HTTP can
also be used if zte_api_protocol=http
is placed into the
appropriate sections of the cinder.conf
file.
Confirm that virtual pools A and B are present if you plan to use virtual pools for OpenStack storage.
Edit the cinder.conf
file to define a storage back-end entry for
each storage pool on the array that will be managed by OpenStack. Each
entry consists of a unique section name, surrounded by square brackets,
followed by options specified in key=value
format.
zte_backend_name
value specifies the name of the storage
pool on the array.volume_backend_name
option value can be a unique value, if
you wish to be able to assign volumes to a specific storage pool on
the array, or a name that is shared among multiple storage pools to
let the volume scheduler choose where new volumes are allocated.manage
privileges; and the iSCSI IP
addresses for the array if using the iSCSI transport protocol.In the examples below, two back ends are defined, one for pool A and one
for pool B, and a common volume_backend_name
. Use this for a
single volume type definition can be used to allocate volumes from both
pools.
Example: iSCSI back-end entries
[pool-a]
zte_backend_name = A
volume_backend_name = zte-array
volume_driver = cinder.volume.drivers.zte.zte_iscsi.ZTEISCSIDriver
san_ip = 10.1.2.3
san_login = manage
san_password = !manage
zte_iscsi_ips = 10.2.3.4,10.2.3.5
[pool-b]
zte_backend_name = B
volume_backend_name = zte-array
volume_driver = cinder.volume.drivers.zte.zte_iscsi.ZTEISCSIDriver
san_ip = 10.1.2.3
san_login = manage
san_password = !manage
zte_iscsi_ips = 10.2.3.4,10.2.3.5
Example: Fibre Channel back end entries
[pool-a]
zte_backend_name = A
volume_backend_name = zte-array
volume_driver = cinder.volume.drivers.zte.zte_fc.ZTEFCDriver
san_ip = 10.1.2.3
san_login = manage
san_password = !manage
[pool-b]
zte_backend_name = B
volume_backend_name = zte-array
volume_driver = cinder.volume.drivers.zte.zte_fc.ZTEFCDriver
san_ip = 10.1.2.3
san_login = manage
san_password = !manage
If HTTPS is not enabled in the array, include
zte_api_protocol = http
in each of the back-end definitions.
If HTTPS is enabled, you can enable certificate verification with the
option zte_verify_certificate=True
. You may also use the
zte_verify_certificate_path
parameter to specify the path to a
CA_BUNDLE
file containing CAs other than those in the default list.
Modify the [DEFAULT]
section of the cinder.conf
file to add an
enabled_backends
parameter specifying the back-end entries you added,
and a default_volume_type
parameter specifying the name of a volume
type that you will create in the next step.
Example: [DEFAULT] section changes
[DEFAULT]
# ...
enabled_backends = pool-a,pool-b
default_volume_type = zte
Create a new volume type for each distinct volume_backend_name
value
that you added to the cinder.conf
file. The example below
assumes that the same volume_backend_name=zte-array
option was specified in all of the
entries, and specifies that the volume type zte
can be used to
allocate volumes from any of them.
Example: Creating a volume type
$ openstack volume type create zte
$ openstack volume type set --property volume_backend_name=zte-array zte
After modifying the cinder.conf
file,
restart the cinder-volume
service.
The following table contains the configuration options that are specific to the ZTE drivers.
Configuration option = Default value | Description |
---|---|
[DEFAULT] | |
zteAheadReadSize = 8 |
(Integer) Cache readahead size. |
zteCachePolicy = 1 |
(Integer) Cache policy. 0, Write Back; 1, Write Through. |
zteChunkSize = 4 |
(Integer) Virtual block size of pool. Unit : KB. Valid value : 4, 8, 16, 32, 64, 128, 256, 512. |
zteControllerIP0 = None |
(IP) Main controller IP. |
zteControllerIP1 = None |
(IP) Slave controller IP. |
zteLocalIP = None |
(IP) Local IP. |
ztePoolVoAllocatedPolicy = 0 |
(Integer) Pool volume allocated policy. 0, Auto; 1, High Performance Tier First; 2, Performance Tier First; 3, Capacity Tier First. |
ztePoolVolAlarmStopAllocatedFlag = 0 |
(Integer) Pool volume alarm stop allocated flag. |
ztePoolVolAlarmThreshold = 0 |
(Integer) Pool volume alarm threshold. [0, 100] |
ztePoolVolInitAllocatedCapacity = 0 |
(Integer) Pool volume init allocated Capacity.Unit : KB. |
ztePoolVolIsThin = False |
(Integer) Whether it is a thin volume. |
ztePoolVolMovePolicy = 0 |
(Integer) Pool volume move policy.0, Auto; 1, Highest Available; 2, Lowest Available; 3, No Relocation. |
zteSSDCacheSwitch = 1 |
(Integer) SSD cache switch. 0, OFF; 1, ON. |
zteStoragePool = |
(List) Pool name list. |
zteUserName = None |
(String) User name. |
zteUserPassword = None |
(String) User password. |
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.