Skip to content

Commit d8c90f4

Browse files
committed
Don't rely on buggy metaObject Kind
A bug in our client implementation may clear the object's Kind on certain scenarios. See kubernetes-sigs/controller-runtime#406. Let's avoid that by fixing a constant Kind returned by a method call on the resource.
1 parent 571d678 commit d8c90f4

File tree

5 files changed

+38
-7
lines changed

5 files changed

+38
-7
lines changed

operators/pkg/apis/apm/v1alpha1/apmserver_types.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import (
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1111
)
1212

13-
const APMServerContainerName = "apm-server"
13+
const (
14+
APMServerContainerName = "apm-server"
15+
Kind = "ApmServer"
16+
)
1417

1518
// ApmServerSpec defines the desired state of ApmServer
1619
type ApmServerSpec struct {
@@ -154,3 +157,9 @@ func (as *ApmServer) ElasticsearchAuth() commonv1alpha1.ElasticsearchAuth {
154157
func (as *ApmServer) SecureSettings() *commonv1alpha1.SecretRef {
155158
return as.Spec.SecureSettings
156159
}
160+
161+
// Kind can technically be retrieved from metav1.Object, but there is a bug preventing us to retrieve it
162+
// see https://github.com/kubernetes-sigs/controller-runtime/issues/406
163+
func (as *ApmServer) Kind() string {
164+
return Kind
165+
}

operators/pkg/apis/elasticsearch/v1alpha1/elasticsearch_types.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import (
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1111
)
1212

13-
const ElasticsearchContainerName = "elasticsearch"
13+
const (
14+
ElasticsearchContainerName = "elasticsearch"
15+
Kind = "Elasticsearch"
16+
)
1417

1518
// ElasticsearchSpec defines the desired state of Elasticsearch
1619
type ElasticsearchSpec struct {
@@ -260,6 +263,12 @@ func (e Elasticsearch) SecureSettings() *commonv1alpha1.SecretRef {
260263
return e.Spec.SecureSettings
261264
}
262265

266+
// Kind can technically be retrieved from metav1.Object, but there is a bug preventing us to retrieve it
267+
// see https://github.com/kubernetes-sigs/controller-runtime/issues/406
268+
func (e Elasticsearch) Kind() string {
269+
return Kind
270+
}
271+
263272
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
264273

265274
// ElasticsearchList contains a list of Elasticsearch clusters

operators/pkg/apis/kibana/v1alpha1/kibana_types.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import (
1111
commonv1alpha1 "github.com/elastic/cloud-on-k8s/operators/pkg/apis/common/v1alpha1"
1212
)
1313

14-
const KibanaContainerName = "kibana"
14+
const (
15+
KibanaContainerName = "kibana"
16+
Kind = "Kibana"
17+
)
1518

1619
// KibanaSpec defines the desired state of Kibana
1720
type KibanaSpec struct {
@@ -107,6 +110,12 @@ func (k *Kibana) SecureSettings() *commonv1alpha1.SecretRef {
107110
return k.Spec.SecureSettings
108111
}
109112

113+
// Kind can technically be retrieved from metav1.Object, but there is a bug preventing us to retrieve it
114+
// see https://github.com/kubernetes-sigs/controller-runtime/issues/406
115+
func (k *Kibana) Kind() string {
116+
return Kind
117+
}
118+
110119
// +genclient
111120
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
112121

operators/pkg/controller/apmserver/pod.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func newPodSpec(as *v1alpha1.ApmServer, p PodSpecParams) corev1.PodTemplateSpec
117117

118118
if p.keystoreResources != nil {
119119
dataVolume := keystore.DataVolume(
120-
strings.ToLower(as.Kind),
120+
strings.ToLower(as.Kind()),
121121
DataVolumePath,
122122
)
123123
builder.WithInitContainers(p.keystoreResources.InitContainer).

operators/pkg/controller/common/keystore/resources.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
package keystore
66

77
import (
8-
"strings"
9-
108
commonv1alpha1 "github.com/elastic/cloud-on-k8s/operators/pkg/apis/common/v1alpha1"
119
"github.com/elastic/cloud-on-k8s/operators/pkg/controller/common/watches"
1210
"github.com/elastic/cloud-on-k8s/operators/pkg/utils/k8s"
11+
12+
"strings"
13+
1314
corev1 "k8s.io/api/core/v1"
1415
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516
"k8s.io/apimachinery/pkg/runtime"
@@ -35,6 +36,9 @@ type HasKeystore interface {
3536
metav1.Object
3637
runtime.Object
3738
SecureSettings() *commonv1alpha1.SecretRef
39+
// Kind can technically be retrieved from metav1.Object, but there is a bug preventing us to retrieve it
40+
// see https://github.com/kubernetes-sigs/controller-runtime/issues/406
41+
Kind() string
3842
}
3943

4044
// NewResources optionally returns a volume and init container to include in pods,
@@ -60,7 +64,7 @@ func NewResources(
6064
// build an init container to create the keystore from the secure settings volume
6165
initContainer, err := initContainer(
6266
*secretVolume,
63-
strings.ToLower(hasKeystore.GetObjectKind().GroupVersionKind().Kind),
67+
strings.ToLower(hasKeystore.Kind()),
6468
initContainerParams,
6569
)
6670
if err != nil {

0 commit comments

Comments
 (0)