+
+ | Plugin Action |
+ CloudStack Action |
+ management/agent |
+ impl. details |
+
+
+ | Create ROOT volume from ISO |
+ create VM from ISO |
+ management |
+ createVolumeAsync |
+
+
+ | Create ROOT volume from Template |
+ create VM from Template |
+ management + agent |
+ copyAsync (T => T, T => V) |
+
+
+ | Create DATA volume |
+ create Volume |
+ management |
+ createVolumeAsync |
+
+
+ | Attach ROOT/DATA volume |
+ start VM (+attach/detach Volume) |
+ agent |
+ connectPhysicalDisk |
+
+
+ | Detach ROOT/DATA volume |
+ stop VM |
+ agent |
+ disconnectPhysicalDiskByPath |
+
+
+ | |
+ Migrate VM |
+ agent |
+ attach + detach |
+
+
+ | Delete ROOT volume |
+ destroy VM (expunge) |
+ management |
+ deleteAsync |
+
+
+ | Delete DATA volume |
+ delete Volume (detached) |
+ management |
+ deleteAsync |
+
+
+ | Create ROOT/DATA volume snapshot |
+ snapshot volume |
+ management + agent |
+ takeSnapshot + copyAsync (S => S) |
+
+
+ | Create volume from snapshoot |
+ create volume from snapshot |
+ management + agent(?) |
+ copyAsync (S => V) |
+
+
+ | Create TEMPLATE from ROOT volume |
+ create template from volume |
+ management + agent |
+ copyAsync (V => T) |
+
+
+ | Create TEMPLATE from snapshot |
+ create template from snapshot |
+ SECONDARY STORAGE |
+ |
+
+
+ | Download volume |
+ download volume |
+ management + agent |
+ copyAsync (V => V) |
+
+
+ | Revert ROOT/DATA volume to snapshot |
+ revert to snapshot |
+ management |
+ revertSnapshot |
+
+
+ | (Live) resize ROOT/DATA volume |
+ resize volume |
+ management + agent |
+ resize + StorpoolResizeCmd |
+
+
+ | Delete SNAPSHOT (ROOT/DATA) |
+ delete snapshot |
+ management |
+ StorpoolSnapshotStrategy |
+
+
+ | Delete TEMPLATE |
+ delete template |
+ agent |
+ deletePhysicalDisk |
+
+
+ | migrate VM/volume |
+ migrate VM/volume to another storage |
+ management/management + agent |
+ copyAsync (V => V) |
+
+
+ | VM snapshot |
+ group snapshot of VM's disks |
+ management |
+ StorpoolVMSnapshotStrategy takeVMSnapshot |
+
+
+ | revert VM snapshot |
+ revert group snapshot of VM's disks |
+ management |
+ StorpoolVMSnapshotStrategy revertVMSnapshot |
+
+
+ | delete VM snapshot |
+ delete group snapshot of VM's disks |
+ management |
+ StorpoolVMSnapshotStrategy deleteVMSnapshot |
+
+
+ | VM vc_policy tag |
+ vc_policy tag for all disks attached to VM |
+ management |
+ StorPoolCreateTagsCmd |
+
+
+ | delete VM vc_policy tag |
+ remove vc_policy tag for all disks attached to VM |
+ management |
+ StorPoolDeleteTagsCmd |
+
+
+
+>NOTE: When using multicluster for each CloudStack cluster in its settings set the value of StorPool's SP_CLUSTER_ID in "sp.cluster.id".
+>
+
+>NOTE: Secondary storage could be bypassed with Configuration setting "sp.bypass.secondary.storage" set to true.
+In this case only snapshots won't be downloaded to secondary storage.
+>
+
+### Creating template from snapshot
+
+#### If bypass option is enabled
+
+The snapshot exists only on PRIMARY (StorPool) storage. From this snapshot it will be created a template on SECONADRY.
+
+#### If bypass option is disabled
+
+TODO: Maybe we should not use CloudStack functionality, and to use that one when bypass option is enabled
+
+This is independent of StorPool as snapshots exist on secondary.
+
+### Creating ROOT volume from templates
+
+When creating the first volume based on the given template, if snapshot of the template does not exists on StorPool it will be first downloaded (cached) to PRIMARY storage.
+This is mapped to a StorPool snapshot so, creating succecutive volumes from the same template does not incur additional
+copying of data to PRIMARY storage.
+
+This cached snapshot is garbage collected when the original template is deleted from CloudStack. This cleanup is done
+by a background task in CloudStack.
+
+### Creating a ROOT volume from an ISO image
+
+We just need to create the volume. The ISO installation is handled by CloudStack.
+
+### Creating a DATA volume
+
+DATA volumes are created by CloudStack the first time it is attached to a VM.
+
+### Creating volume from snapshot
+
+We use the fact that the snapshot already exists on PRIMARY, so no data is copied. We will copy snapshots from SECONDARY to StorPool PRIMARY,
+when there is no corresponding StorPool snapshot.
+
+### Resizing volumes
+
+We need to send a resize cmd to agent, where the VM the volume is attached to is running, so that
+the resize is visible by the VM.
+
+### Creating snapshots
+
+The snapshot is first created on the PRIMARY storage (i.e. StorPool), then backed-up on SECONDARY storage
+(tested with NFS secondary) if bypass option is not enabled. The original StorPool snapshot is kept, so that creating volumes from the snapshot does not need to copy
+the data again to PRIMARY. When the snapshot is deleted from CloudStack so is the corresponding StorPool snapshot.
+
+Currently snapshots are taken in RAW format.
+
+### Reverting volume to snapshot
+
+It's handled by StorPool
+
+### Migrating volumes to other Storage pools
+
+Tested with storage pools on NFS only.
+
+### Virtual Machine Snapshot/Group Snapshot
+
+StorPool supports consistent snapshots of volumes attached to a virtual machine.
+
+### BW/IOPS limitations
+
+Max IOPS are kept in StorPool's volumes with the help of custom service offerings, by adding IOPS limits to the
+corresponding system disk offering.
+
+CloudStack has no way to specify max BW. Do they want to be able to specify max BW only is sufficient.
diff --git a/plugins/storage/volume/storpool/pom.xml b/plugins/storage/volume/storpool/pom.xml
new file mode 100644
index 00000000000..af8d521133c
--- /dev/null
+++ b/plugins/storage/volume/storpool/pom.xml
@@ -0,0 +1,68 @@
+
+