What is the reason to use shell + telnet why the wait_for module has
such functionality?
This does what (I think!) you want:

1. run ncat (not nc) on 3 ports on the target system:

dnmvisser@villa:~$ for i in 4443 4445 4447; do ncat -l -k -p $i & done
[1] 253485
[2] 253486
[3] 253487


Consider this playbook "waitfor.yml":

---
- hosts: all
  vars:
    ports:
      - 4443
      - 4445
      - 4447
  tasks:
    - name: Starting multiple wait_for tasks
      wait_for:
        port: "{{ item }}"
      loop: "{{ ports }}"
      register: foo
      async: 600
      poll: 0
      changed_when: false
    - name: Collecting status of wait_for tasks
      async_status:
        jid: "{{ item.ansible_job_id }}"
      register: jobs
      until: jobs.finished
      delay: 1
      retries: 600
      loop: "{{ foo.results }}"



Run that against your target system:

ansible-playbook -i villa, waitfor.yml

The playbook should start and then get into a loop where it waits for
all 3 ports to listen.

So, while this runs, open the required sockets. I use ncat instead of nc:

dnmvisser@villa:~$ for i in 4443 4445 4447; do ncat -l -k -p $i & done
[1] 253485
[2] 253486
[3] 253487

Within 1 second the playbook will finish as all ports are now
listening on the target.


Dick

On Mon, 20 Jun 2022 at 18:03, Mohtashim S <[email protected]> wrote:
>
> 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?
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/19bde69c-b54d-41d7-a9dc-7a8515c51c44n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAF8BbLYBoOVC3UwHys%2BP31z2g4cZJSbqi6VGk6LPhRua5B8GfA%40mail.gmail.com.

Reply via email to