Something went wrong on our end
-
Attila Farkas authoredAttila Farkas authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
file_generator.py 4.33 KiB
import jinja2
import os
from modules.device_creator import create_devices
from modules.ansible_data_generator import create_network_map, create_host_map, create_network_ips
def _load_template(template_name):
""" Returns a loaded jinja2 template. """
template_loader = jinja2.FileSystemLoader(searchpath="templates")
template_env = jinja2.Environment(loader=template_loader, trim_blocks=True)
return template_env.get_template(template_name)
def _generate_file(filename, output_string):
""" Generates a file from output string. """
try:
new_file = open(filename, "w")
new_file.write(output_string)
except IOError:
print("Error: cannot write to this location.")
def _create_role_directory(role_name):
""" Creates directory structure for a role. """
try:
os.mkdir("provisioning")
except FileExistsError:
pass
try:
os.mkdir("provisioning/roles")
except FileExistsError:
pass
try:
os.mkdir("provisioning/roles/" + role_name)
except FileExistsError:
pass
try:
os.mkdir("provisioning/roles/" + role_name +"/tasks")
except FileExistsError:
pass
def generate_vagrantfile(definitions):
""" Writes the prepared output to a Vagrantfile. """
device_definitions = create_devices(definitions)
template = _load_template("vagrantfile")
output = template.render(devices=device_definitions)
_generate_file("Vagrantfile", output)
print("Info: Vagrantfile successfully created.")
def _generate_playbook(definitions):
""" Generates the main playbook. """
host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
network = create_network_map(
definitions["net_mappings"], definitions["router_mappings"])
network_ips = create_network_ips(definitions["networks"])
template = _load_template("playbook")
output = template.render(hosts=host_map, routers=network, network_ips=network_ips)
try:
os.mkdir("provisioning")
except FileExistsError:
pass
_generate_file("./provisioning/playbook.yml", output)
def _generate_device_configuration(definitions):
""" Generates a playbook with basic device configutarion. """
host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
network = create_network_map(
definitions["net_mappings"], definitions["router_mappings"])
network_ips = create_network_ips(definitions["networks"])
template = _load_template("device_configuration")
output = template.render(hosts=host_map, routers=network, network_ips=network_ips)
try:
os.mkdir("provisioning")
except FileExistsError:
pass
_generate_file("./provisioning/device_configuration.yml", output)
def _generate_hosts_role(definitions):
""" Generates hosts role. """
host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
network = create_network_map(
definitions["net_mappings"], definitions["router_mappings"])
template = _load_template("hosts")
output = template.render(hosts=host_map, routers=network)
_create_role_directory("hosts")
_generate_file("./provisioning/roles/hosts/tasks/main.yml", output)
def _generate_routers_role(definitions):
""" Generates routers role. """
if not definitions['routers'] or not definitions['router_mappings']:
print("Info: No router definition was found. Skipping router creation.")
return
host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
network = create_network_map(
definitions["net_mappings"], definitions["router_mappings"])
template = _load_template("routers")
output = template.render(hosts=host_map, routers=network)
_create_role_directory("routers")
_generate_file("./provisioning/roles/routers/tasks/main.yml", output)
def generate_ansible_files(device_definitions):
""" Generates files for ansible. """
_generate_playbook(device_definitions)
_generate_device_configuration(device_definitions)
_generate_hosts_role(device_definitions)
_generate_routers_role(device_definitions)
print("Info: Ansible files successfully created.")