Ich hatte dieselbe Frage und es sieht so aus, als müsste jeder Satz von Paketen mit denselben Zuständen ein eigener Block sein. Wenn man sich die Dokumentation von Ansible ansieht, haben sie einen Block für jeden Zustand als Beispiel, also habe ich dieses Beispiel genommen, meine Pakete basierend auf ihren Zuständen zerschnitten und dem Beispiel von Ignacio gefolgt, und es hat am Ende perfekt funktioniert.
Im Grunde würde es also so aussehen
- name: Install packages required for log-deployment
apt:
name:
- gcc
- python-devel
state: latest
autoclean: yes
- name: Install packages required for log-deployment
apt:
name:
- python
- mariadb
- mysql-devel
state: installed
Hoffe, das macht Sinn und hilft!
Sie können das Array im YAML-Stil codieren, um es besser lesbar zu machen:
- name: Install utility packages common to all hosts
apt:
name:
- aptitude
- jq
- curl
- git-core
- at
state: present
autoclean: yes
Ich bin auf genau dasselbe Problem gestoßen, aber mit einer viel längeren Liste von Apps, die in einer vars-Datei gespeichert sind. Dies ist der Code, den ich implementiert habe, um dieses Problem zu umgehen. Die Liste der Apps wird in die „apps“-Variable platziert und Ansible iteriert darüber.
- name: Install default applications
apt:
name: "{{item}}"
state: latest
loop: "{{ apps }}"
when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'
tags:
- instapps
Die Datei mit der Liste der zu installierenden Apps befindet sich im Standardverzeichnis im Rollenverzeichnis für diese Aufgabe – nämlich im „allgemeinen“ Rollenverzeichnis.
roles
- common
- Defaults
- main.yml