Ist es möglich, eine Ansible-Inventarvariable zu erstellen, die nicht mit einem Inventarhost oder einer Inventargruppe verknüpft ist, sondern mit der Serverebene, auf der das Playbook ausgeführt wird? Ich habe eine Ansible-Rolle, die das libffi-dev-Paket mit APT installiert, aber ich möchte vielleicht eine andere Version dieses Pakets auf jeder Server-Ebene installieren. Ich habe zu diesem Zweck eine Variable "libffi-dev_ver" erstellt. Ich habe auch die Inventardateien "Entwicklung", "Inszenierung" und "Produktion", die jeder meiner Tiers entsprechen.Wie wird eine Inventory-spezifische Inventarvariable festgelegt?
Hauptaufgabe der Meine Rolle, die von meinem Haupt site.yml Textbuch genannt wird, überprüft die Version Variable, die Rolle zu laufen, bevor vorhanden ist:
# roles/misc_libs/tasks/main.yml
- include: check_vars.yml tags=misc_libs
- include: misc_libs.yml tags=misc_libs
check_vars.yml überprüft, um sicherzustellen, dass die Paketversion Variable vorhanden :
# roles/misc_libs_tasks/check_vars.yml
- name: check that required role variables are set
fail: msg="{{ item }} is not defined"
when: not {{ item }}
with_items:
- libffi-dev_ver
die misc_libs Rolle tatsächlich nutzt diese Variable das Paket zu installieren:
# roles/misc_libs/tasks/misc_libs.yml
- name: install libffi-dev
apt: >
pkg=libffi-dev={{ libffi-dev_ver }}
update_cache=yes
cache_valid_time=3600
become: True
Meine Datei Entwicklung Inventar sieht wie folgt aus:
# development
[webservers]
web01.example.com ansible_ssh_host=<ip_address>
[dev:children]
webservers
[webservers:vars]
libffi-dev_ver="3.1-2+b2"
Wenn ich diesen Befehl ausführen:
ansible-playbook -i development site.yml -l webservers
ich diesen Fehler ansible:
fatal: [web01.example.com] => error while evaluating conditional: not libffi-dev_ver
Was ist der richtige Weg zu erklären, eine Paketversionsvariable wie diese in Ansible? Der Wert der Variablen hängt von der Serverebene ab, die angibt, dass sie in eine Inventardatei passt, da Inventardateien für die Serverebene spezifisch sind. Alle Inventarvariablen scheinen jedoch mit einem Host oder einer Gruppe verknüpft zu sein. Ich habe das getan, aber die Rolle sieht die Variable immer noch nicht. Ich könnte der Rolle, die die Serverschicht erkennt, eine Aufgabe hinzufügen und die Variable mit einer "Wenn" -Konditionalität festlegen, aber diese Lösung scheint hässlich zu sein, denn wenn Sie mehrere Pakete in einer Rolle installieren, benötigen Sie jeweils drei Bedingungen Paketversionsvariable Ich habe die Ansible-Dokumentation durchgelesen und zahlreiche Blog-Posts über das Einrichten mehrstufiger Playbooks gelesen, aber ich sehe nicht, dass diese spezielle Situation angesprochen wird. Was ist der richtige Weg, um eine tierspezifische Variable wie folgt zu deklarieren?
Ich verstehe nicht, was Sie versuchen zu erreichen. Warum ist: # Rollen/misc_libs/Aufgaben/misc_libs.yml - Name: installieren libffi-dev apt:> PKG = libffi-dev = {{libffi-dev_ver}} update_cache = yes cache_valid_time = 3600 werden: True wenn: libffi-dev_ver ist definiert nicht genug? –