Ansible - Setzt eine Tatsache aus dynamischen Variablen

Nov 19 2020

Ich rufe eine bestimmte Variablendatei aus einer Tatsache auf

- 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

Variablen in dieser Datei können je nach Verteilung unterschiedliche Namen haben

#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
...

Ich habe auch eine "gemeinsame" Paketliste, die für alle Linux-Distributionen verwendet wird

Ich muss diese 3 verschiedenen Listen mit der Paketliste verknüpfen, die auf dem Host installiert werden muss

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

Um dies zu erreichen, habe ich versucht, für jede Liste den Namen der Dynamikvariablen festzulegen:

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

Aber nach dem Sefakt geht die Liste verloren ...

Wie kann ich meinen dynamischen Listennamen (Variablen) als Fakt festlegen?

Antworten

LeXaNZ Nov 24 2020 at 22:31

Hier das letzte set_fact, das ich verwendet habe:

- 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