Newer
Older
from cyber_sandbox_creator.input_parser.sandbox import Sandbox
from cyber_sandbox_creator.io.reader import Reader
from cyber_sandbox_creator.io.writer import Writer
from pathlib import Path
class Provision:
"""User provisioning generator"""
@staticmethod
def _provisioning_exists(sandbox) -> bool:
"""Check whether the provisioning directory already exists"""
return Reader.file_exists(sandbox.sandbox_dir /
sandbox.config["provisioning_playbook"])
@staticmethod
def _generate_template_provisioning(sandbox: Sandbox):
"""Generate an empty template playbook"""
provisioning_path: Path = sandbox.sandbox_dir / \
sandbox.config["provisioning_dir"]
if Provision._provisioning_exists(sandbox):
Writer.remove_directory(provisioning_path)
Writer.copy_file(Path(__file__).parent.parent /
"resources/files/user_playbook.yml", sandbox.sandbox_dir /
sandbox.config["provisioning_playbook"])
@staticmethod
def _copy_user_provisioning(sandbox: Sandbox):
"""Copy user provided provisioning files to the appropriate directory"""
provisioning_path: Path = sandbox.sandbox_dir / \
sandbox.config["provisioning_dir"]
if Provision._provisioning_exists(sandbox):
Writer.remove_directory(provisioning_path)
Writer.copy_directory(sandbox.user_provisioning_dir, provisioning_path)
@staticmethod
def generate_user_provisioning(sandbox: Sandbox):
"""Generate or copy user provisioning files"""
if sandbox.user_provisioning_dir is not None:
Provision._copy_user_provisioning(sandbox)
elif sandbox.generate_provisioning or \
not Provision._provisioning_exists(sandbox):
Provision._generate_template_provisioning(sandbox)
if sandbox.extra_vars is not None:
Writer.copy_file(sandbox.extra_vars,
sandbox.sandbox_dir /
sandbox.config["user_extra_vars"])