ansible.builtin.set_fact (v2.16.5) — module

Set host variable(s) and fact(s).

| "added in version" 1.2 of ansible.builtin"

Authors: Dag Wieers (@dagwieers)

This plugin has a corresponding action plugin.

Install Ansible via pip

Install with pip install ansible-core==2.16.5

Description

This action allows setting variables associated to the current host.

These variables will be available to subsequent plays during an ansible-playbook run via the host they were set on.

Set O(cacheable) to V(true) to save variables across executions using a fact cache. Variables will keep the set_fact precedence for the current run, but will used 'cached fact' precedence for subsequent ones.

Per the standard Ansible variable precedence rules, other types of variables have a higher priority, so this value may be overridden.

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- 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 }}"
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- 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 }}"
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- 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
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Creating list and dictionary variables
  ansible.builtin.set_fact:
    one_dict:
        something: here
        other: there
    one_list:
        - a
        - b
        - c
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# 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
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Creating list and dictionary variables using 'shorthand' YAML
  ansible.builtin.set_fact:
    two_dict: {'something': here2, 'other': somewhere}
    two_list: [1,2,3]

Inputs

    
cacheable:
    default: false
    description:
    - This boolean converts the variable into an actual 'fact' which will also be added
      to the fact cache. It does not enable fact caching across runs, it just means it
      will work with it if already enabled.
    - Normally this module creates 'host level variables' and has much higher precedence,
      this option changes the nature and precedence (by 7 steps) of the variable created.
      U(https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)
    - 'This actually creates 2 copies of the variable, a normal ''set_fact'' host variable
      with high precedence and a lower ''ansible_fact'' one that is available for persistence
      via the facts cache plugin. This creates a possibly confusing interaction with C(meta:
      clear_facts) as it will remove the ''ansible_fact'' but not the host variable.'
    type: bool
    version_added: '2.4'
    version_added_collection: ansible.builtin

key_value:
    description:
    - 'The M(ansible.builtin.set_fact) module takes C(key=value) pairs or C(key: value)
      (YAML notation) as variables to set in the playbook scope. The ''key'' is the resulting
      variable name and the value is, of course, the value of said variable.'
    - You can create multiple variables at once, by supplying multiple pairs, but do NOT
      mix notations.
    required: true

See also