Contents

Ansible. Заметка об использовании gather_facts.

Contents

В ansible при запуске плейбука изначально выполняется модуль ansible.builtin.setup, который собирает факты о системе, где будет выполняться данный плейбук, если явно не указано gather_facts: no. Все факты хранятся внутри переменной ansible_facts, выведем её:

1
2
3
- name: Print all available facts
  debug:
    var: ansible_facts

Обычно это временная мера, чтобы подобрать переменные, для использования внутри playbook. Основываясь на этом, можно получить версию ОС и fqdn:

1
2
3
4
5
6
7
- name: Output OS
  debug:
    msg: "{{ ansible_facts['distribution'] }}-{{ ansible_facts['distribution_major_version'] }}"

- name: Output fqdn
  debug:
    msg: "{{  ansible_facts.fqdn }}"

Хотя для просмотра фактов, возможно, более подходящим решением будет не загонять это внутрь playbook, а использовать ansible:

1
$ ansible -i inventory/hosts.yml all -m gather_facts --tree /tmp/facts

Это сохранит факты о хостах, описанных в inventory/hosts.yml в папке /tmp/facts.
Для удобства просмотра, можно использовать jq:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ cat /tmp/facts/nginx01-tty8747 | jq . | head -20
{
  "ansible_facts": {
    "ansible_all_ipv4_addresses": [
      "10.135.0.14",
      "64.225.105.161",
      "10.19.0.17"
    ],
    "ansible_all_ipv6_addresses": [
      "fe80::60a2:b9ff:feb9:e68e",
      "fe80::e4e4:bfff:fe6e:945"
    ],
    "ansible_apparmor": {
      "status": "enabled"
    },
    "ansible_architecture": "x86_64",
    "ansible_bios_date": "12/12/2017",
    "ansible_bios_version": "20171212",
    "ansible_cmdline": {
      "BOOT_IMAGE": "/boot/vmlinuz-5.4.0-73-generic",
      "console": "ttyS0",

Как пример, хочу привести использование модуля raw:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ ansible -i inventory/hosts.yml all -m raw -a "cat /etc/*release" | head
nodename | CHANGED | rc=0 >>
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"