# \[Contribution\] HPE 3PAR Storage driver

**URL:** <https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412>\
**Category:** Integration Support\
**Created:** [July 2, 2019, 10:16pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412 "2019-07-02T22:16:04Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [July 2, 2019, 10:16pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/1 "2019-07-02T22:16:04Z")

</div>

Hello, [FeldHost™](https://www.feldhost.net/) like to announce the availability of a new HPE 3PAR storage driver for OpenNebula.

## Features

Support standard OpenNebula datastore operations:

- datastore configuration via CLI
- all Datastore MAD(DATASTORE\_MAD) and Transfer Manager MAD(TM\_MAD) functionality
- SYSTEM datastore
- TRIM/discard in the VM when the virtio-scsi driver is in use (require `DEV_PREFIX=sd` and `DISCARD=unmap`)
- disk images can be fully provisioned, thin provisioned, thin deduplicated, thin compressed or thin deduplicated and compressed RAW block devices
- support different 3PAR CPGs as separate datastores
- support for 3PAR Priority Optimization Policy (QoS)
- live VM snapshots
- live VM migrations

Project repository: [FeldHost Public Projects / OpenNebula HPE 3PAR Storage Driver · GitLab](https://gitlab.feldhost.cz/feldhost-public/one-addon-3par)

We also have sunstone integration done but in a separate project.

 ![09](https://canada1.discourse-cdn.com/flex031/uploads/opennebula/original/2X/1/15ed45a4b4a52e0c2555671fef2482498bb5b9ff.png)

 ![58](https://canada1.discourse-cdn.com/flex031/uploads/opennebula/original/2X/9/9ba8d95bf7ff4766780241206b26135442941fd0.png)

---

<div class="post-metadata">

**Author:** ![mabdou](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/mabdou/32/6432_2.png) [@mabdou](https://forum.opennebula.io/u/mabdou)\
**Post date:** [July 3, 2019, 9:04am UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/2 "2019-07-03T09:04:47Z")

</div>

This is great, Kristian!  
This would be great to officially include into the **OpenNebula Add-on Catalog**. Take a look at the steps that we have outlined for Add-on Catalog contribution, ([https://github.com/OpenNebula/one/wiki/How-to-participate-in-Add\_on-Development](https://github.com/OpenNebula/one/wiki/How-to-participate-in-Add_on-Development)). Once you complete the steps 1 through 4, let me know, and we will pick things up at step 5 to get the Add-on published in our Catalog and hosted on our GitHub.

Nice work!  
Michael

---

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [July 24, 2019, 7:50am UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/3 "2019-07-24T07:50:52Z")

</div>

Hi @mabdou, I think, that project has already done steps 1-4, so you can create repo in your namespace and assign me rights.

---

<div class="post-metadata">

**Author:** ![mabdou](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/mabdou/32/6432_2.png) [@mabdou](https://forum.opennebula.io/u/mabdou)\
**Post date:** [July 24, 2019, 9:54am UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/4 "2019-07-24T09:54:32Z")

</div>

That is great @feldsam ! We have created the repository for you on our OpenNebula GitHub - [https://github.com/OpenNebula/addon-3par](https://github.com/OpenNebula/addon-3par) . Now, you should work on creating the README doc and LICENSE file, as outlined in Step 6 of our documented procedures.  
We will assume that you are the Add-on leader.

Best.  
Michael

---

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [September 21, 2019, 8:35pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/5 "2019-09-21T20:35:55Z")

</div>

Hello, sources are pushed to provded repo. You can list addon in [catalog](https://github.com/OpenNebula/one/wiki/Add_ons-Catalog)

---

<div class="post-metadata">

**Author:** ![kvaps](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/kvaps/32/4496_2.png) [@kvaps](https://forum.opennebula.io/u/kvaps)\
**Post date:** [November 8, 2021, 12:01pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/6 "2021-11-08T12:01:15Z")

</div>

Hi @feldsam we at [WEDOS.cz](https://www.wedos.cz/) also going to use 3par driver.

I performed a fork of your project, since the existing driver didn’t fit our needs.

What have been done:

- Drop Fibre Channel support (if there was any)
- Disable soft-delete option by default
- Remove automatic installation script
- Switch to using Python3 instead of deprecated Python2
- Support modern monitoring format for OpenNebula \>=5.12, add LEGACY\_MONITORING option.
- Automatic setup hosts in 3par on demand, and perform iscsi login/logout operations
- Add ssh-agent support (OpenNebula \>v5.10)
- Add feature to save/restore VM state into 3par to VM driver
- Limit amount of connections to 3par device by specifying PORTALS\_NUM
- Add deploy/undeploy operations support to TM driver
- Parse API\_ENDPOINT and IP from datastore template
- Support migration between multiple 3pars (DS and TM)
- Added locking mechanism to perform some operations in bunch

The final patch contains [2,323 additions](https://github.com/wedos/opennebula-addon-3par/compare/upstream...master?expand=1) and [732 deletions](https://github.com/wedos/opennebula-addon-3par/compare/upstream...master?expand=1).

Let me know if you’d like to merge this to upstream. We can consider the opportunities or we’ll continue developing it as a separate project.

> **[GitHub - wedos/opennebula-addon-3par: The 3PAR datastore driver enables...](https://github.com/wedos/opennebula-addon-3par)**
>
> The 3PAR datastore driver enables OpenNebula to use a HPE 3PAR storage system for storing disk images. - GitHub - wedos/opennebula-addon-3par: The 3PAR datastore driver enables OpenNebula to use a...

---

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [November 8, 2021, 3:45pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/7 "2021-11-08T15:45:42Z")

</div>

Hi @kvaps, too many changes to merge it as is.

- FC support dropped
- too tight to your infrastructure - for example tm/clone clones image across 3par systems
- if you want to merge your changes, it has to be all configurable
- regarding locking, looks like, you can tm/clone only one VM at a time, we can provision 100 VMs at the same time because we leverage storage system clone functionality

---

<div class="post-metadata">

**Author:** ![kvaps](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/kvaps/32/4496_2.png) [@kvaps](https://forum.opennebula.io/u/kvaps)\
**Post date:** [November 8, 2021, 4:15pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/8 "2021-11-08T16:15:17Z")

</div>

> too many changes to merge it as is.

Yeah agree, for that reason I wanted to know your opinion if you’d like to have this merged some time.

> FC support dropped

Of course this can be configurable, it only depends on iscsiadm used in the `iscsi_login` and `iscsi_logout` functions.

Also I put `iscsiadm -m session --rescan` into `rescan_scsi_bus`, because without this it was not working for some reason in my environment (Ubuntu 20.04.2 LTS (Focal Fossa))

* * *

> too tight to your infrastructure - for example tm/clone clones image across 3par systems

This is not entirely true. You’re right that opportunity to copy images between 3pars were added, but in case if system\_ds is located in same 3par as images\_ds the simple copying in one 3par will be performed, right as it was before.

If you’re talking about the fact of changing `CLONE_TARGET=SELF` to `SYSTEM`, then my bad, I didn’t write about this change in changelog. Nevertheless I believe both options can exist.

But if I understood this correct, this option must persist in oned.conf configuration file and accordingly can’t be configurable per each datastore separately.

> regarding locking, looks like, you can tm/clone only one VM at a time, we can provision 100 VMs at the same time because we leverage storage system clone functionality

not exactly, locking was needed only for `tm/clone` and `datastore/clone` to support cases when image is copied between the different 3par systems. As in this case copying is performed using dd instead of using simple API calls. In case of copying in same 3par system the locking mechanism is not required.

> if you want to merge your changes, it has to be all configurable

Okay. I will clarify this question with my supervisors. And if they agree to invest my time in this I will do this 🙂

**One more question** : How would you like to get and review these changes: with one piece or should I devide them into many small patches?  
In case of success can you help me with testing this driver with FC?

---

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [November 8, 2021, 4:21pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/9 "2021-11-08T16:21:54Z")

</div>

I prefer to split changes into smaller patches, so we can merge and test them gradually. Regarding FC, yes I can help, we have a new 3PAR on the way for the DR site. We also plan to extend this driver by Peer Persistence/Remote Copy support.

---

<div class="post-metadata">

**Author:** ![atodorov\_storpool](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/atodorov_storpool/32/5327_2.png) [@atodorov\_storpool](https://forum.opennebula.io/u/atodorov_storpool)\
**Post date:** [November 9, 2021, 11:02am UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/10 "2021-11-09T11:02:10Z")

</div>

> [@kvaps](#):
>
> - Support modern monitoring format for OpenNebula \>=5.12, add LEGACY\_MONITORING option.

Just to note that this option was introduced in addon-storpool with the release of one-5.12. Later, I’ve figured out that the monitoring compatibility could be “auto-detected”. You could take a look at the latest [https://github.com/OpenNebula/addon-storpool/blob/master/tm/storpool/monitor#L47](https://github.com/OpenNebula/addon-storpool/blob/master/tm/storpool/monitor#L47) 😉

---

<div class="post-metadata">

**Author:** ![kvaps](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/kvaps/32/4496_2.png) [@kvaps](https://forum.opennebula.io/u/kvaps)\
**Post date:** [November 10, 2021, 6:35pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/11 "2021-11-10T18:35:42Z")

</div>

@atodorov_storpool, such an elegant solution, thanks for pointing out! 🤗  
I’m going to implement it in my [linstor\_un](https://github.com/OpenNebula/addon-linstor_un) and [3par](https://github.com/wedos/opennebula-addon-3par) drivers

---

<div class="post-metadata">

**Author:** ![kvaps](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/kvaps/32/4496_2.png) [@kvaps](https://forum.opennebula.io/u/kvaps)\
**Post date:** [November 17, 2021, 8:12pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/12 "2021-11-17T20:12:04Z")

</div>

@feldsam, is there any specific reason to require `user_friendly_names: no` setting for multipath?  
I just found that `/dev/disk/by-id/wwn-0x$WWN` paths are working fine to me:

> <https://github.com/kvaps/opennebula-addon-3par/commit/e1223052e5a9d526cbe24429195603f3aa0a9071>

proof:

```auto
# multipath -l | awk '/^3/ {print $1}' | sed 's/^3//' | xargs -I {} ls -lh /dev/mapper/3{} /dev/disk/by-id/wwn-0x{}
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000a000027bbd -> ../../dm-36
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000a000027bbd -> ../dm-36
lrwxrwxrwx 1 root root 11 Nov 5 15:54 /dev/disk/by-id/wwn-0x60002ac000000000000001a300027ba6 -> ../../dm-47
lrwxrwxrwx 1 root root 8 Nov 5 15:54 /dev/mapper/360002ac000000000000001a300027ba6 -> ../dm-47
lrwxrwxrwx 1 root root 11 Nov 5 15:59 /dev/disk/by-id/wwn-0x60002ac0000000000000018200027ba6 -> ../../dm-23
lrwxrwxrwx 1 root root 8 Nov 5 15:59 /dev/mapper/360002ac0000000000000018200027ba6 -> ../dm-23
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000e600027bbd -> ../../dm-26
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000e600027bbd -> ../dm-26
lrwxrwxrwx 1 root root 11 Nov 5 15:54 /dev/disk/by-id/wwn-0x60002ac0000000000000017f00027ba6 -> ../../dm-21
lrwxrwxrwx 1 root root 8 Nov 5 15:54 /dev/mapper/360002ac0000000000000017f00027ba6 -> ../dm-21
lrwxrwxrwx 1 root root 11 Nov 5 15:40 /dev/disk/by-id/wwn-0x60002ac0000000000000009f00027bbd -> ../../dm-29
lrwxrwxrwx 1 root root 8 Nov 5 15:40 /dev/mapper/360002ac0000000000000009f00027bbd -> ../dm-29
lrwxrwxrwx 1 root root 11 Nov 5 15:54 /dev/disk/by-id/wwn-0x60002ac000000000000000d800027ba6 -> ../../dm-14
lrwxrwxrwx 1 root root 8 Nov 5 15:54 /dev/mapper/360002ac000000000000000d800027ba6 -> ../dm-14
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000c900027bbd -> ../../dm-40
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000c900027bbd -> ../dm-40
lrwxrwxrwx 1 root root 11 Oct 23 17:08 /dev/disk/by-id/wwn-0x60002ac000000000000001a200027ba6 -> ../../dm-42
lrwxrwxrwx 1 root root 8 Oct 23 17:08 /dev/mapper/360002ac000000000000001a200027ba6 -> ../dm-42
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000c200027bbd -> ../../dm-22
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000c200027bbd -> ../dm-22
lrwxrwxrwx 1 root root 11 Nov 5 15:39 /dev/disk/by-id/wwn-0x60002ac0000000000000006700027bbd -> ../../dm-17
lrwxrwxrwx 1 root root 8 Nov 5 15:39 /dev/mapper/360002ac0000000000000006700027bbd -> ../dm-17
lrwxrwxrwx 1 root root 11 Oct 21 17:53 /dev/disk/by-id/wwn-0x60002ac000000000000000d900027ba6 -> ../../dm-15
lrwxrwxrwx 1 root root 8 Oct 21 17:53 /dev/mapper/360002ac000000000000000d900027ba6 -> ../dm-15
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000c700027bbd -> ../../dm-24
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000c700027bbd -> ../dm-24
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000bd00027bbd -> ../../dm-32
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000bd00027bbd -> ../dm-32
lrwxrwxrwx 1 root root 11 Nov 5 15:52 /dev/disk/by-id/wwn-0x60002ac000000000000000bf00027ba6 -> ../../dm-16
lrwxrwxrwx 1 root root 8 Nov 5 15:52 /dev/mapper/360002ac000000000000000bf00027ba6 -> ../dm-16
lrwxrwxrwx 1 root root 11 Nov 5 15:41 /dev/disk/by-id/wwn-0x60002ac000000000000000ad00027bbd -> ../../dm-48
lrwxrwxrwx 1 root root 8 Nov 5 15:41 /dev/mapper/360002ac000000000000000ad00027bbd -> ../dm-48
lrwxrwxrwx 1 root root 11 Nov 5 15:54 /dev/disk/by-id/wwn-0x60002ac0000000000000019200027ba6 -> ../../dm-28
lrwxrwxrwx 1 root root 8 Nov 5 15:54 /dev/mapper/360002ac0000000000000019200027ba6 -> ../dm-28

```

---

<div class="post-metadata">

**Author:** ![feldsam](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/feldsam/32/4441_2.png) [@feldsam](https://forum.opennebula.io/u/feldsam)\
**Post date:** [November 17, 2021, 9:17pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/13 "2021-11-17T21:17:53Z")

</div>

hmm, interesting, on my system these symlinks are pointing to …/sd\*\*

```auto
lrwxrwxrwx 1 root root 10 Sep 22 09:27 /dev/disk/by-id/wwn-0x60002ac000000000000108330001ec48 -> ../../sdkc
lrwxrwxrwx 1 root root 9 Sep 19 23:59 /dev/mapper/360002ac000000000000108330001ec48 -> ../dm-128
lrwxrwxrwx 1 root root 10 Nov 8 20:30 /dev/disk/by-id/wwn-0x60002ac0000000000000f8d70001ec48 -> ../../sdhm
lrwxrwxrwx 1 root root 8 Aug 16 16:05 /dev/mapper/360002ac0000000000000f8d70001ec48 -> ../dm-95
lrwxrwxrwx 1 root root 10 Aug 10 09:31 /dev/disk/by-id/wwn-0x60002ac0000000000000f6340001ec48 -> ../../sdbl
lrwxrwxrwx 1 root root 8 Aug 10 09:31 /dev/mapper/360002ac0000000000000f6340001ec48 -> ../dm-24
lrwxrwxrwx 1 root root 10 Mar 17 2021 /dev/disk/by-id/wwn-0x60002ac0000000000000a9f70001ec48 -> ../../sdjq
lrwxrwxrwx 1 root root 9 Mar 17 2021 /dev/mapper/360002ac0000000000000a9f70001ec48 -> ../dm-126
lrwxrwxrwx 1 root root 10 Oct 4 11:58 /dev/disk/by-id/wwn-0x60002ac000000000000109010001ec48 -> ../../sdkx
lrwxrwxrwx 1 root root 9 Sep 21 12:10 /dev/mapper/360002ac000000000000109010001ec48 -> ../dm-139
lrwxrwxrwx 1 root root 11 Sep 30 16:23 /dev/disk/by-id/wwn-0x60002ac000000000000046d80001ec48 -> ../../sdauk
lrwxrwxrwx 1 root root 9 Mar 17 2021 /dev/mapper/360002ac000000000000046d80001ec48 -> ../dm-607
lrwxrwxrwx 1 root root 11 Sep 19 23:33 /dev/disk/by-id/wwn-0x60002ac000000000000013690001ec48 -> ../../sdaye
lrwxrwxrwx 1 root root 9 Mar 17 2021 /dev/mapper/360002ac000000000000013690001ec48 -> ../dm-653

```

---

<div class="post-metadata">

**Author:** ![FrancJP](https://yyz1.discourse-cdn.com/flex031/user_avatar/forum.opennebula.io/francjp/32/7690_2.png) [@FrancJP](https://forum.opennebula.io/u/FrancJP)\
**Post date:** [June 25, 2025, 4:05pm UTC](https://forum.opennebula.io/t/contribution-hpe-3par-storage-driver/7412/14 "2025-06-25T16:05:42Z")

</div>

Closed on June 25, 2025, 4:05pm UTC


