Skip to content

Commit 54e61b3

Browse files
authored
Support null K8s lastTransitionTime values (#6217)
1 parent 70ce155 commit 54e61b3

3 files changed

Lines changed: 42 additions & 3 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect/cluster": patch
3+
---
4+
5+
Allow Kubernetes pod condition `lastTransitionTime` values to be null.

packages/cluster/src/K8sHttpClient.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ export class PodStatus extends Schema.Class<PodStatus>("@effect/cluster/K8sHttpC
184184
conditions: Schema.Array(Schema.Struct({
185185
type: Schema.String,
186186
status: Schema.String,
187-
lastTransitionTime: Schema.String
187+
lastTransitionTime: Schema.NullOr(Schema.String)
188188
})),
189189
podIP: Schema.String,
190190
hostIP: Schema.String
@@ -208,8 +208,8 @@ export class Pod extends Schema.Class<Pod>("@effect/cluster/K8sHttpClient/Pod")(
208208
}
209209

210210
get isReadyOrInitializing(): boolean {
211-
let initializedAt: string | undefined
212-
let readyAt: string | undefined
211+
let initializedAt: string | null | undefined
212+
let readyAt: string | null | undefined
213213
for (let i = 0; i < this.status.conditions.length; i++) {
214214
const condition = this.status.conditions[i]
215215
switch (condition.type) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { assert, describe, it } from "@effect/vitest"
2+
import { Effect, Schema } from "effect"
3+
import * as K8sHttpClient from "../src/K8sHttpClient.js"
4+
5+
describe("K8sHttpClient", () => {
6+
describe("Pod", () => {
7+
it.effect("decodes null lastTransitionTime values", () =>
8+
Effect.sync(() => {
9+
const pod = Schema.decodeSync(K8sHttpClient.Pod)({
10+
status: {
11+
phase: "Running",
12+
conditions: [
13+
{
14+
type: "Initialized",
15+
status: "True",
16+
lastTransitionTime: null
17+
},
18+
{
19+
type: "Ready",
20+
status: "False",
21+
lastTransitionTime: null
22+
}
23+
],
24+
podIP: "10.0.0.1",
25+
hostIP: "10.0.0.2"
26+
}
27+
})
28+
29+
assert.strictEqual(pod.status.conditions[0]?.lastTransitionTime, null)
30+
assert.isFalse(pod.isReady)
31+
assert.isTrue(pod.isReadyOrInitializing)
32+
}))
33+
})
34+
})

0 commit comments

Comments
 (0)