我是 ansible 新手,正在尝试在远程机器上复制和安装 jdk。考虑到我拥有各种不同的客户端(RHEL、Centos、Ubuntu 等),我只想使用 rpm 安装。以下是我的剧本
- hosts: all_clients
remote_user: root
tasks:
- name: copy jdk rpm on client machine usr/tmp
copy:
src: ./RPM/jdk8u73x64.rpm
dest: /usr/tmp/jdk8u73x64.rpm
- name: start installation of jdk
package:
name: /usr/tmp/jdk8u73x64.rpm
#name: jdk8u73x64.rpm
state: latest
#use: rpm
但我遇到了以下错误。
TASK [setup] *******************************************************************
ok: [10.219.161.98]
TASK [copy jdk rpm on client machine usr/tmp] **********************************
ok: [10.219.161.98]
TASK [start installation of jdk] ***********************************************
fatal: [10.219.161.98]: FAILED! => {"changed": false, "failed": true, "msg": "No Package matching 'jdk8u73x64.rpm' found available, installed or updated", "rc": 0, "results": []}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @test2.retry
PLAY RECAP *********************************************************************
10.219.161.98 : ok=2 changed=0 unreachable=0 failed=1
Ansible封装模块描述没有太多说明它在客户端机器上搜索包的位置。有人能帮我让它工作吗?
答案1
首先,位置一般是根据剧本的位置来解析的。
其次,package
它不是为安装本地文件而设计的,而是为从远程存储库中获取文件而设计的。
第三,之所以package
表现得如此,是因为将一个与操作系统无关的文件输入到与操作系统相关的层中实际上没有任何意义;根据定义, 只能.rpm
安装在具有 的系统上rpm
,而不能安装在使用apt
、pacman
、 或portage
或其他的系统上。
你会想要使用yum 模块用于在基于 rpm 的机器上安装 rpm。如果像你说的,你也支持 Ubuntu 机器,你需要使用以下方法过滤掉这些机器有条件的并添加一条单独的规则来安装等效程序.deb
。
然而,如果您要做的只是安装 Java,那么它应该已经在存储库中可用,并且您可以避免所有这些文件的复制。