Support setting of interface external-ids

This is needed for setting of iface-id, in order to integrate with OVN.

Change-Id: I890ccf4aac9ec2b11b49b308937b81d6d12c3252
This commit is contained in:
Petr Horáček 2017-11-28 22:39:18 +02:00
parent 158ae06bce
commit f9c0bea3ab
3 changed files with 79 additions and 25 deletions

View File

@ -163,31 +163,6 @@ class ListBridgesCommand(BaseCommand):
self.api._tables['Bridge'].rows.values()]
class BrGetExternalIdCommand(BaseCommand):
def __init__(self, api, name, field):
super(BrGetExternalIdCommand, self).__init__(api)
self.name = name
self.field = field
def run_idl(self, txn):
br = idlutils.row_by_value(self.api.idl, 'Bridge', 'name', self.name)
self.result = br.external_ids[self.field]
class BrSetExternalIdCommand(BaseCommand):
def __init__(self, api, name, field, value):
super(BrSetExternalIdCommand, self).__init__(api)
self.name = name
self.field = field
self.value = value
def run_idl(self, txn):
br = idlutils.row_by_value(self.api.idl, 'Bridge', 'name', self.name)
external_ids = getattr(br, 'external_ids', {})
external_ids[self.field] = self.value
br.external_ids = external_ids
class SetControllerCommand(BaseCommand):
def __init__(self, api, bridge, targets):
super(SetControllerCommand, self).__init__(api)
@ -367,3 +342,56 @@ class InterfaceToBridgeCommand(BaseCommand):
bridges = self.api._tables['Bridge'].rows.values()
self.result = next(br.name for br in bridges if pname in br.ports)
class GetExternalIdCommand(BaseCommand):
def __init__(self, api, table, name, field):
super(GetExternalIdCommand, self).__init__(api)
self.table = table
self.name = name
self.field = field
def run_idl(self, txn):
row = idlutils.row_by_value(
self.api.idl, self.table, 'name', self.name)
self.result = row.external_ids[self.field]
class SetExternalIdCommand(BaseCommand):
def __init__(self, api, table, name, field, value):
super(SetExternalIdCommand, self).__init__(api)
self.table = table
self.name = name
self.field = field
self.value = value
def run_idl(self, txn):
row = idlutils.row_by_value(
self.api.idl, self.table, 'name', self.name)
external_ids = getattr(row, 'external_ids', {})
external_ids[self.field] = self.value
row.external_ids = external_ids
class BrGetExternalIdCommand(GetExternalIdCommand):
def __init__(self, api, name, field):
super(BrGetExternalIdCommand, self).__init__(
api, 'Bridge', name, field)
class BrSetExternalIdCommand(SetExternalIdCommand):
def __init__(self, api, name, field, value):
super(BrSetExternalIdCommand, self).__init__(
api, 'Bridge', name, field, value)
class IfaceGetExternalIdCommand(GetExternalIdCommand):
def __init__(self, api, name, field):
super(IfaceGetExternalIdCommand, self).__init__(
api, 'Interface', name, field)
class IfaceSetExternalIdCommand(SetExternalIdCommand):
def __init__(self, api, name, field, value):
super(IfaceSetExternalIdCommand, self).__init__(
api, 'Interface', name, field, value)

View File

@ -145,3 +145,9 @@ class OvsdbIdl(ovs_idl.Backend, api.API):
def list_ifaces(self, bridge):
return cmd.ListIfacesCommand(self, bridge)
def iface_get_external_id(self, name, field):
return cmd.IfaceGetExternalIdCommand(self, name, field)
def iface_set_external_id(self, name, field, value):
return cmd.IfaceSetExternalIdCommand(self, name, field, value)

View File

@ -117,6 +117,26 @@ class TestOvsdbIdl(base.FunctionalTestCase):
self.addCleanup(delattr, type(connection), '_is_running')
self.assertFalse(connection.stop(1))
def test_br_external_id(self):
KEY = "foo"
VALUE = "bar"
self.api.add_br(self.brname).execute(check_error=True)
self.api.br_set_external_id(self.brname, KEY, VALUE).execute(
check_error=True)
external_id = self.api.br_get_external_id(self.brname, KEY).execute(
check_error=True)
self.assertEqual(VALUE, external_id)
def test_iface_external_id(self):
KEY = "foo"
VALUE = "bar"
self.api.add_br(self.brname).execute(check_error=True)
self.api.iface_set_external_id(self.brname, KEY, VALUE).execute(
check_error=True)
external_id = self.api.iface_get_external_id(self.brname, KEY).execute(
check_error=True)
self.assertEqual(VALUE, external_id)
class ImplIdlTestCase(base.FunctionalTestCase):
schemas = ['Open_vSwitch']