ansible.builtin.set_fact 模块 – 设置主机变量和事实。
注意
此模块是 ansible-core
的一部分,包含在所有 Ansible 安装中。在大多数情况下,您甚至可以不用指定 collections 关键字 就可以使用简短的模块名称 set_fact
。但是,我们建议您使用 完全限定集合名称 (FQCN) ansible.builtin.set_fact
,以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合冲突。
概要
此操作允许设置与当前主机关联的变量。
这些变量将在 ansible-playbook 运行期间通过设置它们的宿主在后续剧本中可用。
将
cacheable
设置为true
以使用事实缓存跨执行保存变量。变量将保持当前运行的 set_fact 优先级,但在后续运行中将使用“缓存的事实”优先级。根据标准 Ansible 变量优先级规则,其他类型的变量具有更高的优先级,因此此值可能会被覆盖。
注意
此模块有一个相应的 操作插件。
参数
参数 |
注释 |
---|---|
此布尔值将变量转换为实际的“事实”,该事实也将添加到事实缓存中。它不会在运行之间启用事实缓存,它只意味着如果已启用,它将与事实缓存一起使用。 通常,此模块创建“主机级变量”,并且具有更高的优先级,此选项会更改创建的变量的性质和优先级(提高 7 个步骤)。https://docs.ansible.org.cn/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable 这实际上会创建变量的两个副本,一个具有高优先级的普通“set_fact”主机变量和一个可通过事实缓存插件持久化的低优先级的“ansible_fact”变量。这会与 选择
|
|
ansible.builtin.set_fact 模块接受 您可以通过提供多个对来一次创建多个变量,但不要混合表示法。 |
属性
属性 |
支持 |
描述 |
---|---|---|
支持:部分 虽然操作插件确实执行了一些工作,但它依赖于核心引擎来实际创建变量,这部分无法被覆盖 |
表示它有一个相应的操作插件,因此某些选项部分可以在控制器上执行 |
|
支持:无 |
支持与 |
|
支持:无 |
可与 become 关键字一起使用 |
|
支持:无 |
强制执行“全局”任务,该任务不按主机执行,这会绕过按主机模板化和序列化、节流以及其他循环注意事项 条件语句将按使用 此操作在非步进策略之外无法正常工作 |
|
支持:无 |
这些任务忽略 |
|
支持:完全 |
可以在 check_mode 中运行,并在不修改目标的情况下返回更改状态预测,如果不受支持,则操作将被跳过。 |
|
支持:无 |
使用目标的已配置连接信息在其上执行代码 |
|
支持:部分 虽然此操作的部分内容是在核心引擎中实现的,但其他部分仍然可用作普通插件,并且可以部分覆盖 |
这是一个“核心引擎”功能,其实现方式与大多数任务操作不同,因此无法通过插件系统以任何方式覆盖它。 |
|
支持:部分 虽然变量分配可以委托给其他主机,但执行上下文始终是当前 inventory_hostname 连接变量(如果已设置)将反映其将定位的主机,即使在这种情况下我们根本没有连接 |
可与 delegate_to 和相关关键字一起使用 |
|
支持:无 |
将在差异模式下返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息 |
|
支持:无 |
操作不受条件执行的约束,因此它会忽略 |
|
平台: 所有 |
可操作的目标操作系统/系列 |
|
支持:完全 |
允许使用“tags”关键字来控制此操作的选择以进行执行 |
|
支持:完全 |
表示此操作是否遵守 until/retry/poll 关键字 |
注意
注意
由于任务的性质,set_fact 将为变量生成“静态”值。与正常的“延迟”变量不同,值在分配时会进行评估和模板化。
某些布尔值(yes、no、true、false)始终会转换为布尔类型,除非启用了
DEFAULT_JINJA2_NATIVE
。这样做是为了使var=value
布尔值能够正常工作,否则它只能创建字符串,但它也会阻止使用这些值创建 YAML 字符串。使用此设置将限制 k=v 为字符串,但允许您在 YAML 中指定字符串或布尔值。要创建列表/数组或字典/哈希,请使用 YAML 表示法
var: [val1, val2]
。由于“cacheable”现在是模块参数,因此“cacheable”不再是有效的事实名称。
另请参阅
另请参阅
- ansible.builtin.include_vars
从文件中加载变量,在任务中动态加载。
- 变量优先级:我应该在哪里放置变量?
有关变量优先级以及哪种类型的变量胜过其他变量的更多信息。
示例
- name: Setting host facts using key=value pairs, this format can only create strings or booleans
ansible.builtin.set_fact: one_fact="something" other_fact="{{ local_var }}"
- name: Setting host facts using complex arguments
ansible.builtin.set_fact:
one_fact: something
other_fact: "{{ local_var * 2 }}"
another_fact: "{{ some_registered_var.results | map(attribute='ansible_facts.some_fact') | list }}"
- name: Setting facts so that they will be persisted in the fact cache
ansible.builtin.set_fact:
one_fact: something
other_fact: "{{ local_var * 2 }}"
cacheable: yes
- name: Creating list and dictionary variables
ansible.builtin.set_fact:
one_dict:
something: here
other: there
one_list:
- a
- b
- c
# As of Ansible 1.8, Ansible will convert boolean strings ('true', 'false', 'yes', 'no')
# to proper boolean values when using the key=value syntax, however it is still
# recommended that booleans be set using the complex argument style:
- name: Setting booleans using complex argument style
ansible.builtin.set_fact:
one_fact: yes
other_fact: no
- name: Creating list and dictionary variables using 'shorthand' YAML
ansible.builtin.set_fact:
two_dict: {'something': here2, 'other': somewhere}
two_list: [1,2,3]