diff --git a/contrib/dev/vagrant/Vagrantfile b/contrib/dev/vagrant/Vagrantfile
index 1956ce0c77e46153a1d1a4c24bd33d768dcdd456..26b6294da1444a9374e3de73086fd1e41ca8a703 100644
--- a/contrib/dev/vagrant/Vagrantfile
+++ b/contrib/dev/vagrant/Vagrantfile
@@ -85,6 +85,7 @@ NUMBER_OF_CONTROL_NODES ||= 3
 NUMBER_OF_COMPUTE_NODES ||= 1
 NUMBER_OF_STORAGE_NODES ||= 1
 NUMBER_OF_NETWORK_NODES ||= 1
+NUMBER_OF_MONITOR_NODES ||= 1
 
 NODE_SETTINGS ||= {
   aio: {
@@ -110,6 +111,10 @@ NODE_SETTINGS ||= {
   network: {
     cpus: 1,
     memory: 1024
+  },
+  monitor: {
+    cpus: 1,
+    memory: 1024
   }
 }
 
@@ -232,7 +237,7 @@ Vagrant.configure(2) do |config|
   # The operator controls the deployment
   config.vm.define "operator", primary: true do |admin|
     admin.vm.hostname = "operator.local"
-    admin.vm.provision :shell, path: PROVISION_SCRIPT, args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{kolla_path} #{kolla_ansible_path} #{kolla_cli_path} #{NUMBER_OF_COMPUTE_NODES} #{NUMBER_OF_STORAGE_NODES} #{NUMBER_OF_NETWORK_NODES} #{NUMBER_OF_CONTROL_NODES}"
+    admin.vm.provision :shell, path: PROVISION_SCRIPT, args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{kolla_path} #{kolla_ansible_path} #{kolla_cli_path} #{NUMBER_OF_COMPUTE_NODES} #{NUMBER_OF_STORAGE_NODES} #{NUMBER_OF_NETWORK_NODES} #{NUMBER_OF_CONTROL_NODES} #{NUMBER_OF_MONITOR_NODES}"
     admin.vm.synced_folder kolla_ansible_repo_path, kolla_ansible_path, create:"True", type: get_default(:sync_method)
     admin.vm.synced_folder kolla_repo_path, kolla_path, create:"True", type: get_default(:sync_method)
     admin.vm.synced_folder kolla_cli_repo_path, kolla_cli_path, create:"True", type: get_default(:sync_method)
@@ -256,7 +261,7 @@ Vagrant.configure(2) do |config|
         hostname = "#{node_type}0#{i}"
         config.vm.define hostname do |node|
           node.vm.hostname = "#{hostname}.local"
-          node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{kolla_path} #{kolla_ansible_path} #{kolla_cli_path} #{NUMBER_OF_COMPUTE_NODES} #{NUMBER_OF_STORAGE_NODES} #{NUMBER_OF_NETWORK_NODES} #{NUMBER_OF_CONTROL_NODES}"
+          node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{kolla_path} #{kolla_ansible_path} #{kolla_cli_path} #{NUMBER_OF_COMPUTE_NODES} #{NUMBER_OF_STORAGE_NODES} #{NUMBER_OF_NETWORK_NODES} #{NUMBER_OF_CONTROL_NODES} #{NUMBER_OF_MONITOR_NODES}"
           node.vm.synced_folder File.join(vagrant_dir, 'storage', node_type), "/data/host", create:"True", type: get_default(:sync_method)
           node.vm.synced_folder File.join(vagrant_dir, 'storage', 'shared'), "/data/shared", create:"True", type: get_default(:sync_method)
           node.vm.synced_folder ".", vagrant_shared_folder, disabled: true
diff --git a/contrib/dev/vagrant/Vagrantfile.custom.example b/contrib/dev/vagrant/Vagrantfile.custom.example
index 65340aa0a1d0ab7dcf7058340f8efb8c8f7e122d..5c7cfbe47a2f4a6302dc9b3c775e530f57df0c88 100644
--- a/contrib/dev/vagrant/Vagrantfile.custom.example
+++ b/contrib/dev/vagrant/Vagrantfile.custom.example
@@ -68,6 +68,7 @@
 # NUMBER_OF_COMPUTE_NODES = 1
 # NUMBER_OF_STORAGE_NODES = 1
 # NUMBER_OF_NETWORK_NODES = 1
+# NUMBER_OF_MONITOR_NODES = 1
 
 # NODE_SETTINGS = {
 #   aio: {
@@ -93,5 +94,9 @@
 #   network: {
 #     cpus: 1,
 #     memory: 1024
+#   },
+#   monitor: {
+#     cpus: 1,
+#     memory: 1024
 #   }
 # }
diff --git a/contrib/dev/vagrant/bootstrap.sh b/contrib/dev/vagrant/bootstrap.sh
index 81477e61e9f872f60d023e9aa58bb624d28f797a..a4c47e78bfe3f5af5bab05d44052c3b6cf750d5b 100644
--- a/contrib/dev/vagrant/bootstrap.sh
+++ b/contrib/dev/vagrant/bootstrap.sh
@@ -15,6 +15,7 @@ NUMBER_OF_COMPUTE_NODES=$6
 NUMBER_OF_STORAGE_NODES=$7
 NUMBER_OF_NETWORK_NODES=$8
 NUMBER_OF_CONTROL_NODES=$9
+NUMBER_OF_MONITOR_NODES=$10
 
 export http_proxy=
 export https_proxy=