Ansible日期时间格式处理报错排查及需求实现咨询
错误原因分析
strftime过滤器参数类型不匹配:strftime要求输入为整数类型的Unix时间戳(epoch),但你在Get date time任务中传入的是字符串格式的日期ansible_facts.date_time.date(值为2025-02-19),类型不符直接触发报错。- 后续
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
相关产品推荐
相关产品推荐

