Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

Commit

Permalink
Merge pull request #48 from metal-stack/upd-to-capi-v0.4
Browse files Browse the repository at this point in the history
Update to CAPI v0.4.0
  • Loading branch information
GrigoriyMikhalkin authored Jul 16, 2021
2 parents d34ad8e + ec91e16 commit 0f6fcf3
Show file tree
Hide file tree
Showing 53 changed files with 3,356 additions and 774 deletions.
121 changes: 60 additions & 61 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,17 @@ VERSION ?= $(RELEASE_VERSION)
# which arches can we support
ARCHES=arm64 amd64

QEMU_VERSION?=4.2.0-7
QEMU_IMAGE?=multiarch/qemu-user-static:$(QEMU_VERSION)

KUBEBUILDER_VERSION ?= 2.3.1
# default install location for kubebuilder; can be placed elsewhere
KUBEBUILDER_DIR ?= /usr/local/kubebuilder
KUBEBUILDER ?= $(KUBEBUILDER_DIR)/bin/kubebuilder
CONTROLLER_GEN_VERSION ?= v0.3.0
CONTROLLER_GEN=$(GOBIN)/controller-gen

CERTMANAGER_URL ?= https://github.com/jetstack/cert-manager/releases/download/v0.14.1/cert-manager.yaml

REPO_URL ?= https://github.com/metal-stack/cluster-api-provider-metalstack

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
else
GOBIN=$(shell go env GOBIN)
endif

# BUILDARCH is the host architecture
# ARCH is the target architecture
# we need to keep track of them separately
Expand All @@ -64,13 +61,23 @@ TOOLS_BIN_DIR := $(TOOLS_DIR)/bin
BIN_DIR := bin
TEST_DIR := test
TEST_E2E_DIR := $(TEST_DIR)/e2e
GO_INSTALL = ./scripts/go_install.sh

# Binaries.
KUSTOMIZE := $(TOOLS_BIN_DIR)/kustomize

kustomize: $(KUSTOMIZE)
$(KUSTOMIZE): $(TOOLS_DIR)/go.mod # Build kustomize from tools folder.
cd $(TOOLS_DIR); go build -tags=tools -o $(BIN_DIR)/kustomize sigs.k8s.io/kustomize/kustomize/v3
KUBEBUILDER_VERSION ?= 2.3.1
# default install location for kubebuilder; can be placed elsewhere
KUBEBUILDER_DIR ?= /usr/local/kubebuilder
KUBEBUILDER ?= $(KUBEBUILDER_DIR)/bin/kubebuilder

CONTROLLER_GEN_VER := v0.6.1
CONTROLLER_GEN_BIN := controller-gen
CONTROLLER_GEN := $(GOBIN)/$(CONTROLLER_GEN_BIN)

CONVERSION_GEN_VER := v0.21.2
CONVERSION_GEN_BIN := conversion-gen
CONVERSION_GEN := $(GOBIN)/$(CONVERSION_GEN_BIN)

# canonicalized names for host architecture
ifeq ($(BUILDARCH),aarch64)
Expand Down Expand Up @@ -119,21 +126,8 @@ IMG ?= metalstack/cluster-api-provider-metalstack:latest
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd:trivialVersions=true"

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
else
GOBIN=$(shell go env GOBIN)
endif

MANIFEST_TOOL ?= $(GOBIN)/manifest-tool

# where we store downloaded core
COREPATH ?= out/core
CORE_VERSION ?= v0.3.5
CORE_API ?= https://api.github.com/repos/kubernetes-sigs/cluster-api/releases
CORE_URL ?= https://github.com/kubernetes-sigs/cluster-api/releases/download/$(CORE_VERSION)

# metadata file to be included in releases
METADATA_YAML ?= metadata.yaml

Expand Down Expand Up @@ -210,25 +204,45 @@ cd: confirm branchname
$(MAKE) tag-images-all push-all push-manifest IMAGETAG=${BRANCH_NAME}
$(MAKE) tag-images-all push-all push-manifest IMAGETAG=${GIT_VERSION}

