On 01/09/2014 09:19 PM, Aline Manera wrote:
Sorry, I wasn't clear in previous patch.
But you need to rebase the whole patch set.
I thought just sending the changed
patch could avoid duplicated review
on the unchanged patch.
Maybe your tool depends on the whole patchset. In gerrit, the patch is
merged by cherry-pick, so
it doesn't have problem to only update some of a series patches.
On 01/09/2014 03:39 AM, Mark Wu wrote:
> To support vlan tagged virtual network, kimchi needs create the
> underlying
> vlan and bridge interface. Libvirt's interface driver can do it with
> a given XML definition. This patch targets to generate the XML according
> to the interface and vlan id.
>
> Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
> ---
> src/kimchi/networkxml.py | 19 +++++++++++++++++++
> tests/test_networkxml.py | 22 ++++++++++++++++++++++
> tests/utils.py | 6 ++++++
> 3 files changed, 47 insertions(+)
>
> diff --git a/src/kimchi/networkxml.py b/src/kimchi/networkxml.py
> index 786cb69..63cb210 100644
> --- a/src/kimchi/networkxml.py
> +++ b/src/kimchi/networkxml.py
> @@ -21,6 +21,10 @@
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
>
> import ipaddr
> +import lxml.etree as ET
> +
> +
> +from lxml.builder import E
>
>
> # FIXME, do not support ipv6
> @@ -109,3 +113,18 @@ def to_network_xml(**kwargs):
> </network>
> """ % params
> return xml
> +
> +
> +def create_vlan_tagged_bridge_xml(bridge, interface, vlan_id):
> + vlan = E.vlan(E.interface(name=interface))
> + vlan.set('tag', vlan_id)
> + m = E.interface(
> + E.start(mode='onboot'),
> + E.bridge(
> + E.interface(
> + vlan,
> + type='vlan',
> + name='.'.join([interface, vlan_id]))),
> + type='bridge',
> + name=bridge)
> + return ET.tostring(m)
> diff --git a/tests/test_networkxml.py b/tests/test_networkxml.py
> index 3073bce..42b3ea9 100644
> --- a/tests/test_networkxml.py
> +++ b/tests/test_networkxml.py
> @@ -25,6 +25,9 @@ import unittest
>
>
> import kimchi.networkxml as nxml
> +import utils
> +
> +
> from kimchi.xmlutils import xpath_get_text
>
>
> @@ -151,3 +154,22 @@ class NetworkXmlTests(unittest.TestCase):
> netmask = xpath_get_text(xml, "/network/ip/@netmask")[0]
> self.assertEquals(netmask,
> str(ipaddr.IPNetwork(params["net"]).netmask))
> +
> +
> +class InterfaceXmlTests(unittest.TestCase):
> +
> + def test_vlan_tagged_bridge_no_ip(self):
> + expected_xml = """
> + <interface type='bridge' name='br10'>
> + <start mode='onboot'/>
> + <bridge>
> + <interface type='vlan' name='em1.10'>
> + <vlan tag='10'>
> + <interface name='em1'/>
> + </vlan>
> + </interface>
> + </bridge>
> + </interface>
> + """
> + actual_xml = nxml.create_vlan_tagged_bridge_xml('br10',
> 'em1', '10')
> + self.assertEquals(actual_xml,
> utils.normalize_xml(expected_xml))
> diff --git a/tests/utils.py b/tests/utils.py
> index 008f668..79fc2e2 100644
> --- a/tests/utils.py
> +++ b/tests/utils.py
> @@ -32,6 +32,7 @@ import unittest
>
>
> from contextlib import closing
> +from lxml import etree
>
>
> import kimchi.server
> @@ -159,3 +160,8 @@ def patch_auth():
>
> import kimchi.auth
> kimchi.auth.authenticate = _authenticate
> +
> +
> +def normalize_xml(xml_str):
> + return etree.tostring(etree.fromstring(xml_str,
> + etree.XMLParser(remove_blank_text=True)))