On 03/10/2014 10:48 PM, Aline Manera wrote:
On 03/10/2014 10:06 AM, Sheldon wrote:
On 03/08/2014 02:13 AM, Aline Manera wrote:

It will not work in most of cases.
This patch is to fix #302.


Yeap! And I agree with it.
I am suggesting you to also edit the current network default to an unused address - for the nested virtualization case.

For example:

# check default network exists
try:
    net = networkLookupByName(default)
except:
    # network default does not exist
    <create network default using _get_available_address as you did in this patch set>

# now we need to make sure the network is active
if net.isActive() == 0:
    try:
net.create()
    except libvirt.libvirtError, e:
        # default network exists but it is using an used address
        # libvir: Network Driver error : internal error Network is already in use by interface eth0
        try:
            <update network address>

So how about delete this network and recreate it?

Try network update method for IP modify, it can not work.
This function is not supported by the connection driver

static int
virNetworkDefUpdateIP(virNetworkDefPtr def,
                      unsigned int command ATTRIBUTE_UNUSED,
                      int parentIndex ATTRIBUTE_UNUSED,
                      xmlXPathContextPtr ctxt ATTRIBUTE_UNUSED,
                      /* virNetworkUpdateFlags */
                      unsigned int fflags ATTRIBUTE_UNUSED)
{
    virNetworkDefUpdateNoSupport(def, "ip");
    return -1;
}


In [89]: net1.update(libvirt.VIR_NETWORK_UPDATE_COMMAND_MODIFY,
                     libvirt.VIR_NETWORK_SECTION_IP,
                     -1, "<ip address='192.168.44.1' />", flags=0)
libvirt: Network Driver error : this function is not supported by the connection driver: can't update 'ip' section of network 'test_abc'
---------------------------------------------------------------------------
libvirtError                              Traceback (most recent call last)
<ipython-input-89-3ba60f76cce4> in <module>()
      1 net1.update(libvirt.VIR_NETWORK_UPDATE_COMMAND_MODIFY,
      2                      libvirt.VIR_NETWORK_SECTION_IP,
----> 3                      -1, "<ip address='192.168.44.1' />", flags=0)

/usr/lib64/python2.7/site-packages/libvirt.pyc in update(self, command, section, parentIndex, xml, flags)
   2363         running state, its persistent configuration, or both. """
   2364         ret = libvirtmod.virNetworkUpdate(self._o, command, section, parentIndex, xml, flags)
-> 2365         if ret == -1: raise libvirtError ('virNetworkUpdate() failed', net=self)
   2366         return ret
   2367

libvirtError: this function is not supported by the connection driver: can't update 'ip' section of network 'test_abc'

            <activate network>
        except:
            cherrypy.log.error("Fatal: Cannot activate default network "
                                   "because of %s, exit kimchid" % e.message,
severity=logging.ERROR)
            sys.exit(1)

What do you think about it?

I just touch the the related code to create default network.
I can works in default network missing case.

As the code says, if nested kvm does not has default network, then kimchi can choose a network address
and create a default network.
If it has, then it will do not create it.

I agree, we should not to send patch just for fix issue, we can consider more.
actually the Issue #302 is caused by the patch fixing the Issue #22 and Issue #56

we can list all cases, and let me fixed this time.


1. The default network and storage pool is usually created by libvirt with the default values.
So an kimchi user will face the same issue while running kimchi on nested virtualization.
I.e, there is not way to fix it. Just warning the user about the problem.

2. This issue is in some way related to https://github.com/kimchi-project/kimchi/issues/265
And why should not the user delete default network/storage pool?
This limitation should be impose to user when a network/storage pool is used by a template or vm.
Otherwise, the user can remove it.

Usually the default network/storage pool is created by libvirt.
But some time ago, we identified it did not happen in some distros.
And as the Kimchi default configuration for templates is pointing to those resources we decided to
create them manually on kimchi code to avoid problems while using the templates.

So my proposal is: let's revisit all the supported distros and check if libvirt creates default
network/storage pool by default, and if so remove this code from kimchi.
Then default network/storage pool will have the same behavior from other networks/storage pools.


On 03/07/2014 06:52 AM, shaohef@linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef@linux.vnet.ibm.com>

let 'create' attr of networks model to create the default network

ShaoHe Feng (3):
move _default_network_check from top model to networks model
add a new function to get an available network address
Issue #302: let 'create' attr of networks model to create default
network

src/kimchi/model/model.py | 35 ---------------------------------
src/kimchi/model/networks.py | 46 +++++++++++++++++++++++++++++++++++++-------
src/kimchi/network.py | 7 +++++--
3 files changed, 44 insertions(+), 44 deletions(-)











-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com>
IBM Linux Technology Center