Ansible2.7でwith_itemsを使っていたら警告が出て、PHPの拡張モジュールを入れられなかったのでその時の対応です。

問題点

一部省略していますが、ymlファイルを以下のように書いて実行したところ、DEPRECATION WARNINGが出ました。

- name: PHPの拡張モジュールをインストール
    yum: name={{ item }} state=installed
    with_items:
    - php-cli
    - php-common
    - php-devel
    - php-fpm
    - php-gd
    - php-mysqlnd
    - php-mbstring
    - php-xml

 
【$ ansible-playbook playbook.yml】の実行結果

TASK [PHPの拡張モジュールをインストール] ************************************************************
[DEPRECATION WARNING]: Invoking "yum" 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: ['php-cli', 'php-common', 'php-devel', 'php-
fpm', 'php-gd', 'php-mysqlnd', 'php-mbstring', 'php-xml']` and remove the loop. This 
feature will be removed in version 2.11. Deprecation warnings can be disabled by 
setting deprecation_warnings=False in ansible.cfg.
changed: [127.0.0.1] => (item=[u'php-cli', u'php-common', u'php-devel', u'php-fpm', u'php-gd', u'php-mysqlnd', u'php-mbstring', u'php-xml'])

原因

和訳すると以下のメッセージが出ました。推奨されていない書き方だったようです。

[非推奨警告]:squash_actionsを介してループを使用している間に "yum"を一度だけ呼び出す
 推奨されていません。ループを使用して複数の項目を指定して指定する代わりに
`name:" {{item}} "`、name:['php-cli'、 'php-common'、 'php-devel'、 'php-を使用してください。
fpm '、' php-gd '、' php-mysqlnd '、' php-mbstring '、' php-xml '] `の順にループを削除します。この
機能はバージョン2.11で削除される予定です。非推奨警告は次の方法で無効にできます。
ansible.cfgでdeprecation_warnings = Falseに設定します。
変更:[127.0.0.1] =>(item = [u'php-cli '、u'php-common'、u'php-devel '、u'php-fpm'、u'php-gd '、u' php-mysqlnd '、u'php-mbstring'、u'php-xml '])

Ansible 2.7 Porting Guideにも書いていました。

解決

以下のように書き直すことで問題が解決できました。

- name: PHPの拡張モジュールをインストール
  yum:
    name: "{{ packages }}"
    state: present
  vars:
    packages:
    - php-cli
    - php-common
    - php-devel
    - php-fpm
    - php-gd
    - php-mysqlnd
    - php-mbstring
    - php-xml