Merge "API replay: post bulk sec group rule create by tenant"

This commit is contained in:
Zuul 2021-07-21 20:39:32 +00:00 committed by Gerrit Code Review
commit 59d6c01238
1 changed files with 16 additions and 11 deletions

View File

@ -421,7 +421,7 @@ class ApiReplayClient(utils.PrepareObjectForMigration):
dest_sec_group['security_group_rules']) dest_sec_group['security_group_rules'])
is False): is False):
try: try:
rule_start = datetime.elapsed() rule_start = datetime.now()
body = self.prepare_security_group_rule(sg_rule) body = self.prepare_security_group_rule(sg_rule)
self.dest_neutron.create_security_group_rule( self.dest_neutron.create_security_group_rule(
{'security_group_rule': body}) {'security_group_rule': body})
@ -462,7 +462,8 @@ class ApiReplayClient(utils.PrepareObjectForMigration):
# Use bulk rules creation for the rules of the SG # Use bulk rules creation for the rules of the SG
if not sg_rules: if not sg_rules:
continue continue
rules = [] # SG rules must be grouped per tenant
rules = {}
for sg_rule in sg_rules: for sg_rule in sg_rules:
# skip the default rules that were already created # skip the default rules that were already created
skip = False skip = False
@ -478,8 +479,10 @@ class ApiReplayClient(utils.PrepareObjectForMigration):
break break
if not skip: if not skip:
body = self.prepare_security_group_rule(sg_rule) body = self.prepare_security_group_rule(sg_rule)
rules.append({'security_group_rule': body}) tenant_id = sg_rule.get('tenant_id', 'default')
tenant_rules = rules.get(tenant_id, [])
tenant_rules.append({'security_group_rule': body})
rules[tenant_id] = tenant_rules
# save rules to create once all the sgs are created # save rules to create once all the sgs are created
if rules: if rules:
rules_dict[sg['id']] = rules rules_dict[sg['id']] = rules
@ -488,13 +491,15 @@ class ApiReplayClient(utils.PrepareObjectForMigration):
# Create the rules after all security groups are created to allow # Create the rules after all security groups are created to allow
# dependencies in remote_group_id # dependencies in remote_group_id
for sg_id, sg in rules_dict.items(): for sg_id, sg_rules in rules_dict.items():
try: try:
rule_start = datetime.now() rule_start = datetime.now()
for tenant_id, tenant_rules in sg_rules.items():
rules = self.dest_neutron.create_security_group_rule( rules = self.dest_neutron.create_security_group_rule(
{'security_group_rules': sg}) {'security_group_rules': tenant_rules})
LOG.info("Created %d security group rules for SG %s: %s", LOG.info("Created %d security group rules for "
len(rules), sg_id, "SG %s and tenant %s: %s",
len(rules), sg_id, tenant_id,
",".join([rule.get('id') for rule in ",".join([rule.get('id') for rule in
rules.get('security_group_rules', [])])) rules.get('security_group_rules', [])]))
self._log_elapsed( self._log_elapsed(