无法在 Ansible 中使用 deb 模块卸载包

Posted

技术标签:

【中文标题】无法在 Ansible 中使用 deb 模块卸载包【英文标题】:Unable to uninstall package using deb module in Ansible 【发布时间】:2019-08-20 11:13:30 【问题描述】:

今天我在使用 ansible 并尝试卸载 debian 软件包时遇到问题。该软件包不是来自存储库,而是直接来自一个 .deb 文件,因此,在 Ansible 中我定义了安装任务:

- name: install nomachine
  apt:
    deb: /root/ nomachine_package 

真正起作用的是,软件包被安装在 S.O. 中

但是,什么时候删除它:

- name: uninstall nomachine
  apt:
    deb: nomachine-enterprise-terminal-server
    state: absent

恐怖:

fatal: [SERVER]: FAILED! => "changed": false, "failed": true, "msg": "deb only supports state=present"

我不是开发人员,但请查看apt.py,似乎卸载过程仅适用于通过存储库安装的软件包? (它似乎验证了 apt 的缓存)。

因此,作为我正在执行的此卸载过程的解决方法:

- name: uninstall nomachine
  shell: dpkg -r nomachine-enterprise-terminal-server

我正在使用 ansible 2.3.0.0

也许我没有正确使用该工具或该功能不可用。

感谢您对此提供的任何帮助。

H.

编辑:我认为我做得很好,因为关注the example of ansible:

- name: Remove "foo" package
  apt:
    name: foo
    state: absent

对于那些想知道为什么没有定义“-name”的人,这是因为任务是一个处理程序。

【问题讨论】:

【参考方案1】:

我是个傻孩子。在查看了我最近在 github 上的“newbug”中建议的文档后,卸载软件包的语法会有所不同,同一模块的使用差异很小(并且在我已经回答过自己的问题中):

# WRONG
- name: uninstall nomachine
  apt:
    deb: nomachine-enterprise-terminal-server
    state: absent

# RIGHT
- name: Remove "foo" package
  apt:
    name: foo
    state: absent

deb --> 名字!!只是为了卸载......为了安装包它仍然是“deb”。

今天擦脸,明天体验。

【讨论】:

以上是关于无法在 Ansible 中使用 deb 模块卸载包的主要内容,如果未能解决你的问题,请参考以下文章

[Ubuntu] 使用dpkg来安装/卸载deb包

ubuntu安装以及卸载软件

ansible常用模块整理

ubuntu如何卸载deb安装包

deb包安装/卸载/升级时,preinst, postinst, prerm, postrm的执行顺序

deb包安装/卸载/升级时,preinst, postinst, prerm, postrm的执行顺序