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 覆盖了它
set_fact:
姓名:"Overriden somewhere in playbook only for the next task"
时间:<< 某些条件成立 >>
name: 下一个任务
调试:
msg: "Name is {{ name }}" # 这将显示来自 set_fact
的值
但是对于下一个任务,我想将名称重置为在 group_vars 中设置的值,同时仍在执行相同的剧本
set_fact:
名称:<<如何将其重置为group_vars值逻辑>>
名称:显示值
调试:
msg: "Nanme is {{ namne }}" # 现在应该显示 group_vars "Hello from 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 }}"
它有点长,但它为您提供了一个可以在多个位置依赖的值,而无需在多个位置放置默认值。
如何将 playbook 中的覆盖变量重置为 group_vars 中为该变量定义的值
因此,例如,如果我在组变量中定义了变量 name: "Hello from group_vars",但在执行剧本期间,我根据某些条件使用 set fact 覆盖了它
set_fact: 姓名:"Overriden somewhere in playbook only for the next task" 时间:<< 某些条件成立 >>
name: 下一个任务 调试: msg: "Name is {{ name }}" # 这将显示来自 set_fact
的值
但是对于下一个任务,我想将名称重置为在 group_vars 中设置的值,同时仍在执行相同的剧本
set_fact: 名称:<<如何将其重置为group_vars值逻辑>>
名称:显示值 调试: msg: "Nanme is {{ namne }}" # 现在应该显示 group_vars "Hello from 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 }}"
它有点长,但它为您提供了一个可以在多个位置依赖的值,而无需在多个位置放置默认值。