Skip to content

Commit 772553c

Browse files
committed
Update the dynamic operator client creation
1 parent 33aee21 commit 772553c

File tree

4 files changed

+62
-4
lines changed

4 files changed

+62
-4
lines changed

pkg/cmd/certregenerationcontroller/cmd.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/openshift/library-go/pkg/operator/genericoperatorclient"
1818
"github.com/openshift/library-go/pkg/operator/v1helpers"
1919

20+
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator"
2021
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/certrotationcontroller"
2122
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/operatorclient"
2223
"github.com/openshift/cluster-kube-apiserver-operator/pkg/version"
@@ -92,7 +93,13 @@ func (o *Options) Run(ctx context.Context) error {
9293
operatorclient.TargetNamespace,
9394
)
9495

95-
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(o.controllerContext.KubeConfig, operatorv1.GroupVersion.WithResource("kubeapiservers"))
96+
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(
97+
o.controllerContext.KubeConfig,
98+
operatorv1.GroupVersion.WithResource("kubeapiservers"),
99+
operatorv1.GroupVersion.WithKind("KubeAPIServer"),
100+
operator.ExtractStaticPodOperatorSpec,
101+
operator.ExtractStaticPodOperatorStatus,
102+
)
96103
if err != nil {
97104
return err
98105
}

pkg/operator/starter.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
operatorv1 "github.com/openshift/api/operator/v1"
1515
configv1client "github.com/openshift/client-go/config/clientset/versioned"
1616
configv1informers "github.com/openshift/client-go/config/informers/externalversions"
17+
applyoperatorv1 "github.com/openshift/client-go/operator/applyconfigurations/operator/v1"
1718
operatorv1client "github.com/openshift/client-go/operator/clientset/versioned"
1819
operatorv1informers "github.com/openshift/client-go/operator/informers/externalversions"
1920
operatorcontrolplaneclient "github.com/openshift/client-go/operatorcontrolplane/clientset/versioned"
@@ -68,6 +69,7 @@ import (
6869
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6970
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
7071
"k8s.io/apimachinery/pkg/labels"
72+
"k8s.io/apimachinery/pkg/runtime"
7173
"k8s.io/apimachinery/pkg/runtime/schema"
7274
"k8s.io/client-go/dynamic"
7375
"k8s.io/client-go/dynamic/dynamicinformer"
@@ -129,7 +131,13 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
129131
"openshift-apiserver",
130132
)
131133
configInformers := configv1informers.NewSharedInformerFactory(configClient, 10*time.Minute)
132-
operatorClient, dynamicInformersForAllNamespaces, err := genericoperatorclient.NewStaticPodOperatorClient(controllerContext.KubeConfig, operatorv1.GroupVersion.WithResource("kubeapiservers"))
134+
operatorClient, dynamicInformersForAllNamespaces, err := genericoperatorclient.NewStaticPodOperatorClient(
135+
controllerContext.KubeConfig,
136+
operatorv1.GroupVersion.WithResource("kubeapiservers"),
137+
operatorv1.GroupVersion.WithKind("KubeAPIServer"),
138+
ExtractStaticPodOperatorSpec,
139+
ExtractStaticPodOperatorStatus,
140+
)
133141
if err != nil {
134142
return err
135143
}
@@ -655,3 +663,34 @@ var CertSecrets = []installer.UnrevisionedResource{
655663
{Name: "user-serving-cert-008", Optional: true},
656664
{Name: "user-serving-cert-009", Optional: true},
657665
}
666+
667+
func ExtractStaticPodOperatorSpec(obj *unstructured.Unstructured, fieldManager string) (*applyoperatorv1.StaticPodOperatorSpecApplyConfiguration, error) {
668+
castObj := &operatorv1.KubeAPIServer{}
669+
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, castObj); err != nil {
670+
return nil, fmt.Errorf("unable to convert to KubeControllerManager: %w", err)
671+
}
672+
ret, err := applyoperatorv1.ExtractKubeAPIServer(castObj, fieldManager)
673+
if err != nil {
674+
return nil, fmt.Errorf("unable to extract fields for %q: %w", fieldManager, err)
675+
}
676+
if ret.Spec == nil {
677+
return nil, nil
678+
}
679+
return &ret.Spec.StaticPodOperatorSpecApplyConfiguration, nil
680+
}
681+
682+
func ExtractStaticPodOperatorStatus(obj *unstructured.Unstructured, fieldManager string) (*applyoperatorv1.StaticPodOperatorStatusApplyConfiguration, error) {
683+
castObj := &operatorv1.KubeAPIServer{}
684+
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, castObj); err != nil {
685+
return nil, fmt.Errorf("unable to convert to KubeAPIServer: %w", err)
686+
}
687+
ret, err := applyoperatorv1.ExtractKubeAPIServerStatus(castObj, fieldManager)
688+
if err != nil {
689+
return nil, fmt.Errorf("unable to extract fields for %q: %w", fieldManager, err)
690+
}
691+
692+
if ret.Status == nil {
693+
return nil, nil
694+
}
695+
return &ret.Status.StaticPodOperatorStatusApplyConfiguration, nil
696+
}

