Files
templates/file_generator/generate_bind9.py
2026-01-22 12:37:26 +01:00

125 lines
4.7 KiB
Python

import os
import shutil
from datetime import datetime
from conpeek_setup import util
from jinja2 import Template
def get_serial():
current_date = datetime.now()
bind_serial_number = int(current_date.timestamp())
return bind_serial_number
def prepare_access_zone_config(external_ip, app_installation_domain, output_directory, template_file_dir, script_dir, internal_ip, developer_mode, kamailio_nat):
util.print_black_light(f"Preparing access zone (External IP:{external_ip}) (Core IP: {internal_ip})")
template_file_path = os.path.join(script_dir, template_file_dir)
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"app_installation_domain": app_installation_domain,
"access_ip": external_ip,
"serial_number": get_serial(),
"core_ip": internal_ip,
"developer_mode": developer_mode,
"kamailio_nat": kamailio_nat == '1'
}
output_text = template.render(data)
output_file = output_directory + "/db." + app_installation_domain
output_file_path = os.path.join(script_dir, output_file)
with open(output_file_path, "w") as file:
file.write(output_text + "\n")
def prepare_system_zone_config(core_ip, output_directory, template_file_dir, script_dir, system_app_installation_domain):
util.print_black_light(f"Preparing system zone (Core IP:{core_ip})")
template_file_path = os.path.join(script_dir, template_file_dir)
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
data = {
"system_app_installation_domain": system_app_installation_domain,
"core_ip": core_ip,
"serial_number": get_serial()
}
output_text = template.render(data)
output_file = output_directory + "/db." + system_app_installation_domain
output_file_path = os.path.join(script_dir, output_file)
with open(output_file_path, "w") as file:
file.write(output_text + "\n")
def create_config(data, template_path, output_path, script_dir):
template_file_path = os.path.join(script_dir, template_path)
file = open(template_file_path, 'r')
template_content = file.read()
template = Template(template_content)
output_text = template.render(data)
output_file_path = os.path.join(script_dir, output_path)
with open(output_file_path, "w") as file:
file.write(output_text + "\n")
def run(config, developer_mode=False):
util.print_black_light("Preparing bind configs")
internal_ip = config["new_machine_network"]["internal_ip"]
external_ip = config["new_machine_network"]["external_ip"]
app_installation_domain = config["new_machine_network"]["app_installation_domain"]
system_app_installation_domain = config["new_machine_network"]["system_app_installation_domain"]
var_bind_directory = os.path.join(util.get_output_path(), "var", "cache", "bind")
shutil.rmtree(var_bind_directory, ignore_errors=True)
os.makedirs(var_bind_directory, exist_ok=True)
etc_bind_directory = os.path.join(util.get_output_path(), "etc", "bind")
shutil.rmtree(etc_bind_directory, ignore_errors=True)
os.makedirs(etc_bind_directory, exist_ok=True)
template_directory = os.path.join(util.get_templates_path(), "bind9")
kamailio_nat = '1'
if config.has_option('kamailio', 'nat'):
kamailio_nat = config["kamailio"]["nat"]
# /var/cache configs
prepare_access_zone_config(external_ip, app_installation_domain, var_bind_directory, "access_zone.tmpl", template_directory, internal_ip, developer_mode, kamailio_nat)
prepare_system_zone_config(internal_ip, var_bind_directory, "system_zone.tmpl", template_directory, system_app_installation_domain)
forwarders = config["bind9"]["forwarders"]
if not forwarders:
forwarders = "1.1.1.1;"
if ";" not in forwarders:
util.print_yellow("; not in bind9 forwarders... dynamically add to end")
forwarders += ";"
# /etc/configs
data = {"forward_dns": forwarders}
create_config(data, "named.conf.options.tmpl", os.path.join(etc_bind_directory, "named.conf.options"), template_directory)
data = {"NETWORK_DOMAIN": app_installation_domain}
create_config(data, "named.conf.access_network.tmpl", os.path.join(etc_bind_directory, "named.conf.access_network"), template_directory)
data = {"NETWORK_DOMAIN": system_app_installation_domain}
create_config(data, "named.conf.system_network.tmpl", os.path.join(etc_bind_directory, "named.conf.system_network"), template_directory)
files_to_copy = [
"named.conf"
]
for file in files_to_copy:
util.copy_file(os.path.join(template_directory, file), etc_bind_directory)