Skip to content

Commit 061fd41

Browse files
committed
Update the dynamic operator client creation
1 parent 01e310b commit 061fd41

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

pkg/cmd/recoverycontroller/cmd.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
operatorv1 "github.com/openshift/api/operator/v1"
8+
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/operator"
89
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/operator/certrotationcontroller"
910
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/operator/operatorclient"
1011
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/version"
@@ -79,7 +80,13 @@ func (o *Options) Run(ctx context.Context) error {
7980
operatorclient.TargetNamespace,
8081
)
8182

82-
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(o.controllerContext.KubeConfig, operatorv1.GroupVersion.WithResource("kubecontrollermanagers"))
83+
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(
84+
o.controllerContext.KubeConfig,
85+
operatorv1.GroupVersion.WithResource("kubecontrollermanagers"),
86+
operatorv1.GroupVersion.WithKind("KubeControllerManager"),
87+
operator.ExtractStaticPodOperatorSpec,
88+
operator.ExtractStaticPodOperatorStatus,
89+
)
8390
if err != nil {
8491
return err
8592
}

pkg/operator/starter.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
configv1client "github.com/openshift/client-go/config/clientset/versioned"
1212
configinformers "github.com/openshift/client-go/config/informers/externalversions"
1313
configinformersv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1"
14+
applyoperatorv1 "github.com/openshift/client-go/operator/applyconfigurations/operator/v1"
1415
"github.com/openshift/cluster-kube-controller-manager-operator/bindata"
1516
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/operator/certrotationcontroller"
1617
"github.com/openshift/cluster-kube-controller-manager-operator/pkg/operator/configobservation/configobservercontroller"
@@ -36,7 +37,9 @@ import (
3637
policyv1 "k8s.io/api/policy/v1"
3738
"k8s.io/apimachinery/pkg/api/errors"
3839
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
40+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3941
"k8s.io/apimachinery/pkg/labels"
42+
"k8s.io/apimachinery/pkg/runtime"
4043
"k8s.io/client-go/kubernetes"
4144
"k8s.io/klog/v2"
4245
"k8s.io/utils/ptr"
@@ -64,7 +67,13 @@ func RunOperator(ctx context.Context, cc *controllercmd.ControllerContext) error
6467
"openshift-infra",
6568
)
6669

67-
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(cc.KubeConfig, operatorv1.GroupVersion.WithResource("kubecontrollermanagers"))
70+
operatorClient, dynamicInformers, err := genericoperatorclient.NewStaticPodOperatorClient(
71+
cc.KubeConfig,
72+
operatorv1.GroupVersion.WithResource("kubecontrollermanagers"),
73+
operatorv1.GroupVersion.WithKind("KubeControllerManager"),
74+
ExtractStaticPodOperatorSpec,
75+
ExtractStaticPodOperatorStatus,
76+
)
6877
if err != nil {
6978
return err
7079
}
@@ -375,3 +384,34 @@ func newPlatformMatcherFn(platform configv1.PlatformType, infraInformer configin
375384
return infraData.Status.PlatformStatus.Type == platform, true, nil
376385
}
377386
}
387+
388+
func ExtractStaticPodOperatorSpec(obj *unstructured.Unstructured, fieldManager string) (*applyoperatorv1.StaticPodOperatorSpecApplyConfiguration, error) {
389+
castObj := &operatorv1.KubeControllerManager{}
390+
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, castObj); err != nil {
391+
return nil, fmt.Errorf("unable to convert to KubeControllerManager: %w", err)
392+
}
393+
ret, err := applyoperatorv1.ExtractKubeControllerManager(castObj, fieldManager)
394+
if err != nil {
395+
return nil, fmt.Errorf("unable to extract fields for %q: %w", fieldManager, err)
396+
}
397+
if ret.Spec == nil {
398+
return nil, nil
399+
}
400+
return &ret.Spec.StaticPodOperatorSpecApplyConfiguration, nil
401+
}
402+
403+
func ExtractStaticPodOperatorStatus(obj *unstructured.Unstructured, fieldManager string) (*applyoperatorv1.StaticPodOperatorStatusApplyConfiguration, error) {
404+
castObj := &operatorv1.KubeControllerManager{}
405+
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, castObj); err != nil {
406+
return nil, fmt.Errorf("unable to convert to KubeControllerManager: %w", err)
407+
}
408+
ret, err := applyoperatorv1.ExtractKubeControllerManagerStatus(castObj, fieldManager)
409+
if err != nil {
410+
return nil, fmt.Errorf("unable to extract fields for %q: %w", fieldManager, err)
411+
}
412+
413+
if ret.Status == nil {
414+
return nil, nil
415+
}
416+
return &ret.Status.StaticPodOperatorStatusApplyConfiguration, nil
417+
}

0 commit comments

Comments
 (0)