From 64f6da6866434f441d9d1be3a4c2d5e8743438f9 Mon Sep 17 00:00:00 2001
From: Attila Farkas <394097@mail.muni.cz>
Date: Mon, 12 Oct 2020 17:57:17 +0200
Subject: [PATCH] Limit provisioning calls to relevant device

---
 modules/vagrant_generator.py | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/modules/vagrant_generator.py b/modules/vagrant_generator.py
index 29f8d9b..79bbc1d 100644
--- a/modules/vagrant_generator.py
+++ b/modules/vagrant_generator.py
@@ -96,7 +96,7 @@ def _create_commands(device_attributes):
     return commands
 
 
-def _create_ansible_commands(playbook_location, input_definitions, flags):
+def _create_ansible_commands(device_name, playbook_location, input_definitions, flags):
     """Create commands for running a playbook from the Vagrantfile."""
     commands = []
 
@@ -106,6 +106,12 @@ def _create_ansible_commands(playbook_location, input_definitions, flags):
     playbook["value"] = playbook_location
     commands.append(playbook)
 
+    limit = dict()
+    limit["type"] = "string"
+    limit["command"] = "limit"
+    limit["value"] = device_name
+    commands.append(limit)
+
     if "verbose_ansible" in flags and flags["verbose_ansible"]:
         verbosity = dict()
         verbosity["type"] = "string"
@@ -196,7 +202,7 @@ def _add_all_networks(vagrant_definitions, input_definitions, flags):
                                     input_definitions)
 
 
-def _call_provisioner(input_definitions, flags):
+def _call_provisioner(device_name, input_definitions, flags):
     """Create entry to vagrant definitions for calling the provisioner."""
     provisioner_calls = []
 
@@ -207,7 +213,8 @@ def _call_provisioner(input_definitions, flags):
     else:
         config_playbook["provisioner"] = "ansible"
     config_playbook["note"] = "basic configuration of devices and networks"
-    config_playbook["commands"] = _create_ansible_commands(BASE_PLAYBOOK,
+    config_playbook["commands"] = _create_ansible_commands(device_name,
+                                                           BASE_PLAYBOOK,
                                                            input_definitions,
                                                            flags)
 
@@ -220,7 +227,8 @@ def _call_provisioner(input_definitions, flags):
     else:
         user_playbook["provisioner"] = "ansible"
     user_playbook["note"] = "user configuration of devices"
-    user_playbook["commands"] = _create_ansible_commands(USER_PLAYBOOK,
+    user_playbook["commands"] = _create_ansible_commands(device_name,
+                                                         USER_PLAYBOOK,
                                                          input_definitions,
                                                          flags)
 
@@ -250,7 +258,7 @@ def _build_vagrant_definitions(input_definitions, flags):
         device["type"] = "router"
         device["name"] = router["name"]
         device["commands"] = _create_commands(router)
-        device["commands"].extend(_call_provisioner(input_definitions, flags))
+        device["commands"].extend(_call_provisioner(device["name"], input_definitions, flags))
         vagrant_definitions.append(device)
 
     windows_hosts = _find_windows_boxes(input_definitions)
@@ -261,9 +269,9 @@ def _build_vagrant_definitions(input_definitions, flags):
         device["name"] = host["name"]
         device["commands"] = _create_commands(host)
         if host["name"] in windows_hosts:
-            windows_provisioning_commands.extend(_call_provisioner(input_definitions, flags))
+            windows_provisioning_commands.extend(_call_provisioner(device["name"], input_definitions, flags))
         else:
-            device["commands"].extend(_call_provisioner(input_definitions, flags))
+            device["commands"].extend(_call_provisioner(device["name"], input_definitions, flags))
         if host["name"] == CONTROLLER_NAME:
             device["commands"].extend(windows_provisioning_commands)
         vagrant_definitions.append(device)
-- 
GitLab