Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thecodeteam/puppet-unity
Puppet module for Unity system
https://github.com/thecodeteam/puppet-unity
puppet-module unity
Last synced: about 1 month ago
JSON representation
Puppet module for Unity system
- Host: GitHub
- URL: https://github.com/thecodeteam/puppet-unity
- Owner: thecodeteam
- License: apache-2.0
- Created: 2017-10-25T10:05:13.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2017-10-28T01:37:19.000Z (about 7 years ago)
- Last Synced: 2024-10-30T17:11:46.809Z (about 2 months ago)
- Topics: puppet-module, unity
- Language: Ruby
- Homepage:
- Size: 62.5 KB
- Stars: 2
- Watchers: 8
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Puppet module for Unity system
#### Table of Contents
- [Overview](#description)
- [Setup](#setup)
* [Requirements](#requirements)
* [Installation](#Installation)
- [Usage](#usage)
- [Reference](#reference)
* [Types](#types)
* [Parameters](#parameters)
- [Limitations](#limitations)
- [Development](#development)
- [Contributors](#contributors)
- [Contact](#contact)
- [Release-notes](#release-notes)## Overview
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.## License
[Apache License version 2](LICENSE)
## Setup
### Requirements
* 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](https://rubygems.org/gems/rubypython) is a bridge between the Ruby and
Python interpreters. It enables the interaction with Python based [storops](https://github.com/emc-openstack/storops)
library, dramatically eases the effort to extend the `dellemc-unity` module.- [storops](https://github.com/emc-openstack/storops) is a Python storage management library for
VNX and Unity. It needs to be manually installed in Puppet agent/master.```bash
pip install storops
```### Installation
Before proceeding, Ensure you have installed the required `Ruby` and `Puppet`.1. Install `rubypython` via gem
> On Ubuntu/Debian, make sure the `libffi-dev` is installed, since `ffi` (one of `rubypython`'s dependencies) is a native
extension. To install it, use `sudo apt-get install libffi-dev`> For some puppet distros, a build-in `ruby` interpreter and `gem` are shipped with puppet together, so make sure the right
> `gem` is used to install ruby related dependencies. In this case, you can use following command to install `rubypython`:
> ```bash
> /opt/puppetlabs/puppet/bin/gem install rubypython
> ``````bash
gem install rubypython
```2. Install `storops` from [pypi](https://pypi.python.org/pypi)
```bash
pip install storops
```3. Install `dellemc-unity` puppet module.
```bash
puppet module install dellemc-unity
```
or install from a local source tarball.```bash
puppet module install ".\dellemc-unity-x.y.z.tar.gz"
```## Usage
* Define a managed Unity system
```puppet
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
```puppet
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```puppet
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
```puppet
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
```puppet
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
```puppet
# 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
```puppet
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](examples/example_multiple_systems.pp)
## Reference
### Types
* `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](examples)
### Parameters
#### Type: `unity_system`
##### `name`
Optional.If not specified when declaring a resource,
its value will default to the `title` of the resource.##### `ip`
Required.
The management IP of Unity.
##### `username`Required.
The username of Unity.
##### `password`Required.
The password of Unity.
#### Type: `unity_license`
##### `license_file`
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.##### `unity_system`
Required.The Unity system reference.
##### `ensure`
Required.`present` will upload the license for the referenced Unity system.
#### Type: `unity_pool`
##### `name`
Optional.The name of the pool.
If not specified when declaring a resource,
its value will default to the `title` of the resource.##### `ensure`
Required.`present` will create the pool if absent.
`absent` will delete the pool if present##### `description`
Optional.
The description of the pool.
##### `raid_groups`
Required.
a list of `Hash` is required for the pool.
```puppet
...
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`.
##### `alert_threshold`Optional.
Threshold at which the system will generate alerts about the free space in the pool, specified as a percentage.
##### `is_harvest_enabled`
OptionalEnable/disable pool harvesting.
##### `is_snap_harvest_enabled`
OptionalEnable/disable pool snapshot harvesting.
##### `is_harvest_enabled`
OptionalEnable/disable pool harvesting.
##### `pool_harvest_high_threshold`
Optional
Pool used space high threshold at which the system will automatically starts to delete snapshots in the pool.
##### `pool_harvest_low_threshold`
OptionalPool used space low threshold under which the system will automatically stop deletion of snapshots in the pool.
##### `snap_harvest_high_threshold`
OptionalSnapshot used space high threshold at which the system automatically starts to delete snapshots in the pool.
##### `snap_harvest_low_threshold`
OptionalSnapshot used space low threshold below which the system will stop automatically deleting snapshots in the pool.
##### `is_fast_cache_enabled`
OptionalEnable/disable FAST Cache for this pool
##### `is_fastvp_enabled`
OptionalEnable/disable scheduled data relocations for this pool.
##### `pool_type`
OptionalCreate traditional/dynamic pool
Valid values are:
| Value | Description |
|---------|-------------------|
| `1` | traditional pool |
| `2` | dynamic pool |#### Type: `unity_iscsi_portal`
##### `ip`
Required
IP of the iSCSI portal
##### `ethernet_port`
Required
The ethernet port ID for the iSCSI portal.
such as `spa_eth2`, `spb_eth3`.
##### `netmask`
Required
The netmask for the iSCSI portal
It can be a address `255.255.255.0` or a length `24`.
##### `vlan`
Optional
The VLAN identifier for the iSCSI portal.
##### `gateway`
Optional
The gateway for the network. the gateway must be reachable during creation.
##### `v6_prefix_len`
Optional
IPv6 prefix length for the interface, if it uses an IPv6 address.
#### Type: `unity_host`
##### `name`
Optional.If not specified when declaring a resource,
its value will default to the `title` of the resource.##### `host_type`
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`
##### `description`
Optional.Description for the host.
##### `os`
Optional.Operating system running on the host.
##### `ip`
Required.IP address for the host.
##### `iqn`
Optional.Initiator's IQN for the host.
##### `wwns`
Optional.
WWNs for the host.
#### Type: `unity_io_limit_policy`
##### `name`
Optional.If not specified when declaring a resource,
its value will default to the `title` of the resource.##### `policy_type`
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`.
##### `description`
Optional.I/O limit rule description.
##### `max_iops`
Optional.Read/write IOPS limit.
##### `max_kbps`
Optional.Read/write KB/s limit.
##### `max_iops_density`
Optional.Read/write density-based IOPS limit.
##### `max_kbps_density`
Optional.
Read/write density-based KB/s limit.##### `burst_rate`
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.##### `burst_time`
optional.
How long a storage object is allowed to process burst traffic.burst_time must be `1` to `60`.
##### `burst_frequency`
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`.
#### Type: `unity_lun`##### `name`
Optional.If not specified when declaring a resource,
its value will default to the `title` of the resource.##### `description`
Optional.LUN description.
##### `thin`
Optional.Enable/disable thin provisioning.
Valid values are:
- `true`: Enable thin.
- `false`: Disable thin.Default to `true`.
##### `size`
Required.Specify LUN size in gigabyte.
##### `pool`
Required.Set pool of the LUN.
##### `compression`
Optional.Enable/disable LUN compression, only applicable for all-flash pool.
##### `sp`
Optional.Storage Processor (SP) that owns the LUN.
Valid values are:
| value | Description |
|-------|-------------|
| `0` | SPA |
| `1` | SPB |##### `io_limit_policy`
Optional.IO limit settings for the LUN.
##### `hosts`
Optional.Hosts which contain this LUN.
## Limitations
## Development
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.
## Contributors
peter.wang13 at emc.com
## Contact
peter.wang13 at emc.com
## Release Notes
- 0.1.0
* Initial release.
- 0.1.1
* Add license differential uploading.
* Pool expansion if new raid groups are added.