# Set\_fact and delay Values Not Updating on Task Retries in Ansible Playbook

**URL:** <https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198>\
**Category:** Get Help\
**Tags:** ubuntu\
**Created:** [December 17, 2024, 8:33am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198 "2024-12-17T08:33:47Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 8:33am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/1 "2024-12-17T08:33:47Z")

</div>

Hello everyone,

I’m encountering an issue with my Ansible playbook where the values set by `set_fact` and the `delay` values don’t seem to change during task retries. I suspect it might be related to using Jinja2 template expressions. Here’s the relevant part of my playbook.

- name: Unit test  
hosts: localhost  
gather\_facts: no

I suspect that variables using template expressions have fixed values.

$ansible --version  
ansible 2.10.8  
config file …

Any insights or suggestions would be greatly appreciated!

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 8:35am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/2 "2024-12-17T08:35:22Z")

</div>

If that’s not possible, I think I need to handle it with a custom module…

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 9:11am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/3 "2024-12-17T09:11:39Z")

</div>

TASK [Mock test] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*task path: /home/hamster/test.yml:6  
FAILED - RETRYING: Mock test (5 retries left).Result was: {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 1,  
“changed”: false,  
“retries”: 6  
}  
FAILED - RETRYING: Mock test (4 retries left).Result was: {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 2,  
“changed”: false,  
“retries”: 6  
}  
FAILED - RETRYING: Mock test (3 retries left).Result was: {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 3,  
“changed”: false,  
“retries”: 6  
}  
FAILED - RETRYING: Mock test (2 retries left).Result was: {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 4,  
“changed”: false,  
“retries”: 6  
}  
FAILED - RETRYING: Mock test (1 retries left).Result was: {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 5,  
“changed”: false,  
“retries”: 6  
}  
fatal: [localhost]: FAILED! =\> {  
“ansible\_facts”: {  
“status”: “off”  
},  
“attempts”: 5,  
“changed”: false  
}

PLAY RECAP \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
localhost : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0

I find it unreasonable that the random value remains the same consecutively.

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 9:13am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/4 "2024-12-17T09:13:04Z")

</div>

other random value

TASK [Mock test] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
task path: /home/hamster/test.yml:6  
ok: [localhost] =\> {  
“ansible\_facts”: {  
“status”: “on”  
},  
“attempts”: 1,  
“changed”: false  
}

TASK [Print timestamp after all retries] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
task path: /home/hamster/test.yml:19  
ok: [localhost] =\> {  
“msg”: “Timestamp after checker creation: 2024-12-17 18:12:02”  
}

TASK [Debug] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
task path: /home/hamster/test.yml:23  
ok: [localhost] =\> {  
“msg”: “status: {‘changed’: False, ‘ansible\_facts’: {‘status’: ‘on’}, ‘failed’: False, ‘attempts’: 1}”  
}

---

<div class="post-metadata">

