diff --git a/run_all.sh b/run_all.sh
index 403bf5bde1..9d1cd86775 100755
--- a/run_all.sh
+++ b/run_all.sh
@@ -27,13 +27,16 @@ ANSIBLE_PLAYBOOKS=$SYSTEM_CONFIG/playbooks
 # errexit
 set +e
 
+# Run all the ansible playbooks under timeout to prevent them from getting
+# stuck if they are oomkilled
+
 # First, sync the puppet repos with all the machines
-ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/update_puppet.yaml
+timeout -k 2m 120m ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/update_puppet.yaml
 # Run the git/gerrit sequence, since it's important that they all work together
-ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_git.yaml
+timeout -k 2m 120m ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_git.yaml
 # Run AFS changes separately so we can make sure to only do one at a time
 # (turns out quorum is nice to have)
-ansible-playbook -f 1 ${ANSIBLE_PLAYBOOKS}/remote_puppet_afs.yaml
-ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_infracloud.yaml
+timeout -k 2m 120m ansible-playbook -f 1 ${ANSIBLE_PLAYBOOKS}/remote_puppet_afs.yaml
+timeout -k 2m 120m ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_infracloud.yaml
 # Run everything else. We do not care if the other things worked
-ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_else.yaml
+timeout -k 2m 120m ansible-playbook -f 10 ${ANSIBLE_PLAYBOOKS}/remote_puppet_else.yaml