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

Ansible日期时间格式处理报错排查及需求实现咨询

错误原因分析
  1. strftime过滤器参数类型不匹配:strftime要求输入为整数类型的Unix时间戳(epoch),但你在Get date time任务中传入的是字符串格式的日期ansible_facts.date_time.date(值为2025-02-19),类型不符直接触发报错。
  2. 后续Set timing for maintenance window任务中,ansible_facts.date_time.iso8601同样是字符串格式,直接使用strftime也会触发同类问题(当前报错先出现在前一个任务)。
修正后的任务实现

以下是满足你需求的正确Ansible任务写法:

- name: Obtain facts
  ansible.builtin.setup:

- name: Get date time (dd-mm-YYYY format)
  ansible.builtin.set_fact:
    # 方式1:直接拼接date_time字段,直观无额外转换
    current_date: "{{ ansible_facts.date_time.day }}-{{ ansible_facts.date_time.month }}-{{ ansible_facts.date_time.year }}"
    # 方式2:通过epoch时间戳转换(适合复杂格式化场景)
    # current_date: "{{ ansible_facts.date_time.epoch | int | strftime('%d-%m-%Y') }}"

- name: Set timing for maintenance window
  ansible.builtin.set_fact:
    # 基于epoch时间戳生成ISO格式当前时间
    maintenance_start: "{{ ansible_facts.date_time.epoch | int | strftime('%Y-%m-%dT%H:%M:%S') }}"
    # epoch加3600秒(1小时)生成结束时间
    maintenance_end: "{{ (ansible_facts.date_time.epoch | int + 3600) | strftime('%Y-%m-%dT%H:%M:%S') }}"
验证说明
  • current_date:直接拼接day/month/year字段,可直接得到dd-mm-YYYY格式的日期(如19-02-2025),无需额外类型转换。
  • maintenance_start/maintenance_end:使用epoch整数时间戳作为strftime输入,确保格式转换有效;maintenance_end通过时间戳加3600秒实现精确的1小时偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:37:01