|
|
|
@ -1,6 +1,5 @@
|
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
from argparse import ArgumentParser, FileType
|
|
|
|
|
from enum import Enum
|
|
|
|
|
from pydantic import (
|
|
|
|
@ -49,10 +48,16 @@ class ZoneName(str):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ZoneEntries(RestrictiveBaseModel):
|
|
|
|
|
addrs: list[IPvAnyNetwork] | None
|
|
|
|
|
files: list[FilePath] | None
|
|
|
|
|
zones: list[ZoneName] | None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Zone(RestrictiveBaseModel):
|
|
|
|
|
name: ZoneName
|
|
|
|
|
exclude: list[IPvAnyNetwork | ZoneName | FilePath] | None
|
|
|
|
|
include: list[IPvAnyNetwork | ZoneName | FilePath] | None
|
|
|
|
|
exclude: ZoneEntries | None
|
|
|
|
|
include: ZoneEntries | None
|
|
|
|
|
|
|
|
|
|
@root_validator()
|
|
|
|
|
def validate_mutually_exactly_one(cls, values):
|
|
|
|
@ -110,7 +115,7 @@ class Rule(RestrictiveBaseModel):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ForwardRule(Rule):
|
|
|
|
|
dest: ZoneName | list[IPvAnyNetwork | ZoneName | FilePath] | None
|
|
|
|
|
dest: ZoneEntries | None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Filter(RestrictiveBaseModel):
|
|
|
|
@ -126,7 +131,7 @@ class SNat(RestrictiveBaseModel):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Nat(RestrictiveBaseModel):
|
|
|
|
|
src: ZoneName | list[IPvAnyNetwork | ZoneName | FilePath] | None
|
|
|
|
|
src: ZoneEntries | None
|
|
|
|
|
snat: SNat
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|