def _is_forward_zone_removable(self): session = self.ib_cxt.context.session pattern = self.grid_config.default_domain_name_pattern subnet_id = self.ib_cxt.subnet['id'] network_id = self.ib_cxt.subnet['network_id'] tenant_id = self.ib_cxt.subnet['tenant_id'] # check all dynamic patterns from bottom to top hierarchy subnet_used = '{subnet_name}' in pattern or '{subnet_id}' in pattern if subnet_used: return True network_used = '{network_name}' in pattern or '{network_id}' in pattern if network_used: if dbi.is_last_subnet_in_network(session, subnet_id, network_id): return True tenant_used = '{tenant_name}' in pattern or '{tenant_id}' in pattern if tenant_used: if dbi.is_last_subnet_in_tenant(session, subnet_id, tenant_id): return True address_scope_used = ('{address_scope_name}' in pattern or '{address_scope_id}' in pattern) if address_scope_used: if dbi.is_last_subnet_in_address_scope(session, subnet_id): return True # now check for static zone if self.grid_config.allow_static_zone_deletion: return dbi.is_last_subnet_in_private_networks(session, subnet_id) else: return False
def _is_member_releasable(self): """Determine if service members can be released.""" session = self.ib_cxt.context.session subnet_id = self.ib_cxt.subnet.get('id') network_id = self.ib_cxt.subnet.get('network_id') tenant_id = self.ib_cxt.subnet.get('tenant_id') netview_scope = self.ib_cxt.grid_config.default_network_view_scope if netview_scope == const.NETWORK_VIEW_SCOPE_ADDRESS_SCOPE: return dbi.is_last_subnet_in_address_scope(session, subnet_id) if netview_scope == const.NETWORK_VIEW_SCOPE_TENANT: return dbi.is_last_subnet_in_tenant(session, subnet_id, tenant_id) if netview_scope == const.NETWORK_VIEW_SCOPE_NETWORK: return dbi.is_last_subnet_in_network(session, subnet_id, network_id) if netview_scope == const.NETWORK_VIEW_SCOPE_SUBNET: return True return dbi.is_last_subnet(session, subnet_id)