如何在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
相关产品推荐
相关产品推荐

