Ansible变量每次访问都会重新求值?如何生成固定的唯一ID?
Ansible变量每次访问都会重新求值?如何生成固定的唯一ID?
嗨,这个问题我太熟悉了!你碰到的情况本质是Ansible的变量求值逻辑导致的:当你在vars区段里用{{ 99999999 | random }}定义var1时,每一次引用这个变量,Ansible都会重新执行一遍random过滤器,所以三次debug输出的结果自然不一样。
要生成固定的唯一ID,你只需要把变量的生成逻辑放到set_fact任务里就行——set_fact在任务执行时只会计算一次表达式,之后变量的值就会被固定下来,不会再重新求值。
修改后的playbook如下:
--- - hosts: localhost tasks: - name: 生成固定的唯一随机ID set_fact: var1: "{{ 99999999 | random }}" - debug: msg="{{ var1 }}" - debug: msg="{{ var1 }}" - debug: msg="{{ var1 }}"
运行这个playbook后,你会发现三次debug输出的完全是同一个随机数。这是因为set_fact任务在第一次执行时就把random生成的结果赋值给了var1,后续所有对var1的引用都会直接使用这个已经计算好的固定值,不会再触发random过滤器。
备注:内容来源于stack exchange,提问作者Martin Garbe
相关产品推荐
相关产品推荐

