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:
parent
158ae06bce
commit
f9c0bea3ab
|
@ -163,31 +163,6 @@ class ListBridgesCommand(BaseCommand):
|
||||||
self.api._tables['Bridge'].rows.values()]
|
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):
|
class SetControllerCommand(BaseCommand):
|
||||||
def __init__(self, api, bridge, targets):
|
def __init__(self, api, bridge, targets):
|
||||||
super(SetControllerCommand, self).__init__(api)
|
super(SetControllerCommand, self).__init__(api)
|
||||||
|
@ -367,3 +342,56 @@ class InterfaceToBridgeCommand(BaseCommand):
|
||||||
|
|
||||||
bridges = self.api._tables['Bridge'].rows.values()
|
bridges = self.api._tables['Bridge'].rows.values()
|
||||||
self.result = next(br.name for br in bridges if pname in br.ports)
|
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)
|
||||||
|
|
|
@ -145,3 +145,9 @@ class OvsdbIdl(ovs_idl.Backend, api.API):
|
||||||
|
|
||||||
def list_ifaces(self, bridge):
|
def list_ifaces(self, bridge):
|
||||||
return cmd.ListIfacesCommand(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)
|
||||||
|
|
|
@ -117,6 +117,26 @@ class TestOvsdbIdl(base.FunctionalTestCase):
|
||||||
self.addCleanup(delattr, type(connection), '_is_running')
|
self.addCleanup(delattr, type(connection), '_is_running')
|
||||||
self.assertFalse(connection.stop(1))
|
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):
|
class ImplIdlTestCase(base.FunctionalTestCase):
|
||||||
schemas = ['Open_vSwitch']
|
schemas = ['Open_vSwitch']
|
||||||
|
|
Loading…
Reference in New Issue