diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 9fd85e66db7fc958278c7bdc324ac6e59b9d4ae4..f751d59d9399a491eddf245d9590ada8d41a4a5b 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -49,6 +49,7 @@ kolla_dev_repos_directory: "/opt/stack/"
 kolla_dev_repos_git: "https://git.openstack.org/openstack"
 kolla_dev_repos_pull: "no"
 kolla_dev_mode: "no"
+kolla_source_version: "master"
 
 # Proxy settings for containers such as magnum that need internet access
 container_http_proxy: ""
diff --git a/ansible/roles/aodh/defaults/main.yml b/ansible/roles/aodh/defaults/main.yml
index ac3eadf42379d72c147763ec236683326ae5928f..003d59a0449a0665511d042ca764f329252aea8d 100644
--- a/ansible/roles/aodh/defaults/main.yml
+++ b/ansible/roles/aodh/defaults/main.yml
@@ -103,3 +103,4 @@ openstack_aodh_auth: "{{ openstack_auth }}"
 aodh_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 aodh_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 aodh_dev_mode: "{{ kolla_dev_mode }}"
+aodh_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/aodh/tasks/clone.yml b/ansible/roles/aodh/tasks/clone.yml
index ddffef3a375985d2f899f30e673057ad7f363e5c..498c4a0bbbd62c05e181868f1f5d8e63beb59cd8 100644
--- a/ansible/roles/aodh/tasks/clone.yml
+++ b/ansible/roles/aodh/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ aodh_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ aodh_dev_repos_pull }}"
+    version: "{{ aodh_source_version }}"
diff --git a/ansible/roles/barbican/defaults/main.yml b/ansible/roles/barbican/defaults/main.yml
index 12e6bba07366e9b370a4c2e9b9e76a7d54d232ee..844c4e63ad0acd433e854f7ccc9a792586b01f95 100644
--- a/ansible/roles/barbican/defaults/main.yml
+++ b/ansible/roles/barbican/defaults/main.yml
@@ -92,3 +92,4 @@ openstack_barbican_auth: "{{ openstack_auth }}"
 barbican_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 barbican_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 barbican_dev_mode: "{{ kolla_dev_mode }}"
+barbican_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/barbican/tasks/clone.yml b/ansible/roles/barbican/tasks/clone.yml
index 573965753bfc93e97efc0a0bad22a8f525acfbbc..9b76362fe06aebce456c8e9755dbfc0069ae9e93 100644
--- a/ansible/roles/barbican/tasks/clone.yml
+++ b/ansible/roles/barbican/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ barbican_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ barbican_dev_repos_pull }}"
+    version: "{{ barbican_source_version }}"
diff --git a/ansible/roles/blazar/defaults/main.yml b/ansible/roles/blazar/defaults/main.yml
index 6a1ddcd3ab55075fd2627caeb6ef20275589a938..5dc41af547f9ad7e995062ed72eb6fb28833f03d 100644
--- a/ansible/roles/blazar/defaults/main.yml
+++ b/ansible/roles/blazar/defaults/main.yml
@@ -76,3 +76,4 @@ openstack_blazar_auth: "{{ openstack_auth }}"
 blazar_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 blazar_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 blazar_dev_mode: "{{ kolla_dev_mode }}"
+blazar_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/blazar/tasks/clone.yml b/ansible/roles/blazar/tasks/clone.yml
index a107eefa58255817acb9edda8ae0dc4ea4b3eaab..43427861d780030f3a3145f9b47a8282ae3f18ce 100644
--- a/ansible/roles/blazar/tasks/clone.yml
+++ b/ansible/roles/blazar/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ blazar_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ blazar_dev_repos_pull }}"
+    version: "{{ blazar_source_version }}"
diff --git a/ansible/roles/ceilometer/defaults/main.yml b/ansible/roles/ceilometer/defaults/main.yml
index 654a24de2286b35e12c14dce72198d5265be55e0..cbfc9f0e88a67fbcf69627654ffa3493aab7dff4 100644
--- a/ansible/roles/ceilometer/defaults/main.yml
+++ b/ansible/roles/ceilometer/defaults/main.yml
@@ -80,3 +80,4 @@ openstack_ceilometer_auth: "{{ openstack_auth }}"
 ceilometer_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 ceilometer_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 ceilometer_dev_mode: "{{ kolla_dev_mode }}"
