gpt4 book ai didi

ansible - 如何使用 Ansible 过滤树中每个文件的最新版本?

转载 作者:行者123 更新时间:2023-12-05 03:56:11 26 4
gpt4 key购买 nike

我有一个包含各种文件的中型目录树:

  • /some/place/distfiles/foo-1.2.jar
  • /some/place/distfiles/subdir/foo-1.3.jar
  • /some/place/distfiles/bar-1.1.jar
  • /some/place/distfiles/bar-1.1.2.jar

我使用 find-module获取完整列表,但我只需要每个 foobar最新 版本。例如上面的集合,需要缩减为:

  • /some/place/distfiles/subdir/foo-1.3.jar
  • /some/place/distfiles/bar-1.1.2.jar

不,我不能依赖文件的时间戳——只能依赖文件名的数字部分...

有人可以建议一种优雅的方式吗?

最佳答案

这将是一些不平凡的 jinja2,因此您可能更愿意编写一个自定义模块,这样您就可以使用实际的编程语言工作(您仍然可以使用 find:注册: 以捕获文件名列表,然后将其提供给您的自定义模块以根据您的规则为每个文件汇总“最新”)

也就是说,我猜 version test可用于在将项目拆分为 tuple[str, str] 从其基本名称到版本号之后查找最新的:

- find:
paths:
- /some/place/distfiles
# etc
register: my_jars
- set_fact:
versions_by_filename: >-
{%- set results = {} -%}
{%- for f in my_jars.files -%}
{%- set bn = f.path | basename
| regex_replace(ver_regex, '\\1') -%}
{%- set v = f.path | regex_replace(ver_regex, '\\2') -%}
{%- set _ = results.setdefault(bn, []).append(v) -%}
{%- endfor -%}
{{ results }}
vars:
ver_regex: '(.*)-([0-9.-]+)\.jar'

- set_fact:
most_recent: >-
{%- set results = {} -%}
{%- for fn, ver_list in versions_by_filename.items() -%}
{%- set tmp = namespace(latest=ver_list[0]) -%}
{%- for v in ver_list -%}
{%- if tmp.latest is version(v, '<') -%}
{%- set tmp.latest = v -%}
{%- endif -%}
{%- endfor -%}
{%- set _ = results.update({fn: tmp.latest}) -%}
{%- endfor -%}
{{ results }}

关于ansible - 如何使用 Ansible 过滤树中每个文件的最新版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com