diff --git a/modules/ansible_generator.py b/modules/ansible_generator.py index 00ee4668543d3afb6392e1c18dd06d8390e80579..a0c70728f01f562f971018a76724f1fb325eb292 100644 --- a/modules/ansible_generator.py +++ b/modules/ansible_generator.py @@ -1,4 +1,4 @@ -from modules.file_manager import generate_file +from modules.file_manager import generate_file, copy_template_file from modules.ansible_vars_generator import generate_ansible_vars @@ -15,9 +15,9 @@ def _create_config_playbooks(input_definitions, flags): def _create_user_playbooks(input_definitions): """ Generates template playbooks and roles for users. """ - 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") + copy_template_file("playbook", "provisioning/playbook.yml") + copy_template_file("user_hosts", "provisioning/roles/hosts/tasks/main.yml") + copy_template_file("user_routers", "provisioning/roles/routers/tasks/main.yml") for host in input_definitions["hosts"]: generate_file("user_separate_hosts", "provisioning/roles/" + host["name"] + "/tasks/main.yml", host_name=host["name"]) diff --git a/modules/file_manager.py b/modules/file_manager.py index acd95eacc40b1aea44a05125714cc2286cd7270d..9bf009150bc4936b69b6b61a656c02ddaf42fa80 100644 --- a/modules/file_manager.py +++ b/modules/file_manager.py @@ -1,9 +1,9 @@ """ This module handles file imports and creations in general. """ -import jinja2 import os -import shutil -import yaml +from jinja2 import Environment, FileSystemLoader +from shutil import copyfile, rmtree +from yaml import dump, safe_load OUTPUT_DIRECTORY = "sandbox" @@ -12,19 +12,24 @@ def open_yaml(file_name): """ Opens and returns a file from the argument. """ try: input_file = open(str(file_name)) - return yaml.safe_load(input_file) + return safe_load(input_file) except IOError: print("Error: Cannot open the required file: " + str(file_name)) raise finally: input_file.close() + def copy_template_file(template, destination): """ Copies playbook templates that does not need jinja or yaml to the destination. """ - copyfile("templates/" + template, "sandbox/" + destination) + try: + copyfile("templates/" + template, "sandbox/" + destination) + except IOError: + print("Error: cannot write to this location.") + raise def dump_to_yaml(data, filename): @@ -36,7 +41,7 @@ def dump_to_yaml(data, filename): try: stream = open(OUTPUT_DIRECTORY + "/" + filename, 'w') - yaml.dump(data, stream) + dump(data, stream) except IOError: print("Error: cannot write to this location.") raise @@ -71,10 +76,11 @@ def _write_to_file(filename, output_string): 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) + template_loader = FileSystemLoader(searchpath="templates") + template_env = Environment(loader=template_loader, trim_blocks=True, lstrip_blocks=True) return template_env.get_template(template_name) + def _create_provisioning_directories(directory, device_definitions): """ Creates all subdirectories for privisioning. """ @@ -107,11 +113,10 @@ def _create_provisioning_directories(directory, device_definitions): raise - def prepare_directories(device_definitions): """ Prepares the necessary directory structure. """ - shutil.rmtree(OUTPUT_DIRECTORY, True) + rmtree(OUTPUT_DIRECTORY, True) try: os.mkdir(OUTPUT_DIRECTORY) @@ -121,8 +126,3 @@ def prepare_directories(device_definitions): _create_provisioning_directories("base_provisioning", device_definitions) _create_provisioning_directories("provisioning", device_definitions) - - - - -