+ceilometer_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/ceilometer/tasks/clone.yml b/ansible/roles/ceilometer/tasks/clone.yml
index 8fb02fa6ef2ad557ec0891bcf2434404cbf03f6f..d7515e9345213201e2df2e96f4c527feab2cab91 100644
--- a/ansible/roles/ceilometer/tasks/clone.yml
+++ b/ansible/roles/ceilometer/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ ceilometer_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ ceilometer_dev_repos_pull }}"
+    version: "{{ ceilometer_source_version }}"
diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml
index 7b5498f534e97b2f211df434cbe92968397ff630..d52f96da47acb60d9cb7b0a2949e880f84905d2b 100644
--- a/ansible/roles/cinder/defaults/main.yml
+++ b/ansible/roles/cinder/defaults/main.yml
@@ -217,3 +217,4 @@ zfssa_iscsi_target_interfaces:
 cinder_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 cinder_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 cinder_dev_mode: "{{ kolla_dev_mode }}"
+cinder_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/cinder/tasks/clone.yml b/ansible/roles/cinder/tasks/clone.yml
index 884d7248b3f73bcca40842369fed84d4f31cb578..5ac31ac2892f7637aae23940d3b2c56f0bb497c2 100644
--- a/ansible/roles/cinder/tasks/clone.yml
+++ b/ansible/roles/cinder/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ cinder_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ cinder_dev_repos_pull }}"
+    version: "{{ cinder_source_version }}"
diff --git a/ansible/roles/cloudkitty/defaults/main.yml b/ansible/roles/cloudkitty/defaults/main.yml
index 85579f863a752d98059a5f8cfd9dc47b0c86b97a..673616eface130b85ed2bb73a0e6823b1a381427 100644
--- a/ansible/roles/cloudkitty/defaults/main.yml
+++ b/ansible/roles/cloudkitty/defaults/main.yml
@@ -78,3 +78,4 @@ cloudkitty_openstack_keystone_default_role: "rating"
 cloudkitty_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 cloudkitty_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 cloudkitty_dev_mode: "{{ kolla_dev_mode }}"
+cloudkitty_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/cloudkitty/tasks/clone.yml b/ansible/roles/cloudkitty/tasks/clone.yml
index 906be97d929b95cfc6ac38490e8307d9bc85cd1e..775b9337823e28a3f4a0184e42726204fe474f01 100644
--- a/ansible/roles/cloudkitty/tasks/clone.yml
+++ b/ansible/roles/cloudkitty/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ cloudkitty_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ cloudkitty_dev_repos_pull }}"
+    version: "{{ cloudkitty_source_version }}"
diff --git a/ansible/roles/congress/defaults/main.yml b/ansible/roles/congress/defaults/main.yml
index 2193ba9c0d96151edc36567108d804ef6a848483..b2118b14695d03e3ac66e170ee5e8113f375fadb 100644
--- a/ansible/roles/congress/defaults/main.yml
+++ b/ansible/roles/congress/defaults/main.yml
@@ -87,3 +87,4 @@ openstack_congress_auth: "{{ openstack_auth }}"
 congress_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 congress_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 congress_dev_mode: "{{ kolla_dev_mode }}"
+congress_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/congress/tasks/clone.yml b/ansible/roles/congress/tasks/clone.yml
index 6942bd3f4bea38016eded999d36c9e83a1829c05..1cee822709b26f28fad4a3561222ad32b8f5d026 100644
--- a/ansible/roles/congress/tasks/clone.yml
+++ b/ansible/roles/congress/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ congress_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ congress_dev_repos_pull }}"
+    version: "{{ congress_source_version }}"
diff --git a/ansible/roles/designate/defaults/main.yml b/ansible/roles/designate/defaults/main.yml
index 8ec80eddfcae407a43b00237f2666b11a352f900..774f27e98a83b2d7eaa5866770f92e1eb25c3fc8 100644
--- a/ansible/roles/designate/defaults/main.yml
+++ b/ansible/roles/designate/defaults/main.yml
@@ -155,6 +155,7 @@ openstack_designate_auth: "{{ openstack_auth }}"
 designate_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 designate_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 designate_dev_mode: "{{ kolla_dev_mode }}"
