Měl jsem stejnou otázku a vypadá to, že každá sada balíčků se stejnými stavy bude muset být svým vlastním blokem. Když se podíváme na dokumentaci Ansible, mají blok pro každý stav jako příklad, takže jsem vzal tento příklad, rozřezal své balíčky na základě jejich stavů a následoval příklad ignacio a nakonec to fungovalo perfektně.
Takže v podstatě by to vypadalo takto
- 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
Doufám, že to dává smysl a pomáhá to!
Pole můžete kódovat ve stylu YAML, aby bylo čitelnější:
- name: Install utility packages common to all hosts
apt:
name:
- aptitude
- jq
- curl
- git-core
- at
state: present
autoclean: yes
Narazil jsem na přesně stejný problém, ale s mnohem delším seznamem aplikací uložených v souboru vars. Toto je kód, který jsem implementoval, abych tento problém obešel. Seznam aplikací je umístěn do proměnné "apps" a Ansible přes to iteruje.
- name: Install default applications
apt:
name: "{{item}}"
state: latest
loop: "{{ apps }}"
when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'
tags:
- instapps
Soubor obsahující seznam aplikací k instalaci je v adresáři Defaults v adresáři rolí pro tuto úlohu – jmenovitě v adresáři „common“ role.
roles
- common
- Defaults
- main.yml