Merge "Add Gateway_Chassis support"

This commit is contained in:
Zuul 2018-12-11 19:41:18 +00:00 committed by Gerrit Code Review
commit 3bf07d8826
2 changed files with 43 additions and 0 deletions

View File

@ -739,6 +739,13 @@ class LrpAddCommand(cmd.BaseCommand):
if self.peer:
lrp.peer = self.peer
lr.addvalue('ports', lrp)
gwcs = self.columns.pop('gateway_chassis', [])
for n, chassis in enumerate(gwcs):
gwc_name = '%s_%s' % (lrp.name, chassis)
cmd = GatewayChassisAddCommand(self.api, gwc_name, chassis,
len(gwcs) - n, may_exist=True)
cmd.run_idl(txn)
lrp.addvalue('gateway_chassis', cmd.result)
self.set_columns(lrp, **self.columns)
self.result = lrp.uuid
@ -1291,3 +1298,30 @@ class PgDelPortCommand(_PgUpdatePortsHelper):
class PgGetCommand(cmd.BaseGetRowCommand):
table = 'Port_Group'
class GatewayChassisAddCommand(cmd.AddCommand):
table_name = 'Gateway_Chassis'
def __init__(self, api, name, chassis_name, priority=0, may_exist=False,
**columns):
super(GatewayChassisAddCommand, self).__init__(api)
self.name = name
self.chassis_name = chassis_name
self.priority = priority
self.may_exist = may_exist
self.columns = columns
def run_idl(self, txn):
if self.may_exist:
gwc = self.api.lookup(self.table_name, self.name, None)
else:
gwc = None
if not gwc:
# If gwc exists with name, this will properly fail if not may_exist
# since 'name' is indexed
gwc = txn.insert(self.api.tables[self.table_name])
gwc.name = self.name
gwc.priority = self.priority
self.set_columns(gwc, **self.columns)
self.result = gwc

View File

@ -940,6 +940,15 @@ class TestLogicalRouterPortOps(OvnNorthboundTest):
self.assertEqual(options, lrp.options)
self.assertEqual(external_ids, lrp.external_ids)
def test_lrp_add_gw_chassis(self):
name, c1, c2 = [utils.get_rand_device_name() for _ in range(3)]
args = (name, 'de:ad:be:ef:4d:ad')
lrp = self._lrp_add(*args, gateway_chassis=(c1, c2))
c1 = self.api.lookup('Gateway_Chassis', "%s_%s" % (lrp.name, c1))
c2 = self.api.lookup('Gateway_Chassis', "%s_%s" % (lrp.name, c2))
self.assertIn(c1, lrp.gateway_chassis)
self.assertIn(c2, lrp.gateway_chassis)
def test_lrp_del_uuid(self):
lrp = self._lrp_add(None)
self.api.lrp_del(lrp.uuid).execute(check_error=True)