+designate_source_version: "{{ kolla_source_version }}"
 
 ####################
 ## Designate
diff --git a/ansible/roles/designate/tasks/clone.yml b/ansible/roles/designate/tasks/clone.yml
index 9e7e97e92fadd7847200abc45354b8af5cc9b501..2eab8626b35545a1235306d3292d6929e26b54cd 100644
--- a/ansible/roles/designate/tasks/clone.yml
+++ b/ansible/roles/designate/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ designate_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ designate_dev_repos_pull }}"
+    version: "{{ designate_source_version }}"
diff --git a/ansible/roles/glance/defaults/main.yml b/ansible/roles/glance/defaults/main.yml
index 6be838feb0ef14684eb006604b31742fea6aa765..d4b401fdd8bb70946ab32f78450491812bb59935 100644
--- a/ansible/roles/glance/defaults/main.yml
+++ b/ansible/roles/glance/defaults/main.yml
@@ -124,6 +124,7 @@ openstack_glance_auth: "{{ openstack_auth }}"
 glance_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 glance_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 glance_dev_mode: "{{ kolla_dev_mode }}"
+glance_source_version: "{{ kolla_source_version }}"
 
 ################################################
 # VMware - OpenStack VMware support
diff --git a/ansible/roles/glance/tasks/clone.yml b/ansible/roles/glance/tasks/clone.yml
index a85e10eb2a4f2cca007aaed7f4f18b4677b52c91..5dfd3490f71cea1b9730f633d7b492e982cd1fcb 100644
--- a/ansible/roles/glance/tasks/clone.yml
+++ b/ansible/roles/glance/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ glance_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ glance_dev_repos_pull }}"
+    version: "{{ glance_source_version }}"
diff --git a/ansible/roles/heat/defaults/main.yml b/ansible/roles/heat/defaults/main.yml
index 46506aee0c4efefc5eda5ad0b1d562149c5ed448..ecfe421385b256926094fc1b5d9a5ab6f7654c72 100644
--- a/ansible/roles/heat/defaults/main.yml
+++ b/ansible/roles/heat/defaults/main.yml
@@ -92,3 +92,4 @@ openstack_heat_auth: "{{ openstack_auth }}"
 heat_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 heat_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 heat_dev_mode: "{{ kolla_dev_mode }}"
+heat_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/heat/tasks/clone.yml b/ansible/roles/heat/tasks/clone.yml
index d9ad99bda330afd32c36e2db94f08b3d908bd934..0171cb9fd70f6e6984a14ef04ca42a10f5ae9b5a 100644
--- a/ansible/roles/heat/tasks/clone.yml
+++ b/ansible/roles/heat/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ heat_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ heat_dev_repos_pull }}"
+    version: "{{ heat_source_version }}"
diff --git a/ansible/roles/horizon/defaults/main.yml b/ansible/roles/horizon/defaults/main.yml
index 9fac5bc0e1f4b1858123b7eb8370483c98b2226e..71fa903211c9e87960b11b5ba1f3b1371cd8d2fb 100644
--- a/ansible/roles/horizon/defaults/main.yml
+++ b/ansible/roles/horizon/defaults/main.yml
@@ -78,3 +78,5 @@ murano_dashboard_git_repository: "{{ kolla_dev_repos_git }}/murano-dashboard"
 horizon_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 horizon_dev_mode: "{{ kolla_dev_mode }}"
 horizon_murano_dev_mode: "{{ kolla_dev_mode }}"
+horizon_source_version: "{{ kolla_source_version }}"
+horizon_murano_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/horizon/tasks/clone.yml b/ansible/roles/horizon/tasks/clone.yml
index 46799ef6686629953e249961ff4ef5fa74f242fe..8b42d92d23a8d8021661c882ea2501f2b5ac8b62 100644
--- a/ansible/roles/horizon/tasks/clone.yml
+++ b/ansible/roles/horizon/tasks/clone.yml
@@ -4,11 +4,13 @@
     repo: "{{ horizon_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ horizon_dev_repos_pull }}"