test/e2e/certrotation_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
configv1 "github.com/openshift/api/config/v1"
1919
operatorv1 "github.com/openshift/api/operator/v1"
2020
configclient "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
21+
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator"
2122
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/operatorclient"
2223
test "github.com/openshift/cluster-kube-apiserver-operator/test/library"
2324
configv1helpers "github.com/openshift/library-go/pkg/config/clusteroperator/v1helpers"
@@ -28,7 +29,12 @@ import (
2829
func TestCertRotationTimeUpgradeable(t *testing.T) {
2930
kubeConfig, err := test.NewClientConfigForTest()
3031
require.NoError(t, err)
31-
operatorClient, _, err := genericoperatorclient.NewStaticPodOperatorClient(kubeConfig, operatorv1.GroupVersion.WithResource("kubeapiservers"))
32+
operatorClient, _, err := genericoperatorclient.NewStaticPodOperatorClient(
33+
kubeConfig,
34+
operatorv1.GroupVersion.WithResource("kubeapiservers"),
35+
operatorv1.GroupVersion.WithKind("KubeAPIServer"),
36+
operator.ExtractStaticPodOperatorSpec,
37+
operator.ExtractStaticPodOperatorStatus)
3238
require.NoError(t, err)
3339
configClient, err := configclient.NewForConfig(kubeConfig)
3440
require.NoError(t, err)

test/e2e/operator_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
operatorv1 "github.com/openshift/api/operator/v1"
1111
configclient "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
12+
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator"
1213
"github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/operatorclient"
1314
test "github.com/openshift/cluster-kube-apiserver-operator/test/library"
1415
"github.com/openshift/library-go/pkg/operator/genericoperatorclient"
@@ -48,7 +49,12 @@ func TestRevisionLimits(t *testing.T) {
4849
require.NoError(t, err)
4950
kubeClient, err := kubernetes.NewForConfig(kubeConfig)
5051
require.NoError(t, err)
51-
operatorClient, _, err := genericoperatorclient.NewStaticPodOperatorClient(kubeConfig, operatorv1.GroupVersion.WithResource("kubeapiservers"))
52+
operatorClient, _, err := genericoperatorclient.NewStaticPodOperatorClient(
53+
kubeConfig,
54+
operatorv1.GroupVersion.WithResource("kubeapiservers"),
55+
operatorv1.GroupVersion.WithKind("KubeAPIServer"),
56+
operator.ExtractStaticPodOperatorSpec,
57+
operator.ExtractStaticPodOperatorStatus)
5258
require.NoError(t, err)
5359

5460
// Get current revision limits

0 commit comments

Comments
 (0)