diff --git a/ansible/roles/bifrost/tasks/config.yml b/ansible/roles/bifrost/tasks/config.yml
index 5b95d20fd4deb7c5fdbe2646d7ad2f09162adae4..5fd4844ef2c56ca860610588a5b399af28713e96 100644
--- a/ansible/roles/bifrost/tasks/config.yml
+++ b/ansible/roles/bifrost/tasks/config.yml
@@ -44,15 +44,16 @@
     - { src: "id_rsa.pub", dest: "id_rsa.pub" }
     - { src: "ssh_config", dest: "ssh_config" }
 
-# NOTE(mgoddard): The following two tasks were lifted from the Bifrost plays.
-# Because Bifrost cannot modify /etc/hosts from within the container we must
-# do it here.
-- name: "RabbitMQ - Testing if hostname is defined in /etc/hosts"
-  command: grep -i "{{ ansible_hostname }}" /etc/hosts
-  ignore_errors: yes
-  register: test_grep_fix_hostname
-
-- name: "RabbitMQ - Fixing /etc/hosts"
-  command: sed -i 's/localhost/{{ ansible_hostname }} localhost/' /etc/hosts
-  when: test_grep_fix_hostname.rc != 0
-  become: True
+# NOTE(mgoddard): The following task was lifted from a Bifrost play
+# (playbooks/roles/bifrost-ironic-install/tasks/bootstrap.yml).  Because
+# Bifrost cannot modify /etc/hosts from within the container we must do it
+# here.
+- name: "Ensure /etc/hosts has good defaults"
+  lineinfile:
+    dest: "/etc/hosts"
+    regexp: "{{ item.regexp }}.*({{ ansible_hostname }}|localhost).*"
+    line: "{{ item.contents }}"
+  with_items:
+    - { regexp: '^127\.0\.0\.1', contents: '127.0.0.1 {{ ansible_hostname }} {{ ansible_fqdn }} localhost' }
+    - { regexp: '^::1', contents: '::1 {{ ansible_hostname }} {{ ansible_fqdn }} localhost ipv6-localhost ipv6-loopback' }
+  become: true