# needed kubebuilder for tests
.PHONY: mini-lab
mini-lab:
MINI_LAB_FLAVOR=cluster-api $(MAKE) -C $(MINI_LAB_PATH)
$(MAKE) -C $(MINI_LAB_PATH) route
$(MAKE) -C $(MINI_LAB_PATH) fwrules

## ------------
## Tooling
## ------------

kustomize: $(KUSTOMIZE)
$(KUSTOMIZE): $(TOOLS_DIR)/go.mod # Build kustomize from tools folder.
cd $(TOOLS_DIR); go build -tags=tools -o $(BIN_DIR)/kustomize sigs.k8s.io/kustomize/kustomize/v3

kubebuilder: $(KUBEBUILDER)
$(KUBEBUILDER):
$(KUBEBUILDER): # kubebuilder is needed for tests
curl -sL https://go.kubebuilder.io/dl/$(KUBEBUILDER_VERSION)/$(BUILDOS)/$(BUILDARCH) | tar -xz -C /tmp/
# move to a long-term location and put it on your path
# (you'll need to set the KUBEBUILDER_ASSETS env var if you put it somewhere else)
mv /tmp/kubebuilder_$(KUBEBUILDER_VERSION)_$(BUILDOS)_$(BUILDARCH) $(KUBEBUILDER_DIR)

# Run tests
controller-gen: $(CONTROLLER_GEN)
$(CONTROLLER_GEN): # Build controller-gen from tools folder.
GOBIN=$(GOBIN) $(GO_INSTALL) sigs.k8s.io/controller-tools/cmd/controller-gen $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_VER)

conversion-gen: $(CONVERSION_GEN)
$(CONVERSION_GEN): # Build conversion-gen.
GOBIN=$(GOBIN) $(GO_INSTALL) k8s.io/code-generator/cmd/conversion-gen $(CONVERSION_GEN_BIN) $(CONVERSION_GEN_VER)

manager: $(MANAGER)
$(MANAGER): generate fmt vet # Build manager binary
GOOS=$(OS) GOARCH=$(ARCH) $(GO) build -o $@ .

## ------------
## Tests
## ------------
test: fmt vet
go test ./... -coverprofile cover.out

# e2e tests rules
.PHONY: mini-lab
mini-lab:
MINI_LAB_FLAVOR=cluster-api $(MAKE) -C $(MINI_LAB_PATH)
$(MAKE) -C $(MINI_LAB_PATH) route
$(MAKE) -C $(MINI_LAB_PATH) fwrules

.PHONY: e2e-prep
e2e-prep:
@kind get clusters | grep metal-control-plane > /dev/null || $(MAKE) mini-lab
Expand All @@ -255,11 +269,6 @@ e2e-test:
# The image gets loaded inside kind from ./test/e2e/config/metalstack-dev.yaml
$(E2E_FLAGS) $(MAKE) -C $(TEST_E2E_DIR) run

# Build manager binary
manager: $(MANAGER)
$(MANAGER): generate fmt vet
GOOS=$(OS) GOARCH=$(ARCH) $(GO) build -o $@ .

# Run against the configured Kubernetes cluster in ~/.kube/config
run: generate fmt vet crds
go run ./main.go
Expand Down Expand Up @@ -296,8 +305,14 @@ vet:
go vet ./...

# Generate code
generate: controller-gen
generate: controller-gen conversion-gen
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."
$(CONVERSION_GEN) \
--input-dirs=./api/v1alpha3 \
--build-tag=ignore_autogenerated \
--extra-peer-dirs=sigs.k8s.io/cluster-api/api/v1alpha3 \
--output-file-base=zz_generated.conversion \
--go-header-file=./hack/boilerplate.go.txt

## make the images for all supported ARCH
image-all: $(addprefix sub-image-, $(ARCHES))
Expand Down Expand Up @@ -337,17 +352,9 @@ push-all: imagetag $(addprefix sub-push-, $(ARCHES))
sub-push-%:
@$(MAKE) ARCH=$* push IMAGETAG=$(IMAGETAG)

