regex - Ansible:仅当是最新版本时才安装包
问题描述
简介:目标是将软件包安装和配置到本地服务器(无需互联网连接)。
我已经完成了使用.deb
文件和apt 模块进行安装的任务,并且还使用lineinfile模块来配置服务以编辑包配置文件。
问题:如果服务器已经有旧版本!
我可以使用以下命令安装当前版本:
dpkg-query -f '${Version}' -W packageName`
我还开发了一个正则表达式来获取要比较的数字。
但现在我被困住了!=/
问题:如何使用正则表达式将当前版本号与要安装的版本号进行比较?
我已经阅读了过滤器文档,但它没有响起任何铃声。>.<
卸载和安装也是一种选择,但似乎不是正确的选择。
解决方案
由于 <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
推荐阅读
- plot - 在 QGIS 中上传 CSV 没有意义
- code-search-engine - 如何跟踪 Hound 的使用情况
- php - 通过 PHP / cURL 发送 Base64 数据导致语音到文本只返回一个空的 json 字符串?
- ios - 在 App Store 上传期间删除的 iOS 权利
- sql - 如何在 SQL Server 中使用 LTRIM 和 RTRIM 修剪除 1 之外的前导零?
- javascript - 删除隐藏的 iframe:Angular 5
- python - 将 str() 函数获得的字符串转换回列表
- javascript - 如何在多个异步调用中向 NodeJS 中的数据库发送响应?
- android - 我的原生广告高级(统一)ID 在哪里?
- angular - 无法读取未定义的属性“cpf”