Ansible 变量优先级 - 将覆盖的变量值重置回 group_vars 值

Ansible variable precedence - Reset overriden variable value back to the group_vars value

如何将 playbook 中的覆盖变量重置为 group_vars 中为该变量定义的值

因此,例如,如果我在组变量中定义了变量 name: "Hello from group_vars",但在执行剧本期间,我根据某些条件使用 set fact 覆盖了它

但是对于下一个任务,我想将名称重置为在 group_vars 中设置的值,同时仍在执行相同的剧本

关于如何实现这一点的任何想法。谢谢

一般来说,一旦你set_fact一个主机,你就不能回头了,除非你存储了原始值的副本并且稍后再次set_fact,或者重新收集事实层(例如,通过在你的剧本中使用不同的剧本)。

如果可以,使用专门的事实(可能还有默认值)来实现类似的目标。

例如:

- name: conditionally set fact
  set_fact: 
     special_name: "overridden value"
  when: my_condition 
- name: use fact or default
  debug: 
     msg: "Name is {{ special_name | default(name)}}"

如果您想更频繁地使用覆盖值,您可以使用第二个变量来处理赋值:

- name: conditionally set fact
  set_fact: 
     special_name: "overridden value"
  when: my_condition 
- name: use default globally
  set_fact:
     special_name: "{{ special_name | default(name) }}"
- name: use fact or default
  debug: 
     msg: "Name is {{ special_name }}"

它有点长,但它为您提供了一个可以在多个位置依赖的值,而无需在多个位置放置默认值。