# find or download controller-gen
# download controller-gen if necessary
# version must be at least the given version
.PHONY: $(CONTROLLER_GEN)
controller-gen: $(CONTROLLER_GEN)
$(CONTROLLER_GEN):
scripts/controller-gen.sh $@ $(CONTROLLER_GEN_VERSION)

## generate a cluster using clusterctl and setting defaults
cluster:
RELEASE_VERSION=$(RELEASE_VERSION) ./scripts/generate-cluster.sh
RELEASE_TYPE=managerless RELEASE_VERSION=$(RELEASE_VERSION) ./scripts/generate-cluster.sh

$(RELEASE_DIR) $(RELEASE_BASE) $(MANAGERLESS_DIR) $(MANAGERLESS_BASE) $(MANAGER_TEST_DIR) $(MANAGER_TEST_BASE):
mkdir -p $@
Expand Down Expand Up @@ -422,13 +429,5 @@ $(MANAGER_TEST_CLUSTERCTLYAML): $(MANAGER_TEST_BASE)
@echo "manager-test is ready, command-line is:"
@echo " clusterctl --config=$@ <commands>"

$(COREPATH):
mkdir -p $@

$(COREPATH)/%:
curl -s -L -o $@ $(CORE_URL)/$*

core: $(COREPATH)
# download from core
@$(eval YAMLS := $(shell curl -s -L $(CORE_API) | jq -r '[.[] | select(.tag_name == "$(CORE_VERSION)").assets[] | select(.name | contains("yaml")) | .name] | join(" ")'))
@if [ -n "$(YAMLS)" ]; then $(MAKE) $(addprefix $(COREPATH)/,$(YAMLS)); fi
cluster-test:
RELEASE_TYPE=test RELEASE_VERSION=$(RELEASE_VERSION) ./scripts/generate-cluster.sh
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v0.3.0
v0.4.0
86 changes: 86 additions & 0 deletions api/v1alpha3/conversion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package v1alpha3

import (
"github.com/metal-stack/cluster-api-provider-metalstack/api/v1alpha4"
"sigs.k8s.io/controller-runtime/pkg/conversion"
)

func (src *MetalStackCluster) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackCluster)
return Convert_v1alpha3_MetalStackCluster_To_v1alpha4_MetalStackCluster(src, dst, nil)
}

func (dst *MetalStackCluster) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackCluster)
return Convert_v1alpha4_MetalStackCluster_To_v1alpha3_MetalStackCluster(src, dst, nil)
}

func (src *MetalStackClusterList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackClusterList)
return Convert_v1alpha3_MetalStackClusterList_To_v1alpha4_MetalStackClusterList(src, dst, nil)
}

func (dst *MetalStackClusterList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackClusterList)
return Convert_v1alpha4_MetalStackClusterList_To_v1alpha3_MetalStackClusterList(src, dst, nil)
}

func (src *MetalStackFirewall) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackFirewall)
return Convert_v1alpha3_MetalStackFirewall_To_v1alpha4_MetalStackFirewall(src, dst, nil)
}

func (dst *MetalStackFirewall) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackFirewall)
return Convert_v1alpha4_MetalStackFirewall_To_v1alpha3_MetalStackFirewall(src, dst, nil)
}

func (src *MetalStackFirewallList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackFirewallList)
return Convert_v1alpha3_MetalStackFirewallList_To_v1alpha4_MetalStackFirewallList(src, dst, nil)
}

func (dst *MetalStackFirewallList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackFirewallList)
return Convert_v1alpha4_MetalStackFirewallList_To_v1alpha3_MetalStackFirewallList(src, dst, nil)
}

func (src *MetalStackMachine) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackMachine)
return Convert_v1alpha3_MetalStackMachine_To_v1alpha4_MetalStackMachine(src, dst, nil)
}

