快速幂等Ansible apt-deb-url



即使包已经安装,每次调用命令apt install https://github.com/jgraph/drawio-desktop/releases/download/v12.9.3/draw.io-amd64-12.9.3.deb也可能需要很长时间。它实际上是每次下载软件包。

是的,ansible是幂等性,状态改变:否。

- name: Install a drawio-desktop .deb package
apt:
deb: https://github.com/jgraph/drawio-desktop/releases/download/v12.9.3/draw.io-amd64-12.9.3.deb
when: ansible_facts['lsb']['id'] == "Ubuntu"
tags:
- debug
- not-macos

如果安装了软件包,有没有跳过下载的捷径?

理想情况下是在name中说,如果不是从deb: url安装,我想安装draw.io,否则考虑安装。

- name: Install a drawio-desktop .deb package
apt:
name: draw.io
deb: https://github.com/jgraph/drawio-desktop/releases/download/v12.9.3/draw.io-amd64-12.9.3.deb

但不是像那样工作

TASK [desktop : Install a drawio-desktop .deb package] *********
fatal: [tuxedo]: FAILED! => {"changed": false, "msg": "parameters are mutually exclusive: deb|package|upgrade"}

有没有建议用一个更轻松的解决方案来加快任务?

行为似乎是根据参数deb

Ansible将在安装之前尝试下载deb。

和apt.py.的当前来源

因此,您可以查看模块package_facts

- name: Gather Package Facts
package_facts:
manager: apt # default ["auto"]

以及的条件示例

when: "ansible_facts['lsb']['id'] == 'Ubuntu' and 'draw.io' not in ansible_facts.packages"

的积分

  • 如何使用Ansible获取已安装的apt包

进一步的问答;A

  • Ansible:如果缺少apt包,则执行任务

另一种方法可能是让最新的包始终在内部(缓存(可用,并为本机包管理器提供指向内部存储库URL(文件共享(的.list文件。

通过这样做,你就可以使用

- name: Install a drawio-desktop .deb package
apt:
name: draw.io
state: latest

而无需进一步检查。这也将解决所需的更新。