Hi all,

I'd like to share with you what I have in mind for the next release.
Most of the items listed below have already come up on ML before.

A) Upload file to storage pool
   In the current code, the upload function is disabled as it does not work well with files larger than 500MB.
   When trying to upload a file with 500MB the browser stops responding and after some time it crashes.
   From a quick investigation, I identified it happens prior to send the data to server:

    var uploadFile = function() {
        var blobFile = $(localFileBox)[0].files[0];                            
        var fileName = blobFile.name;                                          
        var fd = new FormData();                                               
        fd.append('name', fileName);                                           
        fd.append('file', blobFile)
        ....
    }

    We need check if there is a way to solve it on UI by changing the data structure or how it is loaded or think about a solution involving backend.

B) Reduce imported code
   Kimchi imports some code: python-websockets, novnc, spice and jquery libs
   Some of them (to don't say most of them) are already packaged in some Linux distributions (Fedora, Ubuntu, etc)
   We should check the availability of those packages in the all supported distros and when possible remove the imported code from git repository and add it as a dependency.
   It is a requirement to have Kimchi on Fedora.

C) MockModel refactor
   The mockmodel was designed to provide a way to user tests Kimchi without affecting the system (by "kimchid --test") and also to make the tests easier to do.
   But in fact, we have a bunch of code that completely differs from the real model, so the developer needs to do 2 kinds of implementations while developing a new feature.
   My proposal is simplify that by using Model() with "test:///default" URI.
   This configuration does not affect the system in real and also can provide us a way to test the new feature in a closer scenario to the real one: by connecting to libvirt and doing the operations.
   As you may know "test:///default" driver has some limitations that prevents some operations, for example, screenshots.
   To solve it we could only override what is not supported by this driver and create a simpler mockmodel.

   Example:
   class MockModel(Model):
       super(Model, self).__init__("test:///default")

       def vmscreenshot_lookup():
           # do some mock code

    I think in this way we will have a significant reduction in our mockmodel code.

D) VM Template refactor
   More and more the user will be able to change the VM configuration and it implies in generating a XML code related to the new item to be attached to the VM.
   But it is also done in the Template level. Because that we have a lot of duplicated code related to the XML generation on VM and Template. Some of them using etree.builder and others using pure strings.
   My idea is to create a xml python module to hold all the XML manipulation about to element type.

   Example:
       src/kimchi/xml/iface.py

       src/kimchi/xml/disk.py
       src/kimchi/xml/graphics.py
       src/kimchi/xml/domain.py

    Each of these files will be responsible to handle the XML generation and manipulation using etree.
    Then when needed, while changing VM configuration or Template, we use the same code from our xml module.

E) Allow user adds volumes from different pools to a Template (depends on D)
   Today the user can only use one disk in a Template.
   We should provide a way to user select multiple volumes from different storage pools in a Template.
   The user should be able to specific a pool and a disk size to Kimchi automatically creates a volume according to those inputs.
   So user can specify a pool and a volume OR a pool and a disk size.

   From UI perspective, we will need a bigger refactor on it. Maybe displaying the Template information in tabs (the same way we did when editing a VM)

F) Guest disk hot plug (depends on D)
   Allow attaching a disk to a running guest.

G) PCI passthrough

H) SMT support
   Kimchi should enable SMT on guests when it improves performance according to host architecture and choose the best configuration to user (SMT8, 4 or 2)
   This kind of information must not be prompted to user as it is only for expert users and can block entry level users (our main focus)
   So our algorithm must be good enough to do the right choice according to host and guest configuration.

I) Snapshot support
   Allow users create, revert and delete a snapshot.

J) Guest cloning
  
K) LDAP authentication support
   We need to think also how to enable authorization on a LDAP authentication.
   In my first view, I think we need to provide a way to sysadmin lists the IDs to have admin role in the Kimchi config file.
   What about the groups? Should we use LDAP domains instead of groups?

   And we also need to change UI when setting users and groups, as there is no way to list all users in a LDAP server.

   On Kimchi configuration file we can have an authentication section like below:

   [authentication]
   method = pam | ldap

   ldap_server =
   ldap_search =
   ldap_domain =
   ldap_admin_users =

L) Allow user changes graphics type on guest
   User should be able to change from VNC to Spice on a existing guest

M) Add support for serial console

N) Live migration
   Start some investigation on how to do that

----
Yeap! A lot of cool features and just a piece of our backlog... ;-)

That is a brainstorm. So please, your comments/suggestions are more than welcome!

Thanks,
Aline Manera