def main()

in src/init/iptables-rules/setup-iptables.py [0:0]


def main():
    logger = logging.getLogger()
    logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
    args = parse_args()
    log_args(logger, args)

    if args.clear_mount_paths:
        logging.info(f"Clearing specified mount paths: {args.clear_mount_paths}")
        for mount_path in args.clear_mount_paths:
            try:
                os.remove(f"{mount_path}/*")
            except FileNotFoundError:
                pass
            except Exception as e:
                logger.error(f"Failed to clear mount path {mount_path}. Error: {e}")
                raise

    if args.create_directories:
        logging.info(f"Creating specified directories: {args.create_directories}")
        for directory in args.create_directories:
            try:
                os.makedirs(directory, exist_ok=True)
                os.chmod(directory, 0o777)
            except FileExistsError:
                pass
            except Exception as e:
                logger.error(f"Failed to create directory {directory}. Error: {e}")
                raise

    logger.info("Generating config files...")
    iptables_config_file = "setup-iptables.sh"
    generate_config(
        template_path,
        "setup-iptables.sh.j2",
        iptables_config_file,
        allowed_ips=args.allowed_ips,
        enable_dns=args.enable_dns,
        dns_port=args.dns_port,
    )
    os.chmod(iptables_config_file, 0o755)

    try:
        proc = subprocess.run(
            f"bash {iptables_config_file}",
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            check=True,
        )
        logger.info("Successfully executed iptables rules.")
        logger.info(f"Output: {proc.stdout}")

    except subprocess.CalledProcessError as e:
        logger.error(f"Failed to launch subprocess. Error: {e}")
        logger.error(f"Output: {e.output}")
        logger.error(f"Error: {e.stderr}")
        raise