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

Ansible:如何从字典列表中保留各域名最新过期时间的条目?

Ansible 筛选字典列表:保留每个域名最新过期的证书

完全可以用Ansible内置过滤器实现,不需要自定义过滤器或循环,核心思路是先按域名分组,再在每组内筛选过期时间最晚的条目。

实现示例

---
- name: 筛选每个域名最新的ACM证书
  hosts: localhost
  vars:
    acm_certificates:
      - domain_name: "example.com"
        not_after: "2024-07-31T01:59:59+02:00"
      - domain_name: "example2.com"
        not_after: "2024-07-31T01:59:59+02:00"
      - domain_name: "example.com"
        not_after: "2023-07-15T01:59:59+02:00"
  tasks:
    - name: 处理证书列表,保留每个域名最新条目
      set_fact:
        latest_certificates: >
          {{ 
            acm_certificates 
            | groupby('domain_name') 
            | map('last') 
            | map('sort', attribute='not_after', reverse=true) 
            | map('first') 
            | list 
          }}

    - name: 输出筛选结果
      debug:
        var: latest_certificates

过滤器拆解说明

每个过滤器的作用依次是:

  • groupby('domain_name'):将原列表按domain_name分组,得到(域名, [该域名的所有证书条目])格式的元组列表
  • map('last'):提取每个分组中的证书条目列表(丢弃分组的域名键)
  • map('sort', attribute='not_after', reverse=true):对每个分组的条目按not_after倒序排序(最新过期时间排在首位)
  • map('first'):取每个排序后列表的第一个元素,即该域名过期时间最晚的证书
  • list:将最终的迭代器转换为标准列表格式

注意事项

not_after字段的ISO时间字符串可以直接比较大小,Ansible会自动识别时间顺序,无需额外转换为时间对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:12:20