Ansible - ustaw fakt ze zmiennych dynamicznych

Nov 19 2020

Określony plik zmiennych nazywam z faktu

- name: Load vars - {{ ansible_distribution }} {{ ansible_distribution_major_version }} package list
  include_vars:
    file: "{{ ansible_distribution | lower }}-pkglist.yml"
  # if vars file is not found we continue
  ignore_errors: yes

Zmienne w tym pliku mogą mieć różne nazwy w zależności od dystrybucji

#package for all debians server
prefix_debian:  
- pkgname
- pkgname
...

#package for all debian 10 server
prefix_10 :
- specific major version pkgname
- specific major version pkgname
- specific major version pkgname
...

Mam też „wspólną” listę pakietów, która jest używana dla wszystkich dystrybucji Linuksa

Muszę połączyć te 3 różne listy z listą pakietów, które mają być zainstalowane na hoście

common_pkg_list + {{ansible_ distribution}} - pkglist + {{ansible_distribution_major_version}} - pkglist

Aby to osiągnąć, starałem się ustawić fakt dla każdej listy z nazwy zmiennej dynamiki:

-name:
  set_fact:
    common_pkg: "{{ prefix_commonpkglist }}"
    ditro_pkg: "prefix_{{ ansible_distribution | lower }}"
    version_pkg: "prefix_{{ ansible_distribution_major_version }}"

Ale po fakcie lista przepadła ...

Jak mogę ustawić nazwę mojej listy dynamicznej (zmiennych) jako fakt?

Odpowiedzi

LeXaNZ Nov 24 2020 at 22:31

Tutaj ostatni set_fact, którego użyłem:

- name: Building package list for {{ ansible_distribution }} {{ ansible_distribution_major_version }}
  set_fact:
    common_pkg: "{{ prefix_commonpkglist }}"
    ditro_pkg: "{{ lookup('vars', 'prefix_' + ansible_distribution | lower) }}"
    version_pkg: "{{ lookup('vars','prefix_' + ansible_distribution_major_version) }}"

- name: Installing packages
  package:
    name: "{{ common_pkg + ditro_pkg + version_pkg }}"
    state: present