ansible如何设置变量('required_pkgs')?

How ansible sets variables ('required_pkgs')?

我正在开发 Kubespray 2.16

roles/kubernetes/preinstall/tasks/0070-system-packages.yml,有一个任务“安装包要求”

- name: Install packages requirements
  package:
    name: "{{ required_pkgs | default([]) | union(common_required_pkgs|default([])) }}"
    state: present
  register: pkgs_task_result
  until: pkgs_task_result is succeeded
  retries: "{{ pkg_install_retries }}"
  delay: "{{ retry_stagger | random + 3 }}"
  when: not (ansible_os_family in ["Flatcar Container Linux by Kinvolk", "ClearLinux"] or is_fedora_coreos)
  tags:
    - bootstrap-os

根据代码,将安装软件包 {{ required_pkgs | default([]) | union(common_required_pkgs|default([])) }}

我在 roles/kubernetes/preinstall/vars/*.yml

中找到了 required_pkgs

redhat.yml,

required_pkgs:
  - "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('libselinux-python','python3-libselinux') }}"
  - device-mapper-libs
  - nss
  - conntrack

centos.yml,

required_pkgs:
  - "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('libselinux-python','python3-libselinux') }}"
  - device-mapper-libs
  - nss
  - conntrack

我认为 Ansible 没有检查我在“这个任务”中的 OS 的过程。那么Ansible如何在一大堆YML文件中设置required_pkgs

p.s。我的 OS 是 RedHat。

默认情况下,当 Ansible 第一次开始执行播放时,它将隐式 运行 播放中涉及的所有远程主机上的 setup 模块。这称为“事实收集”步骤,由剧本中的 gather_facts 选项或 ansible.cfg.

中的 gathering 选项控制。

在此步骤中收集的事实包括操作系统风格、版本、有关接口和磁盘的信息以及各种其他主机元数据。变量都在ansible_*命名空间中(如ansible_distribution_major_version)。

Kubespray 正在利用这些自动收集的事实来加载适当的 vars 文件。

更多信息:

等等