Preciso gerar algum ID exclusivo no ansible. A geração funciona, mas o acesso à variável resulta em algum comportamento "não esperado".
O manual é muito simples:
---
- hosts: localhost
vars:
- var1: "{{ 99999999 | random }}"
tasks:
- debug: msg="{{ var1 }}"
- debug: msg="{{ var1 }}"
- debug: msg="{{ var1 }}"
Eu esperava ter sempre o mesmo resultado, mas a realidade é diferente:
ansible-playbook -i localhost setup-env-test.yml
[WARNING]: Unable to parse .... as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************
ok: [localhost]
TASK [debug] *******************************************************************************************************************************
ok: [localhost] => {
"msg": "23317042"
}
TASK [debug] *******************************************************************************************************************************
ok: [localhost] => {
"msg": "23320954"
}
TASK [debug] *******************************************************************************************************************************
ok: [localhost] => {
"msg": "96866238"
}
PLAY RECAP *********************************************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Parece que a variável é reavaliada a cada acesso.
Sei que a reavaliação ocorre quando o contexto muda, por exemplo, quando se entra numa função, mas este não é o caso aqui. Também sei que ao usar set_fact esse comportamento muda e o conteúdo da variável não é avaliado novamente.
Alguém pode me dar uma dica de por que a reavaliação está ocorrendo? Seria bom encontrar a documentação ansible que explica isso.