diff --git a/tests/upgrade.sh b/tests/upgrade.sh
index 26a198d9fc35acf289e72461f32a5e434a185f9f..678add5c52ce18b786aa14ca8b4830114f36ef2e 100755
--- a/tests/upgrade.sh
+++ b/tests/upgrade.sh
@@ -8,6 +8,7 @@ export PYTHONUNBUFFERED=1
 
 
 function upgrade {
+    local ansible_extra_vars
     RAW_INVENTORY=/etc/kolla/inventory
     # generate self-signed certificates for the optional internal TLS tests
     if [[ "$TLS_ENABLED" = "True" ]]; then
@@ -21,11 +22,15 @@ function upgrade {
     kolla-ansible -i ${RAW_INVENTORY} -vvv chrony-cleanup &> /tmp/logs/ansible/chrony-cleanup
     if [[ $(source /etc/os-release && echo $ID) = "centos" ]]; then
         chrony_service="chronyd"
+        ansible_extra_vars=""
     else
         chrony_service="chrony"
+        # Force the use of python3 on Debian and Ubuntu remote hosts. These distros
+        # typically have an unversioned Python interpreter which links to python2.7.
+        ansible_extra_vars="-e ansible_python_interpreter=/usr/bin/python3"
     fi
-    ansible all -i $RAW_INVENTORY -m package -a 'name=chrony state=present' -b &> /tmp/logs/ansible/chrony-install
-    ansible all -i $RAW_INVENTORY -m service -a 'name='$chrony_service' state=started enabled=yes' -b &>> /tmp/logs/ansible/chrony-install
+    ansible all -i $RAW_INVENTORY $ansible_extra_vars -m package -a 'name=chrony state=present' -b &> /tmp/logs/ansible/chrony-install
+    ansible all -i $RAW_INVENTORY $ansible_extra_vars -m service -a 'name='$chrony_service' state=started enabled=yes' -b &>> /tmp/logs/ansible/chrony-install
 
     kolla-ansible -i ${RAW_INVENTORY} -vvv prechecks &> /tmp/logs/ansible/upgrade-prechecks
     kolla-ansible -i ${RAW_INVENTORY} -vvv pull &> /tmp/logs/ansible/pull-upgrade