From 0e6c334115976e1df5de7765131d0ccdf01624bf Mon Sep 17 00:00:00 2001 From: Sam Doran Date: Thu, 14 Jan 2021 09:35:39 -0500 Subject: [PATCH] pause - adjust warning when run in background (#73182) When the pause module is run in the background and seconds parameter is provided, do not warn. * Add tests * Fix existing tests The test wasn't failing when it should have. --- ...se-do-not-warn-background-with-seconds.yml | 2 ++ lib/ansible/plugins/action/pause.py | 3 ++- test/integration/targets/pause/runme.sh | 25 ++++++++++++++----- 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/pause-do-not-warn-background-with-seconds.yml diff --git a/changelogs/fragments/pause-do-not-warn-background-with-seconds.yml b/changelogs/fragments/pause-do-not-warn-background-with-seconds.yml new file mode 100644 index 00000000000..5856e7c40f3 --- /dev/null +++ b/changelogs/fragments/pause-do-not-warn-background-with-seconds.yml @@ -0,0 +1,2 @@ +bugfixes: + - pause - do not warn when running in the background if a timeout is provided (https://github.com/ansible/ansible/issues/73042) diff --git a/lib/ansible/plugins/action/pause.py b/lib/ansible/plugins/action/pause.py index 5dbaa02082b..88babe61b33 100644 --- a/lib/ansible/plugins/action/pause.py +++ b/lib/ansible/plugins/action/pause.py @@ -231,7 +231,8 @@ class ActionModule(ActionBase): while True: if not interactive: - display.warning("Not waiting for response to prompt as stdin is not interactive") + if seconds is None: + display.warning("Not waiting for response to prompt as stdin is not interactive") if seconds is not None: # Give the signal handler enough time to timeout time.sleep(seconds + 1) diff --git a/test/integration/targets/pause/runme.sh b/test/integration/targets/pause/runme.sh index 932f49ec2d8..eb2c6f7c7e8 100755 --- a/test/integration/targets/pause/runme.sh +++ b/test/integration/targets/pause/runme.sh @@ -4,8 +4,8 @@ set -eux ANSIBLE_ROLES_PATH=../ ansible-playbook setup.yml -# Test pause module when no tty and non-interactive. This is to prevent playbooks -# from hanging in cron and Tower jobs. +# Test pause module when no tty and non-interactive with no seconds parameter. +# This is to prevent playbooks from hanging in cron and Tower jobs. /usr/bin/env bash << EOF ansible-playbook test-pause-no-tty.yml 2>&1 | \ grep '\[WARNING\]: Not waiting for response to prompt as stdin is not interactive' && { @@ -17,11 +17,24 @@ ansible-playbook test-pause-no-tty.yml 2>&1 | \ } EOF +# Do not issue a warning when run in the background if a timeout is given +# https://github.com/ansible/ansible/issues/73042 +if sleep 0 | ansible localhost -m pause -a 'seconds=1' 2>&1 | grep '\[WARNING\]: Not waiting for response'; then + echo "Incorrectly issued warning when run in the background" + exit 1 +else + echo "Succesfully ran in the background with no warning" +fi + # Test redirecting stdout -# Issue #41717 -ansible-playbook pause-3.yml > /dev/null \ - && echo "Successfully redirected stdout" \ - || echo "Failure when attempting to redirect stdout" +# https://github.com/ansible/ansible/issues/41717 +if ansible-playbook pause-3.yml > /dev/null ; then + echo "Successfully redirected stdout" +else + echo "Failure when attempting to redirect stdout" + exit 1 +fi + # Test pause with seconds and minutes specified ansible-playbook test-pause.yml "$@"