Skip to content

Commit 91d2aec

Browse files
authored
Move APIs and cloud provider types into standalone Go module in ./sdk (#1900)
* it compiles * fix/harmonize/lint imports across the project * move configvarresolver into SDK * add license to SDK to make wwhrd work * update boilerplate check * move skip-eviction annotation into the sdk * move anexia errors into SDK * move baremetal plugin types to sdk * move bootstrap types into SDK * move testhelper into SDK, improve linting * use the same API registering method as for machines * better filenames
1 parent 6243011 commit 91d2aec

File tree

190 files changed

+2733
-2014
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

190 files changed

+2733
-2014
lines changed

.golangci.yml

+38-1
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,48 @@ linters-settings:
4444
- { pkg: io/ioutil, desc: https://go.dev/doc/go1.16#ioutil }
4545
- { pkg: github.com/ghodss/yaml, desc: use sigs.k8s.io/yaml instead }
4646

47+
revive:
48+
rules:
49+
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#add-constant
50+
- name: duplicated-imports
51+
severity: warning
52+
4753
govet:
4854
enable:
4955
- nilness # find tautologies / impossible conditions
5056

57+
importas:
58+
no-unaliased: true
59+
alias:
60+
# Machine Controller
61+
- pkg: k8c.io/machine-controller/sdk/apis/(\w+)/(v[\w\d]+)
62+
alias: $1$2
63+
# Kubernetes
64+
- pkg: k8s.io/api/(\w+)/(v[\w\d]+)
65+
alias: $1$2
66+
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
67+
alias: metav1
68+
- pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
69+
alias: apiextensionsv1
70+
- pkg: k8s.io/apimachinery/pkg/api/errors
71+
alias: apierrors
72+
- pkg: k8s.io/apimachinery/pkg/util/errors
73+
alias: kerrors
74+
# Controller Runtime
75+
- pkg: sigs.k8s.io/controller-runtime/pkg/client
76+
alias: ctrlruntimeclient
77+
# Other Kube APIs
78+
- pkg: go.anx.io/go-anxcloud/pkg/apis/(\w+)/(v[\w\d]+)
79+
alias: anx$1$2
80+
- pkg: github.com/tinkerbell/tink/api/(v[\w\d]+)
81+
alias: tink$1
82+
- pkg: kubevirt.io/api/(\w+)/(v[\w\d]+)
83+
alias: kubevirt$1$2
84+
- pkg: kubevirt.io/containerized-data-importer-api/pkg/apis/(\w+)/(v[\w\d]+)
85+
alias: cdi$1$2
86+
5187
issues:
88+
max-same-issues: 0
5289
exclude:
5390
- func Convert_MachinesV1alpha1Machine_To_ClusterV1alpha1Machine should be ConvertMachinesV1alpha1MachineToClusterV1alpha1Machine
5491
- func Convert_MachineDeployment_ProviderConfig_To_ProviderSpec should be ConvertMachineDeploymentProviderConfigToProviderSpec
@@ -59,4 +96,4 @@ issues:
5996
- 'cyclomatic complexity [0-9]+ of func `\(\*provider\)\.getConfig` is high'
6097
- "SA1019: s.server.IPv6 is deprecated"
6198
exclude-dirs:
62-
- pkg/machines
99+
- apis/machines

Makefile

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ build-machine-controller: machine-controller
5252

5353
.PHONY: clean
5454
clean:
55-
rm -f machine-controller \
56-
webhook
55+
rm -f machine-controller webhook
5756

5857
.PHONY: lint
5958
lint:
6059
golangci-lint run -v
60+
make -C sdk lint
6161

6262
yamllint:
6363
yamllint -c .yamllint.conf .
@@ -91,15 +91,18 @@ test-unit-docker:
9191
.PHONY: test-unit
9292
test-unit:
9393
go test -v ./...
94+
cd sdk && go test -v ./...
9495

9596
.PHONY: build-tests
9697
build-tests:
9798
go test -run nope ./...
99+
cd sdk && go test -run nope ./...
98100
go test -tags e2e -run nope ./...
99101

100102
.PHONY: check-dependencies
101103
check-dependencies:
102104
go mod verify
105+
cd sdk && go mod verify
103106

104107
.PHONY: download-gocache
105108
download-gocache:

cmd/machine-controller/main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ import (
3030
"github.com/prometheus/client_golang/prometheus"
3131
"go.uber.org/zap"
3232

33-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
34-
"k8c.io/machine-controller/pkg/apis/cluster/v1alpha1/migrations"
3533
cloudprovidertypes "k8c.io/machine-controller/pkg/cloudprovider/types"
3634
"k8c.io/machine-controller/pkg/cloudprovider/util"
3735
clusterinfo "k8c.io/machine-controller/pkg/clusterinfo"
@@ -41,8 +39,10 @@ import (
4139
"k8c.io/machine-controller/pkg/controller/nodecsrapprover"
4240
"k8c.io/machine-controller/pkg/health"
4341
machinecontrollerlog "k8c.io/machine-controller/pkg/log"
44-
machinesv1alpha1 "k8c.io/machine-controller/pkg/machines/v1alpha1"
42+
"k8c.io/machine-controller/pkg/migrations"
4543
"k8c.io/machine-controller/pkg/node"
44+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
45+
machinesv1alpha1 "k8c.io/machine-controller/sdk/apis/machines/v1alpha1"
4646

4747
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
4848
"k8s.io/apimachinery/pkg/types"

go.mod

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ go 1.22.3
44

55
toolchain go1.23.1
66

7+
replace k8c.io/machine-controller/sdk => ./sdk
8+
79
require (
810
cloud.google.com/go/logging v1.11.0
911
cloud.google.com/go/monitoring v1.21.1
@@ -49,6 +51,7 @@ require (
4951
gomodules.xyz/jsonpatch/v2 v2.4.0
5052
google.golang.org/api v0.197.0
5153
gopkg.in/yaml.v3 v3.0.1
54+
k8c.io/machine-controller/sdk v0.0.0-00010101000000-000000000000
5255
k8s.io/api v0.31.1
5356
k8s.io/apiextensions-apiserver v0.31.1
5457
k8s.io/apimachinery v0.31.1
@@ -60,7 +63,6 @@ require (
6063
kubevirt.io/api v1.3.1
6164
kubevirt.io/containerized-data-importer-api v1.60.3
6265
sigs.k8s.io/controller-runtime v0.19.0
63-
sigs.k8s.io/yaml v1.4.0
6466
)
6567

6668
require (
@@ -185,4 +187,5 @@ require (
185187
kubevirt.io/controller-lifecycle-operator-sdk/api v0.2.4 // indirect
186188
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
187189
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
190+
sigs.k8s.io/yaml v1.4.0 // indirect
188191
)

hack/verify-boilerplate.sh

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,4 @@ cd $(dirname $0)/..
2020

2121
boilerplate \
2222
-boilerplates hack/boilerplate \
23-
-exclude pkg/machines/v1alpha1 \
24-
-exclude pkg/signals
23+
-exclude sdk/apis/machines/v1alpha1

pkg/admission/machinedeployments.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"encoding/json"
2222
"fmt"
2323

24-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
24+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
2525

2626
admissionv1 "k8s.io/api/admission/v1"
2727
apiequality "k8s.io/apimachinery/pkg/api/equality"

pkg/admission/machinedeployments_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package admission
1919
import (
2020
"testing"
2121

22-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
22+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
2323

2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2525
)

pkg/admission/machinedeployments_validation.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import (
2020
"encoding/json"
2121
"fmt"
2222

23-
"k8c.io/machine-controller/pkg/apis/cluster/common"
24-
"k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
25-
providerconfigtypes "k8c.io/machine-controller/pkg/providerconfig/types"
23+
"k8c.io/machine-controller/sdk/apis/cluster/common"
24+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
25+
providerconfigtypes "k8c.io/machine-controller/sdk/providerconfig"
2626

2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
@@ -32,13 +32,13 @@ import (
3232
"k8s.io/apimachinery/pkg/util/validation/field"
3333
)
3434

35-
func validateMachineDeployment(md v1alpha1.MachineDeployment) field.ErrorList {
35+
func validateMachineDeployment(md clusterv1alpha1.MachineDeployment) field.ErrorList {
3636
allErrs := field.ErrorList{}
3737
allErrs = append(allErrs, validateMachineDeploymentSpec(&md.Spec, field.NewPath("spec"))...)
3838
return allErrs
3939
}
4040

41-
func validateMachineDeploymentSpec(spec *v1alpha1.MachineDeploymentSpec, fldPath *field.Path) field.ErrorList {
41+
func validateMachineDeploymentSpec(spec *clusterv1alpha1.MachineDeploymentSpec, fldPath *field.Path) field.ErrorList {
4242
allErrs := field.ErrorList{}
4343
allErrs = append(allErrs, metav1validation.ValidateLabelSelector(&spec.Selector, metav1validation.LabelSelectorValidationOptions{}, fldPath.Child("selector"))...)
4444
if len(spec.Selector.MatchLabels)+len(spec.Selector.MatchExpressions) == 0 {
@@ -60,7 +60,7 @@ func validateMachineDeploymentSpec(spec *v1alpha1.MachineDeploymentSpec, fldPath
6060
return allErrs
6161
}
6262

63-
func validateMachineDeploymentStrategy(strategy *v1alpha1.MachineDeploymentStrategy, fldPath *field.Path) field.ErrorList {
63+
func validateMachineDeploymentStrategy(strategy *clusterv1alpha1.MachineDeploymentStrategy, fldPath *field.Path) field.ErrorList {
6464
allErrs := field.ErrorList{}
6565
switch strategy.Type {
6666
case common.RollingUpdateMachineDeploymentStrategyType:
@@ -73,7 +73,7 @@ func validateMachineDeploymentStrategy(strategy *v1alpha1.MachineDeploymentStrat
7373
return allErrs
7474
}
7575

76-
func validateMachineRollingUpdateDeployment(rollingUpdate *v1alpha1.MachineRollingUpdateDeployment, fldPath *field.Path) field.ErrorList {
76+
func validateMachineRollingUpdateDeployment(rollingUpdate *clusterv1alpha1.MachineRollingUpdateDeployment, fldPath *field.Path) field.ErrorList {
7777
allErrs := field.ErrorList{}
7878
var maxUnavailable int
7979
var maxSurge int
@@ -110,11 +110,11 @@ func getIntOrPercent(s *intstr.IntOrString, roundUp bool) (int, error) {
110110
return intstr.GetValueFromIntOrPercent(s, 100, roundUp)
111111
}
112112

113-
func machineDeploymentDefaultingFunction(md *v1alpha1.MachineDeployment) {
114-
v1alpha1.PopulateDefaultsMachineDeployment(md)
113+
func machineDeploymentDefaultingFunction(md *clusterv1alpha1.MachineDeployment) {
114+
clusterv1alpha1.PopulateDefaultsMachineDeployment(md)
115115
}
116116

117-
func mutationsForMachineDeployment(md *v1alpha1.MachineDeployment) error {
117+
func mutationsForMachineDeployment(md *clusterv1alpha1.MachineDeployment) error {
118118
providerConfig, err := providerconfigtypes.GetConfig(md.Spec.Template.Spec.ProviderSpec)
119119
if err != nil {
120120
return fmt.Errorf("failed to read MachineDeployment.Spec.Template.Spec.ProviderSpec: %w", err)

pkg/admission/machines.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import (
2424
"github.com/Masterminds/semver/v3"
2525
"golang.org/x/crypto/ssh"
2626

27-
"k8c.io/machine-controller/pkg/apis/cluster/common"
28-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
2927
"k8c.io/machine-controller/pkg/cloudprovider"
30-
"k8c.io/machine-controller/pkg/providerconfig"
31-
providerconfigtypes "k8c.io/machine-controller/pkg/providerconfig/types"
28+
"k8c.io/machine-controller/sdk/apis/cluster/common"
29+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
30+
"k8c.io/machine-controller/sdk/providerconfig"
31+
"k8c.io/machine-controller/sdk/userdata"
3232

3333
admissionv1 "k8s.io/api/admission/v1"
3434
apiequality "k8s.io/apimachinery/pkg/api/equality"
@@ -101,7 +101,7 @@ func (ad *admissionData) mutateMachines(ctx context.Context, ar admissionv1.Admi
101101
common.SetKubeletFlags(&machine, map[common.KubeletFlags]string{
102102
common.ExternalCloudProviderKubeletFlag: fmt.Sprintf("%t", ad.nodeSettings.ExternalCloudProvider),
103103
})
104-
providerConfig, err := providerconfigtypes.GetConfig(machine.Spec.ProviderSpec)
104+
providerConfig, err := providerconfig.GetConfig(machine.Spec.ProviderSpec)
105105
if err != nil {
106106
return nil, err
107107
}
@@ -116,7 +116,7 @@ func (ad *admissionData) mutateMachines(ctx context.Context, ar admissionv1.Admi
116116
}
117117

118118
func (ad *admissionData) defaultAndValidateMachineSpec(ctx context.Context, spec *clusterv1alpha1.MachineSpec) error {
119-
providerConfig, err := providerconfigtypes.GetConfig(spec.ProviderSpec)
119+
providerConfig, err := providerconfig.GetConfig(spec.ProviderSpec)
120120
if err != nil {
121121
return fmt.Errorf("failed to read machine.spec.providerSpec: %w", err)
122122
}
@@ -164,7 +164,7 @@ func (ad *admissionData) defaultAndValidateMachineSpec(ctx context.Context, spec
164164
return fmt.Errorf("Invalid public keys specified: %w", err)
165165
}
166166

167-
defaultedOperatingSystemSpec, err := providerconfig.DefaultOperatingSystemSpec(
167+
defaultedOperatingSystemSpec, err := userdata.DefaultOperatingSystemSpec(
168168
providerConfig.OperatingSystem,
169169
providerConfig.OperatingSystemSpec,
170170
)

pkg/admission/util.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"encoding/json"
2121
"fmt"
2222

23-
providerconfigtypes "k8c.io/machine-controller/pkg/providerconfig/types"
23+
providerconfigtypes "k8c.io/machine-controller/sdk/providerconfig"
2424
)
2525

2626
const cloudProviderPacket = "packet"

pkg/cloudprovider/cache/cloudprovidercache.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424

2525
gocache "github.com/patrickmn/go-cache"
2626

27-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
27+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
2828
)
2929

3030
type CloudproviderCache struct {

pkg/cloudprovider/cache/cloudprovidercache_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"errors"
2121
"testing"
2222

23-
clusterv1alpha1 "k8c.io/machine-controller/pkg/apis/cluster/v1alpha1"
23+
clusterv1alpha1 "k8c.io/machine-controller/sdk/apis/cluster/v1alpha1"
2424

2525
corev1 "k8s.io/api/core/v1"
2626
runtime "k8s.io/apimachinery/pkg/runtime"

pkg/cloudprovider/errors/errors.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"errors"
2121
"fmt"
2222

23-
"k8c.io/machine-controller/pkg/apis/cluster/common"
23+
"k8c.io/machine-controller/sdk/apis/cluster/common"
2424
)
2525

2626
var (

pkg/cloudprovider/instance/instance.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ limitations under the License.
1616

1717
package instance
1818

19-
import v1 "k8s.io/api/core/v1"
19+
import corev1 "k8s.io/api/core/v1"
2020

2121
// Instance represents a instance on the cloud provider.
2222
type Instance interface {
@@ -27,7 +27,7 @@ type Instance interface {
2727
// ProviderID returns the expected providerID for the instance
2828
ProviderID() string
2929
// Addresses returns a list of addresses associated with the instance.
30-
Addresses() map[string]v1.NodeAddressType
30+
Addresses() map[string]corev1.NodeAddressType
3131
// Status returns the instance status.
3232
Status() Status
3333
}

0 commit comments

Comments
 (0)