diff --git a/modules/vagrant_generator.py b/modules/vagrant_generator.py
index 2ed2e79c3b5c98010ebc041cbf38f0175321fa71..dac0359c59dcdb141176090fa3de6cef95458df7 100644
--- a/modules/vagrant_generator.py
+++ b/modules/vagrant_generator.py
@@ -133,15 +133,23 @@ def _create_ansible_commands(playbook_location, input_definitions, flags):
         install_mode["value"] = "pip"
         commands.append(install_mode)
 
+    if "extra_vars" in flags and flags["extra_vars"]:
+        if "ansible_local" in flags and flags["ansible_local"]:
+            extra_vars_location = "/vagrant/extra_vars.yml"
+        else:
+            extra_vars_location = flags["ansible_local"]
+        user_extra_vars = dict()
+        user_extra_vars["type"] = "string"
+        user_extra_vars["command"] = "raw_arguments"
+        user_extra_vars["value"] = "--extra-vars=@" + extra_vars_location
+        commands.append(user_extra_vars)
+
     extravars = dict()
     extravars["type"] = "dictionary"
     extravars["command"] = "extra_vars"
     extravars["dictionary"] = dict()
     extravars["dictionary"]["ansible_python_interpreter"] = \
         "\"/usr/bin/python3\""
-    if "extra_vars" in flags and flags["extra_vars"]:
-        user_extra_vars = open_yaml(flags["extra_vars"])
-        extravars["dictionary"].update(user_extra_vars)
     commands.append(extravars)
 
     return commands
@@ -187,6 +195,25 @@ def _call_provisioner(input_definitions, flags):
     """Create entry to vagrant definitions for calling the provisioner."""
     provisioner_calls = []
 
+    if "extra_vars" in flags and flags["extra_vars"] and\
+        "ansible_local" in flags and flags["ansible_local"]:
+        copy_extra_vars = dict()
+        copy_extra_vars["type"] = "provision"
+        copy_extra_vars["provisioner"] = "file"
+        copy_extra_vars["note"] = "copy extra_vars to target machine"
+
+        source_arg = dict()
+        source_arg["type"] = "string"
+        source_arg["command"] = "source"
+        source_arg["value"] = flags["extra_vars"]
+        destination_arg = dict()
+        destination_arg["type"] = "string"
+        destination_arg["command"] = "destination"
+        destination_arg["value"] = "/vagrant/extra_vars.yml"
+        copy_extra_vars["commands"] = [source_arg, destination_arg]
+        provisioner_calls.append(copy_extra_vars)
+
+
     config_playbook = dict()
     config_playbook["type"] = "provision"
     if "ansible_local" in flags and flags["ansible_local"]: