@Dick under ` - name: Starting multiple wait_for tasks` -> i do not have a
loop ` loop: "{{ ports }}"` as my loop is in `main.yml` outer yml
Thus, i get the following error:
TASK [Collecting status of wait_for tasks]
*********************************************************************************************************************************************************************
task path: /root/newinternal.yml:17
fatal: [localhost]: FAILED! => {
"msg": "'dict object' has no attribute 'results'"
}
Can you please suggest?
On Monday, June 20, 2022 at 11:12:07 PM UTC+5:30 [email protected] wrote:
> 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/6202b95c-8563-466d-891e-001ac640683dn%40googlegroups.com.