From 9f7f5b98970e9a48f703714e1dbf6fdda46cab5d Mon Sep 17 00:00:00 2001
From: Attila Farkas <394097@mail.muni.cz>
Date: Mon, 14 Jun 2021 23:18:31 +0200
Subject: [PATCH] Include Ansible requirements file if present

---
 cyber_sandbox_creator/input_parser/sandbox.py          | 5 +++++
 cyber_sandbox_creator/vagrant_generator/vagrantfile.py | 9 +++++++++
 2 files changed, 14 insertions(+)

diff --git a/cyber_sandbox_creator/input_parser/sandbox.py b/cyber_sandbox_creator/input_parser/sandbox.py
index 2565173..db41e4c 100644
--- a/cyber_sandbox_creator/input_parser/sandbox.py
+++ b/cyber_sandbox_creator/input_parser/sandbox.py
@@ -128,6 +128,11 @@ class Sandbox:
         self.ansible_installed: bool = ansible_installed
         self.verbose_ansible: bool = verbose_ansible
         self.user_provisioning_dir: Optional[Path] = user_provisioning_dir
+        if self.user_provisioning_dir is not None:
+            self.include_requirements: bool = (self.user_provisioning_dir /
+                                               "requirements.yml").is_file()
+        else:
+            self.include_requirements: bool = False
         self.extra_vars: Optional[Path] = extra_vars_file
         self.config: Dict = Reader.open_yaml(configuration_path)
         self.flavors: List[Flavor] = self._load_flavors(flavors_path)
diff --git a/cyber_sandbox_creator/vagrant_generator/vagrantfile.py b/cyber_sandbox_creator/vagrant_generator/vagrantfile.py
index 9f35afd..18b167f 100644
--- a/cyber_sandbox_creator/vagrant_generator/vagrantfile.py
+++ b/cyber_sandbox_creator/vagrant_generator/vagrantfile.py
@@ -113,6 +113,15 @@ class Vagrantfile:
         if sandbox.extra_vars is not None:
             attributes.append(String("extra_vars",
                                      sandbox.config["user_extra_vars"]))
+        if sandbox.include_requirements:
+            attributes.append(String("galaxy_role_file",
+                                     "provisioning/requirements.yml"))
+            attributes.append(String("galaxy_roles_path", "provisioning/roles"))
+            attributes.append(String("galaxy_command",
+                                     "sudo ansible-galaxy install --role-file="
+                                     "%{role_file} --roles-path=%{roles_path} "
+                                     "--force"))
+
         return attributes
 
     @staticmethod
-- 
GitLab