From 42e7b747e4d84fb829c44dffc1b39aa3e170e191 Mon Sep 17 00:00:00 2001
From: zhuzeyu <zhu.zeyu@zte.com.cn>
Date: Sun, 22 Jan 2017 17:52:10 +0800
Subject: [PATCH] Use required_if in kolla_docker.py

Replace the original code with required_if when Ansible 2.0 lands

Change-Id: Ib2e19794bbe804470a880253d5870254041358c8
---
 ansible/library/kolla_docker.py | 34 +++++++++++++++------------------
 tests/test_kolla_docker.py      | 19 ++++++++++++++----
 2 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 494ae5243f..b70f288abb 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 e3fc51525f..69e302765d 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 = {