I am using ansible for the execution of a script (myScript.sh) over some nodes through the command:
- hosts: primaryNodes,!node13
vars:
mongodPath: /usr/local/mongodb
become: yes
become_user: user
tasks:
- name: starting mongod on all shards
shell: "sh {{ mongodPath }}/myScript.sh"
register: out
- debug: var=out.stdout_lines
The execution of the script may need around 2-3 seconds or maybe less in order to give an output message on the shell (depending on the node). I am using the out.stdout_lines for debugging purposes, to be sure about the status of the execution.
Some nodes give as an output the following one which is correct;
ok: [node16] => {
"out.stdout_lines": [
"about to fork child process, waiting until server is ready for connections.",
"forked process: 2837",
"child process started successfully, parent exiting"
]
}
But some other nodes, seem to have passed the command, without executing it;
ok: [node2] => {
"out.stdout_lines": []
}
I have managed to solve this by using the following playbook (added sleep) - all the nodes now give the desired output message (child process started successfully);
- hosts: primaryNodes,!node13
vars:
mongodPath: /usr/local/mongodb
become: yes
become_user: user
tasks:
- name: starting mongod on all shards
shell: "sh {{ mongodPath }}/myScript.sh && sleep 5s"
register: out
- debug: var=out.stdout_lines
I know that this is a rough solution for my case, but is there a way to wait for a responding message from the node?