これと同じ質問がありましたが、同じ状態のパッケージの各セットは、独自のブロックにする必要があるようです。 Ansible のドキュメントを見ると、例として各状態のブロックがあるので、その例を取り上げ、状態に基づいてパッケージを分割し、ignacio の例に従ってみたら、完全に機能しました。
したがって、基本的には次のようになります
- 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
それが理にかなっており、役立つことを願っています!
YAML スタイルで配列をコーディングして、読みやすくすることができます:
- name: Install utility packages common to all hosts
apt:
name:
- aptitude
- jq
- curl
- git-core
- at
state: present
autoclean: yes
これとまったく同じ問題に遭遇しましたが、アプリのリストがはるかに長く、vars ファイルに保持されていました。これは、その問題を回避するために実装したコードです。アプリのリストは「apps」変数に配置され、Ansible はそれを反復処理します。
- name: Install default applications
apt:
name: "{{item}}"
state: latest
loop: "{{ apps }}"
when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'
tags:
- instapps
インストールするアプリのリストを保持するファイルは、このタスクのロール ディレクトリ (つまり、「共通」ロール ディレクトリ) の Defaults ディレクトリにあります。
roles
- common
- Defaults
- main.yml