使用ansible

时间:2016-02-24 05:31:08

标签: ansible ansible-playbook

我正在尝试使用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"
}

一个奇怪的问题。我可能会遗漏一些非常简单的东西吗?

1 个答案:

答案 0 :(得分:0)

感谢@udondan关于调试yum模块输出的提示。这帮了很多忙!事实证明,ansible yum模块尝试一次安装所有内容,因此列表变为regexp.Compile("[A-Za-z0-9]{3,}") regexp.Compile("(.){3,}") regexp.Compile("(.)\\1{3,}") 而不是"php56u-intl,pdo"(因此与方式的区别" debug"模块对待它, debug为每个项目多次运行,但是yum将它们放在一起) 这里实际报告了错误/功能/限制:https://github.com/ansible/ansible/issues/5871

技巧,因为问题列表中的一个注释是使用" join",这会强制yum模块分别运行每个项目:

"php56u-intl,php56u-pdo"

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