diff --git a/modules/ansible_generator.py b/modules/ansible_generator.py index fd53bde2aae182ae6090055db1a841ab6ff17840..daa9a18b0a53f8a1de5a528a122b4038e0867b97 100644 --- a/modules/ansible_generator.py +++ b/modules/ansible_generator.py @@ -1,4 +1,4 @@ -from modules.file_manager import load_template, generate_file +from modules.file_manager import generate_file def _create_inventory(input_definitions): """ Creates an inventory file with host groups. """ @@ -11,9 +11,7 @@ def _create_inventory(input_definitions): for router in input_definitions["routers"]: router_names.append(router["name"]) - inventory_template = load_template("inventory") - output = inventory_template.render(hosts=host_names, routers=router_names) - generate_file("provisioning/inventory.ini", output) + generate_file("inventory", "provisioning/inventory.ini", hosts=host_names, routers=router_names) def _create_config(input_definitions, flags): @@ -31,9 +29,7 @@ def _create_config(input_definitions, flags): new_router["name"] = router["name"] routers.append(new_router) - config_template = load_template("config") - output = config_template.render(hosts=hosts, routers=routers) - generate_file("base_provisioning/config.yml", output) + generate_file("config", "base_provisioning/config.yml", hosts=hosts, routers=routers) def _create_config_playbooks(input_definitions, flags): """ Generates playbooks and roles for basic device configuration. """ @@ -44,24 +40,15 @@ def _create_config_playbooks(input_definitions, flags): def _create_user_playbooks(input_definitions): """ Generates template playbooks and roles for users. """ - playbook_template = load_template("playbook") - generate_file("provisioning/playbook.yml", playbook_template.render()) + generate_file("playbook", "provisioning/playbook.yml") + generate_file("user_hosts", "provisioning/roles/hosts/tasks/main.yml") + generate_file("user_routers", "provisioning/roles/routers/tasks/main.yml") - user_hosts_template = load_template("user_hosts") - generate_file("provisioning/roles/hosts/tasks/main.yml", user_hosts_template.render()) - - user_routers_template = load_template("user_routers") - generate_file("provisioning/roles/routers/tasks/main.yml", user_routers_template.render()) - - user_host_template = load_template("user_separate_hosts") for host in input_definitions["hosts"]: - output = user_host_template.render(host_name=host["name"]) - generate_file("provisioning/roles/" + host["name"] + "/tasks/main.yml", output) + generate_file("user_separate_hosts", "provisioning/roles/" + host["name"] + "/tasks/main.yml", host_name=host["name"]) - user_router_template = load_template("user_separate_routers") for router in input_definitions["routers"]: - output = user_router_template.render(router_name=router["name"]) - generate_file("provisioning/roles/" + router["name"] + "/tasks/main.yml", output) + generate_file("user_separate_routers", "provisioning/roles/" + router["name"] + "/tasks/main.yml", router_name=router["name"]) diff --git a/modules/file_manager.py b/modules/file_manager.py index 974e78e8a597c08806511aefb3228980b39372ab..d31cf25f9178d8c33b0eff5d0cdf88a14aab76d2 100644 --- a/modules/file_manager.py +++ b/modules/file_manager.py @@ -20,14 +20,22 @@ def open_yaml(file_name): input_file.close() -def generate_file(filename, output_string): - """ - Generates a file from output string. +def generate_file(template, filename, **template_args): + """ Generates a file using a template. - :param filename: name of the file to create - :param output_string: string to write to the file + :param template: name of the template file + :param filename: path to the output file inside the output directory + :param template_args: arbitrary number of named args for the template """ + inventory_template = _load_template(template) + output = inventory_template.render(**template_args) + _write_to_file(filename, output) + + +def _write_to_file(filename, output_string): + """ Generates a file from output string. """ + try: new_file = open(OUTPUT_DIRECTORY + "/" + filename, "w") new_file.write(output_string) @@ -36,12 +44,8 @@ def generate_file(filename, output_string): raise -def load_template(template_name): - """ - Returns a loaded jinja2 template. - - :param template_name: name of the template file - """ +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, lstrip_blocks=True) diff --git a/modules/vagrant_generator.py b/modules/vagrant_generator.py index bd8331eba2a2ad919ecd4a559a90422de31ec372..58abc605d79f3f6703e42d83c8c57e4d9a51c8a5 100644 --- a/modules/vagrant_generator.py +++ b/modules/vagrant_generator.py @@ -2,7 +2,7 @@ import jinja2 -from modules.file_manager import load_template, generate_file, open_yaml +from modules.file_manager import generate_file, open_yaml VAGRANT_MAPPING = open_yaml("conf/vagrant_mapping.yml") VIRTUALBOX_MAPPING = open_yaml("conf/virtualbox_mapping.yml") @@ -169,17 +169,6 @@ def _build_vagrant_definitions(input_definitions, flags): return vagrant_definitions -def _build_vagrantfile(vagrant_definitions): - """ - Generates the Vagrantfile using the vagrantfile template and vagrant - definitions. - """ - - template = load_template("vagrantfile") - output = template.render(defs=vagrant_definitions) - generate_file("Vagrantfile", output) - - def generate_vagrantfile(input_definitions, flags): """ This method is responsible for Vagrantfile generation. @@ -195,7 +184,7 @@ def generate_vagrantfile(input_definitions, flags): raise try: - _build_vagrantfile(vagrant_definitions) + generate_file("vagrantfile", "Vagrantfile", defs=vagrant_definitions) except Exception: print("Could not generate Vagrantfile.") raise