我正在走一个包含鸡蛋的目录,将这些鸡蛋添加到鸡蛋中sys.path.如果目录中有相同.egg的两个版本,我想只添加最新版本.
我有一个正则表达式r"^(?P<eggName>\w+)-(?P<eggVersion>[\d\.]+)-.+\.egg$从文件名中提取名称和版本.问题是比较版本号,这是一个字符串2.3.1.
因为我正在比较字符串,2种类型超过10,但这对于版本来说不正确.
>>> "2.3.1" > "10.1.1"
True
Run Code Online (Sandbox Code Playgroud)
我可以做一些拆分,解析,转换为int等,我最终会得到一个解决方法.但这是Python,而不是Java.有比较版本字符串的优雅方法吗?
当完整的 Ubuntu 版本(Major.Minor,如 18.10)大于或小于指定值时,我需要动态安装 apt 软件包。这是安装在 18.10 中重命名的libvirt-bin正确软件包所必需的。事实上,它包含数字版本,我在旧的 Ansible 文档中找到了版本比较过滤器,该文档似乎在 Ansible 2.5 中重命名,但在最新的 2.9 版本中不起作用:ansible_distribution_version
- name: Execute on ubuntu 18.10 or newer
shell: "echo Youre on Ubuntu 18.10 or newer"
when: ansible_distribution_version | version('18.10', '>=')
Run Code Online (Sandbox Code Playgroud)
条件检查 'ansible_distribution_version | 版本('19.10','>=')'失败。错误是:模板化字符串时出现模板错误:没有名为“version”的过滤器。
最新(当前为 2.9)文档不包含任何版本比较过滤器。我尝试了浮动对话,这似乎有效:
- name: Execute on ubuntu 18.10 or newer
shell: "echo executed on ubuntu 18.10 or newer"
when: ansible_distribution_version | float >= 18.10
Run Code Online (Sandbox Code Playgroud)
使用此对话是否有任何缺点来证明引入过滤器的version_comparisation合理性?version或者是否有另一个过滤器可以安全地比较我尚未找到的版本?
可能有更好的方法来做到这一点,但到目前为止,我正在使这项工作正常进行,但遇到了问题。我正在尝试执行以下操作:
package_facts并注册包收集包事实这是剧本:
---
- name: Attempt upgrade package
hosts: all
gather_facts: false
tasks:
- name: Get Splunk package
package_facts:
manager: auto
register: package_info
- name: Get SplunkForwarder Package Info
debug:
var: package_info.ansible_facts.packages.splunkforwarder[0].version
register: splunk_current_version
- name: Include variables for new splunk forwarder
set_fact:
splunk_latest_version: "{{ splunkforwarder_latest.split('-')[1] }}"
vars:
splunkforwarder_latest: "splunkforwarder-9.1.1-82c987350fde-linux-2.6-x86_64.rpm"
when: splunk_current_version is defined
- name: Debug latest
debug:
var: splunk_latest_version
- name: Upgrade when latest …Run Code Online (Sandbox Code Playgroud)