scsd-configs/code/splitfgconfig.py

67 lines
2.1 KiB
Python

# /// script
# requires-python = ">=3.12"
# dependencies = [ "typer"]
# ///
# uv run splitfgconfig.py fg-short.conf
import sys
import os
import typer
from contextlib import suppress
def split_configfile(config_fn:str):
dirname=os.path.dirname(config_fn)
redacted_fn = f"{dirname}/redacted.cfg"
cmd="sed -r 's/(passwd ENC|password ENC|psksecret ENC|key ENC|token ENC|random-number ENC) .*/\\1 *HIDDEN*/' "+config_fn+" | sed -r '/BEGIN ENCRYPTED PRIVATE KEY/,/END ENCRYPTED PRIVATE KEY/{/^#/!{/^$/!d;};}' >"+redacted_fn
os.system(cmd)
outfile=None
vdom_def=False
in_vdom_def=False
vdom_list=[]
with open(redacted_fn) as infile:
for line in infile:
if line.find("uuid")>0:
continue
if not vdom_def and line.startswith("config vdom"):
in_vdom_def=True
vdom_list_ptr=0
continue
if in_vdom_def:
if line.startswith("edit"):
vdom_name=line.strip().split()[1]
vdom_list.append(vdom_name)
elif line.startswith("end"):
in_vdom_def=False
vdom_def=True
continue
if line.startswith("config global"):
subdir="global"
continue
elif line.startswith("config vdom"):
subdir=f"vdom_{vdom_list[vdom_list_ptr]}"
vdom_list_ptr+=1
continue
if line.startswith("edit "):
continue
if line.startswith("config "):
section_name="_".join(line.split()[1:2])
#print(section_name)
with suppress(FileExistsError):
os.mkdir(f"{dirname}/{subdir}")
section_fn=f"{dirname}/{subdir}/{section_name}.cfg"
if outfile:
outfile.close()
outfile=open(section_fn,"a")
if outfile:
outfile.write(line)
#print(dirname)
if __name__ == "__main__":
typer.run(split_configfile)
sys.exit()