You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中重构S3对象字典列表结构?

需求场景

我有如下格式的S3对象字典列表:

s3_objects:
  - item: "path/to/file.txt"
    url: "https://my-bucket.s3.us-west-2.amazonaws.com/path/to/file.txt?X-Amz-Date=20240206T235117Z&X-Amz-Expires=600"
  - item: "path/to/file2.txt"
    url: "https://my-bucket.s3.us-west-2.amazonaws.com/path/to/file2.txt?X-Amz-Date=20240206T235117Z&X-Amz-Expires=600"

已实现自定义过滤器extract_s3_times,配合urlsplit可从URL的查询参数中提取时间相关信息,示例如下:

- debug:
    var: s3_objects[0].url | urlsplit('query') | extract_s3_times("%m/%d/%Y %T")

返回结果:

{
  "created_at": "02/06/2024 23:51:17",
  "expires_at": "02/07/2024 00:01:17",
  "lifetime": 600
}

我需要将原s3_objects列表转换为如下结构:

- file: "path/to/file.txt"
  url: "https://my-bucket.s3.us-west-2.amazonaws.com/path/to/file.txt?X-Amz-Date=20240206T235117Z&X-Amz-Expires=600"
  created: "02/06/2024 23:51:17"
  expires: "02/07/2024 00:01:17"
- file: "path/to/file2.txt"
  url: "https://my-bucket.s3.us-west-2.amazonaws.com/path/to/file2.txt?X-Amz-Date=20240206T235117Z&X-Amz-Expires=600"
  created: "02/06/2024 23:51:17"
  expires: "02/07/2024 00:01:17"

当前实现(效率较低)

我目前用以下方式实现,但需要两次任务调用,效率不高:

- debug:
    msg:
      file: "{{ item.item }}"
      url: "{{ item.url }}"
      created: "{{ s3_times.created_at }}"
      expires: "{{ s3_times.expires_at }}"
    vars:
      s3_times: >
        {{ item.url | urlsplit('query') | extract_s3_times("%m/%d/%Y %T") }}
    loop: "{{ s3_urls.results }}"
    register: new_list

- set_fact:
    new_new_list: "{{ new_list.msg }}"

求助方向

希望找到仅使用Jinja过滤器的更优实现方案,无需通过循环注册再提取的方式。


内容的提问来源于stack exchange,提问作者jeremywat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:50:15