GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub? Sign in to your account. I want to start the set of async tasks and then check their status inside "until" loop. Thank you.
Skip to content. Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign up. New issue. Jump to bottom. Milestone 2. Copy link Quote reply. Issue type Bug Report Ansible version ansible 2. Nothing changed. Environment Running ansible on Centos 7 and managing Centos 6.
This comment has been minimized. Sign in to view. Excellent, glad it was an easy fix! Thanks for the follow up! Sign up for free to subscribe to this conversation on GitHub. Already have an account?I'm always impressed with my friends of Streetlife. They built a new infrastructure based on immutable deploys. I'm surprised about how fast they are able to build this AMIsthey can start a new full configured server in only 6 min.
Three years ago I've started using Ansible. My deploys were always up to twenty minutes, so one day I decided to achieve an eight-min deploy. Eight min will be the time that I have to build a new server.
This is pretty useful, but painful with different roles. If you enable it, Ansible will check the cache age. If cache age is less than your value, apt-get update will be ignored. Async tasks are in Ansible from version 1.
It works like this: while one long task is running, another short task can be executed.
For example, if you want to install pip dependencies and bower dependencies: both are needed, both can run at the same time and both take few minutes. With async tasks, tasks can be executed and forget, but this background task can be checked later. So Ansible provides the option to get the task status in any time. The following example show how pip and bower dependencies will run in two new coroutines. While the dependencies are being installed in the system, another task will create the users or any other task.
Before the playbook is finished, it's going to be checked if the coroutines has finished properly. Loops are not supported in Async tasks, but the following workaround can be used:. Menu About.
Ansible Async POLL with Examples
The dark mode beta is finally here. Change your preferences any time. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. Using Ansible 1.
Unfortunately, the error message is not helpful when the "until" condition is not met in time. The returned values include:. Is there a way to produce a meaningful error message in this case? Learn more. Asked 1 year, 4 months ago.
Active 1 year, 4 months ago. Viewed times. The returned values include: changed: false msg: "All items completed" results: [ array of results from shell task above ] changed: false failed: true finished: 0 Particularly, the "All items completed" message is misleading. FSchwartz FSchwartz 31 3 3 bronze badges. Active Oldest Votes. I think your solution will be fine in this case. For example: - name: template Unfortunately, this method does not work with async tasks.
Only after the task completes do the other vars become visible. I can certainly report that the task did not complete in time, but I can't determine any other information about the task, such as command, stdout, stderr, etc.
If only there were some way to at least get the cmd from an async task Sign up or log in Sign up using Google. Sign up using Facebook. Sign up using Email and Password. Post as a guest Name. Email Required, but never shown.
The Overflow Blog. Featured on Meta.Sometimes you want to repeat a task multiple times. In computer programming, this is called a loop. Repeated tasks can be written as standard loops over a simple list of strings. You can define the list directly in the task:. You can pass a list directly to a parameter for some plugins.
Most of the packaging modules, like yum — Manages packages with the yum package manager and apt — Manages apt-packageshave this capability.
When available, passing the list to a parameter is better than looping over the task. For example:. When combining Conditionals with a loop, the when: statement is processed separately for each item.
See The When Statement for examples. To loop over a dict, use the dict2items Dict Filter :. When you use register with a loop, the data structure placed in the variable will contain a results attribute that is a list of all responses from the module.
This differs from the data structure returned when using register without a loop:. You can use Jinja2 expressions to iterate over complex lists. For example, a loop can combine nested lists:. You can use the until keyword to retry a task until a certain condition is met. This task runs up to 5 times with a delay of 10 seconds between each attempt. To see the results of individual retries, run the play with -vv. You must set the until parameter if you want a task to retry.
If until is not defined, the value for the retries parameter is forced to 1. More information on the patterns can be found on Patterns: targeting hosts and groups.GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub? Sign in to your account.
This feature will be used for kicking off multiple long running jobs asynchronously, then check the status of the jobs periodically until all jobs are finished.
This feature is needed due to the long running nature some jobs for our use case. If implemented as requested this feature will solve the problem of determining the upper bound for retries. If these files are inaccurate, please update the component name section of the description or use the! While it would be nice to not have to do the calculation you do set the upper bound limit when starting the async task itself.
If these files are incorrect, please update the component name section of the description or use the! Skip to content. Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign up. New issue. Jump to bottom. Copy link Quote reply.
Subscribe to RSS
This comment has been minimized. Sign in to view. Sign up for free to join this conversation on GitHub.By default tasks in playbooks block, meaning the connections stay open until the task is done on each node.
This may not always be desirable, or you may be running operations that take longer than the SSH timeout.Ansible HostVars Example - Ansible Host_Vars for Network Enginers
You can run long-running operations in the background and check their status later. Poll mode is smart so all jobs will be started before polling will begin on any machine.
Be sure to use a high enough --forks value if you want to get all of your jobs started very quickly. After the time limit in seconds runs out -Bthe process on the remote nodes will be terminated.
Backgrounding the copy module does not do a background file transfer. Playbooks also support polling, and have a simplified syntax for this.
To avoid blocking or timeout issues, you can use asynchronous mode to run all of your tasks at once and then poll until they are done. When poll is a positive value, the playbook will still block on the task until it either completes, fails or times out. In this case, however, async explicitly sets the timeout you wish to apply to this task rather than being limited by the connection method timeout.
To launch a task asynchronously, specify its maximum runtime and how frequently you would like to poll for status. There is no default for the async time limit. As of Ansible 2. When poll is 0, Ansible will start the task and immediately move on to the next one without waiting for a result. From the point of view of sequencing this is asynchronous programming: tasks may now run concurrently.
The async tasks will run until they either complete, fail or timeout according to their async value. Using a higher value for --forks will result in kicking off asynchronous tasks even faster.
This also increases the efficiency of polling. If you would like to perform a task asynchronously and check on it later you can perform a task similar to the following:. If you would like to run multiple asynchronous tasks while limiting the amount of tasks running concurrently, you can do it this way:. Ansible 2. Note There is no default for the async time limit. Note As of Ansible 2. The playbook run will end without checking back on async tasks.
Note Using a higher value for --forks will result in kicking off asynchronous tasks even faster.
How to run your Ansible tasks in parallel
Stop by the google group!Not all the tasks we run in our playbook are short and sweet. Some of them would take a long time but we cannot afford to sit tight and watch the screen. We got better things to do. In those cases where you want to run a long-running task with Ansible. You can consider running them with async keyword in your playbook. For better understanding, I have created some funny Script to run long time. It would simply sleep for the instructed time obviously sleeping is also a Job.
The ansible async keyword triggers Ansible to run the task in the background which can be checked or followed up later, and its value will be the maximum time that Ansible will wait for that particular Job or task to complete before it eventually times out or complete.
So async keyword can tell Ansible how long the task should be allowed to run before Ansible gives it up and time out. But How would ansible track the status of this job invoked in the background? How frequent it would check if the task is completed or not. The Poll keyword is auto-enabled whenever you use async and it has a default value as 10 seconds.
Which means If you are not defining the poll keyword with customized time period. By default Ansible would track the status of the async task every 10 seconds.
If you think 10 seconds polling is too frequent and you want Ansible to test the status of the job every 60 seconds It is possible. The poll keyword accepts a numeric value to know how many seconds it should wait before polling or following up with the long-running asynchronous task. In other words, The value of the poll indicates how often to poll and check if the tasks are completed.
The default poll value is 10 seconds. Good learning is doing it practically so let us get our hands dirty and execute the following playbook to see how async and poll works. Though our script is going to run only for 60 seconds. In realtime scenarios, you would not know how long the script would run, so use your best judgement when you are setting the value of async. Did you notice that the second task of executing the script was waiting as long as the script is completing and blocking the succedding tasks.
But there is a one more question You might ask what if I give less async time than the required time for the script. Cause we cannot judge how long the script may run in real time scnarios. The answer is the playbook would fail if the given async time is not suffcient and print the following timeout message. Now you might ask me, Is this really asynchronous?
I had to wait anyway for the task to complete. If you do not want Ansible to track the status of the long running asynchronous task or job. You can tell ansible to just fire it and forget it. As a user, If you want to track the status of that job later.
This is useful in many cases and especially when you want to start some services like weblogic, tomcat, haproxy etc using a script at the remote server and let it run. Now let us use the same playbook we used earlier with the modified Poll. You just have to update the Poll to 0 seconds and re-execute it. Follow us on Facebook or Twitter For more practical videos and tutorials.
Show your Support! Buy me a Coffee.