import logging
import peewee as pw
from defence360agent.utils.validate import IP, NumericIPVersion
from im360.utils.net import unpack_ip_network
logger = logging.getLogger(__name__)
def migrate(migrator, database, fake=False, **kwargs):
"""Should fix all IPv6 addresses in the database.
wrong record {"ip": "2602:fb54:3b6::"}
correct record {"ip": "2602:fb54:3b6::/64"}
"""
if fake:
# Nothing to do in fake mode, it used to prepare models to following
# migrations
return
try:
IPList = migrator.orm["iplist"]
with database.atomic():
for ip_obj in (
IPList.select()
.where(IPList.version == NumericIPVersion[IP.V6])
.dicts()
):
try:
net = unpack_ip_network(
ip_obj["network_address"],
ip_obj["netmask"],
ip_obj["version"],
)
ip_str = IP.ip_net_to_string(net)
# If ip format already