[Kimchi-devel] [PATCH] Do not auto create default network

simonjin simonjin at linux.vnet.ibm.com
Mon Jul 28 07:43:46 UTC 2014


On 07/26/2014 02:28 AM, alinefm at linux.vnet.ibm.com wrote:
> From: Aline Manera<alinefm at linux.vnet.ibm.com>
>
> Kimchi does not depends on default network as a template and a guest can
> be created without any network interface.
Having a default network will simply template creation and that's one of 
main goal of kimchi,
end user can always edit the network of template as they like.

-Simon
> So do not auto create the default network when starting up Kimchi and
> let users create and configure their networks and templates as they
> want.
> It is part of issue #392
>
> Signed-off-by: Aline Manera<alinefm at linux.vnet.ibm.com>
> ---
>   src/kimchi/mockmodel.py      |  8 +-------
>   src/kimchi/model/networks.py | 44 --------------------------------------------
>   src/kimchi/osinfo.py         |  2 +-
>   tests/test_model.py          | 19 +++++++------------
>   tests/test_osinfo.py         |  2 +-
>   tests/test_rest.py           | 19 +++++--------------
>   tests/test_vmtemplate.py     |  2 +-
>   7 files changed, 16 insertions(+), 80 deletions(-)
>
> diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
> index 1584471..2a74044 100644
> --- a/src/kimchi/mockmodel.py
> +++ b/src/kimchi/mockmodel.py
> @@ -81,7 +81,7 @@ def reset(self):
>           self._mock_screenshots = {}
>           self._mock_templates = {}
>           self._mock_storagepools = {'default': MockStoragePool('default')}
> -        self._mock_networks = {'default': MockNetwork('default')}
> +        self._mock_networks = {}
>           self._mock_interfaces = self.dummy_interfaces()
>           self._mock_swupdate = MockSoftwareUpdate()
>           self.next_taskid = 1
> @@ -659,12 +659,6 @@ def _is_network_used_by_template(self, network):
>           return False
>
>       def _is_network_in_use(self, name):
> -        # The network "default" is used for Kimchi proposal and should not be
> -        # deactivate or deleted. Otherwise, we will allow user create
> -        # inconsistent templates from scratch
> -        if name == 'default':
> -            return True
> -
>           vms = self._get_vms_attach_to_a_network(name)
>           return bool(vms) or self._is_network_used_by_template(name)
>
> diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
> index bc93da5..45659ea 100644
> --- a/src/kimchi/model/networks.py
> +++ b/src/kimchi/model/networks.py
> @@ -41,44 +41,6 @@
>   class NetworksModel(object):
>       def __init__(self, **kargs):
>           self.conn = kargs['conn']
> -        if 'qemu:///' in self.conn.get().getURI():
> -            self._default_network_check()
> -
> -    def _default_network_check(self):
> -        def create_default_network():
> -            try:
> -                subnet = self._get_available_address(knetwork.DefaultNetsPool)
> -                params = {"name": "default", "connection": "nat",
> -                          "subnet": subnet}
> -                self.create(params)
> -                return conn.networkLookupByName("default")
> -            except Exception as e:
> -                kimchi_log.error("Fatal: Cannot create default network "
> -                                 "because of %s, exit kimchid", e.message)
> -                sys.exit(1)
> -
> -        conn = self.conn.get()
> -        try:
> -            net = conn.networkLookupByName("default")
> -        except libvirt.libvirtError:
> -            net = create_default_network()
> -
> -        if net.isActive() == 0:
> -            try:
> -                net.create()
> -            except libvirt.libvirtError as e:
> -                # FIXME we can not distinguish this error from other internal
> -                # error by error code.
> -                if ("network is already in use by interface"
> -                        in e.message.lower()):
> -                    # libvirt do not support update IP element, so delete the
> -                    # the network and create new one.
> -                    net.undefine()
> -                    create_default_network()
> -                else:
> -                    kimchi_log.error("Fatal: Cannot activate default network "
> -                                     "because of %s, exit kimchid", e.message)
> -                    sys.exit(1)
>
>       def create(self, params):
>           conn = self.conn.get()
> @@ -267,12 +229,6 @@ def lookup(self, name):
>                   'persistent': True if network.isPersistent() else False}
>
>       def _is_network_in_use(self, name):
> -        # The network "default" is used for Kimchi proposal and should not be
> -        # deactivate or deleted. Otherwise, we will allow user create
> -        # inconsistent templates from scratch
> -        if name == 'default':
> -            return True
> -
>           vms = self._get_vms_attach_to_a_network(name)
>           return bool(vms) or self._is_network_used_by_template(name)
>
> diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
> index 39c9163..cec2c50 100644
> --- a/src/kimchi/osinfo.py
> +++ b/src/kimchi/osinfo.py
> @@ -91,7 +91,7 @@
>       },
>   }
>
> -defaults = {'networks': ['default'],
> +defaults = {'networks': [],
>               'storagepool': '/storagepools/default',
>               'domain': 'kvm', 'arch': os.uname()[4],
>               'graphics': {'type': 'vnc', 'listen': '0.0.0.0'}}
> diff --git a/tests/test_model.py b/tests/test_model.py
> index da9dae5..e717872 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -154,12 +154,7 @@ def test_vm_ifaces(self):
>               rollback.prependDefer(inst.network_deactivate, net_name)
>
>               ifaces = inst.vmifaces_get_list('kimchi-ifaces')
> -            self.assertEquals(1, len(ifaces))
> -
> -            iface = inst.vmiface_lookup('kimchi-ifaces', ifaces[0])
> -            self.assertEquals(17, len(iface['mac']))
> -            self.assertEquals("default", iface['network'])
> -            self.assertIn("model", iface)
> +            self.assertEquals(0, len(ifaces))
>
>               # attach network interface to vm
>               iface_args = {"type": "network",
> @@ -176,11 +171,11 @@ def test_vm_ifaces(self):
>               self.assertEquals("virtio", iface["model"])
>
>               # update vm interface
> -            iface_args = {"network": "default",
> +            iface_args = {"network": "test-network",
>                             "model": "e1000"}
>               inst.vmiface_update('kimchi-ifaces', mac, iface_args)
>               iface = inst.vmiface_lookup('kimchi-ifaces', mac)
> -            self.assertEquals("default", iface['network'])
> +            self.assertEquals("test-network", iface['network'])
>               self.assertEquals("e1000", iface["model"])
>
>       @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> @@ -565,14 +560,14 @@ def test_template_create(self):
>               info = inst.template_lookup('test')
>               for key in params.keys():
>                   self.assertEquals(params[key], info[key])
> -            self.assertEquals("default", info["networks"][0])
> +            self.assertEquals(0, len(info["networks"]))
>
>               # create template with non-existent network
>               params['name'] = 'new-test'
>               params['networks'] = ["no-exist"]
>               self.assertRaises(InvalidParameter, inst.templates_create, params)
>
> -            params['networks'] = ['default', 'test-network']
> +            params['networks'] = ['test-network']
>               inst.templates_create(params)
>               rollback.prependDefer(inst.template_delete, params['name'])
>               info = inst.template_lookup(params['name'])
> @@ -667,10 +662,10 @@ def test_template_update(self):
>               info = inst.template_lookup('new-test')
>               for key in params.keys():
>                   self.assertEquals(params[key], info[key])
> -            self.assertEquals("default", info["networks"][0])
> +            self.assertEquals(0, len(info["networks"]))
>
>               params = {'name': 'new-test', 'memory': 1024, 'cpus': 1,
> -                      'networks': ['default', 'test-network']}
> +                      'networks': ['test-network']}
>               inst.template_update('new-test', params)
>               info = inst.template_lookup('new-test')
>               for key in params.keys():
> diff --git a/tests/test_osinfo.py b/tests/test_osinfo.py
> index 104e7b8..7524f84 100644
> --- a/tests/test_osinfo.py
> +++ b/tests/test_osinfo.py
> @@ -28,7 +28,7 @@ def test_default_lookup(self):
>           entry = lookup(None, None)
>           self.assertEquals('unknown', entry['os_distro'])
>           self.assertEquals('unknown', entry['os_version'])
> -        self.assertEquals(['default'], entry['networks'])
> +        self.assertEquals([], entry['networks'])
>
>       def test_fedora_lookup(self):
>           cd = ('http://fedora.mirrors.tds.net/pub/fedora/releases/17/Live/'
> diff --git a/tests/test_rest.py b/tests/test_rest.py
> index 3ea1927..306064c 100644
> --- a/tests/test_rest.py
> +++ b/tests/test_rest.py
> @@ -603,14 +603,7 @@ def test_vm_iface(self):
>                                     '/networks/test-network', '{}', 'DELETE')
>
>               ifaces = json.loads(self.request('/vms/test-vm/ifaces').read())
> -            self.assertEquals(1, len(ifaces))
> -
> -            for iface in ifaces:
> -                res = json.loads(self.request('/vms/test-vm/ifaces/%s' %
> -                                              iface['mac']).read())
> -                self.assertEquals('default', res['network'])
> -                self.assertEquals(17, len(res['mac']))
> -                self.assertEquals('virtio', res['model'])
> +            self.assertEquals(0, len(ifaces))
>
>               # attach network interface to vm
>               req = json.dumps({"type": "network",
> @@ -794,7 +787,7 @@ def test_template_customise_network(self):
>                                     '/templates/test', '{}', 'DELETE')
>               tmpl_res = json.loads(resp.read())
>               self.assertTrue(type(tmpl_res['networks']) is list)
> -            self.assertEquals("default", tmpl_res['networks'][0])
> +            self.assertEquals(0, len(tmpl_res['networks']))
>
>               tmpl['name'] = "failed_tmpl"
>               # Create a Template with non-array network fails with 400
> @@ -832,7 +825,7 @@ def test_template_customise_network(self):
>               self.assertEquals(400, resp.status)
>
>               # Update a Template with existent network, successful
> -            tmpl['networks'] = ["default", "test-network"]
> +            tmpl['networks'] = ["test-network"]
>               req = json.dumps(tmpl)
>               resp = self.request('/templates/test', req, 'PUT')
>               self.assertEquals(200, resp.status)
> @@ -1407,9 +1400,7 @@ def test_interfaces(self):
>
>       def test_get_networks(self):
>           networks = json.loads(request(host, ssl_port, '/networks').read())
> -        self.assertEquals(1, len(networks))
> -        self.assertEquals('default', networks[0]['name'])
> -        self.assertEquals([], networks[0]['vms'])
> +        self.assertEquals(0, len(networks))
>
>           # Now add a couple of Networks to the mock model
>           for i in xrange(5):
> @@ -1424,7 +1415,7 @@ def test_get_networks(self):
>               self.assertEquals([], network["vms"])
>
>           networks = json.loads(request(host, ssl_port, '/networks').read())
> -        self.assertEquals(6, len(networks))
> +        self.assertEquals(5, len(networks))
>
>           network = json.loads(request(host, ssl_port,
>                                        '/networks/network-1').read())
> diff --git a/tests/test_vmtemplate.py b/tests/test_vmtemplate.py
> index 821ca24..8dceced 100644
> --- a/tests/test_vmtemplate.py
> +++ b/tests/test_vmtemplate.py
> @@ -29,7 +29,7 @@ class VMTemplateTests(unittest.TestCase):
>       def test_minimal_construct(self):
>           fields = (('name', 'test'), ('os_distro', 'unknown'),
>                     ('os_version', 'unknown'), ('cpus', 1),
> -                  ('memory', 1024), ('cdrom', ''), ('networks', ['default']),
> +                  ('memory', 1024), ('cdrom', ''), ('networks', []),
>                     ('disk_bus', 'ide'), ('nic_model', 'e1000'),
>                     ('graphics', {'type': 'vnc', 'listen': '0.0.0.0'}))
>


-- 
Yun Tong Jin, Simon
Linux Technology Center, Open Virtualization project
IBM Systems&  Technology Group
jinyt at cn.ibm.com, Phone: 824549654




More information about the Kimchi-devel mailing list