使用 ansible 安装多个 php 模块

Installing multiple php modules with ansible

我正在尝试使用 ansible

安装多个 php 模块

这里是任务的例子:

- name: debug php modules
  debug: msg="{{ php_version }}-{{ item }}"
  with_items: php_modules

- name: php modules/extensions are installed
  yum:
    state=present
    name="{{ php_version }}-{{ item }}"
  with_items: "{{ php_modules }}"
  when: php_modules is defined

和定义的实际变量:

  vars:
    php_version: php56u
    php_modules:
      - intl
      - pdo

剧本失败 "No Package matching 'pdo' found available, installed or updated"

我试过 with_items: php_modules 但无法正常工作。这很奇怪,因为上面的调试每次都有效:

ok: [server-1] => (item=intl) => {
    "item": "intl",
    "msg": "php56u-intl"
}

ok: [server-1] => (item=pdo) => {
    "item": "pdo",
    "msg": "php56u-pdo"
}

一个奇怪的问题。我可能在这里遗漏了一些非常简单的东西?

感谢@udondan 提供有关调试 yum 模块输出的提示。这很有帮助!结果是 ansible yum 模块尝试一次安装所有东西,因此列表变成了 "php56u-intl,pdo" 而不是 "php56u-intl,php56u-pdo"(因此 "debug" 模块对待它的方式不同,debug 运行s 对每个项目多次,但 yum 将它们放在一起)。
bug/feature/limitation 实际上是在这里报告的:https://github.com/ansible/ansible/issues/5871

诀窍,因为问题列表中的评论之一是使用 "join",这会强制 yum 模块分别 运行 每个项目:

- name: php modules/extensions are installed
  yum:
    state=present
    name={{ item|join('-') }}
  with_nested:
    - php_version
    - php_modules
  when: php_modules is defined

在 ansible yum 模块添加选项之前,这可能是唯一的方法 "one_by_one_install_please_please_please: true/false"