From 1be24c1f5f64e6ae1c6c7cece0c627702ab7a53e Mon Sep 17 00:00:00 2001
From: Attila Farkas <394097@mail.muni.cz>
Date: Mon, 12 Oct 2020 17:45:47 +0200
Subject: [PATCH] Move provisioning of Windows boxes to Controller

---
 modules/vagrant_generator.py | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/modules/vagrant_generator.py b/modules/vagrant_generator.py
index 2d9805e..29f8d9b 100644
--- a/modules/vagrant_generator.py
+++ b/modules/vagrant_generator.py
@@ -3,6 +3,7 @@
 import netaddr
 
 from modules.file_manager import generate_file, open_yaml
+from modules.controller import CONTROLLER_NAME
 
 VAGRANT_MAPPING = open_yaml("conf/vagrant_mapping.yml")
 VIRTUALBOX_MAPPING = open_yaml("conf/virtualbox_mapping.yml")
@@ -228,6 +229,15 @@ def _call_provisioner(input_definitions, flags):
     return provisioner_calls
 
 
+def _find_windows_boxes(definitions):
+    """Find and return list of host names with windows boxes."""
+    windows_hosts = []
+    for host in definitions["hosts"]:
+        if "windows" in host["base_box"]["image"].lower():
+            windows_hosts.append(host["name"])
+    return windows_hosts
+
+
 def _build_vagrant_definitions(input_definitions, flags):
     """Create a definition structure for vagrant.
 
@@ -243,12 +253,19 @@ def _build_vagrant_definitions(input_definitions, flags):
         device["commands"].extend(_call_provisioner(input_definitions, flags))
         vagrant_definitions.append(device)
 
+    windows_hosts = _find_windows_boxes(input_definitions)
+    windows_provisioning_commands = []
     for host in input_definitions["hosts"]:
         device = dict()
         device["type"] = "host"
         device["name"] = host["name"]
         device["commands"] = _create_commands(host)
-        device["commands"].extend(_call_provisioner(input_definitions, flags))
+        if host["name"] in windows_hosts:
+            windows_provisioning_commands.extend(_call_provisioner(input_definitions, flags))
+        else:
+            device["commands"].extend(_call_provisioner(input_definitions, flags))
+        if host["name"] == CONTROLLER_NAME:
+            device["commands"].extend(windows_provisioning_commands)
         vagrant_definitions.append(device)
 
     _add_all_networks(vagrant_definitions, input_definitions, flags)
-- 
GitLab