如何解决Helm中时间区间判断的类型不兼容问题以实现部署定时激活?
解决Helm模板中定时部署的时间区间判断类型不兼容问题
问题背景
要通过Fleet(类ArgoCD工具)实现定时激活部署,仅在指定时间窗口内创建Deployment。现有配置如下:
- namespace: test-dind-1 name: dev-container-gpu startDate: 1738105200 endDate: 1738191600
编写的Helm模板条件判断代码运行时报错incompatible types for comparison,原代码片段:
{{- if and (gt (now | unixEpoch) .startDate) (lt (now | unixEpoch) .endDate) }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ .name }} namespace: {{ .namespace }}
问题原因
配置中的startDate和endDate是字符串类型,而(now | unixEpoch)返回的是整数类型,Helm模板不允许不同类型的值直接进行大小比较,因此触发类型不兼容错误。
解决方案
使用Helm内置的int函数,将配置中的字符串时间戳转换为整数类型,统一类型后再进行比较。
修正后的代码
{{- $currentUnix := now | unixEpoch -}} {{- $start := int .startDate -}} {{- $end := int .endDate -}} {{- if and (gt $currentUnix $start) (lt $currentUnix $end) }} apiVersion: apps/v1 kind: Deployment metadata: name: {{ .name }} namespace: {{ .namespace }} # 补充Deployment的spec等其他配置内容 {{- end }}
说明
- 先将当前时间的Unix时间戳、配置中的开始/结束时间戳都转为整数类型
- 再通过
gt(大于)和lt(小于)函数判断当前时间是否在指定窗口内 - 只有满足条件时,才会渲染Deployment资源定义
内容的提问来源于stack exchange,提问作者Viktor Eriksson
相关产品推荐
相关产品推荐

