apt
を介してインストールするいくつかのパッケージを定義したプレイブックを実行しています。
- name: Install utility packages common to all hosts
apt:
name: "{{ item }}"
state: present
autoclean: yes
with_items:
- aptitude
- jq
- curl
- git-core
- at
...
私のシステムの最近のansibleの更新により、上記のプレイブックに関する次のメッセージが表示されます。
[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of
using a loop to supply multiple items and specifying `name: {{ item }}`, please use `name: [u'aptitude',
u'jq', u'curl', u'git-core', u'at', u'heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp',
u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']` and remove the loop.
私がこれを正しく理解している場合、Ansibleはこのパッケージのリストを配列としてこれを残すようになりました。
name: [u'aptitude', u'jq', u'curl', u'git-core', u'at','heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp',u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']
もっと良い方法はありますか? VIMこれを維持しようとして永遠に右にスクロールするように思えます。それ、またはWordでラップしてWordのパッケージのクラウドを処理します。
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
インストールするアプリのリストを保持するファイルは、このタスクの役割ディレクトリの「デフォルト」ディレクトリ、つまり「共通」役割ディレクトリにあります。
roles
- common
- Defaults
- main.yml
これと同じ質問がありましたが、同じ状態のパッケージの各セットは独自のブロックでなければならないようです。 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
理にかなって助けてくれることを願っています!