{"id":20050456,"url":"https://github.com/thecodeteam/puppet-unity","last_synced_at":"2025-06-17T05:05:45.191Z","repository":{"id":57664727,"uuid":"108252664","full_name":"thecodeteam/puppet-unity","owner":"thecodeteam","description":"Puppet module for Unity system","archived":false,"fork":false,"pushed_at":"2017-10-28T01:37:19.000Z","size":64,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-06-03T17:13:09.220Z","etag":null,"topics":["puppet-module","unity"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thecodeteam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-25T10:05:13.000Z","updated_at":"2020-11-13T10:00:34.000Z","dependencies_parsed_at":"2022-09-14T21:40:41.783Z","dependency_job_id":null,"html_url":"https://github.com/thecodeteam/puppet-unity","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thecodeteam/puppet-unity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodeteam%2Fpuppet-unity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodeteam%2Fpuppet-unity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodeteam%2Fpuppet-unity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodeteam%2Fpuppet-unity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thecodeteam","download_url":"https://codeload.github.com/thecodeteam/puppet-unity/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodeteam%2Fpuppet-unity/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260294467,"owners_count":22987623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["puppet-module","unity"],"created_at":"2024-11-13T11:57:20.900Z","updated_at":"2025-06-17T05:05:45.163Z","avatar_url":"https://github.com/thecodeteam.png","language":"Ruby","readme":"# Puppet module for Unity system\n\n#### Table of Contents\n\n- [Overview](#description)\n- [Setup](#setup)\n    * [Requirements](#requirements)\n    * [Installation](#Installation)\n- [Usage](#usage)\n- [Reference](#reference)\n    * [Types](#types)\n    * [Parameters](#parameters)\n- [Limitations](#limitations)\n- [Development](#development)\n- [Contributors](#contributors)\n- [Contact](#contact)\n- [Release-notes](#release-notes)\n\n## Overview\n\nThe `dellemc-unity` module manages DellEMC Unity storage resources.\n\nThe Unity storage system by DellEMC delivers the ultimate in simplicity and value, enabling your organization to speed\ndeployment, streamline management and seamlessly tier storage to the cloud. The `dellemc-unity` module allows you to\nconfigure and deploy the Unity via Puppet code.\n\n## License\n\n[Apache License version 2](LICENSE)\n\n\n## Setup\n\n### Requirements\n\n * Puppet `3.8` or greater\n * Ruby `1.9` or greater\n * rubypython `0.6.4` or greater (The bridge between Ruby and Python)\n * Python `2.7`.\n * Storops, 0.5.1 or greater (Python storage management library for Unity and VNX.)\n\n\n- [rubypython](https://rubygems.org/gems/rubypython) is a bridge between the Ruby and\nPython interpreters. It enables the interaction with Python based [storops](https://github.com/emc-openstack/storops)\nlibrary, dramatically eases the effort to extend the `dellemc-unity` module.\n\n- [storops](https://github.com/emc-openstack/storops) is a Python storage management library for\nVNX and Unity. It needs to be manually installed in Puppet agent/master.\n\n```bash\npip install storops\n```\n\n### Installation\nBefore proceeding, Ensure you have installed the required `Ruby` and `Puppet`.\n\n1. Install `rubypython` via gem\n\n\u003e On Ubuntu/Debian, make sure the `libffi-dev` is installed, since `ffi` (one of `rubypython`'s dependencies) is a native\nextension. To install it, use `sudo apt-get install libffi-dev`\n\n\u003e For some puppet distros, a build-in `ruby` interpreter and `gem` are shipped with puppet together, so make sure the right\n\u003e `gem` is used to install ruby related dependencies. In this case, you can use following command to install `rubypython`:\n\u003e  ```bash\n\u003e  /opt/puppetlabs/puppet/bin/gem install rubypython\n\u003e  ```\n\n```bash\ngem install rubypython\n```\n\n2. Install `storops` from [pypi](https://pypi.python.org/pypi)\n\n```bash\npip install storops\n```\n\n3. Install `dellemc-unity` puppet module.\n\n```bash\npuppet module install dellemc-unity\n```\nor install from a local source tarball.\n\n```bash\npuppet module install \".\\dellemc-unity-x.y.z.tar.gz\"\n```\n\n\n## Usage\n\n* Define a managed Unity system\n\n```puppet\nunity_system { 'FNM12345678901':\n  ip       =\u003e '192.168.1.50',\n  user     =\u003e 'admin',\n  password =\u003e 'password',\n  ensure =\u003e present,\n}\n```\n\nThe defined system `Unity_system['FNM12345678901']` then can be passed to any Unity resources.\n\n\n* Upload a license\n\n```puppet\nunity_license{ '/path/to/the/license.lic':\n  unity_system =\u003e Unity_system['FNM12345678901'],\n  ensure =\u003e present,\n}\n```\n\nNote: the path separator in the `title` must be `/` even using on Windows agent.\n* Create a pool\n\n```puppet\nunity_pool { 'puppet_pool':\n  unity_system =\u003e Unity_system['FNM12345678901'],\n  description =\u003e 'created by puppet module',\n  raid_groups =\u003e [{\n    disk_group =\u003e 'dg_15',\n    raid_type =\u003e 1,\n    stripe_width =\u003e 0,\n    disk_num =\u003e 5,\n  }],\n  ensure =\u003e present,\n}\n```\n\n* Create a iSCSI portal on ethernet port\n\n```puppet\nunity_iscsi_portal { '10.244.213.245':\n  unity_system  =\u003e Unity_system['FNM12345678901'],\n  ethernet_port =\u003e 'spa_eth3',\n  netmask       =\u003e '255.255.255.0',\n  vlan          =\u003e 133,\n  gateway       =\u003e '10.244.213.1',\n  ensure        =\u003e present,\n}\n```\n\n* Create a Host\n\n```puppet\nunity_host { 'my_host':\n  unity_system =\u003e Unity_system['FNM12345678901'],\n  description  =\u003e 'Created by puppet',\n  ip           =\u003e '192.168.1.139',\n  os           =\u003e 'Ubuntu16',\n  host_type    =\u003e 1,\n  iqn          =\u003e 'iqn.1993-08.org.debian:01:unity-puppet-host',\n  wwns         =\u003e ['20:00:00:90:FA:53:4C:D1:10:00:00:90:FA:53:4C:D3',\n     '20:00:00:90:FA:53:4C:D1:10:00:00:90:FA:53:4C:D4'],\n  ensure       =\u003e present,\n}\n```\n\n* Create a io limit policy\n\n```puppet\n# Create a Unity io limit policy (absolute limit)\nunity_io_limit_policy { 'puppet_policy':\n  unity_system =\u003e Unity_system['FNM12345678901'],\n  policy_type =\u003e 1,\n  description =\u003e 'Created by puppet 12',\n  max_iops =\u003e 1000,\n  max_kbps =\u003e 20480,\n  burst_rate =\u003e 50,\n  burst_time =\u003e 10,\n  burst_frequency =\u003e 2,\n}\n```\n\nThe meaning for above burst settings is: **50% for 10 minute(s) resetting every 2 hour(s)**.\n\n* Create a LUN\n\n```puppet\nunity_lun { 'puppet_lun':\n  unity_system    =\u003e Unity_system['FNM12345678901'],\n  pool            =\u003e Unity_pool['puppet_pool'],\n  size            =\u003e 15,\n  thin            =\u003e true,\n  compression     =\u003e false,\n  sp              =\u003e 0,\n  description     =\u003e \"Created by puppet_unity.\",\n  io_limit_policy =\u003e Unity_io_limit_policy['puppet_policy'],\n  hosts           =\u003e [Unity_host['my_host']],\n  ensure          =\u003e present,\n}\n```\n\n* Define multiple Unity system in manifest file\n\nAdministrator can define multiple systems and manage the resources on systems via a single manifest file.\n\nPlease refer to the example file here: [example_multiple_systems](examples/example_multiple_systems.pp)\n\n\n## Reference\n\n### Types\n\n * `unity_system`: Define a Unity system.\n * `unity_license`: Upload a license to a defined Unity system.\n * `unity_pool`: Create, modify, expand or destroy a storage pool.\n * `unity_iscsi_portal`: Create, update, or destroy a iSCSI portal. Applicable for both IPv4 and IPv6.\n * `unity_host`: Create, update, or destroy a Unity host.\n * `unity_io_limit_policy`: Create, update, or destroy a Unity IO limit policy.\n * `unity_lun`: Create, update, or destroy a Unity LUN.\n\nYou can reference the examples for each resource type under the source code folder: [examples](examples)\n\n### Parameters\n\n#### Type: `unity_system`\n\n##### `name`\nOptional.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `ip`\n\nRequired. \n\nThe management IP of Unity.\n##### `username`\n\nRequired. \n\nThe username of Unity.\n##### `password`\n\nRequired. \n\nThe password of Unity.\n\n#### Type: `unity_license`\n\n##### `license_file`\nOptional.\n\nThe absolute path of the license file.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `unity_system`\nRequired. \n\nThe Unity system reference.\n\n##### `ensure`\nRequired. \n\n`present` will upload the license for the referenced Unity system.\n\n#### Type: `unity_pool`\n\n##### `name`\nOptional.\n\nThe name of the pool.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `ensure`\nRequired.\n\n`present` will create the pool if absent.\n`absent` will delete the pool if present\n\n##### `description`\n\nOptional.\n\nThe description of the pool.\n\n##### `raid_groups`\n\nRequired.\n\na list of `Hash` is required for the pool.\n```puppet\n...\nunity_pool { 'puppet_pool':\n  unity_system =\u003e Unity_system['FNM12345678901'],\n  description  =\u003e 'created by puppet module',\n  raid_groups  =\u003e [{\n    disk_group   =\u003e 'dg_15',\n    raid_type    =\u003e 1,\n    stripe_width =\u003e 0,\n    disk_num     =\u003e 5,\n  }],\n  alert_threshold =\u003e 80,\n  is_snap_harvest_enabled =\u003e true,\n  is_harvest_enabled =\u003e true,\n  ensure       =\u003e present,\n}\n...\n```\nParameters in `raid_groups`:\n\n * `disk_group`: the id of disk group of the Unity system.\n\n\n * `raid_type`: the raid type of pool.\n\n\nValid values are:\n\n| Value   | Description |\n|---------|-------------|\n| `0`     | None        |\n| `1`     | RAID5       |\n| `2`     | RAID0       |\n| `3`     | RAID1       |\n| `4`     | RAID3       |\n| `7`     | RAID10      |\n| `10`    | RAID6       |\n| `48879` | Automatic   |\n\n * `stripe_width`: RAID group stripe widths, including parity or mirror disks.\n\n| Value | Description                                                                       |\n|-------|-----------------------------------------------------------------------------------|\n| `0`   | BestFit value is used in automatic selection of stripe configuration.             |\n| `2`   | A 2 disk group, usable in RAID10 1+1 configuration.                               |\n| `4`   | A 4 disk group, usable in RAID10 2+2 configuration.                               |\n| `5`   | A 5 disk group, usable in RAID5 4+1 configuration.                                |\n| `6`   | A 6 disk group, usable in RAID6 4+2 and RAID10 3+3 configurations.                |\n| `8`   | A 8 disk group, usable in RAID6 6+2 and RAID10 4+4 configurations.                |\n| `9`   | A 9 disk group, usable in RAID5 8+1 configuration.                                |\n| `10`  | A 10 disk group, usable in RAID6 8+2 and RAID10 5+5 configurations.               |\n| `12`  | A 12 disk group, usable in RAID6 10+2 and RAID10 6+6 configurations.              |\n| `13`  | A 13 disk group, usable in RAID5 12+1 configuration.                              |\n| `14`  | A 14 disk group, usable in RAID6 12+2 configuration.                              |\n| `15`  | raid strip width including parity disks, can be used in RAID6 14+2 configuration. |\n\n\n * `disk_num`: Number of disks.\n \nFor pool expansion, user can either increase the `disk_num` or add new raid group in `raid_groups`.\n \n##### `alert_threshold`\n\n\nOptional.\n\nThreshold at which the system will generate alerts about the free space in the pool, specified as a percentage.\n\n##### `is_harvest_enabled`\nOptional\n\nEnable/disable pool harvesting.\n\n##### `is_snap_harvest_enabled`\nOptional\n\nEnable/disable pool snapshot harvesting.\n\n\n##### `is_harvest_enabled`\nOptional\n\nEnable/disable pool harvesting.\n\n##### `pool_harvest_high_threshold`\n\nOptional\n\nPool used space high threshold at which the system will automatically starts to delete snapshots in the pool.\n\n##### `pool_harvest_low_threshold`\nOptional\n\nPool used space low threshold under which the system will automatically stop deletion of snapshots in the pool.\n\n##### `snap_harvest_high_threshold`\nOptional\n\nSnapshot used space high threshold at which the system automatically starts to delete snapshots in the pool.\n\n##### `snap_harvest_low_threshold`\nOptional\n\nSnapshot used space low threshold below which the system will stop automatically deleting snapshots in the pool.\n\n##### `is_fast_cache_enabled`\nOptional\n\nEnable/disable FAST Cache for this pool\n\n##### `is_fastvp_enabled`\nOptional\n\nEnable/disable scheduled data relocations for this pool.\n\n##### `pool_type`\nOptional\n\nCreate traditional/dynamic pool\n\nValid values are:\n\n| Value   | Description       |\n|---------|-------------------|\n| `1`     | traditional pool  |\n| `2`     | dynamic pool      |\n\n\n#### Type: `unity_iscsi_portal`\n\n##### `ip`\n\nRequired\n\nIP of the iSCSI portal\n\n##### `ethernet_port`\n\nRequired\n\nThe ethernet port ID for the iSCSI portal.\n\nsuch as `spa_eth2`, `spb_eth3`.\n\n##### `netmask`\n\nRequired \n\nThe netmask for the iSCSI portal\n\nIt can be a address `255.255.255.0` or a length `24`.\n\n##### `vlan`\n\nOptional\n\nThe VLAN identifier for the iSCSI portal.\n\n##### `gateway`\n\nOptional\n\nThe gateway for the network. the gateway must be reachable during creation.\n\n\n##### `v6_prefix_len`\n\nOptional\n\nIPv6 prefix length for the interface, if it uses an IPv6 address.\n\n#### Type: `unity_host`\n\n##### `name`\nOptional.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `host_type`\nOptional.\n\nValid values are:\n\n| value | Description                                                                                                  |\n|-------|--------------------------------------------------------------------------------------------------------------|\n| `0`   | Host configuration is unknown.                                                                               |\n| `1`   | A manually defined individual host system.                                                                   |\n| `2`   | All the hosts in a subnet.                                                                                   |\n| `3`   | A netgroup, used for NFS access. Netgroups are defined by NIS, and only available when NIS is active.        |\n| `4`   | A RecoverPoint appliance host.                                                                               |\n| `5`   | An auto-managed host - the system or an external agent identifies and updates the information for this host. |\n| `255` | Host defined for Block Migration from VNX Platform system.                                                   |\n\nDefault to `1`\n\n##### `description`\nOptional.\n\nDescription for the host.\n\n##### `os`\nOptional.\n\nOperating system running on the host.\n\n##### `ip`\nRequired.\n\nIP address for the host.\n\n##### `iqn`\nOptional.\n\nInitiator's IQN for the host.\n\n##### `wwns`\n\nOptional.\n\nWWNs for the host.\n\n\n#### Type: `unity_io_limit_policy`\n\n##### `name`\nOptional.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `policy_type`\nOptional.\n\nIndicates whether the I/O limit policy is absolute or density-based.\n\nValid values are:\n\n| value | Description         |\n|-------|---------------------|\n| `1`   | Absolute Value      |\n| `2`   | Density-based Value |\n\n\nDefault to `1`.\n\n##### `description`\nOptional.\n\nI/O limit rule description.\n\n##### `max_iops`\nOptional.\n\nRead/write IOPS limit.\n\n##### `max_kbps`\nOptional.\n\nRead/write KB/s limit.\n\n##### `max_iops_density`\nOptional.\n\nRead/write density-based IOPS limit.\n\n##### `max_kbps_density`\n\nOptional.\nRead/write density-based KB/s limit.\n\n##### `burst_rate`\noptional.\nThe percentage of read/write IOPS and/or KBPS over the limits a storage object is allowed to process during a spike in demand.\n\n##### `burst_time`\noptional.\nHow long a storage object is allowed to process burst traffic.\n\nburst_time must be `1` to `60`.\n\n##### `burst_frequency`\noptional.\n\nHow often a storage object is allowed to process burst traffic for the duration of burst time.\n\nburst_frequency must be `1` to `24`.\n#### Type: `unity_lun`\n\n##### `name`\nOptional.\n\nIf not specified when declaring a resource,\nits value will default to the `title` of the resource.\n\n##### `description`\nOptional.\n\nLUN description.\n\n##### `thin`\nOptional.\n\nEnable/disable thin provisioning.\n\nValid values are:\n\n- `true`: Enable thin.\n- `false`: Disable thin.\n\nDefault to `true`.\n\n##### `size`\nRequired.\n\nSpecify LUN size in gigabyte.\n\n\n##### `pool`\nRequired.\n\nSet pool of the LUN.\n\n##### `compression`\nOptional.\n\nEnable/disable LUN compression, only applicable for all-flash pool.\n\n\n##### `sp`\nOptional.\n\nStorage Processor (SP) that owns the LUN.\n\nValid values are:\n\n| value | Description |\n|-------|-------------|\n| `0`   | SPA         |\n| `1`   | SPB         |\n\n\n##### `io_limit_policy`\nOptional.\n\nIO limit settings for the LUN.\n\n##### `hosts`\nOptional.\n\nHosts which contain this LUN.\n\n\n## Limitations\n\n\n## Development\n\nSimply 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.\n\n## Contributors\n\npeter.wang13 at emc.com\n\n## Contact\n\npeter.wang13 at emc.com\n\n## Release Notes\n\n- 0.1.0\n    * Initial release.\n- 0.1.1\n    * Add license differential uploading.\n    * Pool expansion if new raid groups are added.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodeteam%2Fpuppet-unity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthecodeteam%2Fpuppet-unity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodeteam%2Fpuppet-unity/lists"}