diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 494ae5243f5e33f4a7d2d827c5c6a715c2a62374..b70f288abbbd214eff5980235c90c2245dd9073e 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -712,13 +712,24 @@ def generate_module():
         volumes=dict(required=False, type='list'),
         volumes_from=dict(required=False, type='list')
     )
-    required_together = [
-        ['tls_cert', 'tls_key']
+    required_if = [
+        ['action', 'pull_image', ['image']],
+        ['action', 'start_container', ['image', 'name']],
+        ['action', 'compare_container', ['name']],
+        ['action', 'compare_image', ['name']],
+        ['action', 'create_volume', ['name']],
+        ['action', 'get_container_env', ['name']],
+        ['action', 'get_container_state', ['name']],
+        ['action', 'recreate_or_restart_container', ['name']],
+        ['action', 'remove_container', ['name']],
+        ['action', 'remove_volume', ['name']],
+        ['action', 'restart_container', ['name']],
+        ['action', 'stop_container', ['name']]
     ]
     module = AnsibleModule(
         argument_spec=argument_spec,
-        required_together=required_together,
-        bypass_checks=True
+        required_if=required_if,
+        bypass_checks=False
     )
 
     new_args = module.params.pop('common_options', dict())
@@ -740,21 +751,6 @@ def generate_module():
 def main():
     module = generate_module()
 
-    # TODO(SamYaple): Replace with required_if when Ansible 2.0 lands
-    if (module.params.get('action') in ['pull_image', 'start_container']
-       and not module.params.get('image')):
-        module.fail_json(
-            msg="missing required arguments: image",
-            failed=True
-        )
-    # TODO(SamYaple): Replace with required_if when Ansible 2.0 lands
-    if (module.params.get('action') != 'pull_image'
-       and not module.params.get('name')):
-        module.fail_json(
-            msg="missing required arguments: name",
-            failed=True
-        )
-
     try:
         dw = DockerWorker(module)
         # TODO(inc0): We keep it bool to have ansible deal with consistent
diff --git a/tests/test_kolla_docker.py b/tests/test_kolla_docker.py
index e3fc51525f65841d0f608fa3b74f5b93311b7afd..69e302765d70a19fde8193480e523175ac23940c 100644
--- a/tests/test_kolla_docker.py
+++ b/tests/test_kolla_docker.py
@@ -80,16 +80,27 @@ class ModuleArgsTest(base.BaseTestCase):
             volumes=dict(required=False, type='list'),
             volumes_from=dict(required=False, type='list')
             )
-        required_together = [
-            ['tls_cert', 'tls_key']
+        required_if = [
+            ['action', 'pull_image', ['image']],
+            ['action', 'start_container', ['image', 'name']],
+            ['action', 'compare_container', ['name']],
+            ['action', 'compare_image', ['name']],
+            ['action', 'create_volume', ['name']],
+            ['action', 'get_container_env', ['name']],
+            ['action', 'get_container_state', ['name']],
+            ['action', 'recreate_or_restart_container', ['name']],
+            ['action', 'remove_container', ['name']],
+            ['action', 'remove_volume', ['name']],
+            ['action', 'restart_container', ['name']],
+            ['action', 'stop_container', ['name']]
         ]
 
         kd.AnsibleModule = mock.MagicMock()
         kd.generate_module()
         kd.AnsibleModule.assert_called_with(
             argument_spec=argument_spec,
-            required_together=required_together,
-            bypass_checks=True
+            required_if=required_if,
+            bypass_checks=False
         )
 
 FAKE_DATA = {