Skip to content

Commit

Permalink
Cleanup directory structure (#635)
Browse files Browse the repository at this point in the history
* Remove `onmetal-apiserver` / `onmetal-controller-manager` directory in
  favor of a shared `internal` directory (similar to
  `kubernetes/kubernetes`)
* Update / align all test cases to build `onmetal-apiserver` &
  `onmetal-controller-manager` with mod mode
* Move public client utilities to `utils/client`
  • Loading branch information
adracus authored Feb 8, 2023
1 parent de89279 commit b7e026f
Show file tree
Hide file tree
Showing 60 changed files with 182 additions and 241 deletions.
7 changes: 3 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ RUN go mod download
COPY api/ api/
COPY broker/ broker/
COPY client-go/ client-go/
COPY cmd/ cmd/
COPY internal/ internal/
COPY onmetal-apiserver/ onmetal-apiserver/
COPY onmetal-controller-manager/ onmetal-controller-manager/
COPY ori/ ori/
COPY orictl/ orictl/
COPY poollet/ poollet/
Expand All @@ -30,13 +29,13 @@ FROM builder as apiserver-builder

RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg \
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/onmetal-apiserver ./onmetal-apiserver/cmd/apiserver
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/onmetal-apiserver ./cmd/onmetal-apiserver

FROM builder as manager-builder

RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg \
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/onmetal-controller-manager ./onmetal-controller-manager/main.go
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/onmetal-controller-manager ./cmd/onmetal-controller-manager

FROM builder as machinepoollet-builder

Expand Down
21 changes: 14 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ help: ## Display this help.
FILE="config/machinepoollet-broker/broker-rbac/role.yaml"
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
# onmetal-controller-manager
$(CONTROLLER_GEN) rbac:roleName=manager-role webhook paths="./onmetal-controller-manager/controllers/...;./api/..." output:rbac:artifacts:config=config/controller/rbac
$(CONTROLLER_GEN) rbac:roleName=manager-role webhook paths="./internal/controllers/...;./api/..." output:rbac:artifacts:config=config/controller/rbac

# machinepoollet-broker
$(CONTROLLER_GEN) rbac:roleName=manager-role paths="./poollet/machinepoollet/controllers/..." output:rbac:artifacts:config=config/machinepoollet-broker/poollet-rbac
Expand Down Expand Up @@ -95,8 +95,8 @@ proto: vgopath protoc-gen-gogo
./hack/update-proto.sh

.PHONY: fmt
fmt: ## Run go fmt against code.
go fmt ./...
fmt: goimports ## Run goimports against code.
$(GOIMPORTS) -w .

.PHONY: vet
vet: ## Run go vet against code.
Expand All @@ -123,7 +123,7 @@ check-license: addlicense ## Check that every file has a license header present.
find . -name '*.go' -exec $(ADDLICENSE) -check -c 'OnMetal authors' {} +

.PHONY: check
check: manifests generate add-license lint test # Generate manifests, code, lint, add licenses, test
check: manifests generate add-license fmt lint test # Generate manifests, code, lint, add licenses, test

.PHONY: docs
docs: gen-crd-api-reference-docs ## Run go generate to generate API reference documentation.
Expand Down Expand Up @@ -154,7 +154,7 @@ test-only: envtest ## Run *only* the tests - no generation, linting etc.
.PHONY: openapi-extractor
extract-openapi: envtest openapi-extractor
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" $(OPENAPI_EXTRACTOR) \
--apiserver-package="github.com/onmetal/onmetal-api/onmetal-apiserver/cmd/apiserver" \
--apiserver-package="github.com/onmetal/onmetal-api/cmd/onmetal-apiserver" \
--apiserver-build-opts=mod \
--apiservices="./config/apiserver/apiservice/bases" \
--output="./gen"
Expand All @@ -163,11 +163,11 @@ extract-openapi: envtest openapi-extractor

.PHONY: build
build: generate fmt vet ## Build manager binary.
go build -o bin/manager ./onmetal-controller-manager/main.go
go build -o bin/manager ./cmd/onmetal-controller-manager

.PHONY: run
run: manifests generate fmt vet ## Run a controller from your host.
go run ./onmetal-controller-manager/main.go
go run ./cmd/onmetal-controller-manager

.PHONY: docker-build
docker-build: \
Expand Down Expand Up @@ -360,6 +360,7 @@ GEN_CRD_API_REFERENCE_DOCS ?= $(LOCALBIN)/gen-crd-api-reference-docs
ADDLICENSE ?= $(LOCALBIN)/addlicense
PROTOC_GEN_GOGO ?= $(LOCALBIN)/protoc-gen-gogo
MODELS_SCHEMA ?= $(LOCALBIN)/models-schema
GOIMPORTS ?= $(LOCALBIN)/goimports

## Tool Versions
KUSTOMIZE_VERSION ?= v3.8.7
Expand All @@ -369,6 +370,7 @@ VGOPATH_VERSION ?= v0.0.2
GEN_CRD_API_REFERENCE_DOCS_VERSION ?= v0.3.0
ADDLICENSE_VERSION ?= v1.1.0
PROTOC_GEN_GOGO_VERSION ?= v1.3.2
GOIMPORTS_VERSION ?= v0.5.0

KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"
.PHONY: kustomize
Expand Down Expand Up @@ -460,3 +462,8 @@ $(PROTOC_GEN_GOGO): $(LOCALBIN)
models-schema: $(MODELS_SCHEMA) ## Install models-schema locally if necessary.
$(MODELS_SCHEMA): $(LOCALBIN)
test -s $(LOCALBIN)/models-schema || GOBIN=$(LOCALBIN) go install github.com/onmetal/onmetal-api/models-schema

.PHONY: goimports
goimports: $(GOIMPORTS) ## Download goimports locally if necessary.
$(GOIMPORTS): $(LOCALBIN)
test -s $(LOCALBIN)/goimports || GOBIN=$(LOCALBIN) go install golang.org/x/tools/cmd/goimports@$(GOIMPORTS_VERSION)
2 changes: 1 addition & 1 deletion broker/machinebroker/server/server_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ var _ = BeforeSuite(func() {
SetClient(k8sClient)

apiSrv, err := apiserver.New(cfg, apiserver.Options{
MainPath: "github.com/onmetal/onmetal-api/onmetal-apiserver/cmd/apiserver",
MainPath: "github.com/onmetal/onmetal-api/cmd/onmetal-apiserver",
BuildOptions: []buildutils.BuildOption{buildutils.ModModeMod},
ETCDServers: []string{testEnv.ControlPlane.Etcd.URL.String()},
Host: testEnvExt.APIServiceInstallOptions.LocalServingHost,
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ import (

corev1alpha1 "github.com/onmetal/onmetal-api/api/core/v1alpha1"
networkingv1alpha1 "github.com/onmetal/onmetal-api/api/networking/v1alpha1"
onmetalapiclient "github.com/onmetal/onmetal-api/internal/client"
computecontrollers "github.com/onmetal/onmetal-api/internal/controllers/compute"
corecontrollers "github.com/onmetal/onmetal-api/internal/controllers/core"
quotacontrollergeneric "github.com/onmetal/onmetal-api/internal/controllers/core/quota/generic"
quotacontrolleronmetal "github.com/onmetal/onmetal-api/internal/controllers/core/quota/onmetal"
ipamcontrollers "github.com/onmetal/onmetal-api/internal/controllers/ipam"
"github.com/onmetal/onmetal-api/internal/controllers/networking"
storagecontrollers "github.com/onmetal/onmetal-api/internal/controllers/storage"
quotaevaluatoronmetal "github.com/onmetal/onmetal-api/internal/quota/evaluator/onmetal"
onmetalapiclient "github.com/onmetal/onmetal-api/onmetal-controller-manager/client"
"github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/compute"
corecontrollers "github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/core"
quotacontrollergeneric "github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/core/quota/generic"
quotacontrolleronmetal "github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/core/quota/onmetal"
"github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/ipam"
networkingcontrollers "github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/networking"
"github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/storage"
"github.com/onmetal/onmetal-api/utils/quota"

// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
Expand Down Expand Up @@ -156,7 +156,7 @@ func main() {

// Register controllers
if controllers.Enabled(machineClassController) {
if err = (&compute.MachineClassReconciler{
if err = (&computecontrollers.MachineClassReconciler{
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Scheme: mgr.GetScheme(),
Expand All @@ -167,7 +167,7 @@ func main() {
}

if controllers.Enabled(machinePoolController) {
if err = (&compute.MachinePoolReconciler{
if err = (&computecontrollers.MachinePoolReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -177,7 +177,7 @@ func main() {
}

if controllers.Enabled(machineSchedulerController) {
if err := (&compute.MachineScheduler{
if err := (&computecontrollers.MachineScheduler{
Client: mgr.GetClient(),
EventRecorder: mgr.GetEventRecorderFor("machine-scheduler"),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -187,7 +187,7 @@ func main() {
}

if controllers.Enabled(volumePoolController) {
if err = (&storage.VolumePoolReconciler{
if err = (&storagecontrollers.VolumePoolReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -197,7 +197,7 @@ func main() {
}

if controllers.Enabled(volumeClassController) {
if err = (&storage.VolumeClassReconciler{
if err = (&storagecontrollers.VolumeClassReconciler{
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Scheme: mgr.GetScheme(),
Expand All @@ -213,7 +213,7 @@ func main() {
os.Exit(1)
}

if err = (&storage.VolumeReconciler{
if err = (&storagecontrollers.VolumeReconciler{
EventRecorder: mgr.GetEventRecorderFor("volumes"),
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Expand All @@ -226,7 +226,7 @@ func main() {
}

if controllers.Enabled(volumeScheduler) {
if err = (&storage.VolumeScheduler{
if err = (&storagecontrollers.VolumeScheduler{
EventRecorder: mgr.GetEventRecorderFor("volume-scheduler"),
Client: mgr.GetClient(),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -235,7 +235,7 @@ func main() {
}

if controllers.Enabled(machineController) {
if err = (&compute.MachineReconciler{
if err = (&computecontrollers.MachineReconciler{
EventRecorder: mgr.GetEventRecorderFor("machines"),
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Expand Down Expand Up @@ -271,7 +271,7 @@ func main() {
}

if controllers.Enabled(prefixController) {
if err = (&ipam.PrefixReconciler{
if err = (&ipamcontrollers.PrefixReconciler{
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Scheme: mgr.GetScheme(),
Expand All @@ -283,7 +283,7 @@ func main() {
}

if controllers.Enabled(prefixAllocationScheduler) {
if err = (&ipam.PrefixAllocationScheduler{
if err = (&ipamcontrollers.PrefixAllocationScheduler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor("prefix-allocation-scheduler"),
Expand All @@ -294,7 +294,7 @@ func main() {
}

if controllers.Enabled(networkProtectionController) {
if err = (&networkingcontrollers.NetworkProtectionReconciler{
if err = (&networking.NetworkProtectionReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -311,7 +311,7 @@ func main() {
}

if controllers.Enabled(networkInterfaceController) {
if err = (&networkingcontrollers.NetworkInterfaceReconciler{
if err = (&networking.NetworkInterfaceReconciler{
EventRecorder: mgr.GetEventRecorderFor("networkinterfaces"),
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Expand All @@ -322,7 +322,7 @@ func main() {
}

if controllers.Enabled(networkInterfaceBindController) {
if err = (&networkingcontrollers.NetworkInterfaceBindReconciler{
if err = (&networking.NetworkInterfaceBindReconciler{
EventRecorder: mgr.GetEventRecorderFor("networkinterfaces"),
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Expand All @@ -335,7 +335,7 @@ func main() {
}

if controllers.Enabled(virtualIPController) {
if err = (&networkingcontrollers.VirtualIPReconciler{
if err = (&networking.VirtualIPReconciler{
EventRecorder: mgr.GetEventRecorderFor("virtualips"),
Client: mgr.GetClient(),
APIReader: mgr.GetAPIReader(),
Expand All @@ -355,7 +355,7 @@ func main() {
}

if controllers.Enabled(aliasPrefixController) {
if err = (&networkingcontrollers.AliasPrefixReconciler{
if err = (&networking.AliasPrefixReconciler{
EventRecorder: mgr.GetEventRecorderFor("aliasprefixes"),
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Expand All @@ -371,7 +371,7 @@ func main() {
os.Exit(1)
}

if err = (&networkingcontrollers.LoadBalancerReconciler{
if err = (&networking.LoadBalancerReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
Expand All @@ -386,7 +386,7 @@ func main() {
os.Exit(1)
}

if err = (&networkingcontrollers.NatGatewayReconciler{
if err = (&networking.NatGatewayReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor("natgateways"),
Expand Down
2 changes: 1 addition & 1 deletion internal/app/app_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ var _ = BeforeSuite(func() {
komega.SetClient(k8sClient)

apiSrv, err := apiserver.New(cfg, apiserver.Options{
MainPath: "github.com/onmetal/onmetal-api/onmetal-apiserver/cmd/apiserver",
MainPath: "github.com/onmetal/onmetal-api/cmd/onmetal-apiserver",
BuildOptions: []buildutils.BuildOption{buildutils.ModModeMod},
ETCDServers: []string{testEnv.ControlPlane.Etcd.URL.String()},
Host: testEnvExt.APIServiceInstallOptions.LocalServingHost,
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ import (
computev1alpha1 "github.com/onmetal/onmetal-api/api/compute/v1alpha1"
networkingv1alpha1 "github.com/onmetal/onmetal-api/api/networking/v1alpha1"
storagev1alpha1 "github.com/onmetal/onmetal-api/api/storage/v1alpha1"
onmetalapiclient "github.com/onmetal/onmetal-api/onmetal-controller-manager/client"
onmetalapiclientutils "github.com/onmetal/onmetal-api/onmetal-controller-manager/clientutils"
"github.com/onmetal/onmetal-api/onmetal-controller-manager/controllers/compute/events"
onmetalapiclient "github.com/onmetal/onmetal-api/internal/client"
"github.com/onmetal/onmetal-api/internal/controllers/compute/events"
client2 "github.com/onmetal/onmetal-api/utils/client"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -123,7 +123,7 @@ func (r *MachineReconciler) applyNetworkInterface(
nicKey := client.ObjectKeyFromObject(nic)
log = log.WithValues("NetworkInterfaceKey", nicKey)
log.V(1).Info("Managing network interface")
if err := onmetalapiclientutils.ControlledCreateOrGet(ctx, r.Client, machine, nic, func() error {
if err := client2.ControlledCreateOrGet(ctx, r.Client, machine, nic, func() error {
nic.Labels = template.Labels
nic.Annotations = template.Annotations
metautils.SetLabel(nic, ephemeralSourceMachineUIDLabel, string(machine.UID))
Expand All @@ -132,7 +132,7 @@ func (r *MachineReconciler) applyNetworkInterface(
nic.Spec.MachineRef = &commonv1alpha1.LocalUIDReference{Name: machine.Name, UID: machine.UID}
return nil
}); err != nil {
if !errors.Is(err, onmetalapiclientutils.ErrNotControlled) {
if !errors.Is(err, client2.ErrNotControlled) {
return "", nil, nil, "", fmt.Errorf("error managing network interface %s: %w", nic.Name, err)
}

Expand Down Expand Up @@ -389,7 +389,7 @@ func (r *MachineReconciler) bindVolume(
volumeKey := client.ObjectKeyFromObject(volume)
log = log.WithValues("VolumeKey", volumeKey)
log.V(1).Info("Managing volume")
if err := onmetalapiclientutils.ControlledCreateOrGet(ctx, r.Client, machine, volume, func() error {
if err := client2.ControlledCreateOrGet(ctx, r.Client, machine, volume, func() error {
volume.Labels = template.Labels
volume.Annotations = template.Annotations
metav1.SetMetaDataLabel(&volume.ObjectMeta, ephemeralSourceMachineUIDLabel, string(machine.UID))
Expand All @@ -398,7 +398,7 @@ func (r *MachineReconciler) bindVolume(
volume.Spec.ClaimRef = &commonv1alpha1.LocalUIDReference{Name: machine.Name, UID: machine.UID}
return nil
}); err != nil {
if !errors.Is(err, onmetalapiclientutils.ErrNotControlled) {
if !errors.Is(err, client2.ErrNotControlled) {
return "", "", fmt.Errorf("error managing volume %s: %w", volume.Name, err)
}

Expand Down
Loading

0 comments on commit b7e026f

Please sign in to comment.