User Tools

Site Tools


ansible:ansible_variables

This is an old revision of the document!


Ansible variables

Understanding variable precedence

Ansible does apply variable precedence, and you might have a use for it. Here is the order of precedence from least to greatest (the last listed variables override all other variables):

      command line values (for example, -u my_user, these are not variables)
      role defaults (defined in role/defaults/main.yml) 1
      inventory file or script group vars 2
      inventory group_vars/all 3
      playbook group_vars/all 3
      inventory group_vars/* 3
      playbook group_vars/* 3
      inventory file or script host vars 2
      inventory host_vars/* 3
      playbook host_vars/* 3
      host facts / cached set_facts 4
      play vars
      play vars_prompt
      play vars_files
      role vars (defined in role/vars/main.yml)
      block vars (only for tasks in block)
      task vars (only for the task)
      include_vars
      set_facts / registered vars
      role (and include_role) params
      include params
      extra vars (for example, -e "user=my_user")(always win precedence)

In general, Ansible gives precedence to variables that were defined more recently, more actively, and with more explicit scope. Variables in the defaults folder inside a role are easily overridden. Anything in the vars directory of the role overrides previous versions of that variable in the namespace. Host and/or inventory variables override role defaults, but explicit includes such as the vars directory or an include_vars task override inventory variables.

Example in a playbook

Ex: yml file

- hosts: webservers
  vars:
    http_port: 80
    base_path: http://ansibile.local/wiki
    app_path: {{ base_path }}/{{ http_port }}

variables: facts

Facts are variable collected each time you contact a client. It contains IP adresses, OS type, level, hardware….

To improve you ansible command, you can use cache on server into /etc/ansible/ansible.cfg (here cache is valid for 1 hour)

[defaults]
fact_caching = jsonfile
fact_caching_timeout = 3600
fact_caching_connection = /tmp/myfacts

You can call them on the ansible server by using the command (xml output):

opensuse:~ # ansible -m setup localhost 
 localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.1.3.22"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::209a:12e0:e8a7:8ea"
        ],
        "ansible_apparmor": {
            "status": "enabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/boot/vmlinuz-4.12.14-lp151.28.91-default",

        },
        "ansible_date_time": {
            "date": "2021-09-13",
            "day": "13",
            "epoch": "1631520866",
            "hour": "10",
            "minute": "14",
            "month": "09",
            "second": "26",
            "time": "10:14:26",
            "tz": "CEST",
            "tz_offset": "+0200",
            "weekday": "Monday",
            "weekday_number": "1",
            "weeknumber": "37",
            "year": "2021"
        },
...
       "ansible_distribution": "openSUSE Leap",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_path": "/etc/os-release",
        "ansible_distribution_file_variety": "SUSE",
        "ansible_distribution_major_version": "15",
        "ansible_distribution_release": "1",
        "ansible_distribution_version": "15.1",

Example of facts on AIX

{
    "_ansible_facts_gathered": true,
    "ansible_all_ipv4_addresses": [
        "10.10.10.100"
    ],
    "ansible_all_ipv6_addresses": [
        "::1%1"
    ],
    "ansible_apparmor": {
        "status": "disabled"
    },
    "ansible_architecture": "chrp",
    "ansible_date_time": {
...
    },
    "ansible_distribution": "AIX",
    "ansible_distribution_major_version": "7",
    "ansible_distribution_release": "2",
    "ansible_distribution_version": "7.2",
    "ansible_nodename": "myaixhost",
    "ansible_os_family": "AIX",
    "ansible_pkg_mgr": "yum",
    "ansible_processor": "PowerPC_POWER8",
    "ansible_processor_cores": 8,
    "ansible_processor_count": 1,
    "ansible_product_name": "IBM,8284-22A",
    "ansible_product_serial": "21xxxxV",

Example on linux ppc64le

{
    "_ansible_facts_gathered": true,
    "ansible_all_ipv4_addresses": [
        "10.x.x.x0"
    ],
    "ansible_all_ipv6_addresses": [
        "fe80::5b6c:b599:xxx9:xxxc"
    ],
    "ansible_apparmor": {
        "status": "disabled"
    },
    "ansible_architecture": "ppc64le",
    "ansible_bios_date": "NA",
    "ansible_bios_vendor": "NA",
    "ansible_bios_version": "NA",
    "ansible_board_asset_tag": "NA",
    "ansible_board_name": "NA",
    "ansible_board_serial": "NA",
    "ansible_board_vendor": "NA",
    "ansible_board_version": "NA",
    "ansible_chassis_asset_tag": "NA",
    "ansible_chassis_serial": "NA",
    "ansible_chassis_vendor": "NA",
    "ansible_chassis_version": "NA",
    "ansible_cmdline": {
        "BOOT_IMAGE": "/vmlinuz-4.18.0-240.el8.ppc64le",
    "ansible_distribution": "CentOS",
    "ansible_distribution_file_parsed": true,
    "ansible_distribution_file_path": "/etc/redhat-release",
    "ansible_distribution_file_variety": "RedHat",
    "ansible_distribution_major_version": "8",
    "ansible_distribution_release": "NA",
    "ansible_distribution_version": "8.4",
    "ansible_nodename": "mylnxhost",
    "ansible_os_family": "RedHat",

How to Create and Use Custom Facts in Ansible

Custom facts (local facts) are the variables which are declared on ansible managed host. Custom facts are declared in ini or json file in the /etc/ansible/facts.d directory on managed host. File names of custom facts must have .fact extension.

https://www.linuxtechi.com/create-use-custom-facts-in-ansible/

ansible/ansible_variables.1636123911.txt.gz · Last modified: 2021/11/05 15:51 by manu