ansible 包模块在哪里搜索给定的包名称?

ansible 包模块在哪里搜索给定的包名称?

我是 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,而不能安装在使用aptpacman、 或portage或其他的系统上。

会想要使用yum 模块用于在基于 rpm 的机器上安装 rpm。如果像你说的,你也支持 Ubuntu 机器,你需要使用以下方法过滤掉这些机器有条件的并添加一条单独的规则来安装等效程序.deb

然而,如果您要做的只是安装 Java,那么它应该已经在存储库中可用,并且您可以避免所有这些文件的复制。

相关内容