@@ -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+ }
0 commit comments