在执行这样的任务时,为了安装本地软件包(la yum localinstall):
- name: Install local packages
yum:
name="/my/path/{{ item }}"
state=installed
with_items: list_of_packages
其中list_of_packages在vars / main.yml中定义为:
---
list_of_packages:
- package1.rpm
- package2.rpm
...
Yum试图变得聪明并将所有项目放在一个命令中但结尾只添加第一个包的路径:
REMOTE_MODULE yum name =“/ my / path / package1.rpm,package2.rpm”state = installed
显然无法找到第二个包裹
我已经尝试添加内部路径,如: {{ "/my/path/"+item }}
并继续做同样的事情 .
除了添加基本路径复制“list_of_packages”之外,还有其他方法吗? (我正在使用的解决方法)
编辑:详细的测试剧本(ansible版本1.9.2):
# cat playbooks/testlocalinstall.yml
---
- hosts: all:!localhost
vars:
list_of_packages:
- oracleasmlib-2.0.4-1.el6.x86_64.rpm
- oracleasm-support-2.1.8-1.el6.x86_64.rpm
tasks:
- name: Install Packages
yum: name=/software/{{ item }} state=installed
with_items: list_of_packages
结果:
# ansible-playbook playbooks/testlocalinstall.yml -i inventory/myinv -vvv
PLAY [all:!localhost] *********************************************************
GATHERING FACTS ***************************************************************
<testmachine> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO testmachine
<testmachine> REMOTE_MODULE setup
<testmachine> EXEC /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1441783338.15-74757921814888 && echo $HOME/.ansible/tmp/ansible-tmp-1441783338.15-74757921814888'
<testmachine> PUT /tmp/tmp_955vP TO /root/.ansible/tmp/ansible-tmp-1441783338.15-74757921814888/setup
<testmachine> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1441783338.15-74757921814888/setup; rm -rf /root/.ansible/tmp/ansible-tmp-1441783338.15-74757921814888/ >/dev/null 2>&1'
ok: [testmachine]
TASK: [Install Packages] ******************************************************
<testmachine> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO testmachine
<testmachine> REMOTE_MODULE yum name=/software/oracleasmlib-2.0.4-1.el6.x86_64.rpm,oracleasm-support-2.1.8-1.el6.x86_64.rpm state=installed
<testmachine> EXEC /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1441783339.35-66981904309720 && echo $HOME/.ansible/tmp/ansible-tmp-1441783339.35-66981904309720'
<testmachine> PUT /tmp/tmpF0hiqP TO /root/.ansible/tmp/ansible-tmp-1441783339.35-66981904309720/yum
<testmachine> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python -tt /root/.ansible/tmp/ansible-tmp-1441783339.35-66981904309720/yum; rm -rf /root/.ansible/tmp/ansible-tmp-1441783339.35-66981904309720/ >/dev/null 2>&1'
failed: [testmachine] => (item=oracleasmlib-2.0.4-1.el6.x86_64.rpm,oracleasm-support-2.1.8-1.el6.x86_64.rpm) => {"changed": false, "failed": true, "item": "oracleasmlib-2.0.4-1.el6.x86_64.rpm,oracleasm-support-2.1.8-1.el6.x86_64.rpm", "rc": 0, "results": []}
msg: No Package file matching 'oracleasm-support-2.1.8-1.el6.x86_64.rpm' found on system
msg:
No Package file matching 'oracleasm-support-2.1.8-1.el6.x86_64.rpm' found on system
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/root/testlocalinstall.retry
testmachine : ok=1 changed=0 unreachable=0 failed=1
添加到列表上的每个包的路径工作正常
谢谢 .
2 回答
我无法重现此问题:
3个包使用
--downloadonly
yum选项下载(link)Ansible详细模式显示相同的结果 - 只有第一个包具有路径前缀,但安装有效 .
请试试这个:
检查Ansible版本 - 1.9.2之前的版本中存在错误(我正在测试的版本)
百胜无法找到您提供的包列表的依赖项 - 确保使用
yum --downloadonly
下载的所有包都在列表中 . 它们应与目标包一起明确说明 .作为一种解决方法,您可以使用模板模块创建本地yum存储库,该模块指向同一文件夹
/my/path/
. 默认情况下应禁用此存储库 . 仅在yum
任务期间启用此仓库enablerepo
(link)这是我的剧本:
输出:
为了使用
with_items
,我相信它期待一个yaml列表,而不是逗号分隔列表 .http://docs.ansible.com/ansible/playbooks_loops.html#standard-loops