Skip to content

⚠️ Remove pointers from remaining pointer struct fields #12545

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions .golangci-kal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,11 @@ linters:
text: "Properties should not use a map type, use a list type with a unique name/identifier instead"
linters:
- kubeapilinter
# It's simpler to check these fields against nil vs. using reflect.DeepEqual everywhere.
- path: "api/core/v1beta2/clusterclass_types.go"
text: "optionalfields: field (AdditionalProperties|Items|Not) (is optional and does not allow the zero value. It must have the omitzero tag|is optional and does not have a valid zero value. The field does not need to be a pointer)"
linters:
- kubeapilinter

## Removal of bool fields of existing types requires further discussion
- path: "api/bootstrap/kubeadm/v1beta2|api/controlplane/kubeadm/v1beta2|api/core/v1beta2|api/addons/v1beta2"
Expand Down Expand Up @@ -211,8 +216,12 @@ linters:
- kubeapilinter

# TODO: Excludes that should be removed once https://github.com/kubernetes-sigs/kube-api-linter/issues/132 will be fixed
- path: "api/ipam/v1beta2/ipaddressclaim_types.go"
text: "optionalfields: field AddressRef is optional and has a valid zero value \\({}\\), but the validation is not complete \\(e.g. min properties/adding required fields\\). The field should be a pointer to allow the zero value to be set. If the zero value is not a valid use case, complete the validation and remove the pointer."
- path: "api/.*"
text: "optionalfields: field (.*) is optional and (should have the omitempty tag|should be a pointer)"
linters:
- kubeapilinter
- path: "api/.*"
text: "optionalfields: field (.*) is optional and has a valid zero value \\({}\\), but the validation is not complete \\(e.g. min properties/adding required fields\\). The field should be a pointer to allow the zero value to be set. If the zero value is not a valid use case, complete the validation and remove the pointer."
linters:
- kubeapilinter
issues:
Expand Down
534 changes: 399 additions & 135 deletions api/bootstrap/kubeadm/v1beta1/conversion.go

Large diffs are not rendered by default.