+    version: "{{ horizon_source_version }}"
 
 - name: Cloning murano-dashboard source repositories for development
   git:
     repo: "{{ murano_dashboard_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/murano-dashboard"
     update: "{{ horizon_dev_repos_pull }}"
+    version: "{{ horizon_murano_source_version }}"
   when:
     - horizon_murano_dev_mode | bool
diff --git a/ansible/roles/ironic/defaults/main.yml b/ansible/roles/ironic/defaults/main.yml
index c7070276101b277bc011a0c5e7317936c9b6d65a..ddd26e941561d9cfc7b269e67f3d8e8acf9f2785 100644
--- a/ansible/roles/ironic/defaults/main.yml
+++ b/ansible/roles/ironic/defaults/main.yml
@@ -166,3 +166,4 @@ ironic_inspector_git_repository: "{{ kolla_dev_repos_git }}/ironic-inspector"
 ironic_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 ironic_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 ironic_dev_mode: "{{ kolla_dev_mode }}"
+ironic_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/ironic/tasks/clone.yml b/ansible/roles/ironic/tasks/clone.yml
index 6a01b8cf677d11d3a33ccada185eb0c756999b3a..db7f2a83f9c846833daff414a83f494ebc196ca0 100644
--- a/ansible/roles/ironic/tasks/clone.yml
+++ b/ansible/roles/ironic/tasks/clone.yml
@@ -4,9 +4,11 @@
     repo: "{{ ironic_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ ironic_dev_repos_pull }}"
+    version: "{{ ironic_source_version }}"
 
 - name: Cloning ironic-inspector source repository for development
   git:
     repo: "{{ ironic_inspector_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/ironic-inspector"
     update: "{{ ironic_dev_repos_pull }}"
+    version: "{{ ironic_source_version }}"
diff --git a/ansible/roles/keystone/defaults/main.yml b/ansible/roles/keystone/defaults/main.yml
index 4f1af8adc15fa020d19c9940615912cf5860268e..25afb256b5df25ba5a0280bf5846c9026e17f847 100644
--- a/ansible/roles/keystone/defaults/main.yml
+++ b/ansible/roles/keystone/defaults/main.yml
@@ -89,3 +89,4 @@ openstack_keystone_auth: "{{ openstack_auth }}"
 keystone_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 keystone_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 keystone_dev_mode: "{{ kolla_dev_mode }}"
+keystone_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/keystone/tasks/clone.yml b/ansible/roles/keystone/tasks/clone.yml
index b1105344c431a838b93a3bf947b28e37ee613b01..a56604d536fa9878686ea656ba1b63b3424343a8 100644
--- a/ansible/roles/keystone/tasks/clone.yml
+++ b/ansible/roles/keystone/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ keystone_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ keystone_dev_repos_pull }}"
+    version: "{{ keystone_source_version }}"
diff --git a/ansible/roles/kuryr/defaults/main.yml b/ansible/roles/kuryr/defaults/main.yml
index 7b1d783a661f94eab2286fac6a924d033592fa34..6a62b94b7fc41fffab413f5a2c842a8ffc1f43d5 100644
--- a/ansible/roles/kuryr/defaults/main.yml
+++ b/ansible/roles/kuryr/defaults/main.yml
@@ -55,3 +55,4 @@ kuryr_libnetwork_git_repository: "{{ kolla_dev_repos_git }}/{{ libnetwork_projec
 kuryr_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 kuryr_dev_mode: "{{ kolla_dev_mode }}"
 kuryr_dimensions: "{{ default_container_dimensions }}"
+kuryr_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/kuryr/tasks/clone.yml b/ansible/roles/kuryr/tasks/clone.yml
index 32a1db911752f6aefa97b518bb90262f3d805606..a4ea56297e15d523aa68af28217736f290e89322 100644
--- a/ansible/roles/kuryr/tasks/clone.yml
+++ b/ansible/roles/kuryr/tasks/clone.yml
@@ -4,9 +4,11 @@
     repo: "{{ kuryr_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ kuryr_dev_repos_pull }}"
