Check ret for None in zuul_run_command

The check 'if not ret' not only matches a missing return code but also
the value 0 which is actually a successful run. Thus successful
commands end with an error 'Something went horribly wrong during task
execution'. This can be fixed by explicitly checking for None.

Also adds a successful shell task to the test_playbook test case which
fails without this patch.

Change-Id: If1d0721574a82e247659ab0f865ae6acfe12a6be
diff --git a/tests/fixtures/config/ansible/git/common-config/playbooks/hello-post.yaml b/tests/fixtures/config/ansible/git/common-config/playbooks/hello-post.yaml
index d528be1..36a22e4 100644
--- a/tests/fixtures/config/ansible/git/common-config/playbooks/hello-post.yaml
+++ b/tests/fixtures/config/ansible/git/common-config/playbooks/hello-post.yaml
@@ -10,3 +10,7 @@
         that:
           - st.stat.exists
           - st.stat.isreg
+
+    - name: Simple shell task.
+      shell: |+
+        echo "Hello world"
diff --git a/zuul/ansible/library/command.py b/zuul/ansible/library/command.py
index d27c83e..f701b48 100644
--- a/zuul/ansible/library/command.py
+++ b/zuul/ansible/library/command.py
@@ -409,9 +409,9 @@
                 if t.isAlive():
                     console.addLine("[Zuul] standard output/error still open "
                                     "after child exited")
-                if not ret and fail_json_kwargs:
+                if ret is None and fail_json_kwargs:
                     ret = fail_json_kwargs['rc']
-                elif not ret and not fail_json_kwargs:
+                elif ret is None and not fail_json_kwargs:
                     ret = -1
                 console.addLine("[Zuul] Task exit code: %s\n" % ret)
                 if ret == -1 and not fail_json_kwargs: