The dellemc-unity
module manages DellEMC Unity storage resources.
The Unity storage system by DellEMC delivers the ultimate in simplicity and value, enabling your organization to speed
deployment, streamline management and seamlessly tier storage to the cloud. The dellemc-unity
module allows you to
configure and deploy the Unity via Puppet code.
- Puppet
3.8
or greater - Ruby
1.9
or greater - rubypython
0.6.4
or greater (The bridge between Ruby and Python) - Python
2.7
. - Storops, 0.5.1 or greater (Python storage management library for Unity and VNX.)
-
rubypython is a bridge between the Ruby and Python interpreters. It enables the interaction with Python based storops library, dramatically eases the effort to extend the
dellemc-unity
module. -
storops is a Python storage management library for VNX and Unity. It needs to be manually installed in Puppet agent/master.
pip install storops
Before proceeding, Ensure you have installed the required Ruby
and Puppet
.
- Install
rubypython
via gem
On Ubuntu/Debian, make sure the
libffi-dev
is installed, sinceffi
(one ofrubypython
's dependencies) is a native extension. To install it, usesudo apt-get install libffi-dev
For some puppet distros, a build-in
ruby
interpreter andgem
are shipped with puppet together, so make sure the rightgem
is used to install ruby related dependencies. In this case, you can use following command to installrubypython
:/opt/puppetlabs/puppet/bin/gem install rubypython
gem install rubypython
- Install
storops
from pypi
pip install storops
- Install
dellemc-unity
puppet module.
puppet module install dellemc-unity
or install from a local source tarball.
puppet module install ".\dellemc-unity-x.y.z.tar.gz"
- Define a managed Unity system
unity_system { 'FNM12345678901':
ip => '192.168.1.50',
user => 'admin',
password => 'password',
ensure => present,
}
The defined system Unity_system['FNM12345678901']
then can be passed to any Unity resources.
- Upload a license
unity_license{ '/path/to/the/license.lic':
unity_system => Unity_system['FNM12345678901'],
ensure => present,
}
Note: the path separator in the title
must be /
even using on Windows agent.
- Create a pool
unity_pool { 'puppet_pool':
unity_system => Unity_system['FNM12345678901'],
description => 'created by puppet module',
raid_groups => [{
disk_group => 'dg_15',
raid_type => 1,
stripe_width => 0,
disk_num => 5,
}],
ensure => present,
}
- Create a iSCSI portal on ethernet port
unity_iscsi_portal { '10.244.213.245':
unity_system => Unity_system['FNM12345678901'],
ethernet_port => 'spa_eth3',
netmask => '255.255.255.0',
vlan => 133,
gateway => '10.244.213.1',
ensure => present,
}
- Create a Host
unity_host { 'my_host':
unity_system => Unity_system['FNM12345678901'],
description => 'Created by puppet',
ip => '192.168.1.139',
os => 'Ubuntu16',
host_type => 1,
iqn => 'iqn.1993-08.org.debian:01:unity-puppet-host',
wwns => ['20:00:00:90:FA:53:4C:D1:10:00:00:90:FA:53:4C:D3',
'20:00:00:90:FA:53:4C:D1:10:00:00:90:FA:53:4C:D4'],
ensure => present,
}
- Create a io limit policy
# Create a Unity io limit policy (absolute limit)
unity_io_limit_policy { 'puppet_policy':
unity_system => Unity_system['FNM12345678901'],
policy_type => 1,
description => 'Created by puppet 12',
max_iops => 1000,
max_kbps => 20480,
burst_rate => 50,
burst_time => 10,
burst_frequency => 2,
}
The meaning for above burst settings is: 50% for 10 minute(s) resetting every 2 hour(s).
- Create a LUN
unity_lun { 'puppet_lun':
unity_system => Unity_system['FNM12345678901'],
pool => Unity_pool['puppet_pool'],
size => 15,
thin => true,
compression => false,
sp => 0,
description => "Created by puppet_unity.",
io_limit_policy => Unity_io_limit_policy['puppet_policy'],
hosts => [Unity_host['my_host']],
ensure => present,
}
- Define multiple Unity system in manifest file
Administrator can define multiple systems and manage the resources on systems via a single manifest file.
Please refer to the example file here: example_multiple_systems
unity_system
: Define a Unity system.unity_license
: Upload a license to a defined Unity system.unity_pool
: Create, modify, expand or destroy a storage pool.unity_iscsi_portal
: Create, update, or destroy a iSCSI portal. Applicable for both IPv4 and IPv6.unity_host
: Create, update, or destroy a Unity host.unity_io_limit_policy
: Create, update, or destroy a Unity IO limit policy.unity_lun
: Create, update, or destroy a Unity LUN.
You can reference the examples for each resource type under the source code folder: examples
Optional.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Required.
The management IP of Unity.
Required.
The username of Unity.
Required.
The password of Unity.
Optional.
The absolute path of the license file.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Required.
The Unity system reference.
Required.
present
will upload the license for the referenced Unity system.
Optional.
The name of the pool.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Required.
present
will create the pool if absent.
absent
will delete the pool if present
Optional.
The description of the pool.
Required.
a list of Hash
is required for the pool.
...
unity_pool { 'puppet_pool':
unity_system => Unity_system['FNM12345678901'],
description => 'created by puppet module',
raid_groups => [{
disk_group => 'dg_15',
raid_type => 1,
stripe_width => 0,
disk_num => 5,
}],
alert_threshold => 80,
is_snap_harvest_enabled => true,
is_harvest_enabled => true,
ensure => present,
}
...
Parameters in raid_groups
:
-
disk_group
: the id of disk group of the Unity system. -
raid_type
: the raid type of pool.
Valid values are:
Value | Description |
---|---|
0 |
None |
1 |
RAID5 |
2 |
RAID0 |
3 |
RAID1 |
4 |
RAID3 |
7 |
RAID10 |
10 |
RAID6 |
48879 |
Automatic |
stripe_width
: RAID group stripe widths, including parity or mirror disks.
Value | Description |
---|---|
0 |
BestFit value is used in automatic selection of stripe configuration. |
2 |
A 2 disk group, usable in RAID10 1+1 configuration. |
4 |
A 4 disk group, usable in RAID10 2+2 configuration. |
5 |
A 5 disk group, usable in RAID5 4+1 configuration. |
6 |
A 6 disk group, usable in RAID6 4+2 and RAID10 3+3 configurations. |
8 |
A 8 disk group, usable in RAID6 6+2 and RAID10 4+4 configurations. |
9 |
A 9 disk group, usable in RAID5 8+1 configuration. |
10 |
A 10 disk group, usable in RAID6 8+2 and RAID10 5+5 configurations. |
12 |
A 12 disk group, usable in RAID6 10+2 and RAID10 6+6 configurations. |
13 |
A 13 disk group, usable in RAID5 12+1 configuration. |
14 |
A 14 disk group, usable in RAID6 12+2 configuration. |
15 |
raid strip width including parity disks, can be used in RAID6 14+2 configuration. |
disk_num
: Number of disks.
For pool expansion, user can either increase the disk_num
or add new raid group in raid_groups
.
Optional.
Threshold at which the system will generate alerts about the free space in the pool, specified as a percentage.
Optional
Enable/disable pool harvesting.
Optional
Enable/disable pool snapshot harvesting.
Optional
Enable/disable pool harvesting.
Optional
Pool used space high threshold at which the system will automatically starts to delete snapshots in the pool.
Optional
Pool used space low threshold under which the system will automatically stop deletion of snapshots in the pool.
Optional
Snapshot used space high threshold at which the system automatically starts to delete snapshots in the pool.
Optional
Snapshot used space low threshold below which the system will stop automatically deleting snapshots in the pool.
Optional
Enable/disable FAST Cache for this pool
Optional
Enable/disable scheduled data relocations for this pool.
Optional
Create traditional/dynamic pool
Valid values are:
Value | Description |
---|---|
1 |
traditional pool |
2 |
dynamic pool |
Required
IP of the iSCSI portal
Required
The ethernet port ID for the iSCSI portal.
such as spa_eth2
, spb_eth3
.
Required
The netmask for the iSCSI portal
It can be a address 255.255.255.0
or a length 24
.
Optional
The VLAN identifier for the iSCSI portal.
Optional
The gateway for the network. the gateway must be reachable during creation.
Optional
IPv6 prefix length for the interface, if it uses an IPv6 address.
Optional.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Optional.
Valid values are:
value | Description |
---|---|
0 |
Host configuration is unknown. |
1 |
A manually defined individual host system. |
2 |
All the hosts in a subnet. |
3 |
A netgroup, used for NFS access. Netgroups are defined by NIS, and only available when NIS is active. |
4 |
A RecoverPoint appliance host. |
5 |
An auto-managed host - the system or an external agent identifies and updates the information for this host. |
255 |
Host defined for Block Migration from VNX Platform system. |
Default to 1
Optional.
Description for the host.
Optional.
Operating system running on the host.
Required.
IP address for the host.
Optional.
Initiator's IQN for the host.
Optional.
WWNs for the host.
Optional.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Optional.
Indicates whether the I/O limit policy is absolute or density-based.
Valid values are:
value | Description |
---|---|
1 |
Absolute Value |
2 |
Density-based Value |
Default to 1
.
Optional.
I/O limit rule description.
Optional.
Read/write IOPS limit.
Optional.
Read/write KB/s limit.
Optional.
Read/write density-based IOPS limit.
Optional. Read/write density-based KB/s limit.
optional. The percentage of read/write IOPS and/or KBPS over the limits a storage object is allowed to process during a spike in demand.
optional. How long a storage object is allowed to process burst traffic.
burst_time must be 1
to 60
.
optional.
How often a storage object is allowed to process burst traffic for the duration of burst time.
burst_frequency must be 1
to 24
.
Optional.
If not specified when declaring a resource,
its value will default to the title
of the resource.
Optional.
LUN description.
Optional.
Enable/disable thin provisioning.
Valid values are:
true
: Enable thin.false
: Disable thin.
Default to true
.
Required.
Specify LUN size in gigabyte.
Required.
Set pool of the LUN.
Optional.
Enable/disable LUN compression, only applicable for all-flash pool.
Optional.
Storage Processor (SP) that owns the LUN.
Valid values are:
value | Description |
---|---|
0 |
SPA |
1 |
SPB |
Optional.
IO limit settings for the LUN.
Optional.
Hosts which contain this LUN.
Simply fork the repo and send PR for your code change(also provide testing result of your change), remember to give a title and description of your PR.
peter.wang13 at emc.com
peter.wang13 at emc.com
- 0.1.0
- Initial release.
- 0.1.1
- Add license differential uploading.
- Pool expansion if new raid groups are added.