I trigger multiple tomcat startup scripts and then need to check if all process listens on their specific port across multiple hosts in the quickest time possible.
For the test case, I m writing 3 scripts instead of tomcat scripts that runs on a single host and listen on ports 4443,4445,4447 respectively as below.
cat /tmp/startapp1.sh
while test 1 # infinite loop
sleep 10
do
nc -l localhost 4443 > /tmp/app1.log
done
cat /tmp/startapp2.sh
while test 1 # infinite loop
sleep 30
do
nc -l localhost 4445 > /tmp/app2.log
done
cat /tmp/startapp3.sh
while test 1 # infinite loop
sleep 20
do
nc -l localhost 4447 > /tmp/app3.log
done
Below is my code to trigger the script and check if the telnet is successful:
cat main.yml
-
include_tasks: “internal.yml”
loop: -
/tmp/startapp1.sh 4443
-
/tmp/startapp2.sh 4445
-
/tmp/startapp3.sh 4447
cat internal.yml -
shell: “{{ item.split()[0] }}”
async: 600
poll: 0 -
name: DEBUG CHECK TELNET
shell: “telnet {{ item.split()[1] }}”
delegate_to: localhost
register: telnetcheck
until: telnetcheck.rc == 0
async: 600
poll: 0
delay: 6
retries: 10 -
name: Result of TELNET
async_status:
jid: “{{ item.ansible_job_id }}”
register: _jobs
until: _jobs.finished
delay: 6
retries: 10
with_items: “{{ telnetcheck.results }}”
Expectation: The above three scripts should start along with telnet check in about 30 seconds.
Thus, the basic check that needs to be done here is telnet until: telnetcheck.rc == 0 but due to async the telnet shell module does not have entries for rc and hence I get the below error:
“msg”: “The conditional check ‘telnetcheck.rc == 0’ failed. The error was: error while evaluating conditional (telnetcheck.rc == 0): ‘dict object’ has no attribute ‘rc’”
In the above code where and how can I check if telnet had succeeded i.e telnetcheck.rc == 0 and make sure the Expectation is met?