"""Fixed text constants: banner, usage text, Sprut API base URL. Reproduced verbatim from the bash original (ipsec_migrator_v2.sh) except for the invocation name, which is "python -m ipsec_migrator" here instead of "$0" since this port has no console-script entry point. """ SPRUT_API_BASE = "https://infra.mail.ru:9696/v2.0" PROG = "python -m ipsec_migrator" BANNER = r""" ██╗██████╗ ███████╗███████╗ ██████╗ ██╗ ██╗██████╗ ███╗ ██╗ ██║██╔══██╗██╔════╝██╔════╝██╔════╝ ██║ ██║██╔══██╗████╗ ██║ ██║██████╔╝███████╗█████╗ ██║ ██║ ██║██████╔╝██╔██╗ ██║ ██║██╔═══╝ ╚════██║██╔══╝ ██║ ╚██╗ ██╔╝██╔═══╝ ██║╚██╗██║ ██║██║ ███████║███████╗╚██████╗ ╚████╔╝ ██║ ██║ ╚████║ ╚═╝╚═╝ ╚══════╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═╝ ╚═══╝ ███╗ ███╗██╗ ██████╗ ██████╗ █████╗ ████████╗██╗ ██████╗ ███╗ ██╗ ███████╗ ██████╗██████╗ ██╗██████╗ ████████╗ ████╗ ████║██║██╔════╝ ██╔══██╗██╔══██╗╚══██╔══╝██║██╔═══██╗████╗ ██║ ██╔════╝██╔════╝██╔══██╗██║██╔══██╗╚══██╔══╝ ██╔████╔██║██║██║ ███╗██████╔╝███████║ ██║ ██║██║ ██║██╔██╗ ██║ ███████╗██║ ██████╔╝██║██████╔╝ ██║ ██║╚██╔╝██║██║██║ ██║██╔══██╗██╔══██║ ██║ ██║██║ ██║██║╚██╗██║ ╚════██║██║ ██╔══██╗██║██╔═══╝ ██║ ██║ ╚═╝ ██║██║╚██████╔╝██║ ██║██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║ ███████║╚██████╗██║ ██║██║██║ ██║ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ Input file format: ,,, XXXX6d56-b2dc-4c83-b96f-e4e28af6XXXX,,MS1,standard where DC_Router_UUID - optional (script will create a new one (DC_Router) if UUID won't be provided) """ USAGE = f""" Usage: Prepare input CSV file then use option: 1. Full run (audit Neutron + configure Sprut): {PROG} [output.json] [--dry-run] 2. Audit only (collect Neutron VPNaaS config, write JSON, skip Sprut entirely): {PROG} --audit-only [output.json] 3. Configure Sprut from a previously generated audit JSON (no OpenStack re-query): {PROG} --from-audit [--dry-run] """