<div><font class="Apple-style-span" face="'courier new', monospace"> </font></div><div><font class="Apple-style-span" face="'courier new', monospace">PS (pre-scriptum :) : please view this mail with fixed sized font and without the 80 column maximum limit.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">Hi all,</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace">My name is Paul (paulg) Grandperrin and I'm working as a engineer intern at a french company called Alterway Hosting specialized in open source services.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">My mission is to implement in Opennebula a way to manage a pool of storage backends (like iSCSI targets).</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">A storage backend (SB) will be similar to a host except its role is to manage images instead of VMs.</font></div><div><font class="Apple-style-span" face="'courier new', monospace">The objective is to manage a pool of heterogeneous storage backends to store the images and the VM's block devices.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">A typical use case could be:</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> 20 hypervisors</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> 5 high performance iSCSI targets with SSD</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> 10 low performance iSCSI targets</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> 1 ceph cluster</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">We want Opennebula to automaticaly allocate and attach the VMs storage on the different storage backends.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">SB attributes are: ID(int), NAME(string), STATE(enum), TM(string), CAPACITY(int), FREE(int), TM_RAW(string), COST(int), ROLE(enum)</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> TM is the name of the Transfer Manager to use to communicate with the SB.</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> MAX_STORAGE, FREE_STORAGE and USED_STORAGE give information about the used space on the SB. </font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> TM_RAW is an optionnal argument to directly pass to the TM.</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> COST is an integer choosen by the administrator to prioritize some SB over others.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> ROLE would represent the usage, it could be SAN or REPOSITORY.</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace">We might also add these attribute: TAGS ( a list of string to do some filtering), NBIMAGE(int), NBVM(int), USER, GROUP...</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">We would create a new Transfer Manager (TM2), supporting multiple drivers at opnce. The TM2 (and it's drivers) will provide the following actions:</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">COMMAND         ARG1                         ARG2                       OTHER</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> get            [HOSTNAME]:[IMAGENAME]       /path                      stores an image on a path</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> push           /path                        [HOSTNAME]:[IMAGENAME]     stores an image</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> clone          [HOSTNAME]:[IMAGENAMESRC]    [IMAGENAMEDST]             clones an image on the same storage backend.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> delete         [HOSTNAME]:[IMAGENAME]                                  simply delete an image</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> get-size       [HOSTNAME]:[IMAGENAME]                                  returns the size of the image</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> allocate       [HOSTNAME]:[IMAGENAME]       size                       creates a data block on the HOSTNAME storage</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> resize         [HOSTNAME]:[IMAGENAME]       size                       resize the image</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> read           [HOSTNAME]:[IMAGENAME]                                  reads an image, outputs to stdout</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> write          [HOSTNAME]:[IMAGENAME]                                  write the content of stdin to an image</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> attach         [HOSTNAME]:[IMAGENAME]       /path                      attach the image IMAGENAME stored on HOSTNAME to the path "/path"</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> dettach        [HOSTNAME]:[IMAGENAME]       /path                      disconnect the image/remove the symlink, etc</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">Some other things to do :</font></div><div>
<font class="Apple-style-span" face="'courier new', monospace"> Add a command called onestoragebackend with the following actions: create, delete, list, top, show (enable, disable, update)</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> Add a new table in the BDD named storagebackend_pool.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> In the source code add the needed classes: StorageBackend,StorageBackendPool, RequestManagerStorageBackend...</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">For backward compatibility, it should be possible to write a TM2 driver (named LEGACYTM) which will use the old TM drivers to complete the requested actions.</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">In the futur (depending if we have enough time), we might add:</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"> Cluster awareness</font></div><div><font class="Apple-style-span" face="'courier new', monospace"> Permission management</font></div><div>
<font class="Apple-style-span" face="'courier new', monospace"> Tags filtering: We want to be able to tell Opennebula that one VM needs some special storage properties (ex: HDD7K HDD15K, SSD, DISTRIBUTED, whatever).</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">                 Then the scheduler will filter the storagebackends providing all theses properties and choose on of them.</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div>Please feel free to comment and make suggestions.</div><div><br></div><div>Regards,</div><div><br></div><div>Paul Grandperrin,</div>
<div>AlterWay Hosting</div>