Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/v1beta1/questdb_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ type QuestDBSpec struct {
Image string `json:"image"`

Affinity *v1.Affinity `json:"affinity,omitempty"`
DisableProbes bool `json:"disableProbes,omitempty"`
ExtraEnv []v1.EnvVar `json:"extraEnv,omitempty"`
ExtraVolumeMounts []v1.VolumeMount `json:"extraVolumeMounts,omitempty"`
ExtraVolumes []v1.Volume `json:"extraVolumes,omitempty"`
Expand Down
2 changes: 2 additions & 0 deletions config/crd/bases/crd.questdb.io_questdbs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -880,6 +880,8 @@ spec:
serverConfig:
type: string
type: object
disableProbes:
type: boolean
extraEnv:
items:
description: EnvVar represents an environment variable present in
Expand Down
1 change: 1 addition & 0 deletions docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ _Appears in:_
| `config` _[QuestDBConfigSpec](#questdbconfigspec)_ | |
| `image` _string_ | |
| `affinity` _[Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#affinity-v1-core)_ | |
| `disableProbes` _boolean_ | |
| `extraEnv` _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#envvar-v1-core) array_ | |
| `extraVolumeMounts` _[VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#volumemount-v1-core) array_ | |
| `extraVolumes` _[Volume](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#volume-v1-core) array_ | |
Expand Down
7 changes: 7 additions & 0 deletions internal/controller/questdb_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,13 @@ func (r *QuestDBReconciler) buildStatefulSet(q *crdv1beta1.QuestDB, s secrets.Qu
})
}

// Disable probes if set in CRD
if q.Spec.DisableProbes {
sts.Spec.Template.Spec.Containers[0].LivenessProbe = nil
sts.Spec.Template.Spec.Containers[0].ReadinessProbe = nil
sts.Spec.Template.Spec.Containers[0].StartupProbe = nil
}

if err := ctrl.SetControllerReference(q, &sts, r.Scheme); err != nil {
panic(fmt.Sprintf("failed to set controller reference, even though we are building an object from scratch: %s", err.Error()))
}
Expand Down
39 changes: 34 additions & 5 deletions internal/controller/questdb_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -329,14 +329,10 @@ var _ = Describe("QuestDB Controller", func() {
g.Expect(q.Status.StatefulSetReadyReplicas).To(Equal(0))
}, timeout, interval).Should(Succeed())

By("Getting the statefulset")
sts := &appsv1.StatefulSet{}
Eventually(func() error {
return k8sClient.Get(ctx, client.ObjectKey{Name: q.Name, Namespace: q.Namespace}, sts)
}, timeout, interval).Should(Succeed())

By("Updating the statefulset status's readyreplicas to 1")
Eventually(func(g Gomega) {
g.Expect(k8sClient.Get(ctx, client.ObjectKey{Name: q.Name, Namespace: q.Namespace}, sts)).Should(Succeed())
sts.Status.Replicas = 1
sts.Status.ReadyReplicas = 1
g.Expect(k8sClient.Status().Update(ctx, sts)).To(Succeed())
Expand All @@ -350,4 +346,37 @@ var _ = Describe("QuestDB Controller", func() {

})

It("should disable liveness/readiness/startup probes if specified in the crd", func() {
By("Creating a new QuestDB")
q := testutils.BuildAndCreateMockQuestDB(ctx, k8sClient)
Expect(q.Spec.DisableProbes).Should(BeFalse())

By("Getting the statefulset")
sts := &appsv1.StatefulSet{}
Eventually(func() error {
return k8sClient.Get(ctx, client.ObjectKey{Name: q.Name, Namespace: q.Namespace}, sts)
}, timeout, interval).Should(Succeed())

By("Verifying the liveness and readiness probes exist but startup does not")
Expect(sts.Spec.Template.Spec.Containers).Should(HaveLen(1))
Expect(sts.Spec.Template.Spec.Containers[0].LivenessProbe).ShouldNot(BeNil())
Expect(sts.Spec.Template.Spec.Containers[0].ReadinessProbe).ShouldNot(BeNil())
Expect(sts.Spec.Template.Spec.Containers[0].StartupProbe).Should(BeNil())

By("Updating the questdb to disable probes")
Eventually(func(g Gomega) {
g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(q), q)).Should(Succeed())
q.Spec.DisableProbes = true
g.Expect(k8sClient.Update(ctx, q)).Should(Succeed())
}, timeout, interval).Should(Succeed())

By("Verifying the liveness and readiness probes don't exist")
Eventually(func(g Gomega) {
g.Expect(k8sClient.Get(ctx, client.ObjectKey{Name: q.Name, Namespace: q.Namespace}, sts)).Should(Succeed())
g.Expect(sts.Spec.Template.Spec.Containers).Should(HaveLen(1))
g.Expect(sts.Spec.Template.Spec.Containers[0].LivenessProbe).Should(BeNil())
g.Expect(sts.Spec.Template.Spec.Containers[0].ReadinessProbe).Should(BeNil())
}, timeout, interval).Should(Succeed())
})

})