95 changes: 69 additions & 26 deletions api/bootstrap/kubeadm/v1beta1/conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,34 +108,21 @@ func hubKubeadmConfigSpec(in *bootstrapv1.KubeadmConfigSpec, c randfill.Continue
c.FillNoCustom(in)

// enforce ControlPlaneComponentHealthCheckSeconds to be equal on init and join configuration
var initControlPlaneComponentHealthCheckSeconds *int32
if in.InitConfiguration != nil && in.InitConfiguration.Timeouts != nil {
initControlPlaneComponentHealthCheckSeconds = in.InitConfiguration.Timeouts.ControlPlaneComponentHealthCheckSeconds
}
if (in.JoinConfiguration != nil && in.JoinConfiguration.Timeouts != nil) || initControlPlaneComponentHealthCheckSeconds != nil {
if in.JoinConfiguration == nil {
in.JoinConfiguration = &bootstrapv1.JoinConfiguration{}
}
if in.JoinConfiguration.Timeouts == nil {
in.JoinConfiguration.Timeouts = &bootstrapv1.Timeouts{}
}
initControlPlaneComponentHealthCheckSeconds := in.InitConfiguration.Timeouts.ControlPlaneComponentHealthCheckSeconds
if in.JoinConfiguration.IsDefined() || initControlPlaneComponentHealthCheckSeconds != nil {
in.JoinConfiguration.Timeouts.ControlPlaneComponentHealthCheckSeconds = initControlPlaneComponentHealthCheckSeconds
}
if in.ClusterConfiguration != nil {
if in.ClusterConfiguration.APIServer.ExtraEnvs != nil && *in.ClusterConfiguration.APIServer.ExtraEnvs == nil {
in.ClusterConfiguration.APIServer.ExtraEnvs = nil
}
if in.ClusterConfiguration.ControllerManager.ExtraEnvs != nil && *in.ClusterConfiguration.ControllerManager.ExtraEnvs == nil {
in.ClusterConfiguration.ControllerManager.ExtraEnvs = nil
}
if in.ClusterConfiguration.Scheduler.ExtraEnvs != nil && *in.ClusterConfiguration.Scheduler.ExtraEnvs == nil {
in.ClusterConfiguration.Scheduler.ExtraEnvs = nil
}
if in.ClusterConfiguration.Etcd.Local != nil {
if in.ClusterConfiguration.Etcd.Local.ExtraEnvs != nil && *in.ClusterConfiguration.Etcd.Local.ExtraEnvs == nil {
in.ClusterConfiguration.Etcd.Local.ExtraEnvs = nil
}
}
if in.ClusterConfiguration.APIServer.ExtraEnvs != nil && *in.ClusterConfiguration.APIServer.ExtraEnvs == nil {
in.ClusterConfiguration.APIServer.ExtraEnvs = nil
}
if in.ClusterConfiguration.ControllerManager.ExtraEnvs != nil && *in.ClusterConfiguration.ControllerManager.ExtraEnvs == nil {
in.ClusterConfiguration.ControllerManager.ExtraEnvs = nil
}
if in.ClusterConfiguration.Scheduler.ExtraEnvs != nil && *in.ClusterConfiguration.Scheduler.ExtraEnvs == nil {
in.ClusterConfiguration.Scheduler.ExtraEnvs = nil
}
if in.ClusterConfiguration.Etcd.Local.ExtraEnvs != nil && *in.ClusterConfiguration.Etcd.Local.ExtraEnvs == nil {
in.ClusterConfiguration.Etcd.Local.ExtraEnvs = nil
}
}

Expand All @@ -154,6 +141,33 @@ func spokeKubeadmConfigSpec(in *KubeadmConfigSpec, c randfill.Continue) {
in.UseExperimentalRetryJoin = false

dropEmptyStringsKubeadmConfigSpec(in)

if in.InitConfiguration != nil && in.InitConfiguration.Patches != nil && reflect.DeepEqual(in.InitConfiguration.Patches, &Patches{}) {
in.InitConfiguration.Patches = nil
}
if in.JoinConfiguration != nil && in.JoinConfiguration.Patches != nil && reflect.DeepEqual(in.JoinConfiguration.Patches, &Patches{}) {
in.JoinConfiguration.Patches = nil
}
if in.Ignition != nil {
if in.Ignition.ContainerLinuxConfig != nil && reflect.DeepEqual(in.Ignition.ContainerLinuxConfig, &ContainerLinuxConfig{}) {
in.Ignition.ContainerLinuxConfig = nil
}
if reflect.DeepEqual(in.Ignition, &IgnitionSpec{}) {
in.Ignition = nil
}
}
if in.DiskSetup != nil && reflect.DeepEqual(in.DiskSetup, &DiskSetup{}) {
in.DiskSetup = nil
}
if in.NTP != nil && reflect.DeepEqual(in.NTP, &NTP{}) {
in.NTP = nil
}
for i, file := range in.Files {
if file.ContentFrom != nil && reflect.DeepEqual(file.ContentFrom, &FileSource{}) {
file.ContentFrom = nil
}
in.Files[i] = file
}
}

func spokeClusterConfiguration(in *ClusterConfiguration, c randfill.Continue) {
Expand All @@ -165,6 +179,13 @@ func spokeClusterConfiguration(in *ClusterConfiguration, c randfill.Continue) {
in.Networking.DNSDomain = ""
in.KubernetesVersion = ""
in.ClusterName = ""

if in.Etcd.Local != nil && reflect.DeepEqual(in.Etcd.Local, &LocalEtcd{}) {
in.Etcd.Local = nil
}
if in.Etcd.External != nil && reflect.DeepEqual(in.Etcd.External, &ExternalEtcd{}) {
in.Etcd.External = nil
}
}

func spokeAPIServer(in *APIServer, c randfill.Continue) {
Expand Down Expand Up @@ -192,6 +213,28 @@ func spokeDiscovery(in *Discovery, c randfill.Continue) {
if in.Timeout != nil {
in.Timeout = ptr.To[metav1.Duration](metav1.Duration{Duration: time.Duration(c.Int31()) * time.Second})
}
if in.File != nil {
if in.File.KubeConfig != nil {
if in.File.KubeConfig.Cluster != nil && reflect.DeepEqual(in.File.KubeConfig.Cluster, &KubeConfigCluster{}) {
in.File.KubeConfig.Cluster = nil
}
if in.File.KubeConfig.User.AuthProvider != nil && reflect.DeepEqual(in.File.KubeConfig.User.AuthProvider, &KubeConfigAuthProvider{}) {
in.File.KubeConfig.User.AuthProvider = nil
}
if in.File.KubeConfig.User.Exec != nil && reflect.DeepEqual(in.File.KubeConfig.User.Exec, &KubeConfigAuthExec{}) {
in.File.KubeConfig.User.Exec = nil
}
if reflect.DeepEqual(in.File.KubeConfig, &FileDiscoveryKubeConfig{}) {
in.File.KubeConfig = nil
}
}
if reflect.DeepEqual(in.File, &FileDiscovery{}) {
in.File = nil
}
}
if in.BootstrapToken != nil && reflect.DeepEqual(in.BootstrapToken, &BootstrapTokenDiscovery{}) {
in.BootstrapToken = nil
}
}

func spokeKubeadmConfigStatus(in *KubeadmConfigStatus, c randfill.Continue) {
Expand Down
Loading