Hello,
I am trying to use the Async capabilities of ansible to “fire and forget” a job and then check it later and wait till its end.
I have followed the example mentioned here : http://docs.ansible.com/playbooks_async.html
But I am facing an issue and I don’t really understand what’s happening.
The playbook looks like
`
-
name: ‘MyPlay | Fire and Forget’
command: “/opt/PROGRAM/bin/gremlin -e /opt/PROGRAM/scripts/load_graph.grm …”
async: 1000
poll: 0
register: load_graph_async
-
name: ‘MyPlay | Check Job’
async_status: jid={{ load_graph_async.ansible_job_id }}
register: job_result
until: job_result.finished
retries: 30
`
The playbook logs look like :
`
TASK: [MyPlay | Fire and forget] *************************
<job 759951815367.27671> finished on Host1
TASK: [MyPlay | Check Job] *************************************
fatal: [Host1] => error while evaluating conditional: job_result.finished
`
What I do understand is :
job 759951815367.27671
- 759951815367 is the JobID
- 27671 is the PID of the wrapper process
But when I go on the Host after the failed run, I saw
root 27674 0.0 0.0 136548 3672 ? S 21:15 0:00 /usr/bin/python /home/USER/.ansible/tmp/ansible-tmp-1419020105.57-13577669747697/async_wrapper 759951815367 1000 /home/USER/.ansibl root 27675 0.0 0.0 136548 3900 ? S 21:15 0:00 \_ /usr/bin/python /home/USER/.ansible/tmp/ansible-tmp-1419020105.57-13577669747697/async_wrapper 759951815367 1000 /home/USER/.an root 27676 0.1 0.0 138008 7320 ? S 21:15 0:00 \_ /usr/bin/python /home/USER/.ansible/tmp/ansible-tmp-1419020105.57-13577669747697/command /home/USER/.ansible/tmp/ansible-tm root 27677 0.0 0.0 115504 1544 ? S 21:15 0:00 \_ /bin/bash /opt/PROGRAM/bin/gremlin -e /opt/PROGRAM/scripts/load_graph.grm ... root 27727 84.0 14.4 4875920 1187256 ? Sl 21:15 0:21 \_ /usr/lib/jvm/java-7-oracle/bin/java -server -Xms4g -Xmx4g -cp /opt/PROGRAM/conf:/opt/PROGRAM
So any ideas ?
Thanks a lot for your help every one
Hello,
I am trying to use the Async capabilities of ansible to "fire and forget" a
job and then check it later and wait till its end.
I have followed the example mentioned here :
http://docs.ansible.com/playbooks_async.html
Async "fire and forget" was a new feature in Ansible 1.8 so you'll
need to update to get that functionality.
-AdamM
Well, it wasn’t a new feature in 1.8, though there was a bug fixed in the fire and forget operation when you don’t specify a lifetime of the process, IIRC - I remember you filing it, all the same
Let us know if you have the same problem in 1.8, regardless.
Ok, thanks all for your responses.
I will upgrade to Ansible 1.8. and be back to you.
No luck … it still does not work
$ pip install Ansible $ pip list ansible (1.8.2) ecdsa (0.11) Jinja2 (2.7.3) MarkupSafe (0.23) paramiko (1.15.2) pip (1.5.6) pycrypto (2.6.1) PyYAML (3.11) setuptools (3.6) wsgiref (0.1.2)
`
$ ansible-playbook -i inventories/demo playbooks/run/load-graph.yml
PLAY [VNG-Bootstrap | create-graph] *******************************************
GATHERING FACTS ***************************************************************
ok: [Host1]
Host1: importing …/…/…/vars/demo.yml
TASK: [Creating Titan graph schema] ***************************
changed: [Host1]
TASK: [Loading data into Titan graph] *************************
<job 356642401411.12344> finished on Host1
TASK: [Check Loading data Status] *****************************
fatal: [Host1] => error while evaluating conditional: load_graph_result.finished
FATAL: all hosts have already failed – aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/USER/create-load-graph.retry
Host1 : ok=10 changed=2 unreachable=1 failed=0
`
Playbook changes
`
diff --git a/deployment/ansible/playbooks/run/create-load-graph.yml b/deployment/ansible/‘playbooks/run/create-load-graph.yml’
index 86a4fac…246f820 100644
— a/deployment/ansible/playbooks/run/create-load-graph.yml
+++ b/deployment/ansible/playbooks/run/create-load-graph.yml
@@ -38,8 +38,15 @@
- async: 1000
- poll: 0
- register: load_graph
Hello,
Gist is here it some body wants to give a look : https://gist.github.com/xakraz/2ec7086d04630b833d23
Thanks again
Hello,
Gist is here it some body wants to give a look :
https://gist.github.com/xakraz/2ec7086d04630b833d23
I think the problem is here:
https://gist.github.com/xakraz/2ec7086d04630b833d23#file-create-load-graph-yml-L46
Where the variable is 'jiid':
async_status: jiid={{ load_graph.ansible_job_id }}
But should be 'jid'
async_status: jid={{ load_graph.ansible_job_id }}
Hopefully that works.
-AdamM
Shame on me … I was spitting against ansible whereas I made a dummy typo in the YAML playbook file.
Thanks Adam.
But by the way, what is the cleanest manner to
- launch a long running task with Ansible
- check it is still running
- display progress
Do I have to use the async / poll statement and adjust their values to have a limit and fail if it was too long to run ?
Thanks again for your help !