Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
0e749611
Commit
0e749611
authored
Sep 25, 2013
by
bennojoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
doc update and add attempts
parent
21529de8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
6 deletions
+31
-6
docsite/latest/rst/playbooks2.rst
+27
-0
lib/ansible/runner/__init__.py
+4
-6
No files found.
docsite/latest/rst/playbooks2.rst
View file @
0e749611
...
...
@@ -461,6 +461,33 @@ from turning into arbitrary code with ugly nested ifs, conditionals, and so on -
in more streamlined & auditable configuration rules -- especially because there are a
minimum of decision points to track.
Do/Until
````````
Sometimes you would want to retry a task till a certain condition is met, In such conditions the Do/Until feature will help.
Here's an example which show's the syntax to be applied for the task.
- action: shell /usr/bin/foo
register: result
until: register.stdout.find("all systems go") != -1
retries: 5
delay: 10
The above example run the shell module recursively till the module's result has "all systems go" in it's stdout or the task has
been retried for 5 times with a delay of 10 seconds. The default value for "retries" is 3 and "delay" is 5.
The task returns the results returned by the last task run. The results of individual retries can be viewed by -vv option.
The results will have a new key "attempts" which will have the number of the retries for the task.
.. note::
The Do/Until does not take decision on whether to fail or pass the play when the maximum retries are completed, the user can
can do that in the next task as follows:
- name: fail the play
fail: msg=" This play fails as the foo exceeded maximum retries"
fail_when: register.attempts >= 5
Loops
`````
...
...
lib/ansible/runner/__init__.py
View file @
0e749611
...
...
@@ -654,7 +654,6 @@ class Runner(object):
result
=
handler
.
run
(
conn
,
tmp
,
module_name
,
module_args
,
inject
,
complex_args
)
# Code for do until feature
until_result
=
1
until
=
self
.
module_vars
.
get
(
'until'
,
None
)
if
until
is
not
None
and
result
.
comm_ok
:
inject
[
self
.
module_vars
.
get
(
'register'
)]
=
result
.
result
...
...
@@ -662,23 +661,22 @@ class Runner(object):
if
not
utils
.
check_conditional
(
cond
,
self
.
basedir
,
inject
,
fail_on_undefined
=
self
.
error_on_undefined_vars
):
retries
=
self
.
module_vars
.
get
(
'retries'
)
delay
=
self
.
module_vars
.
get
(
'delay'
)
for
x
in
range
(
0
,
retries
):
for
x
in
range
(
1
,
retries
+
1
):
time
.
sleep
(
delay
)
tmp
=
''
if
getattr
(
handler
,
'NEEDS_TMPPATH'
,
True
):
tmp
=
self
.
_make_tmp_path
(
conn
)
result
=
handler
.
run
(
conn
,
tmp
,
module_name
,
module_args
,
inject
,
complex_args
)
result
.
result
[
'attempts'
]
=
x
vv
(
"Result from run
%
i is:
%
s"
%
(
x
,
result
.
result
))
if
not
result
.
comm_ok
:
break
;
inject
[
self
.
module_vars
.
get
(
'register'
)]
=
result
.
result
cond
=
template
.
template
(
self
.
basedir
,
until
,
inject
,
expand_lists
=
False
)
if
utils
.
check_conditional
(
cond
,
self
.
basedir
,
inject
,
fail_on_undefined
=
self
.
error_on_undefined_vars
):
until_result
=
1
break
;
else
:
until_result
=
0
result
.
result
[
'until_result'
]
=
until_result
else
:
result
.
result
[
'attempts'
]
=
0
conn
.
close
()
if
not
result
.
comm_ok
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment