Tuve esta misma pregunta y parece que cada conjunto de paquetes con los mismos estados tendrá que ser su propio bloque. Mirando la documentación de Ansible, tienen un bloque para cada estado como ejemplo, así que tomé ese ejemplo, corté mis paquetes según sus estados y seguí el ejemplo de ignacio y terminó funcionando perfectamente.
Así que básicamente se vería así
- 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
¡Espero que tenga sentido y ayude!
Puede codificar la matriz en estilo YAML para que sea más legible:
- name: Install utility packages common to all hosts
apt:
name:
- aptitude
- jq
- curl
- git-core
- at
state: present
autoclean: yes
Encontré exactamente el mismo problema, pero con una lista mucho más larga de aplicaciones, contenida en un archivo vars. Este es el código que implementé para solucionar ese problema. La lista de aplicaciones se coloca en la variable "aplicaciones" y Ansible itera sobre eso.
- name: Install default applications
apt:
name: "{{item}}"
state: latest
loop: "{{ apps }}"
when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'
tags:
- instapps
El archivo que contiene la lista de aplicaciones para instalar está en el directorio Predeterminado en el directorio de roles para esta tarea, es decir, el directorio de roles "común".
roles
- common
- Defaults
- main.yml