【问题标题】:How do I force-reinstall a package with Ansible?如何使用 Ansible 强制重新安装软件包?
【发布时间】:2015-12-14 05:58:21
【问题描述】:

我正在使用 Ansible 从自定义存储库部署 .deb 包。

有时开发人员可能会忘记更改包编号,因此存储库将包含旧版本的新包。这是不必要的,所以我想总是重新安装包。我该怎么做?

apt moduleforce=yes 选项。 Ansible documentation 说:

如果yes,强制安装/删除。

但这似乎是关于强制接受任何警告。至少当我将其关闭时,Ansible 会被阻止并显示有关不受信任来源的警告。 (存储库和服务器都在同一个 Intranet 中,所以这应该不是问题)

我可以用这个:

- name: force-reinstall myservice
  shell: apt-get --reinstall install myservice

但是这样我就不能为 apt module 使用其他选项,并且 Ansible 会以同样的方式被警告阻止。

有没有办法始终重新安装软件包并避免阻止任何交互?

【问题讨论】:

    标签: deployment ansible apt deb


    【解决方案1】:

    正确的方法肯定是使用正确的版本号。但是,如果您不想强制执行,那么最简单的解决方法是首先删除软件包,然后重新安装。这实际上与重新安装相同。

    - name: remove package
      apt: name=package_name state=absent
    
    - name: install package
      apt: name=package_name state=present update_cache=yes
    

    【讨论】:

    • 这正是我现在正在使用的,但对我来说似乎不是一个好的解决方案。但你的回答让我放心,很可能没有更好的方法。
    • @NickVolynkin 是的,我同意这不是最好的解决方案。也许您可以尝试自动生成包号,以便开发人员无需手动更新。
    • 当然,这似乎是解决问题的正确位置。
    • 是的——一种在同一个任务中强制卸载和重新安装看起来像同一个包的东西的方法违背了 Ansible 的哲学,即它查看系统的状态,并且只使在状态与剧本定义的不同的地方发生变化。
    • 就包号达成一致 - 仍然会始终执行强制、无条件的重新安装,因此即使 Ansible 中存在这样的功能也无法实现状态。
    猜你喜欢
    • 2017-06-11
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2014-09-19
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多