[Kimchi-devel] [RFC] Split Kimchi into Base Framework and Virtualization layers

Lucio Correia luciojhc at linux.vnet.ibm.com
Thu Mar 26 13:56:10 UTC 2015


Hi,

Gustavo (on cc) and me have been analyzing how to split Kimchi 
Virtualization layer form its Base web framework. We would like to 
leverage all infrastructure kimchi base framework provides (URI routing, 
error handling, i18n, authentication, API validation, plugin tabs 
loading) in other projects, and contribute this back to kimchi-ginger 
project.

The general idea for the web framework is that it provides basic UI with 
login and tabs menu, and each plugin installed extends the menu with 
some tabs.

We started by making kimchi a plugin, like ginger is. We are way 
advanced on that and already have most of kimchi's UI running as a 
plugin over an almost fully running base web framework.

Ginger needs minimal changes, mainly on import statements. We can 
provide changes needed back to ginger too.

Currently, we are splitting kimchi specific stuff like this way: (after 
renaming the dir src/kimchi to src/backend *)

* we are using the name "backend" just for disambiguation from 
virtualization layer (plugins/kimchi). We will need to define a better 
name for that basic framework. One suggestion is to call it "wok", the 
base where kimchi is cooked.


  {src/backend => plugins/kimchi}/API.json                       |    0
  {src/backend/control/vm => plugins/kimchi/control}/Makefile.am |    7 +-
  {src/backend/control/vm => plugins/kimchi/control}/__init__.py |    2 +-
  {src/backend => plugins/kimchi}/control/config.py              |    0
  {src/backend => plugins/kimchi}/control/cpuinfo.py             |    0
  {src/backend => plugins/kimchi}/control/debugreports.py        |    0
  {src/backend => plugins/kimchi}/control/groups.py              |    0
  {src/backend => plugins/kimchi}/control/host.py                |    0
  {src/backend => plugins/kimchi}/control/interfaces.py          |    0
  {src/backend => plugins/kimchi}/control/networks.py            |    0
  {src/backend => plugins/kimchi}/control/peers.py               |    0
  {src/backend => plugins/kimchi}/control/storagepools.py        |    0
  {src/backend => plugins/kimchi}/control/storageservers.py      |    0
  {src/backend => plugins/kimchi}/control/storagevolumes.py      |    0
  {src/backend => plugins/kimchi}/control/templates.py           |    0
  {src/backend => plugins/kimchi}/control/users.py               |    0
  {src/backend => plugins/kimchi}/control/vm/Makefile.am         |    0
  {src/backend => plugins/kimchi}/control/vm/__init__.py         |    0
  {src/backend => plugins/kimchi}/control/vm/hostdevs.py         |    0
  {src/backend => plugins/kimchi}/control/vm/ifaces.py           |    0
  {src/backend => plugins/kimchi}/control/vm/snapshots.py        |    0
  {src/backend => plugins/kimchi}/control/vm/storages.py         |    0
  {src/backend => plugins/kimchi}/control/vms.py                 |    0
  {src/backend => plugins/kimchi}/disks.py                       |    0
  {src/backend => plugins/kimchi}/imageinfo.py                   |    0
  {src/backend => plugins/kimchi}/iscsi.py                       |    0
  {src/backend => plugins/kimchi}/isoinfo.py                     |    0
  {src/backend => plugins/kimchi}/kvmusertests.py                |    0
  {src/backend => plugins/kimchi}/mockmodel.py                   |    0
  {src/backend/control/vm => plugins/kimchi/model}/Makefile.am   |    7 +-
  {src/backend/control/vm => plugins/kimchi/model}/__init__.py   |    8 ---
  {src/backend => plugins/kimchi}/model/config.py                |    0
  {src/backend => plugins/kimchi}/model/cpuinfo.py               |    0
  {src/backend => plugins/kimchi}/model/debugreports.py          |    0
  {src/backend => plugins/kimchi}/model/diskutils.py             |    0
  {src/backend => plugins/kimchi}/model/featuretests.py          |    0
  {src/backend => plugins/kimchi}/model/groups.py                |    0
  {src/backend => plugins/kimchi}/model/host.py                  |    0
  {src/backend => plugins/kimchi}/model/hostdev.py               |    0
  {src/backend => plugins/kimchi}/model/interfaces.py            |    0
  {src/backend => plugins/kimchi}/model/libvirtconnection.py     |    0
  {src/backend => plugins/kimchi}/model/libvirtstoragepool.py    |    0
  plugins/kimchi/model/model.py                                  |   93 
++++++++++++++++++++++++++++
  {src/backend => plugins/kimchi}/model/networks.py              |    0
  {src/backend => plugins/kimchi}/model/peers.py                 |    0
  {src/backend => plugins/kimchi}/model/storagepools.py          |    0
  {src/backend => plugins/kimchi}/model/storageservers.py        |    0
  {src/backend => plugins/kimchi}/model/storagetargets.py        |    0
  {src/backend => plugins/kimchi}/model/storagevolumes.py        |    0
  {src/backend => plugins/kimchi}/model/templates.py             |    0
  {src/backend => plugins/kimchi}/model/users.py                 |    0
  {src/backend => plugins/kimchi}/model/utils.py                 |    0
  {src/backend => plugins/kimchi}/model/vmhostdevs.py            |    0
  {src/backend => plugins/kimchi}/model/vmifaces.py              |    0
  {src/backend => plugins/kimchi}/model/vms.py                   |    0
  {src/backend => plugins/kimchi}/model/vmsnapshots.py           |    0
  {src/backend => plugins/kimchi}/model/vmstorages.py            |    0
  {src/backend => plugins/kimchi}/osinfo.py                      |    0
  {src/backend => plugins/kimchi}/scan.py                        |    0
  {config => plugins/kimchi/ui}/Makefile.am                      |    0
  {config/ui => plugins/kimchi/ui/config}/Makefile.am            |    0
  config/ui/tabs.xml => plugins/kimchi/ui/config/tab-ext.xml     |    0
  {src/backend => plugins/kimchi}/vmtemplate.py                  |    0


The remaining generic stuff on the "backend" side, usable or already in 
use by other plugins, would be:

backend
|___model
| |___model.py
| |___plugins.py
| |___tasks.py
|___control
| |___base.py
| |___plugins.py
| |___tasks.py
| |___utils.py
|___xmlutils
| |___network.py
| |___disk.py
| |___utils.py
| |___graphics.py
| |___qemucmdline.py
| |___interface.py
|___asynctask.py
|___auth.py
|___basemodel.py
|___cachebust.py
|___distroloader.py
|___exception.py
|___i18n.py
|___netinfo.py
|___network.py
|___objectstore.py
|___proxy.py
|___repositories.py
|___rollbackcontext.py
|___root.py
|___screenshot.py
|___server.py
|___sslcert.py
|___swupdate.py
|___template.py
|___utils.py
|___vnc.py

We don't want to make this a too long e-mail and lose the focus on the 
idea. We have further technical details to discuss in a follow up.

Please let us know your thoughts on that, any directions and 
requirements you have on this, and how could we proceed with that plan.

-- 
Lucio Correia
Software Engineer
IBM LTC Brazil




More information about the Kimchi-devel mailing list