首页 > 解决方案 > Ansible:仅当是最新版本时才安装包

问题描述

简介:目标是将软件包安装和配置到本地服务器(无需互联网连接)。

我已经完成了使用.deb文件和apt 模块进行安装的任务,并且还使用lineinfile模块来配置服务以编辑包配置文件。

问题:如果服务器已经有旧版本!

我可以使用以下命令安装当前版本:

dpkg-query -f '${Version}' -W packageName`

我还开发了一个正则表达式来获取要比较的数字。

但现在我被困住了!=/

问题:如何使用正则表达式将当前版本号与要安装的版本号进行比较?

我已经阅读了过滤器文档,但它没有响起任何铃声。>.<

卸载和安装也是一种选择,但似乎不是正确的选择。

标签: regexansible

解决方案


由于 <50 rep 在这一点上,我无法发表评论,所以我会尽量详细说明。我希望这确实回答了您的问题,如果没有,请发表评论。

如果问题是在已安装旧版本的情况下进行安装,您可以使用 apt 模块的“only_upgrade”选项:

shell: ansible-doc apt
- only_upgrade
        Only upgrade a package if it is already installed.
        [Default: no]
        type: bool
        version_added: 2.1

然后,当向register此操作添加 var 时,您将知道软件包是否确实升级了,并且假设您由于版本更改需要推送新的配置文件,那么您就拥有了所需的内容。流程将是:

- name: Attempt upgrade first
   apt: 
     deb: path/to/file.deb
   only_upgrade: True
   register: was_upgraded

- name: Install the package on a server that never had it
  apt:
    deb: path/dto/file.deb
  when: was_upgraded.false

推荐阅读