+    version: "{{ kuryr_source_version }}"
 
 - name: Cloning kuryr-libnetwork source repository for development
   git:
     repo: "{{ kuryr_libnetwork_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ libnetwork_project_name }}"
     update: "{{ kuryr_dev_repos_pull }}"
+    version: "{{ kuryr_source_version }}"
diff --git a/ansible/roles/magnum/defaults/main.yml b/ansible/roles/magnum/defaults/main.yml
index f800b0f3730b42154f710ef0cb58edfb1a548b8e..5c9cbb5d7b73ae2b0d1e8aa65b82607a0331684c 100644
--- a/ansible/roles/magnum/defaults/main.yml
+++ b/ansible/roles/magnum/defaults/main.yml
@@ -87,3 +87,4 @@ openstack_magnum_auth: "{{ openstack_auth }}"
 magnum_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 magnum_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 magnum_dev_mode: "{{ kolla_dev_mode }}"
+magnum_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/magnum/tasks/clone.yml b/ansible/roles/magnum/tasks/clone.yml
index f98b8836e805f18d942da02e79dd304afa4391de..d4c28aa0a58b49732c70e0ccfc68b91e377fd400 100644
--- a/ansible/roles/magnum/tasks/clone.yml
+++ b/ansible/roles/magnum/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ magnum_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ magnum_dev_repos_pull }}"
+    version: "{{ magnum_source_version }}"
diff --git a/ansible/roles/manila/defaults/main.yml b/ansible/roles/manila/defaults/main.yml
index decefdda49401bb679e8dd1d3151276004731dbd..b77abbc625a42cf255d5beed593720eaa4693cec 100644
--- a/ansible/roles/manila/defaults/main.yml
+++ b/ansible/roles/manila/defaults/main.yml
@@ -159,3 +159,4 @@ manila_enabled_backends: "{{ manila_backends|selectattr('enabled', 'equalto', tr
 manila_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 manila_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 manila_dev_mode: "{{ kolla_dev_mode }}"
+manila_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/manila/tasks/clone.yml b/ansible/roles/manila/tasks/clone.yml
index 9a9b43d232be3b59714febe0431937753ae7b177..2a0f303d4b1400016b8c859b928a6d108cb8c8dd 100644
--- a/ansible/roles/manila/tasks/clone.yml
+++ b/ansible/roles/manila/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ manila_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ manila_dev_repos_pull }}"
+    version: "{{ manila_source_version }}"
diff --git a/ansible/roles/mistral/defaults/main.yml b/ansible/roles/mistral/defaults/main.yml
index a6379704747f29f7dc07c7de987deab2749bb96c..a4fa556e44e6e7f4037976d4716c9177f06c37eb 100644
--- a/ansible/roles/mistral/defaults/main.yml
+++ b/ansible/roles/mistral/defaults/main.yml
@@ -87,3 +87,4 @@ openstack_mistral_auth: "{{ openstack_auth }}"
 mistral_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 mistral_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 mistral_dev_mode: "{{ kolla_dev_mode }}"
+mistral_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/mistral/tasks/clone.yml b/ansible/roles/mistral/tasks/clone.yml
index 051e4ab410a683d94174dcd7838d2dc91934e55e..341299de2a5eb1a8ba79718ec7f2012e188e5b91 100644
--- a/ansible/roles/mistral/tasks/clone.yml
+++ b/ansible/roles/mistral/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ mistral_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ mistral_dev_repos_pull }}"
+    version: "{{ mistral_source_version }}"
diff --git a/ansible/roles/murano/defaults/main.yml b/ansible/roles/murano/defaults/main.yml
index c16a2ae38cf2c44ebbfba5b6788f88ea0dcc422b..da5f950975a442abd3caa6f7126f02a67934d503 100644
--- a/ansible/roles/murano/defaults/main.yml
+++ b/ansible/roles/murano/defaults/main.yml
@@ -71,3 +71,4 @@ murano_agent_timeout: 3600
 murano_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 murano_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 murano_dev_mode: "{{ kolla_dev_mode }}"
