Merge "Add "standard_attr_id" to some OVO dictionaries"
This commit is contained in:
commit
07f5a6b9df
@ -143,6 +143,11 @@ class DbBasePluginCommon(object):
|
|||||||
allocated.create()
|
allocated.create()
|
||||||
|
|
||||||
def _make_subnet_dict(self, subnet, fields=None, context=None):
|
def _make_subnet_dict(self, subnet, fields=None, context=None):
|
||||||
|
if isinstance(subnet, subnet_obj.Subnet):
|
||||||
|
standard_attr_id = subnet.db_obj.standard_attr.id
|
||||||
|
else:
|
||||||
|
standard_attr_id = subnet.standard_attr.id
|
||||||
|
|
||||||
res = {'id': subnet['id'],
|
res = {'id': subnet['id'],
|
||||||
'name': subnet['name'],
|
'name': subnet['name'],
|
||||||
'tenant_id': subnet['tenant_id'],
|
'tenant_id': subnet['tenant_id'],
|
||||||
@ -152,6 +157,7 @@ class DbBasePluginCommon(object):
|
|||||||
'enable_dhcp': subnet['enable_dhcp'],
|
'enable_dhcp': subnet['enable_dhcp'],
|
||||||
'ipv6_ra_mode': subnet['ipv6_ra_mode'],
|
'ipv6_ra_mode': subnet['ipv6_ra_mode'],
|
||||||
'ipv6_address_mode': subnet['ipv6_address_mode'],
|
'ipv6_address_mode': subnet['ipv6_address_mode'],
|
||||||
|
'standard_attr_id': standard_attr_id,
|
||||||
}
|
}
|
||||||
res['gateway_ip'] = str(
|
res['gateway_ip'] = str(
|
||||||
subnet['gateway_ip']) if subnet['gateway_ip'] else None
|
subnet['gateway_ip']) if subnet['gateway_ip'] else None
|
||||||
@ -218,6 +224,13 @@ class DbBasePluginCommon(object):
|
|||||||
def _make_port_dict(self, port, fields=None,
|
def _make_port_dict(self, port, fields=None,
|
||||||
process_extensions=True,
|
process_extensions=True,
|
||||||
with_fixed_ips=True):
|
with_fixed_ips=True):
|
||||||
|
if isinstance(port, port_obj.Port):
|
||||||
|
port_data = port.db_obj
|
||||||
|
standard_attr_id = port.db_obj.standard_attr.id
|
||||||
|
else:
|
||||||
|
port_data = port
|
||||||
|
standard_attr_id = port.standard_attr.id
|
||||||
|
|
||||||
mac = port["mac_address"]
|
mac = port["mac_address"]
|
||||||
if isinstance(mac, netaddr.EUI):
|
if isinstance(mac, netaddr.EUI):
|
||||||
mac.dialect = netaddr.mac_unix_expanded
|
mac.dialect = netaddr.mac_unix_expanded
|
||||||
@ -229,7 +242,9 @@ class DbBasePluginCommon(object):
|
|||||||
"admin_state_up": port["admin_state_up"],
|
"admin_state_up": port["admin_state_up"],
|
||||||
"status": port["status"],
|
"status": port["status"],
|
||||||
"device_id": port["device_id"],
|
"device_id": port["device_id"],
|
||||||
"device_owner": port["device_owner"]}
|
"device_owner": port["device_owner"],
|
||||||
|
'standard_attr_id': standard_attr_id,
|
||||||
|
}
|
||||||
if with_fixed_ips:
|
if with_fixed_ips:
|
||||||
res["fixed_ips"] = [
|
res["fixed_ips"] = [
|
||||||
{'subnet_id': ip["subnet_id"],
|
{'subnet_id': ip["subnet_id"],
|
||||||
@ -237,9 +252,6 @@ class DbBasePluginCommon(object):
|
|||||||
ip["ip_address"])} for ip in port["fixed_ips"]]
|
ip["ip_address"])} for ip in port["fixed_ips"]]
|
||||||
# Call auxiliary extend functions, if any
|
# Call auxiliary extend functions, if any
|
||||||
if process_extensions:
|
if process_extensions:
|
||||||
port_data = port
|
|
||||||
if isinstance(port, port_obj.Port):
|
|
||||||
port_data = port.db_obj
|
|
||||||
resource_extend.apply_funcs(
|
resource_extend.apply_funcs(
|
||||||
port_def.COLLECTION_NAME, res, port_data)
|
port_def.COLLECTION_NAME, res, port_data)
|
||||||
return db_utils.resource_fields(res, fields)
|
return db_utils.resource_fields(res, fields)
|
||||||
@ -310,7 +322,8 @@ class DbBasePluginCommon(object):
|
|||||||
'mtu': network.get('mtu', constants.DEFAULT_NETWORK_MTU),
|
'mtu': network.get('mtu', constants.DEFAULT_NETWORK_MTU),
|
||||||
'status': network['status'],
|
'status': network['status'],
|
||||||
'subnets': [subnet['id']
|
'subnets': [subnet['id']
|
||||||
for subnet in network['subnets']]}
|
for subnet in network['subnets']],
|
||||||
|
'standard_attr_id': network.standard_attr.id}
|
||||||
res['shared'] = self._is_network_shared(context, network.rbac_entries)
|
res['shared'] = self._is_network_shared(context, network.rbac_entries)
|
||||||
# Call auxiliary extend functions, if any
|
# Call auxiliary extend functions, if any
|
||||||
if process_extensions:
|
if process_extensions:
|
||||||
|
@ -1045,7 +1045,9 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
|
|||||||
'router_id': floatingip.router_id,
|
'router_id': floatingip.router_id,
|
||||||
'port_id': floatingip.fixed_port_id,
|
'port_id': floatingip.fixed_port_id,
|
||||||
'fixed_ip_address': fixed_ip_address,
|
'fixed_ip_address': fixed_ip_address,
|
||||||
'status': floatingip.status}
|
'status': floatingip.status,
|
||||||
|
'standard_attr_id': floatingip.db_obj.standard_attr.id,
|
||||||
|
}
|
||||||
# NOTE(mlavalle): The following assumes this mixin is used in a
|
# NOTE(mlavalle): The following assumes this mixin is used in a
|
||||||
# class inheriting from CommonDbMixin, which is true for all existing
|
# class inheriting from CommonDbMixin, which is true for all existing
|
||||||
# plugins.
|
# plugins.
|
||||||
|
@ -100,12 +100,12 @@ def _get_standard_attr_id(context, resource_uuid, resource_type):
|
|||||||
@db_api.retry_if_session_inactive()
|
@db_api.retry_if_session_inactive()
|
||||||
def create_initial_revision(context, resource_uuid, resource_type,
|
def create_initial_revision(context, resource_uuid, resource_type,
|
||||||
revision_number=INITIAL_REV_NUM,
|
revision_number=INITIAL_REV_NUM,
|
||||||
may_exist=False):
|
may_exist=False, std_attr_id=None):
|
||||||
LOG.debug('create_initial_revision uuid=%s, type=%s, rev=%s',
|
LOG.debug('create_initial_revision uuid=%s, type=%s, rev=%s',
|
||||||
resource_uuid, resource_type, revision_number)
|
resource_uuid, resource_type, revision_number)
|
||||||
db_func = context.session.merge if may_exist else context.session.add
|
db_func = context.session.merge if may_exist else context.session.add
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
std_attr_id = _get_standard_attr_id(
|
std_attr_id = std_attr_id or _get_standard_attr_id(
|
||||||
context, resource_uuid, resource_type)
|
context, resource_uuid, resource_type)
|
||||||
row = ovn_models.OVNRevisionNumbers(
|
row = ovn_models.OVNRevisionNumbers(
|
||||||
resource_uuid=resource_uuid, resource_type=resource_type,
|
resource_uuid=resource_uuid, resource_type=resource_type,
|
||||||
@ -124,7 +124,7 @@ def delete_revision(context, resource_uuid, resource_type):
|
|||||||
context.session.delete(row)
|
context.session.delete(row)
|
||||||
|
|
||||||
|
|
||||||
def _ensure_revision_row_exist(context, resource, resource_type):
|
def _ensure_revision_row_exist(context, resource, resource_type, std_attr_id):
|
||||||
"""Ensure the revision row exists.
|
"""Ensure the revision row exists.
|
||||||
|
|
||||||
Ensure the revision row exist before we try to bump its revision
|
Ensure the revision row exist before we try to bump its revision
|
||||||
@ -145,7 +145,8 @@ def _ensure_revision_row_exist(context, resource, resource_type):
|
|||||||
'%(res_type)s) when bumping the revision number. '
|
'%(res_type)s) when bumping the revision number. '
|
||||||
'Creating one.', {'res_uuid': resource['id'],
|
'Creating one.', {'res_uuid': resource['id'],
|
||||||
'res_type': resource_type})
|
'res_type': resource_type})
|
||||||
create_initial_revision(context, resource['id'], resource_type)
|
create_initial_revision(context, resource['id'], resource_type,
|
||||||
|
std_attr_id=std_attr_id)
|
||||||
|
|
||||||
|
|
||||||
@db_api.retry_if_session_inactive()
|
@db_api.retry_if_session_inactive()
|
||||||
@ -163,9 +164,16 @@ def get_revision_row(context, resource_uuid):
|
|||||||
def bump_revision(context, resource, resource_type):
|
def bump_revision(context, resource, resource_type):
|
||||||
revision_number = ovn_utils.get_revision_number(resource, resource_type)
|
revision_number = ovn_utils.get_revision_number(resource, resource_type)
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
_ensure_revision_row_exist(context, resource, resource_type)
|
# NOTE(ralonsoh): "resource" could be a dict or an OVO.
|
||||||
std_attr_id = _get_standard_attr_id(
|
try:
|
||||||
context, resource['id'], resource_type)
|
std_attr_id = resource.db_obj.standard_attr.id
|
||||||
|
except AttributeError:
|
||||||
|
std_attr_id = resource.get('standard_attr_id', None)
|
||||||
|
_ensure_revision_row_exist(context, resource, resource_type,
|
||||||
|
std_attr_id)
|
||||||
|
std_attr_id = (std_attr_id or
|
||||||
|
_get_standard_attr_id(context, resource['id'],
|
||||||
|
resource_type))
|
||||||
row = context.session.merge(ovn_models.OVNRevisionNumbers(
|
row = context.session.merge(ovn_models.OVNRevisionNumbers(
|
||||||
standard_attr_id=std_attr_id, resource_uuid=resource['id'],
|
standard_attr_id=std_attr_id, resource_uuid=resource['id'],
|
||||||
resource_type=resource_type))
|
resource_type=resource_type))
|
||||||
|
@ -327,7 +327,9 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase,
|
|||||||
'name': security_group['name'],
|
'name': security_group['name'],
|
||||||
'stateful': security_group['stateful'],
|
'stateful': security_group['stateful'],
|
||||||
'tenant_id': security_group['tenant_id'],
|
'tenant_id': security_group['tenant_id'],
|
||||||
'description': security_group['description']}
|
'description': security_group['description'],
|
||||||
|
'standard_attr_id': security_group.db_obj.standard_attr.id,
|
||||||
|
}
|
||||||
if security_group.rules:
|
if security_group.rules:
|
||||||
res['security_group_rules'] = [
|
res['security_group_rules'] = [
|
||||||
self._make_security_group_rule_dict(r.db_obj)
|
self._make_security_group_rule_dict(r.db_obj)
|
||||||
@ -661,7 +663,9 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase,
|
|||||||
'port_range_min': security_group_rule['port_range_min'],
|
'port_range_min': security_group_rule['port_range_min'],
|
||||||
'port_range_max': security_group_rule['port_range_max'],
|
'port_range_max': security_group_rule['port_range_max'],
|
||||||
'remote_ip_prefix': security_group_rule['remote_ip_prefix'],
|
'remote_ip_prefix': security_group_rule['remote_ip_prefix'],
|
||||||
'remote_group_id': security_group_rule['remote_group_id']}
|
'remote_group_id': security_group_rule['remote_group_id'],
|
||||||
|
'standard_attr_id': security_group_rule.standard_attr.id,
|
||||||
|
}
|
||||||
|
|
||||||
resource_extend.apply_funcs(ext_sg.SECURITYGROUPRULES, res,
|
resource_extend.apply_funcs(ext_sg.SECURITYGROUPRULES, res,
|
||||||
security_group_rule)
|
security_group_rule)
|
||||||
|
@ -341,7 +341,8 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
**kwargs):
|
**kwargs):
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
kwargs['context'], kwargs['security_group']['id'],
|
kwargs['context'], kwargs['security_group']['id'],
|
||||||
ovn_const.TYPE_SECURITY_GROUPS)
|
ovn_const.TYPE_SECURITY_GROUPS,
|
||||||
|
std_attr_id=kwargs['security_group']['standard_attr_id'])
|
||||||
|
|
||||||
def _create_security_group(self, resource, event, trigger,
|
def _create_security_group(self, resource, event, trigger,
|
||||||
security_group, **kwargs):
|
security_group, **kwargs):
|
||||||
@ -365,7 +366,8 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
sg_rule = kwargs.get('security_group_rule')
|
sg_rule = kwargs.get('security_group_rule')
|
||||||
context = kwargs.get('context')
|
context = kwargs.get('context')
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context, sg_rule['id'], ovn_const.TYPE_SECURITY_GROUP_RULES)
|
context, sg_rule['id'], ovn_const.TYPE_SECURITY_GROUP_RULES,
|
||||||
|
std_attr_id=sg_rule['standard_attr_id'])
|
||||||
|
|
||||||
def _process_sg_rule_notification(
|
def _process_sg_rule_notification(
|
||||||
self, resource, event, trigger, **kwargs):
|
self, resource, event, trigger, **kwargs):
|
||||||
@ -474,7 +476,8 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
self._validate_network_segments(context.network_segments)
|
self._validate_network_segments(context.network_segments)
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context._plugin_context, context.current['id'],
|
context._plugin_context, context.current['id'],
|
||||||
ovn_const.TYPE_NETWORKS)
|
ovn_const.TYPE_NETWORKS,
|
||||||
|
std_attr_id=context.current['standard_attr_id'])
|
||||||
|
|
||||||
def create_network_postcommit(self, context):
|
def create_network_postcommit(self, context):
|
||||||
"""Create a network.
|
"""Create a network.
|
||||||
@ -551,7 +554,8 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
def create_subnet_precommit(self, context):
|
def create_subnet_precommit(self, context):
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context._plugin_context, context.current['id'],
|
context._plugin_context, context.current['id'],
|
||||||
ovn_const.TYPE_SUBNETS)
|
ovn_const.TYPE_SUBNETS,
|
||||||
|
std_attr_id=context.current['standard_attr_id'])
|
||||||
|
|
||||||
def create_subnet_postcommit(self, context):
|
def create_subnet_postcommit(self, context):
|
||||||
self._ovn_client.create_subnet(context._plugin_context,
|
self._ovn_client.create_subnet(context._plugin_context,
|
||||||
@ -597,14 +601,16 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
port['id'])
|
port['id'])
|
||||||
|
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context._plugin_context, port['id'], ovn_const.TYPE_PORTS)
|
context._plugin_context, port['id'], ovn_const.TYPE_PORTS,
|
||||||
|
std_attr_id=context.current['standard_attr_id'])
|
||||||
|
|
||||||
# in the case of router ports we also need to
|
# in the case of router ports we also need to
|
||||||
# track the creation and update of the LRP OVN objects
|
# track the creation and update of the LRP OVN objects
|
||||||
if ovn_utils.is_lsp_router_port(port):
|
if ovn_utils.is_lsp_router_port(port):
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context._plugin_context, port['id'],
|
context._plugin_context, port['id'],
|
||||||
ovn_const.TYPE_ROUTER_PORTS)
|
ovn_const.TYPE_ROUTER_PORTS,
|
||||||
|
std_attr_id=context.current['standard_attr_id'])
|
||||||
|
|
||||||
def _is_port_provisioning_required(self, port, host, original_host=None):
|
def _is_port_provisioning_required(self, port, host, original_host=None):
|
||||||
vnic_type = port.get(portbindings.VNIC_TYPE, portbindings.VNIC_NORMAL)
|
vnic_type = port.get(portbindings.VNIC_TYPE, portbindings.VNIC_NORMAL)
|
||||||
@ -718,7 +724,8 @@ class OVNMechanismDriver(api.MechanismDriver):
|
|||||||
if not ovn_utils.is_lsp_router_port(original_port):
|
if not ovn_utils.is_lsp_router_port(original_port):
|
||||||
ovn_revision_numbers_db.create_initial_revision(
|
ovn_revision_numbers_db.create_initial_revision(
|
||||||
context._plugin_context, port['id'],
|
context._plugin_context, port['id'],
|
||||||
ovn_const.TYPE_ROUTER_PORTS, may_exist=True)
|
ovn_const.TYPE_ROUTER_PORTS, may_exist=True,
|
||||||
|
std_attr_id=context.current['standard_attr_id'])
|
||||||
|
|
||||||
def update_port_postcommit(self, context):
|
def update_port_postcommit(self, context):
|
||||||
"""Update a port.
|
"""Update a port.
|
||||||
|
@ -154,7 +154,8 @@ class OVNL3RouterPlugin(service_base.ServicePluginBase,
|
|||||||
def create_router_precommit(self, resource, event, trigger, context,
|
def create_router_precommit(self, resource, event, trigger, context,
|
||||||
router, router_id, router_db):
|
router, router_id, router_db):
|
||||||
db_rev.create_initial_revision(
|
db_rev.create_initial_revision(
|
||||||
context, router_id, ovn_const.TYPE_ROUTERS)
|
context, router_id, ovn_const.TYPE_ROUTERS,
|
||||||
|
std_attr_id=router_db.standard_attr.id)
|
||||||
|
|
||||||
def create_router(self, context, router):
|
def create_router(self, context, router):
|
||||||
router = super(OVNL3RouterPlugin, self).create_router(context, router)
|
router = super(OVNL3RouterPlugin, self).create_router(context, router)
|
||||||
@ -249,7 +250,8 @@ class OVNL3RouterPlugin(service_base.ServicePluginBase,
|
|||||||
def create_floatingip_precommit(self, resource, event, trigger, context,
|
def create_floatingip_precommit(self, resource, event, trigger, context,
|
||||||
floatingip, floatingip_id, floatingip_db):
|
floatingip, floatingip_id, floatingip_db):
|
||||||
db_rev.create_initial_revision(
|
db_rev.create_initial_revision(
|
||||||
context, floatingip_id, ovn_const.TYPE_FLOATINGIPS)
|
context, floatingip_id, ovn_const.TYPE_FLOATINGIPS,
|
||||||
|
std_attr_id=floatingip_db.standard_attr.id)
|
||||||
|
|
||||||
def create_floatingip(self, context, floatingip,
|
def create_floatingip(self, context, floatingip,
|
||||||
initial_status=n_const.FLOATINGIP_STATUS_DOWN):
|
initial_status=n_const.FLOATINGIP_STATUS_DOWN):
|
||||||
|
@ -286,6 +286,7 @@ class SecurityGroupDbMixinTestCase(testlib_api.SqlTestCase):
|
|||||||
'name': 'default',
|
'name': 'default',
|
||||||
'description': 'Default security group',
|
'description': 'Default security group',
|
||||||
'stateful': mock.ANY,
|
'stateful': mock.ANY,
|
||||||
|
'standard_attr_id': mock.ANY,
|
||||||
'security_group_rules': [
|
'security_group_rules': [
|
||||||
# Four rules for egress/ingress and ipv4/ipv6
|
# Four rules for egress/ingress and ipv4/ipv6
|
||||||
mock.ANY, mock.ANY, mock.ANY, mock.ANY,
|
mock.ANY, mock.ANY, mock.ANY, mock.ANY,
|
||||||
|
@ -3995,7 +3995,8 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
|
|||||||
project_id=f['floatingip']['project_id'],
|
project_id=f['floatingip']['project_id'],
|
||||||
router_id=f['floatingip']['router_id'],
|
router_id=f['floatingip']['router_id'],
|
||||||
status=f['floatingip']['status'],
|
status=f['floatingip']['status'],
|
||||||
tenant_id=f['floatingip']['tenant_id'])
|
tenant_id=f['floatingip']['tenant_id'],
|
||||||
|
standard_attr_id=mock.ANY)
|
||||||
finally:
|
finally:
|
||||||
registry.unsubscribe(fake_method, resources.FLOATING_IP,
|
registry.unsubscribe(fake_method, resources.FLOATING_IP,
|
||||||
events.AFTER_DELETE)
|
events.AFTER_DELETE)
|
||||||
|
@ -187,6 +187,16 @@ class FakePlugin(object):
|
|||||||
self._get_port_security_group_bindings = mock.Mock()
|
self._get_port_security_group_bindings = mock.Mock()
|
||||||
|
|
||||||
|
|
||||||
|
class FakeStandardAttribute(object):
|
||||||
|
|
||||||
|
def __init__(self, _id=1, resource_type=mock.ANY, description=mock.ANY,
|
||||||
|
revision_number=1):
|
||||||
|
self.id = _id
|
||||||
|
self.resource_type = resource_type
|
||||||
|
self.description = description
|
||||||
|
self.revision_number = revision_number
|
||||||
|
|
||||||
|
|
||||||
class FakeResource(dict):
|
class FakeResource(dict):
|
||||||
|
|
||||||
def __init__(self, manager=None, info=None, loaded=False, methods=None):
|
def __init__(self, manager=None, info=None, loaded=False, methods=None):
|
||||||
@ -282,6 +292,7 @@ class FakeNetwork(object):
|
|||||||
'availability_zones': [],
|
'availability_zones': [],
|
||||||
'availability_zone_hints': [],
|
'availability_zone_hints': [],
|
||||||
'is_default': False,
|
'is_default': False,
|
||||||
|
'standard_attr_id': 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Overwrite default attributes.
|
# Overwrite default attributes.
|
||||||
@ -659,6 +670,7 @@ class FakeFloatingIp(object):
|
|||||||
'dns_domain': '',
|
'dns_domain': '',
|
||||||
'dns_name': '',
|
'dns_name': '',
|
||||||
'project_id': '',
|
'project_id': '',
|
||||||
|
'standard_attr': FakeStandardAttribute(),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Overwrite default attributes.
|
# Overwrite default attributes.
|
||||||
|
@ -1181,6 +1181,7 @@ class TestMl2PortsV2(test_plugin.TestPortsV2, Ml2PluginV2TestCase):
|
|||||||
with self.port() as port:
|
with self.port() as port:
|
||||||
port_id = port['port']['id']
|
port_id = port['port']['id']
|
||||||
new_port = plugin.update_port(ctx, port_id, {"port": {}})
|
new_port = plugin.update_port(ctx, port_id, {"port": {}})
|
||||||
|
new_port.pop('standard_attr_id')
|
||||||
self.assertEqual(port["port"], new_port)
|
self.assertEqual(port["port"], new_port)
|
||||||
|
|
||||||
def _add_fake_dhcp_agent(self):
|
def _add_fake_dhcp_agent(self):
|
||||||
@ -2076,6 +2077,7 @@ class TestMl2DvrPortsV2(TestMl2PortsV2):
|
|||||||
self.assertEqual(1, publish.call_count)
|
self.assertEqual(1, publish.call_count)
|
||||||
# needed for a full match in the assertion below
|
# needed for a full match in the assertion below
|
||||||
port['port']['extra_dhcp_opts'] = []
|
port['port']['extra_dhcp_opts'] = []
|
||||||
|
port['port']['standard_attr_id'] = mock.ANY
|
||||||
expected = [mock.call(resources.PORT, events.PRECOMMIT_DELETE,
|
expected = [mock.call(resources.PORT, events.PRECOMMIT_DELETE,
|
||||||
mock.ANY, network=mock.ANY, bind=mock.ANY,
|
mock.ANY, network=mock.ANY, bind=mock.ANY,
|
||||||
port=port['port'], port_db=mock.ANY,
|
port=port['port'], port_db=mock.ANY,
|
||||||
|
Loading…
Reference in New Issue
Block a user