**Author:** ![bvitnik](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/bvitnik/32/4132_2.png) [@bvitnik](https://forum.ansible.com/u/bvitnik)\
**Post date:** [December 17, 2024, 11:43am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/5 "2024-12-17T11:43:55Z")

</div>

> [@Hem\_Mu](#):
>
> ```auto
> set_fact:
> status: “{{ [‘on’, ‘off’] | random }}”
> register: status
> 
> ```

You are using the same variable `status` in `set_fact` and `register`. One is overwriting the other.

> [@Hem\_Mu](#):
>
> until: status.ansible\_facts.status != “off”

This is also incorrect. `set_facts` is not setting a variable in `ansible_facts` dictionary (maybe missleading?) but instead sets variable in `hostvars[inventory_hostname][<your_variable>]`.

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 11:59am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/6 "2024-12-17T11:59:07Z")

</div>

Then why doesn’t the `delay` value change when retrying a task? I manually measured the time using a stopwatch.

> [@Hem\_Mu](#):
>
> delay: \>  
> {% if ansible\_retry\_counter | default(0) == 0 %}  
> {{ 2 + (1 | random(start=0)) }}  
> {% else %}  
> {{ (2 \*\* (ansible\_retry\_counter + 1)) + (1 | random(start=0)) }}  
> {% endif %}

---

<div class="post-metadata">

**Author:** ![bvitnik](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/bvitnik/32/4132_2.png) [@bvitnik](https://forum.ansible.com/u/bvitnik)\
**Post date:** [December 17, 2024, 12:45pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/7 "2024-12-17T12:45:51Z")

</div>

I presume, but I’m not 100% sure, that `delay` is evaluated only once, not on every retry.

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 17, 2024, 1:15pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/8 "2024-12-17T13:15:14Z")

</div>

I also think that the `delay` and `set_fact` values are fixed at evaluation time.

---

<div class="post-metadata">

**Author:** ![bcoca](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/bcoca/32/9269_2.png) [@bcoca](https://forum.ansible.com/u/bcoca)\
**Post date:** [December 17, 2024, 4:56pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/9 "2024-12-17T16:56:05Z")

</div>

yes `set_fact` was a bad name, it is as you state, it is ‘set a host variable’.

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 18, 2024, 12:21am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/10 "2024-12-18T00:21:30Z")

</div>

Could the fixed values of `set_fact` and `delay` during evaluation be due to Jinja2 expressions? It seems like they don’t change even during retries.

If it’s confirmed that the values are fixed during evaluation, I would handle it with Python instead.

---

<div class="post-metadata">

**Author:** ![shertel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/shertel/32/1241_2.png) [@shertel](https://forum.ansible.com/u/shertel)\
**Post date:** [December 18, 2024, 12:55pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/11 "2024-12-18T12:55:33Z")

</div>

Yes, the module arg is templated once (see this explanation [strings templated using a lookup in a loop shouldn't be cached and re-used · Issue #82955 · ansible/ansible · GitHub](https://github.com/ansible/ansible/issues/82955#issuecomment-2032650853) - there are also a few workarounds mentioned on that issue). If you’re able to update to 2.18, then you could do use `loop` for retries and `loop_control.break_when` to stop looping when the condition is met:

```auto
  - name: Set fact until status is "on"
    set_fact:
      status: "{{ ['on', 'off'] | random }}"
    register: status_result
    loop: "{{ range(0, 5) }}"
    loop_control:
      pause: >
        {% if (ansible_loop.index|default(0)) == 0 %}
        {{ 2 + (1 | random(start=0)) }}
        {% else %}
        {{ (2 ** (ansible_loop.index + 1)) + (1 | random(start=0)) }}
        {% endif %}
      break_when: status == "on"

```

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 18, 2024, 1:17pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/12 "2024-12-18T13:17:15Z")

</div>

Thank you, it seems I’ll need to handle it with Python in the current version.

---

<div class="post-metadata">

**Author:** ![shertel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/shertel/32/1241_2.png) [@shertel](https://forum.ansible.com/u/shertel)\
**Post date:** [December 18, 2024, 1:23pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/13 "2024-12-18T13:23:36Z")

</div>

Another option is to move it somewhere that will be re-evaluated, for example [strings templated using a lookup in a loop shouldn't be cached and re-used · Issue #82955 · ansible/ansible · GitHub](https://github.com/ansible/ansible/issues/82955#issuecomment-2037875053) (this will work on 2.10).

---

<div class="post-metadata">

**Author:** ![bcoca](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/bcoca/32/9269_2.png) [@bcoca](https://forum.ansible.com/u/bcoca)\
**Post date:** [December 18, 2024, 2:47pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/14 "2024-12-18T14:47:54Z")

</div>

To clarify, `delay` is constant across the retry/until loop, it is only templated at the start of the loop, not every iteration.

---

<div class="post-metadata">

**Author:** ![Hem\_Mu](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hem_mu/32/7014_2.png) [@Hem\_Mu](https://forum.ansible.com/u/Hem_Mu)\
**Post date:** [December 19, 2024, 12:41am UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/15 "2024-12-19T00:41:58Z")

</div>

Template expressions wrapped in `{{ }}` appear to be evaluated only once.

---

<div class="post-metadata">

**Author:** ![bcoca](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/bcoca/32/9269_2.png) [@bcoca](https://forum.ansible.com/u/bcoca)\
**Post date:** [December 19, 2024, 4:02pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/16 "2024-12-19T16:02:55Z")

</div>

'it depends’TM … we have been trying to make the code in several places ‘smarter’ to avoid double interpolation when it was not meant to do so, but that is not always the case.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/ansible/original/1X/1882d9a01da5d8996a862359b0913cc568a39b84.svg) [@system](https://forum.ansible.com/u/system)\
**Post date:** [January 18, 2025, 4:03pm UTC](https://forum.ansible.com/t/set-fact-and-delay-values-not-updating-on-task-retries-in-ansible-playbook/39198/17 "2025-01-18T16:03:08Z")

</div>

Closed on January 18, 2025, 4:03pm UTC

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