+murano_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/murano/tasks/clone.yml b/ansible/roles/murano/tasks/clone.yml
index 6c470004d599bb4f1a01322b07af0444a95e20df..d412d6c46e2c38df92c5488df5eb2319d9f2734d 100644
--- a/ansible/roles/murano/tasks/clone.yml
+++ b/ansible/roles/murano/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ murano_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ murano_dev_repos_pull }}"
+    version: "{{ murano_source_version }}"
diff --git a/ansible/roles/sahara/defaults/main.yml b/ansible/roles/sahara/defaults/main.yml
index cb5a930f1c924b77c582fec3c1059d7aac694713..43502b3cd830d50e65377b867b69f016a423765d 100644
--- a/ansible/roles/sahara/defaults/main.yml
+++ b/ansible/roles/sahara/defaults/main.yml
@@ -75,3 +75,4 @@ openstack_sahara_auth: "{{ openstack_auth }}"
 sahara_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 sahara_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 sahara_dev_mode: "{{ kolla_dev_mode }}"
+sahara_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/sahara/tasks/clone.yml b/ansible/roles/sahara/tasks/clone.yml
index 401c913b0b639b50e2731da1ed1bc89a5d1ba348..ae22e136d528020faf998cc740469a73246ca120 100644
--- a/ansible/roles/sahara/tasks/clone.yml
+++ b/ansible/roles/sahara/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ sahara_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ sahara_dev_repos_pull }}"
+    version: "{{ sahara_source_version }}"
diff --git a/ansible/roles/senlin/defaults/main.yml b/ansible/roles/senlin/defaults/main.yml
index 26027d95254dce22b4051ed9609f51765f8990fa..f79b53e8b8fef1ad8d80b067012070a16f293bfe 100644
--- a/ansible/roles/senlin/defaults/main.yml
+++ b/ansible/roles/senlin/defaults/main.yml
@@ -71,3 +71,4 @@ openstack_senlin_auth: "{{ openstack_auth }}"
 senlin_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 senlin_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 senlin_dev_mode: "{{ kolla_dev_mode }}"
+senlin_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/senlin/tasks/clone.yml b/ansible/roles/senlin/tasks/clone.yml
index 453b3e4234d9a91fcc40c0dda6fb95001c7e4dcb..1ab389a8d006e91b3da6de2243bfee1cc5ea1b1d 100644
--- a/ansible/roles/senlin/tasks/clone.yml
+++ b/ansible/roles/senlin/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ senlin_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ senlin_dev_repos_pull }}"
+    version: "{{ senlin_source_version }}"
diff --git a/ansible/roles/solum/defaults/main.yml b/ansible/roles/solum/defaults/main.yml
index 92d68f4106a363af95ca0b3a2882d48fd2ea7989..150fd0b74fb990dda836e4375c3ac9f53eb32b0f 100644
--- a/ansible/roles/solum/defaults/main.yml
+++ b/ansible/roles/solum/defaults/main.yml
@@ -107,3 +107,4 @@ openstack_solum_auth: "{{ openstack_auth }}"
 solum_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 solum_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 solum_dev_mode: "{{ kolla_dev_mode }}"
+solum_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/solum/tasks/clone.yml b/ansible/roles/solum/tasks/clone.yml
index 60583449952da5765ba27801a7f937e9d71651c5..8a434af9e0ff0b0318ae5d51d59b32a148c07965 100644
--- a/ansible/roles/solum/tasks/clone.yml
+++ b/ansible/roles/solum/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ solum_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ solum_dev_repos_pull }}"
+    version: "{{ solum_source_version }}"
diff --git a/ansible/roles/tacker/defaults/main.yml b/ansible/roles/tacker/defaults/main.yml
index 4ad540b9516e2bf0edd9e59424ce4f73ae487ce2..dbcbae4e7f768b9443de100d034a7cca5fa08ffe 100644
--- a/ansible/roles/tacker/defaults/main.yml
+++ b/ansible/roles/tacker/defaults/main.yml
@@ -68,3 +68,4 @@ openstack_tacker_auth: "{{ openstack_auth }}"
 tacker_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 tacker_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 tacker_dev_mode: "{{ kolla_dev_mode }}"
