Skip to content

Commit b9f0c97

Browse files
authored
Merge pull request #12446 from sbueringer/pr-inline-controlplanecomponent
⚠️ Inline ControlPlaneComponent struct in APIServer / ControllerManager / Scheduler in CABPK
2 parents ac70b04 + d6d80db commit b9f0c97

File tree

17 files changed

+548
-570
lines changed

17 files changed

+548
-570
lines changed

api/bootstrap/kubeadm/v1beta1/conversion.go

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package v1beta1
1919
import (
2020
"fmt"
2121
"reflect"
22+
"unsafe"
2223

2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
apimachineryconversion "k8s.io/apimachinery/pkg/conversion"
@@ -375,18 +376,42 @@ func Convert_v1beta2_KubeadmConfigStatus_To_v1beta1_KubeadmConfigStatus(in *boot
375376
return nil
376377
}
377378

378-
func Convert_v1beta2_ControllerManager_To_v1beta1_ControlPlaneComponent(in *bootstrapv1.ControllerManager, out *ControlPlaneComponent, s apimachineryconversion.Scope) error {
379-
return Convert_v1beta2_ControlPlaneComponent_To_v1beta1_ControlPlaneComponent(&in.ControlPlaneComponent, out, s)
379+
func Convert_v1beta2_APIServer_To_v1beta1_APIServer(in *bootstrapv1.APIServer, out *APIServer, s apimachineryconversion.Scope) error {
380+
// Following fields require a custom conversions.
381+
out.ExtraArgs = bootstrapv1.ConvertFromArgs(in.ExtraArgs)
382+
out.ExtraEnvs = *(*[]EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
383+
if err := convert_v1beta2_ExtraVolumes_To_v1beta1_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s); err != nil {
384+
return err
385+
}
386+
return autoConvert_v1beta2_APIServer_To_v1beta1_APIServer(in, out, s)
380387
}
381388

382-
func Convert_v1beta2_Scheduler_To_v1beta1_ControlPlaneComponent(in *bootstrapv1.Scheduler, out *ControlPlaneComponent, s apimachineryconversion.Scope) error {
383-
return Convert_v1beta2_ControlPlaneComponent_To_v1beta1_ControlPlaneComponent(&in.ControlPlaneComponent, out, s)
389+
func Convert_v1beta2_ControllerManager_To_v1beta1_ControlPlaneComponent(in *bootstrapv1.ControllerManager, out *ControlPlaneComponent, s apimachineryconversion.Scope) error {
390+
// Following fields require a custom conversions.
391+
out.ExtraArgs = bootstrapv1.ConvertFromArgs(in.ExtraArgs)
392+
out.ExtraEnvs = *(*[]EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
393+
return convert_v1beta2_ExtraVolumes_To_v1beta1_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s)
384394
}
385395

386-
func Convert_v1beta2_ControlPlaneComponent_To_v1beta1_ControlPlaneComponent(in *bootstrapv1.ControlPlaneComponent, out *ControlPlaneComponent, s apimachineryconversion.Scope) error {
396+
func Convert_v1beta2_Scheduler_To_v1beta1_ControlPlaneComponent(in *bootstrapv1.Scheduler, out *ControlPlaneComponent, s apimachineryconversion.Scope) error {
387397
// Following fields require a custom conversions.
388398
out.ExtraArgs = bootstrapv1.ConvertFromArgs(in.ExtraArgs)
389-
return autoConvert_v1beta2_ControlPlaneComponent_To_v1beta1_ControlPlaneComponent(in, out, s)
399+
out.ExtraEnvs = *(*[]EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
400+
return convert_v1beta2_ExtraVolumes_To_v1beta1_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s)
401+
}
402+
403+
func convert_v1beta2_ExtraVolumes_To_v1beta1_ExtraVolumes(in *[]bootstrapv1.HostPathMount, out *[]HostPathMount, s apimachineryconversion.Scope) error {
404+
if in != nil && len(*in) > 0 {
405+
*out = make([]HostPathMount, len(*in))
406+
for i := range *in {
407+
if err := Convert_v1beta2_HostPathMount_To_v1beta1_HostPathMount(&(*in)[i], &(*out)[i], s); err != nil {
408+
return err
409+
}
410+
}
411+
} else {
412+
*out = nil
413+
}
414+
return nil
390415
}
391416

392417
func Convert_v1beta2_LocalEtcd_To_v1beta1_LocalEtcd(in *bootstrapv1.LocalEtcd, out *LocalEtcd, s apimachineryconversion.Scope) error {
@@ -416,15 +441,38 @@ func Convert_v1beta2_BootstrapToken_To_v1beta1_BootstrapToken(in *bootstrapv1.Bo
416441

417442
func Convert_v1beta1_APIServer_To_v1beta2_APIServer(in *APIServer, out *bootstrapv1.APIServer, s apimachineryconversion.Scope) error {
418443
// TimeoutForControlPlane has been removed in v1beta2
444+
out.ExtraArgs = bootstrapv1.ConvertToArgs(in.ExtraArgs)
445+
out.ExtraEnvs = *(*[]bootstrapv1.EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
446+
if err := convert_v1beta1_ExtraVolumes_To_v1beta2_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s); err != nil {
447+
return err
448+
}
419449
return autoConvert_v1beta1_APIServer_To_v1beta2_APIServer(in, out, s)
420450
}
421451

422452
func Convert_v1beta1_ControlPlaneComponent_To_v1beta2_ControllerManager(in *ControlPlaneComponent, out *bootstrapv1.ControllerManager, s apimachineryconversion.Scope) error {
423-
return Convert_v1beta1_ControlPlaneComponent_To_v1beta2_ControlPlaneComponent(in, &out.ControlPlaneComponent, s)
453+
out.ExtraArgs = bootstrapv1.ConvertToArgs(in.ExtraArgs)
454+
out.ExtraEnvs = *(*[]bootstrapv1.EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
455+
return convert_v1beta1_ExtraVolumes_To_v1beta2_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s)
424456
}
425457

426458
func Convert_v1beta1_ControlPlaneComponent_To_v1beta2_Scheduler(in *ControlPlaneComponent, out *bootstrapv1.Scheduler, s apimachineryconversion.Scope) error {
427-
return Convert_v1beta1_ControlPlaneComponent_To_v1beta2_ControlPlaneComponent(in, &out.ControlPlaneComponent, s)
459+
out.ExtraArgs = bootstrapv1.ConvertToArgs(in.ExtraArgs)
460+
out.ExtraEnvs = *(*[]bootstrapv1.EnvVar)(unsafe.Pointer(&in.ExtraEnvs)) //nolint:gosec // copied over from generated code, fuzzer should detect if we run into issues
461+
return convert_v1beta1_ExtraVolumes_To_v1beta2_ExtraVolumes(&in.ExtraVolumes, &out.ExtraVolumes, s)
462+
}
463+
464+
func convert_v1beta1_ExtraVolumes_To_v1beta2_ExtraVolumes(in *[]HostPathMount, out *[]bootstrapv1.HostPathMount, s apimachineryconversion.Scope) error {
465+
if in != nil && len(*in) > 0 {
466+
*out = make([]bootstrapv1.HostPathMount, len(*in))
467+
for i := range *in {
468+
if err := Convert_v1beta1_HostPathMount_To_v1beta2_HostPathMount(&(*in)[i], &(*out)[i], s); err != nil {
469+
return err
470+
}
471+
}
472+
} else {
473+
*out = nil
474+
}
475+
return nil
428476
}
429477

430478
func Convert_v1beta1_Discovery_To_v1beta2_Discovery(in *Discovery, out *bootstrapv1.Discovery, s apimachineryconversion.Scope) error {
@@ -441,11 +489,6 @@ func Convert_v1beta1_ClusterConfiguration_To_v1beta2_ClusterConfiguration(in *Cl
441489
return autoConvert_v1beta1_ClusterConfiguration_To_v1beta2_ClusterConfiguration(in, out, s)
442490
}
443491

444-
func Convert_v1beta1_ControlPlaneComponent_To_v1beta2_ControlPlaneComponent(in *ControlPlaneComponent, out *bootstrapv1.ControlPlaneComponent, s apimachineryconversion.Scope) error {
445-
out.ExtraArgs = bootstrapv1.ConvertToArgs(in.ExtraArgs)
446-
return autoConvert_v1beta1_ControlPlaneComponent_To_v1beta2_ControlPlaneComponent(in, out, s)
447-
}
448-
449492
func Convert_v1beta1_LocalEtcd_To_v1beta2_LocalEtcd(in *LocalEtcd, out *bootstrapv1.LocalEtcd, s apimachineryconversion.Scope) error {
450493
out.ExtraArgs = bootstrapv1.ConvertToArgs(in.ExtraArgs)
451494
return autoConvert_v1beta1_LocalEtcd_To_v1beta2_LocalEtcd(in, out, s)

api/bootstrap/kubeadm/v1beta1/zz_generated.conversion.go

Lines changed: 8 additions & 59 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/bootstrap/kubeadm/v1beta2/kubeadm_types.go

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,9 @@ type ClusterConfiguration struct {
182182
FeatureGates map[string]bool `json:"featureGates,omitempty"`
183183
}
184184

185-
// ControlPlaneComponent holds settings common to control plane component of the cluster.
186-
type ControlPlaneComponent struct {
185+
// APIServer holds settings necessary for API server deployments in the cluster.
186+
// +kubebuilder:validation:MinProperties=1
187+
type APIServer struct {
187188
// extraArgs is a list of args to pass to the control plane component.
188189
// The arg name must match the command line flag name except without leading dash(es).
189190
// Extra arguments will override existing default arguments set by kubeadm.
@@ -207,12 +208,6 @@ type ControlPlaneComponent struct {
207208
// +optional
208209
// +kubebuilder:validation:MaxItems=100
209210
ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"`
210-
}
211-
212-
// APIServer holds settings necessary for API server deployments in the cluster.
213-
// +kubebuilder:validation:MinProperties=1
214-
type APIServer struct {
215-
ControlPlaneComponent `json:",inline"`
216211

217212
// certSANs sets extra Subject Alternative Names for the API Server signing cert.
218213
// +optional
@@ -225,13 +220,57 @@ type APIServer struct {
225220
// ControllerManager holds settings necessary for controller-manager deployments in the cluster.
226221
// +kubebuilder:validation:MinProperties=1
227222
type ControllerManager struct {
228-
ControlPlaneComponent `json:",inline"`
223+
// extraArgs is a list of args to pass to the control plane component.
224+
// The arg name must match the command line flag name except without leading dash(es).
225+
// Extra arguments will override existing default arguments set by kubeadm.
226+
// +optional
227+
// +listType=map
228+
// +listMapKey=name
229+
// +listMapKey=value
230+
// +kubebuilder:validation:MinItems=1
231+
// +kubebuilder:validation:MaxItems=100
232+
// +kubebuilder:validation:XValidation:rule="self.all(x, self.exists_one(y, x.name == y.name))",message="extraArgs name must be unique"
233+
ExtraArgs []Arg `json:"extraArgs,omitempty"`
234+
235+
// extraVolumes is an extra set of host volumes, mounted to the control plane component.
236+
// +optional
237+
// +kubebuilder:validation:MaxItems=100
238+
ExtraVolumes []HostPathMount `json:"extraVolumes,omitempty"`
239+
240+
// extraEnvs is an extra set of environment variables to pass to the control plane component.
241+
// Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
242+
// This option takes effect only on Kubernetes >=1.31.0.
243+
// +optional
244+
// +kubebuilder:validation:MaxItems=100
245+
ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"`
229246
}
230247

231248
// Scheduler holds settings necessary for scheduler deployments in the cluster.
232249
// +kubebuilder:validation:MinProperties=1
233250
type Scheduler struct {
234-
ControlPlaneComponent `json:",inline"`
251+
// extraArgs is a list of args to pass to the control plane component.
252+
// The arg name must match the command line flag name except without leading dash(es).
253+
// Extra arguments will override existing default arguments set by kubeadm.
254+
// +optional
255+
// +listType=map
256+
// +listMapKey=name
257+
// +listMapKey=value
258+
// +kubebuilder:validation:MinItems=1
259+
// +kubebuilder:validation:MaxItems=100
260+
// +kubebuilder:validation:XValidation:rule="self.all(x, self.exists_one(y, x.name == y.name))",message="extraArgs name must be unique"
261+
ExtraArgs []Arg `json:"extraArgs,omitempty"`
262+
263+
// extraVolumes is an extra set of host volumes, mounted to the control plane component.
264+
// +optional
265+
// +kubebuilder:validation:MaxItems=100
266+
ExtraVolumes []HostPathMount `json:"extraVolumes,omitempty"`
267+
268+
// extraEnvs is an extra set of environment variables to pass to the control plane component.
269+
// Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
270+
// This option takes effect only on Kubernetes >=1.31.0.
271+
// +optional
272+
// +kubebuilder:validation:MaxItems=100
273+
ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"`
235274
}
236275

237276
// DNS defines the DNS addon that should be used in the cluster.

0 commit comments

Comments
 (0)