diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index ccc1dc4d5b17ccedeeff3013951aa5e97383d7fb..758d9c372a4ce2da188849cb6264f4bfe7ac389c 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -436,6 +436,12 @@ class DockerWorker(object):
         else:
             return full_image, 'latest'
 
+    def get_image_id(self):
+        full_image = self.params.get('image')
+
+        image = self.dc.images(name=full_image, quiet=True)
+        return image[0] if len(image) == 1 else None
+
     def pull_image(self):
         if self.params.get('auth_username'):
             self.dc.login(
@@ -446,6 +452,7 @@ class DockerWorker(object):
             )
 
         image, tag = self.parse_image()
+        old_image_id = self.get_image_id()
 
         statuses = [
             json.loads(line.strip().decode('utf-8')) for line in self.dc.pull(
@@ -468,23 +475,8 @@ class DockerWorker(object):
                         failed=True
                     )
 
-            if status and status.get('status'):
-                # NOTE(SamYaple): This allows us to use v1 and v2 docker
-                # registries.  Eventually docker will stop supporting v1
-                # registries and when that happens we can remove this.
-                if 'legacy registry' in status['status']:
-                    continue
-                elif 'Downloaded newer image for' in status['status']:
-                    self.changed = True
-                    return
-                elif 'Image is up to date for' in status['status']:
-                    return
-                else:
-                    self.module.fail_json(
-                        msg="Unknown status message: {}".format(
-                            status['status']),
-                        failed=True
-                    )
+        new_image_id = self.get_image_id()
+        self.changed = old_image_id != new_image_id
 
     def remove_container(self):
         if self.check_container():
diff --git a/tests/test_kolla_docker.py b/tests/test_kolla_docker.py
index 65874f179d75b103e8cf038576ad68d3c63eb95e..b97a2d2c8f07cca05e7f3349725daf0d12c1e948 100644
--- a/tests/test_kolla_docker.py
+++ b/tests/test_kolla_docker.py
@@ -481,6 +481,22 @@ class TestImage(base.BaseTestCase):
         self.dw.dc.images.assert_called_once_with()
         self.assertTrue(return_data)
 
+    def test_get_image_id_not_exists(self):
+        self.dw = get_DockerWorker(
+            {'image': 'myregistrydomain.com:5000/ubuntu:16.04'})
+        self.dw.dc.images.return_value = []
+
+        return_data = self.dw.get_image_id()
+        self.assertIsNone(return_data)
+
+    def test_get_image_id_exists(self):
+        self.dw = get_DockerWorker(
+            {'image': 'myregistrydomain.com:5000/ubuntu:16.04'})
+        self.dw.dc.images.return_value = ['sha256:47c3bdbcf99f0c1a36e4db']
+
+        return_data = self.dw.get_image_id()
+        self.assertEqual('sha256:47c3bdbcf99f0c1a36e4db', return_data)
+
     def test_pull_image_new(self):
         self.dw = get_DockerWorker(
             {'image': 'myregistrydomain.com:5000/ubuntu:16.04',
@@ -494,6 +510,10 @@ class TestImage(base.BaseTestCase):
             b'{"status":"Digest: sha256:47c3bdbcf99f0c1a36e4db"}\r\n',
             b'{"status":"Downloaded newer image for ubuntu:16.04"}\r\n'
         ]
+        self.dw.dc.images.side_effect = [
+            [],
+            ['sha256:47c3bdbcf99f0c1a36e4db']
+        ]
 
         self.dw.pull_image()
         self.dw.dc.pull.assert_called_once_with(
@@ -510,6 +530,10 @@ class TestImage(base.BaseTestCase):
             b'{"status":"Digest: sha256:47c3bdbf0c1a36e4db"}\r\n',
             b'{"status":"mage is up to date for ubuntu:16.04"}\r\n'
         ]
+        self.dw.dc.images.side_effect = [
+            ['sha256:47c3bdbcf99f0c1a36e4db'],
+            ['sha256:47c3bdbcf99f0c1a36e4db']
+        ]
 
         self.dw.pull_image()
         self.dw.dc.pull.assert_called_once_with(
@@ -518,22 +542,6 @@ class TestImage(base.BaseTestCase):
             stream=True)
         self.assertFalse(self.dw.changed)
 
-    def test_pull_image_unknown_status(self):
-        self.dw = get_DockerWorker(
-            {'image': 'myregistrydomain.com:5000/ubuntu:16.04'})
-        self.dw.dc.pull.return_value = [
-            b'{"status": "some random message"}\r\n']
-
-        self.dw.pull_image()
-        self.dw.dc.pull.assert_called_once_with(
-            repository='myregistrydomain.com:5000/ubuntu',
-            tag='16.04',
-            stream=True)
-        self.assertFalse(self.dw.changed)
-        self.dw.module.fail_json.assert_called_with(
-            msg='Unknown status message: some random message',
-            failed=True)
-
     def test_pull_image_not_exists(self):
         self.dw = get_DockerWorker(
             {'image': 'unknown:16.04'})