+tacker_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/tacker/tasks/clone.yml b/ansible/roles/tacker/tasks/clone.yml
index 0f724ae0a9102ba1949be4742c4e38cf632a65d7..e36cd776d9b83511461ed9ce8d03ee8da06c4a56 100644
--- a/ansible/roles/tacker/tasks/clone.yml
+++ b/ansible/roles/tacker/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ tacker_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ tacker_dev_repos_pull }}"
+    version: "{{ tacker_source_version }}"
diff --git a/ansible/roles/vitrage/defaults/main.yml b/ansible/roles/vitrage/defaults/main.yml
index 3b705e6381cba6654304249162f1a96e5dca3ae6..6b04b7631c3b6dfc3fb19b1d944f99cc20529d18 100644
--- a/ansible/roles/vitrage/defaults/main.yml
+++ b/ansible/roles/vitrage/defaults/main.yml
@@ -151,3 +151,4 @@ vitrage_datasources: "{{ vitrage_datasource | selectattr('enabled', 'equalto', t
 vitrage_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 vitrage_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 vitrage_dev_mode: "{{ kolla_dev_mode }}"
+vitrage_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/vitrage/tasks/clone.yml b/ansible/roles/vitrage/tasks/clone.yml
index 6a44ee63c6354ba99cd95e80da648363bee81066..3e42798309a6c6b23d63c9af2d933cf0f62bb713 100644
--- a/ansible/roles/vitrage/tasks/clone.yml
+++ b/ansible/roles/vitrage/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ vitrage_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ vitrage_dev_repos_pull }}"
+    version: "{{ vitrage_source_version }}"
diff --git a/ansible/roles/watcher/defaults/main.yml b/ansible/roles/watcher/defaults/main.yml
index d143bb38e92866cc571fff27948461fde9fa18cc..b50833d3432b72491c409c803135d453c6db33b2 100644
--- a/ansible/roles/watcher/defaults/main.yml
+++ b/ansible/roles/watcher/defaults/main.yml
@@ -87,3 +87,4 @@ openstack_watcher_auth: "{{ openstack_auth }}"
 watcher_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 watcher_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 watcher_dev_mode: "{{ kolla_dev_mode }}"
+watcher_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/watcher/tasks/clone.yml b/ansible/roles/watcher/tasks/clone.yml
index 47c1b86be099cc0dd9b4d6def215c98d7506a6b2..53bb788eea29a8d5c539355f2dce08bd5d80fe0c 100644
--- a/ansible/roles/watcher/tasks/clone.yml
+++ b/ansible/roles/watcher/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ watcher_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ watcher_dev_repos_pull }}"
+    version: "{{ watcher_source_version }}"
diff --git a/ansible/roles/zun/defaults/main.yml b/ansible/roles/zun/defaults/main.yml
index 52e10849946c8a8854a628acaf3f38d521f4a3ae..40d7a4c89313a3ad9ee921eef8852858806b96ce 100644
--- a/ansible/roles/zun/defaults/main.yml
+++ b/ansible/roles/zun/defaults/main.yml
@@ -90,3 +90,4 @@ openstack_zun_auth: "{{ openstack_auth }}"
 zun_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
 zun_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
 zun_dev_mode: "{{ kolla_dev_mode }}"
+zun_source_version: "{{ kolla_source_version }}"
diff --git a/ansible/roles/zun/tasks/clone.yml b/ansible/roles/zun/tasks/clone.yml
index c3f35c2504ed6dbef2b2f91374ffbb95b0393232..3f71539a2d2c61ee7db1823fe7773cec757dc061 100644
--- a/ansible/roles/zun/tasks/clone.yml
+++ b/ansible/roles/zun/tasks/clone.yml
@@ -4,3 +4,4 @@
     repo: "{{ zun_git_repository }}"
     dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
     update: "{{ zun_dev_repos_pull }}"
+    version: "{{ zun_source_version }}"