func (dst *MetalStackMachine) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackMachine)
return Convert_v1alpha4_MetalStackMachine_To_v1alpha3_MetalStackMachine(src, dst, nil)
}

func (src *MetalStackMachineList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackMachineList)
return Convert_v1alpha3_MetalStackMachineList_To_v1alpha4_MetalStackMachineList(src, dst, nil)
}

func (dst *MetalStackMachineList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackMachineList)
return Convert_v1alpha4_MetalStackMachineList_To_v1alpha3_MetalStackMachineList(src, dst, nil)
}

func (src *MetalStackMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackMachineTemplate)
return Convert_v1alpha3_MetalStackMachineTemplate_To_v1alpha4_MetalStackMachineTemplate(src, dst, nil)
}

func (dst *MetalStackMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackMachineTemplate)
return Convert_v1alpha4_MetalStackMachineTemplate_To_v1alpha3_MetalStackMachineTemplate(src, dst, nil)
}

func (src *MetalStackMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*v1alpha4.MetalStackMachineTemplateList)
return Convert_v1alpha3_MetalStackMachineTemplateList_To_v1alpha4_MetalStackMachineTemplateList(src, dst, nil)
}

func (dst *MetalStackMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
src := srcRaw.(*v1alpha4.MetalStackMachineTemplateList)
return Convert_v1alpha4_MetalStackMachineTemplateList_To_v1alpha3_MetalStackMachineTemplateList(src, dst, nil)
}
19 changes: 19 additions & 0 deletions api/v1alpha3/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
Copyright 2020 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha3

// +k8s:conversion-gen=github.com/metal-stack/cluster-api-provider-metalstack/api/v1alpha4
5 changes: 4 additions & 1 deletion api/v1alpha3/groupversion_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,14 @@ import (

var (
// GroupVersion is group version used to register these objects
GroupVersion = schema.GroupVersion{Group: "infrastructure.cluster.x-k8s.io", Version: "v1alpha3"}
GroupVersion = schema.GroupVersion{Group: "infrastructure.cluster.x-k8s.io", Version: "v1alpha4"}

// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}

// AddToScheme adds the types in this group-version to the given scheme.
AddToScheme = SchemeBuilder.AddToScheme

// localSchemeBuilder is used for type conversions.
localSchemeBuilder = SchemeBuilder.SchemeBuilder
)
6 changes: 0 additions & 6 deletions api/v1alpha3/metalstackcluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,6 @@ type MetalStackClusterStatus struct {
FailureMessage *string `json:"failureMessage,omitempty"`
}

// MetalStackFirewallTemplate is the template of the MetalStackFirewall
type MetalStackFirewallTemplate struct {
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MetalStackFirewallSpec `json:"spec,omitempty"`
}

// +kubebuilder:subresource:status
// +kubebuilder:object:root=true

Expand Down
1 change: 0 additions & 1 deletion api/v1alpha3/metalstackmachine_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ func (st *MetalStackMachineStatus) SetFailure(msg string, err clustererr.Machine
// +kubebuilder:subresource:status
// +kubebuilder:object:root=true
// +kubebuilder:resource:path=metalstackmachines,scope=Namespaced,categories=cluster-api
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.cluster\\.x-k8s\\.io/cluster-name",description="Cluster to which this MetalStackMachine belongs"
// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.instanceState",description="MetalStack instance state"
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.ready",description="Machine ready status"
Expand Down
1 change: 0 additions & 1 deletion api/v1alpha3/metalstackmachinetemplate_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ type MetalStackMachineTemplateSpec struct {

// +kubebuilder:object:root=true
// +kubebuilder:resource:path=metalstackmachinetemplates,scope=Namespaced,categories=cluster-api
// +kubebuilder:storageversion

// MetalStackMachineTemplate is the Schema for the metalstackmachinetemplates API
type MetalStackMachineTemplate struct {
Expand Down
Loading

0 comments on commit 0f6fcf3

Please sign in to comment.