diff --git a/api/v1beta1/vmagent_types.go b/api/v1beta1/vmagent_types.go index 31ab3add..da3b9773 100644 --- a/api/v1beta1/vmagent_types.go +++ b/api/v1beta1/vmagent_types.go @@ -612,6 +612,27 @@ func (cr *VMAgent) AsCRDOwner() []metav1.OwnerReference { return GetCRDAsOwner(Agent) } +func (cr *VMAgent) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAgent) ProbePath() string { + + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAgent) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr VMAgent) ProbePort() string { + return cr.Spec.Port +} + +func (cr VMAgent) ProbeNeedLiveness() bool { + return true +} + func init() { SchemeBuilder.Register(&VMAgent{}, &VMAgentList{}) } diff --git a/api/v1beta1/vmalert_types.go b/api/v1beta1/vmalert_types.go index 824f6bae..8116050b 100644 --- a/api/v1beta1/vmalert_types.go +++ b/api/v1beta1/vmalert_types.go @@ -362,6 +362,27 @@ type VMAlert struct { Status VMAlertStatus `json:"status,omitempty"` } +func (cr *VMAlert) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAlert) ProbePath() string { + + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAlert) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr VMAlert) ProbePort() string { + return cr.Spec.Port +} + +func (cr VMAlert) ProbeNeedLiveness() bool { + return true +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // VMAlertList contains a list of VMAlert @@ -435,9 +456,7 @@ func (cr VMAlert) PrefixedName() string { func (cr VMAlert) TLSAssetName() string { return fmt.Sprintf("tls-assets-vmalert-%s", cr.Name) } -func (cr VMAlert) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} + func (cr VMAlert) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/api/v1beta1/vmalertmanager_types.go b/api/v1beta1/vmalertmanager_types.go index c57c1887..8be66b76 100644 --- a/api/v1beta1/vmalertmanager_types.go +++ b/api/v1beta1/vmalertmanager_types.go @@ -430,6 +430,30 @@ func (cr *VMAlertmanager) GetVolumeName() string { return fmt.Sprintf("vmalertmanager-%s-db", cr.Name) } +func (cr *VMAlertmanager) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAlertmanager) ProbePath() string { + webRoutePrefix := "/" + if cr.Spec.RoutePrefix != "" { + webRoutePrefix = cr.Spec.RoutePrefix + } + return path.Clean(webRoutePrefix + "/-/healthy") +} + +func (cr *VMAlertmanager) ProbePort() string { + return cr.Spec.PortName +} + +func (cr *VMAlertmanager) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMAlertmanager) ProbeNeedLiveness() bool { + return true +} + func init() { SchemeBuilder.Register(&VMAlertmanager{}, &VMAlertmanagerList{}) } diff --git a/api/v1beta1/vmauth_types.go b/api/v1beta1/vmauth_types.go index ba54dd70..78440a13 100644 --- a/api/v1beta1/vmauth_types.go +++ b/api/v1beta1/vmauth_types.go @@ -220,6 +220,27 @@ type VMAuth struct { Status VMAuthStatus `json:"status,omitempty"` } +func (cr *VMAuth) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAuth) ProbePath() string { + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAuth) ProbeScheme() string { + + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMAuth) ProbePort() string { + return cr.Spec.Port +} + +func (cr *VMAuth) ProbeNeedLiveness() bool { + return true +} + // +kubebuilder:object:root=true // VMAuthList contains a list of VMAuth @@ -295,10 +316,6 @@ func (cr VMAuth) ConfigSecretName() string { return fmt.Sprintf("vmauth-config-%s", cr.Name) } -func (cr VMAuth) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} - func (cr VMAuth) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/api/v1beta1/vmcluster_types.go b/api/v1beta1/vmcluster_types.go index e8619446..69b8c7db 100644 --- a/api/v1beta1/vmcluster_types.go +++ b/api/v1beta1/vmcluster_types.go @@ -458,6 +458,26 @@ type VMInsert struct { TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` } +func (cr *VMInsert) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMInsert) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMInsert) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} + +func (cr *VMInsert) ProbePort() string { + return cr.Port +} + +func (cr *VMInsert) ProbeNeedLiveness() bool { + return true +} + func (i VMInsert) GetNameWithPrefix(clusterName string) string { if i.Name == "" { return PrefixedName(clusterName, "vminsert") @@ -893,27 +913,6 @@ func (cr *VMCluster) GetLastAppliedSpec() (*VMClusterSpec, error) { return &prevClusterSpec, nil } -func (cr VMCluster) HealthPathSelect() string { - if cr.Spec.VMSelect == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMSelect.ExtraArgs, healthPath) -} - -func (cr VMCluster) HealthPathInsert() string { - if cr.Spec.VMInsert == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMInsert.ExtraArgs, healthPath) -} - -func (cr VMCluster) HealthPathStorage() string { - if cr.Spec.VMStorage == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMStorage.ExtraArgs, healthPath) -} - func (cr VMCluster) MetricPathSelect() string { if cr.Spec.VMSelect == nil { return healthPath @@ -1036,3 +1035,39 @@ func (cr *VMCluster) AsCRDOwner() []metav1.OwnerReference { func (cr VMCluster) GetNSName() string { return cr.GetNamespace() } + +func (cr *VMSelect) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMSelect) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMSelect) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} +func (cr *VMSelect) ProbePort() string { + return cr.Port +} +func (cr *VMSelect) ProbeNeedLiveness() bool { + return true +} + +func (cr *VMStorage) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMStorage) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMStorage) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} +func (cr *VMStorage) ProbePort() string { + return cr.Port +} +func (cr *VMStorage) ProbeNeedLiveness() bool { + return false +} diff --git a/api/v1beta1/vmsingle_types.go b/api/v1beta1/vmsingle_types.go index 28a61530..c417798a 100644 --- a/api/v1beta1/vmsingle_types.go +++ b/api/v1beta1/vmsingle_types.go @@ -218,6 +218,26 @@ type VMSingle struct { Status VMSingleStatus `json:"status,omitempty"` } +func (cr *VMSingle) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMSingle) ProbePath() string { + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMSingle) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMSingle) ProbePort() string { + return cr.Spec.Port +} + +func (cr *VMSingle) ProbeNeedLiveness() bool { + return false +} + // VMSingleList contains a list of VMSingle // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type VMSingleList struct { @@ -288,10 +308,6 @@ func (cr VMSingle) PrefixedName() string { return fmt.Sprintf("vmsingle-%s", cr.Name) } -func (cr VMSingle) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} - func (cr VMSingle) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/api/victoriametrics/v1beta1/vmagent_types.go b/api/victoriametrics/v1beta1/vmagent_types.go index 31ab3add..da3b9773 100644 --- a/api/victoriametrics/v1beta1/vmagent_types.go +++ b/api/victoriametrics/v1beta1/vmagent_types.go @@ -612,6 +612,27 @@ func (cr *VMAgent) AsCRDOwner() []metav1.OwnerReference { return GetCRDAsOwner(Agent) } +func (cr *VMAgent) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAgent) ProbePath() string { + + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAgent) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr VMAgent) ProbePort() string { + return cr.Spec.Port +} + +func (cr VMAgent) ProbeNeedLiveness() bool { + return true +} + func init() { SchemeBuilder.Register(&VMAgent{}, &VMAgentList{}) } diff --git a/api/victoriametrics/v1beta1/vmalert_types.go b/api/victoriametrics/v1beta1/vmalert_types.go index 824f6bae..8116050b 100644 --- a/api/victoriametrics/v1beta1/vmalert_types.go +++ b/api/victoriametrics/v1beta1/vmalert_types.go @@ -362,6 +362,27 @@ type VMAlert struct { Status VMAlertStatus `json:"status,omitempty"` } +func (cr *VMAlert) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAlert) ProbePath() string { + + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAlert) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr VMAlert) ProbePort() string { + return cr.Spec.Port +} + +func (cr VMAlert) ProbeNeedLiveness() bool { + return true +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // VMAlertList contains a list of VMAlert @@ -435,9 +456,7 @@ func (cr VMAlert) PrefixedName() string { func (cr VMAlert) TLSAssetName() string { return fmt.Sprintf("tls-assets-vmalert-%s", cr.Name) } -func (cr VMAlert) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} + func (cr VMAlert) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/api/victoriametrics/v1beta1/vmalertmanager_types.go b/api/victoriametrics/v1beta1/vmalertmanager_types.go index c57c1887..8be66b76 100644 --- a/api/victoriametrics/v1beta1/vmalertmanager_types.go +++ b/api/victoriametrics/v1beta1/vmalertmanager_types.go @@ -430,6 +430,30 @@ func (cr *VMAlertmanager) GetVolumeName() string { return fmt.Sprintf("vmalertmanager-%s-db", cr.Name) } +func (cr *VMAlertmanager) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAlertmanager) ProbePath() string { + webRoutePrefix := "/" + if cr.Spec.RoutePrefix != "" { + webRoutePrefix = cr.Spec.RoutePrefix + } + return path.Clean(webRoutePrefix + "/-/healthy") +} + +func (cr *VMAlertmanager) ProbePort() string { + return cr.Spec.PortName +} + +func (cr *VMAlertmanager) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMAlertmanager) ProbeNeedLiveness() bool { + return true +} + func init() { SchemeBuilder.Register(&VMAlertmanager{}, &VMAlertmanagerList{}) } diff --git a/api/victoriametrics/v1beta1/vmauth_types.go b/api/victoriametrics/v1beta1/vmauth_types.go index ba54dd70..78440a13 100644 --- a/api/victoriametrics/v1beta1/vmauth_types.go +++ b/api/victoriametrics/v1beta1/vmauth_types.go @@ -220,6 +220,27 @@ type VMAuth struct { Status VMAuthStatus `json:"status,omitempty"` } +func (cr *VMAuth) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMAuth) ProbePath() string { + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMAuth) ProbeScheme() string { + + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMAuth) ProbePort() string { + return cr.Spec.Port +} + +func (cr *VMAuth) ProbeNeedLiveness() bool { + return true +} + // +kubebuilder:object:root=true // VMAuthList contains a list of VMAuth @@ -295,10 +316,6 @@ func (cr VMAuth) ConfigSecretName() string { return fmt.Sprintf("vmauth-config-%s", cr.Name) } -func (cr VMAuth) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} - func (cr VMAuth) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/api/victoriametrics/v1beta1/vmcluster_types.go b/api/victoriametrics/v1beta1/vmcluster_types.go index e8619446..69b8c7db 100644 --- a/api/victoriametrics/v1beta1/vmcluster_types.go +++ b/api/victoriametrics/v1beta1/vmcluster_types.go @@ -458,6 +458,26 @@ type VMInsert struct { TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` } +func (cr *VMInsert) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMInsert) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMInsert) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} + +func (cr *VMInsert) ProbePort() string { + return cr.Port +} + +func (cr *VMInsert) ProbeNeedLiveness() bool { + return true +} + func (i VMInsert) GetNameWithPrefix(clusterName string) string { if i.Name == "" { return PrefixedName(clusterName, "vminsert") @@ -893,27 +913,6 @@ func (cr *VMCluster) GetLastAppliedSpec() (*VMClusterSpec, error) { return &prevClusterSpec, nil } -func (cr VMCluster) HealthPathSelect() string { - if cr.Spec.VMSelect == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMSelect.ExtraArgs, healthPath) -} - -func (cr VMCluster) HealthPathInsert() string { - if cr.Spec.VMInsert == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMInsert.ExtraArgs, healthPath) -} - -func (cr VMCluster) HealthPathStorage() string { - if cr.Spec.VMStorage == nil { - return healthPath - } - return buildPathWithPrefixFlag(cr.Spec.VMStorage.ExtraArgs, healthPath) -} - func (cr VMCluster) MetricPathSelect() string { if cr.Spec.VMSelect == nil { return healthPath @@ -1036,3 +1035,39 @@ func (cr *VMCluster) AsCRDOwner() []metav1.OwnerReference { func (cr VMCluster) GetNSName() string { return cr.GetNamespace() } + +func (cr *VMSelect) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMSelect) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMSelect) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} +func (cr *VMSelect) ProbePort() string { + return cr.Port +} +func (cr *VMSelect) ProbeNeedLiveness() bool { + return true +} + +func (cr *VMStorage) Probe() *EmbeddedProbes { + return cr.EmbeddedProbes +} + +func (cr *VMStorage) ProbePath() string { + return buildPathWithPrefixFlag(cr.ExtraArgs, healthPath) +} + +func (cr *VMStorage) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.ExtraArgs)) +} +func (cr *VMStorage) ProbePort() string { + return cr.Port +} +func (cr *VMStorage) ProbeNeedLiveness() bool { + return false +} diff --git a/api/victoriametrics/v1beta1/vmsingle_types.go b/api/victoriametrics/v1beta1/vmsingle_types.go index 28a61530..c417798a 100644 --- a/api/victoriametrics/v1beta1/vmsingle_types.go +++ b/api/victoriametrics/v1beta1/vmsingle_types.go @@ -218,6 +218,26 @@ type VMSingle struct { Status VMSingleStatus `json:"status,omitempty"` } +func (cr *VMSingle) Probe() *EmbeddedProbes { + return cr.Spec.EmbeddedProbes +} + +func (cr *VMSingle) ProbePath() string { + return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) +} + +func (cr *VMSingle) ProbeScheme() string { + return strings.ToUpper(protoFromFlags(cr.Spec.ExtraArgs)) +} + +func (cr *VMSingle) ProbePort() string { + return cr.Spec.Port +} + +func (cr *VMSingle) ProbeNeedLiveness() bool { + return false +} + // VMSingleList contains a list of VMSingle // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type VMSingleList struct { @@ -288,10 +308,6 @@ func (cr VMSingle) PrefixedName() string { return fmt.Sprintf("vmsingle-%s", cr.Name) } -func (cr VMSingle) HealthPath() string { - return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, healthPath) -} - func (cr VMSingle) MetricPath() string { return buildPathWithPrefixFlag(cr.Spec.ExtraArgs, metricPath) } diff --git a/controllers/factory/alertmanager.go b/controllers/factory/alertmanager.go index 78c3e098..91ec7974 100644 --- a/controllers/factory/alertmanager.go +++ b/controllers/factory/alertmanager.go @@ -387,10 +387,6 @@ func makeStatefulSetSpec(cr *victoriametricsv1beta1.VMAlertmanager, c *config.Ba terminationGracePeriod = *cr.Spec.TerminationGracePeriodSeconds } - healthPath := func() string { - return path.Clean(webRoutePrefix + "/-/healthy") - } - amArgs = addExtraArgsOverrideDefaults(amArgs, cr.Spec.ExtraArgs, "--") sort.Strings(amArgs) @@ -418,7 +414,7 @@ func makeStatefulSetSpec(cr *victoriametricsv1beta1.VMAlertmanager, c *config.Ba Env: envs, TerminationMessagePolicy: v1.TerminationMessageFallbackToLogsOnError, } - vmaContainer = buildProbe(vmaContainer, cr.Spec.EmbeddedProbes, healthPath, cr.Spec.PortName, true) + vmaContainer = buildProbe(vmaContainer, cr) // cr.Spec.EmbeddedProbes, healthPath, cr.Spec.PortName, true) defaultContainers := []v1.Container{ vmaContainer, { diff --git a/controllers/factory/builders.go b/controllers/factory/builders.go index 97a70b33..593e930f 100644 --- a/controllers/factory/builders.go +++ b/controllers/factory/builders.go @@ -300,9 +300,23 @@ func reconcilePDB(ctx context.Context, rclient client.Client, crdName string, pd return rclient.Update(ctx, pdb) } +type probeCRD interface { + Probe() *victoriametricsv1beta1.EmbeddedProbes + ProbePath() string + ProbeScheme() string + ProbePort() string + ProbeNeedLiveness() bool +} + // buildProbe builds probe for container with possible custom values with -func buildProbe(container v1.Container, ep *victoriametricsv1beta1.EmbeddedProbes, probePath func() string, port string, needAddLiveness bool) v1.Container { +func buildProbe(container v1.Container, cr probeCRD) v1.Container { + // ep *victoriametricsv1beta1.EmbeddedProbes, probePath func() string, port string, needAddLiveness bool) v1.Container { var rp, lp, sp *v1.Probe + ep := cr.Probe() + probePath := cr.ProbePath + port := cr.ProbePort() + needAddLiveness := cr.ProbeNeedLiveness() + scheme := cr.ProbeScheme() if ep != nil { rp = ep.ReadinessProbe lp = ep.LivenessProbe @@ -313,7 +327,7 @@ func buildProbe(container v1.Container, ep *victoriametricsv1beta1.EmbeddedProbe readinessProbeHandler := v1.ProbeHandler{ HTTPGet: &v1.HTTPGetAction{ Port: intstr.Parse(port), - Scheme: "HTTP", + Scheme: v1.URIScheme(scheme), Path: probePath(), }, } @@ -348,7 +362,7 @@ func buildProbe(container v1.Container, ep *victoriametricsv1beta1.EmbeddedProbe if probe.HTTPGet == nil && probe.TCPSocket == nil && probe.Exec == nil { probe.HTTPGet = &v1.HTTPGetAction{ Port: intstr.Parse(port), - Scheme: "HTTP", + Scheme: v1.URIScheme(scheme), Path: probePath(), } } diff --git a/controllers/factory/builders_test.go b/controllers/factory/builders_test.go index e3bdfd02..db14903b 100644 --- a/controllers/factory/builders_test.go +++ b/controllers/factory/builders_test.go @@ -394,13 +394,39 @@ func Test_mergeServiceSpec(t *testing.T) { } } +type testBuildProbeCR struct { + ep *victoriametricsv1beta1.EmbeddedProbes + probePath func() string + port string + scheme string + needAddLiveness bool +} + +func (t testBuildProbeCR) Probe() *victoriametricsv1beta1.EmbeddedProbes { + return t.ep +} + +func (t testBuildProbeCR) ProbePath() string { + return t.probePath() +} + +func (t testBuildProbeCR) ProbeScheme() string { + return t.scheme +} + +func (t testBuildProbeCR) ProbePort() string { + + return t.port +} + +func (t testBuildProbeCR) ProbeNeedLiveness() bool { + return t.needAddLiveness +} + func Test_buildProbe(t *testing.T) { type args struct { - container v1.Container - ep *victoriametricsv1beta1.EmbeddedProbes - probePath func() string - port string - needAddLiveness bool + container v1.Container + cr testBuildProbeCR } tests := []struct { name string @@ -410,12 +436,15 @@ func Test_buildProbe(t *testing.T) { { name: "build default probe with empty ep", args: args{ - probePath: func() string { - return "/health" + cr: testBuildProbeCR{ + probePath: func() string { + return "/health" + }, + port: "8051", + needAddLiveness: true, + scheme: "HTTP", }, - container: v1.Container{}, - port: "8051", - needAddLiveness: true, + container: v1.Container{}, }, validate: func(container v1.Container) error { if container.LivenessProbe == nil { @@ -424,43 +453,48 @@ func Test_buildProbe(t *testing.T) { if container.ReadinessProbe == nil { return fmt.Errorf("want readinessProbe to be not nil") } + if container.ReadinessProbe.HTTPGet.Scheme != "HTTP" { + return fmt.Errorf("expect scheme to be HTTP got: %s", container.ReadinessProbe.HTTPGet.Scheme) + } return nil }, }, { name: "build default probe with ep", args: args{ - probePath: func() string { - return "/health" - }, - container: v1.Container{}, - port: "8051", - needAddLiveness: true, - ep: &victoriametricsv1beta1.EmbeddedProbes{ - ReadinessProbe: &v1.Probe{ - ProbeHandler: v1.ProbeHandler{ - Exec: &v1.ExecAction{ - Command: []string{"echo", "1"}, + cr: testBuildProbeCR{ + probePath: func() string { + return "/health" + }, + port: "8051", + needAddLiveness: true, + ep: &victoriametricsv1beta1.EmbeddedProbes{ + ReadinessProbe: &v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + Exec: &v1.ExecAction{ + Command: []string{"echo", "1"}, + }, }, }, - }, - StartupProbe: &v1.Probe{ - ProbeHandler: v1.ProbeHandler{ - HTTPGet: &v1.HTTPGetAction{ - Host: "some", + StartupProbe: &v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + HTTPGet: &v1.HTTPGetAction{ + Host: "some", + }, }, }, - }, - LivenessProbe: &v1.Probe{ - ProbeHandler: v1.ProbeHandler{ - HTTPGet: &v1.HTTPGetAction{ - Path: "/live1", + LivenessProbe: &v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + HTTPGet: &v1.HTTPGetAction{ + Path: "/live1", + }, }, + TimeoutSeconds: 15, + InitialDelaySeconds: 20, }, - TimeoutSeconds: 15, - InitialDelaySeconds: 20, }, }, + container: v1.Container{}, }, validate: func(container v1.Container) error { if container.LivenessProbe == nil { @@ -493,7 +527,7 @@ func Test_buildProbe(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := buildProbe(tt.args.container, tt.args.ep, tt.args.probePath, tt.args.port, tt.args.needAddLiveness) + got := buildProbe(tt.args.container, tt.args.cr) if err := tt.validate(got); err != nil { t.Errorf("buildProbe() unexpected error: %v", err) } diff --git a/controllers/factory/vmagent.go b/controllers/factory/vmagent.go index d84c68e9..c6b79d49 100644 --- a/controllers/factory/vmagent.go +++ b/controllers/factory/vmagent.go @@ -455,7 +455,7 @@ func makeSpecForVMAgent(cr *victoriametricsv1beta1.VMAgent, c *config.BaseOperat TerminationMessagePolicy: corev1.TerminationMessageFallbackToLogsOnError, } - vmagentContainer = buildProbe(vmagentContainer, cr.Spec.EmbeddedProbes, cr.HealthPath, cr.Spec.Port, true) + vmagentContainer = buildProbe(vmagentContainer, cr) configReloader := buildConfigReloaderContainer(cr, c) diff --git a/controllers/factory/vmalert.go b/controllers/factory/vmalert.go index e56a7eac..13221e71 100644 --- a/controllers/factory/vmalert.go +++ b/controllers/factory/vmalert.go @@ -339,7 +339,7 @@ func vmAlertSpecGen(cr *victoriametricsv1beta1.VMAlert, c *config.BaseOperatorCo Env: envs, TerminationMessagePolicy: corev1.TerminationMessageFallbackToLogsOnError, } - vmalertContainer = buildProbe(vmalertContainer, cr.Spec.EmbeddedProbes, cr.HealthPath, cr.Spec.Port, true) + vmalertContainer = buildProbe(vmalertContainer, cr) vmalertContainers := []corev1.Container{vmalertContainer, { Name: "config-reloader", diff --git a/controllers/factory/vmauth.go b/controllers/factory/vmauth.go index 5b82388f..249260c0 100644 --- a/controllers/factory/vmauth.go +++ b/controllers/factory/vmauth.go @@ -244,10 +244,8 @@ func makeSpecForVMAuth(cr *victoriametricsv1beta1.VMAuth, c *config.BaseOperator configReloader := buildVMAuthConfigReloaderContainer(cr, c) - vmauthContainer = buildProbe(vmauthContainer, cr.Spec.EmbeddedProbes, cr.HealthPath, cr.Spec.Port, false) - + vmauthContainer = buildProbe(vmauthContainer, cr) operatorContainers := []corev1.Container{configReloader, vmauthContainer} - containers, err := k8stools.MergePatchContainers(operatorContainers, cr.Spec.Containers) if err != nil { return nil, err diff --git a/controllers/factory/vmcluster.go b/controllers/factory/vmcluster.go index 772f3a70..b8301952 100644 --- a/controllers/factory/vmcluster.go +++ b/controllers/factory/vmcluster.go @@ -498,7 +498,7 @@ func makePodSpecForVMSelect(cr *v1beta1.VMCluster, c *config.BaseOperatorConf) ( TerminationMessagePath: "/dev/termination-log", } - vmselectContainer = buildProbe(vmselectContainer, cr.Spec.VMSelect.EmbeddedProbes, cr.HealthPathSelect, cr.Spec.VMSelect.Port, true) + vmselectContainer = buildProbe(vmselectContainer, cr.Spec.VMSelect) operatorContainers := []corev1.Container{vmselectContainer} @@ -768,7 +768,7 @@ func makePodSpecForVMInsert(cr *v1beta1.VMCluster, c *config.BaseOperatorConf) ( TerminationMessagePolicy: corev1.TerminationMessageFallbackToLogsOnError, } - vminsertContainer = buildProbe(vminsertContainer, cr.Spec.VMInsert.EmbeddedProbes, cr.HealthPathInsert, cr.Spec.VMInsert.Port, true) + vminsertContainer = buildProbe(vminsertContainer, cr.Spec.VMInsert) //.EmbeddedProbes, cr.HealthPathInsert, cr.Spec.VMInsert.Port, true) operatorContainers := []corev1.Container{vminsertContainer} @@ -1055,7 +1055,7 @@ func makePodSpecForVMStorage(cr *v1beta1.VMCluster, c *config.BaseOperatorConf) TerminationMessagePath: "/dev/termination-log", } - vmstorageContainer = buildProbe(vmstorageContainer, cr.Spec.VMStorage.EmbeddedProbes, cr.HealthPathStorage, cr.Spec.VMStorage.Port, false) + vmstorageContainer = buildProbe(vmstorageContainer, cr.Spec.VMStorage) operatorContainers := []corev1.Container{vmstorageContainer} diff --git a/controllers/factory/vmsingle.go b/controllers/factory/vmsingle.go index 74c2e1b6..6dc3b78f 100644 --- a/controllers/factory/vmsingle.go +++ b/controllers/factory/vmsingle.go @@ -267,7 +267,7 @@ func makeSpecForVMSingle(cr *victoriametricsv1beta1.VMSingle, c *config.BaseOper ImagePullPolicy: cr.Spec.Image.PullPolicy, } - vmsingleContainer = buildProbe(vmsingleContainer, cr.Spec.EmbeddedProbes, cr.HealthPath, cr.Spec.Port, false) + vmsingleContainer = buildProbe(vmsingleContainer, cr) operatorContainers := []corev1.Container{vmsingleContainer}