我正在尝试使用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"
}
一个奇怪的问题。我可能会遗漏一些非常简单的东西吗?
答案 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"