Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
5692e9a
v1alpha2
65278 Oct 14, 2024
90243d7
cmd/main_test: s/v1alpha1/v1alpha2/g
wikkyk Aug 11, 2025
ac44089
readme: compat table for CAPMOX v1alpha2 and CAPI v1beta2
wikkyk Aug 11, 2025
f994c36
delint
wikkyk Aug 12, 2025
3081d2d
delint 2
wikkyk Aug 12, 2025
7db8ff5
api/v1alpha1: remove storageversion
wikkyk Aug 12, 2025
29435b7
api/v1alpha2: tests
wikkyk Aug 12, 2025
5c648e0
vmservice: fix TestReconcileBootstrapData_UpdateStatus
wikkyk Aug 13, 2025
89174f7
vmservice: disable failing tests for now
wikkyk Aug 14, 2025
8f234b8
cloudinit/network: fix render
wikkyk Aug 19, 2025
591de7b
ignition/network: fix render
wikkyk Aug 19, 2025
5ed9e47
vmservice, webhook: disable failing tests
wikkyk Aug 19, 2025
d977f84
golangci: add kube-api-linter
wikkyk Aug 20, 2025
a3ba0fc
golangci: exclude v1alpha1 from kubeapilinter
wikkyk Aug 21, 2025
de74af0
golangci: gocritic --fix
wikkyk Aug 25, 2025
9be7efb
golangci: only run KAL on api/v1alpha2
wikkyk Sep 3, 2025
94120bb
lint
wikkyk Sep 16, 2025
abe87bf
kubeapilinter
wikkyk Aug 27, 2025
ef5f3cf
re-enable tests
wikkyk Nov 3, 2025
78cb5a9
v1alpha2/proxmoxcluster_types_test: re-enable all tests
wikkyk Nov 4, 2025
7784229
.github/workflow/lint: bump golangci-lint to v2.6.0
wikkyk Nov 4, 2025
938a511
hack/tools: bump go to 1.24.6
wikkyk Nov 5, 2025
38ae145
re-enable more tests
wikkyk Nov 5, 2025
36de976
TestReconcileBootstrapDataMissingNetworkConfig
wikkyk Nov 6, 2025
e13b102
make api pkg import consistent
wikkyk Nov 6, 2025
ed4d8c2
tweak TestGetCommonInterfaceConfig
wikkyk Nov 6, 2025
bc89b68
internal/service/vmservice/ip_test.go: add result testing for test dr…
65278 Nov 13, 2025
c517236
WIP: use fieldSelectors to find IP Addresses per machine
65278 Nov 19, 2025
02e11ab
WIP: fix ip_test.go into a working state
65278 Nov 20, 2025
eab7d64
WIP: vmservice/ip.go: cleanup
65278 Nov 20, 2025
8b1c567
WIP vmservice/ip_test.go: fix/cleanup all enabled tests
65278 Nov 20, 2025
6a48e40
TestReconcileIPAddresses_MultipleDevices
wikkyk Nov 21, 2025
e4d82f6
WIP: vmservice/ip_test.go: correctly requeue machine when creating ip…
65278 Nov 21, 2025
c3fa2b3
TestGetNetworkConfigDataForDevice_MissingIPAddress: flip logic
wikkyk Nov 24, 2025
1b4b91b
TestGetCommonInterfaceConfig_MissingIPPool: test no IP assigned
wikkyk Nov 24, 2025
591a2d6
TestGetCommonInterfaceConfig_NoIPAddresses: test that no IP gets assi…
wikkyk Nov 24, 2025
8cb812f
WIP internal/service/vmservice/vm.go: turn ProxmoxMachine into state …
65278 Nov 27, 2025
0b17776
WIP vmservice/ip_test.go: fix TagVM test
65278 Nov 28, 2025
0de9e7a
WIP vmservice/ip_test.go: test IPAddressClaims being created
65278 Dec 1, 2025
c700e75
TestReconcileBootstrapData_DualStack_AdditionalDevices
wikkyk Dec 2, 2025
cc9811a
TestReconcileBootstrapDataMissingNetworkConfig
wikkyk Dec 3, 2025
5e9332a
TestReconcileBootstrapData_DefaultDeviceIPPoolRef
wikkyk Dec 3, 2025
4d1eeeb
WIP: vmservice/ip_test.go: prepend default pools on net0
65278 Dec 4, 2025
5a144b6
WIP vmservice/ip_test.go: gofmt
65278 Dec 4, 2025
afb55ad
WIP vmservice/bootstrap_test.go: fix VRF test
65278 Dec 4, 2025
1014ca2
WIP vmservice/bootstrap_test.go: rework all tests
65278 Dec 12, 2025
cc673d1
TestReconcileIPAddresses_MultipleDevices, TestReconcileIPAddresses_Ma…
wikkyk Dec 16, 2025
c09cf39
correct letter case of IPv4/6 in code
wikkyk Dec 16, 2025
9e6af9d
WIP internal/service/vmservice/vm.go: hotwire statemachine deploy fix
65278 Dec 16, 2025
c5196bc
delint
wikkyk Dec 16, 2025
01fd348
turn {Global,}InClusterIPPool into consts
wikkyk Dec 17, 2025
38ad437
minor nitpicks
wikkyk Dec 17, 2025
60b0333
wip internal/services/vmservice/bootstrap.go: remove duplicate ipAddr…
65278 Dec 18, 2025
1a69919
wip ipam.go: stable sort IPAddressList by address name
65278 Dec 18, 2025
51734b7
WIP: helpers_test.go: add new createIPAddressesForMachine helper to r…
65278 Dec 18, 2025
30a8734
wip: bootstrap.go: solve IP address ordering problem
65278 Dec 24, 2025
0b22dad
remove createIPv{4,6}AddressResource
wikkyk Jan 5, 2026
94f6aeb
IPAddressFormat: make order of params consistent with output
wikkyk Jan 5, 2026
2576085
deduplicate createNetworkSpecForMachine and createIPAddress
wikkyk Jan 7, 2026
93d7c19
wip: api/v1alpha2/proxmoxmachine_types: add cluster network pool sele…
65278 Jan 12, 2026
75f0fd0
fix typos
wikkyk Jan 12, 2026
b17207e
fix vmscheduler_test for v1alpha2
wikkyk Jan 12, 2026
7b97cf5
bootstrap_test.go: add split default gateway test
65278 Jan 13, 2026
5eea97e
v1alpha2: proxmox-zone support
65278 Jan 15, 2026
b184b95
v1alpha2: bugfixes from deployment tests
65278 Jan 16, 2026
405a8e8
v1alpha2: mostly pay the linter
65278 Jan 16, 2026
b237c7c
v1alpha2: address all remaining linting concerns
65278 Jan 19, 2026
986c627
v1alpha2: pay the apilinter on clusterclasses
65278 Jan 20, 2026
8b0b17d
update to capi 1.11, k8s 0.33, controller-runtime 0.21
wikkyk Jan 15, 2026
ddc1ff2
adjust for capi 1.11 v1beta1, fork capi 1.10 utils until v1beta2
wikkyk Jan 15, 2026
f350c10
Dockerfile: copy capiv1beta1 forks
wikkyk Jan 20, 2026
aa1c97b
port 94a5ae243c9c09b1fc0fd63a8be0b85f2743afb5
wikkyk Jan 20, 2026
eccfd5f
v1alpha2: pay the linter on proxmoxmachine status IPAddresses
65278 Jan 20, 2026
37051f1
add some tests for machine defaults and invalid values
wikkyk Jan 21, 2026
746b552
v1alpha2: support for multiple IPAddresses per pool
65278 Jan 21, 2026
6692c70
v1alpha2: fix zone ippool naming
65278 Jan 21, 2026
3655090
v1alpha2: fold DefaultNetworkSpec into NetworkDevices, add defaulting…
65278 Jan 22, 2026
4cfe207
v1alpha2: validate proxmox network interface names
65278 Jan 26, 2026
bdb0ac4
v1aplha2: fix ignition default pool environment variables
65278 Jan 28, 2026
16cd907
v1alpha2: rename ProxmoxPoolRefCounterAnnotation
65278 Jan 28, 2026
c6ae59f
v1alpha2: ignition test cases for environment variables
65278 Jan 29, 2026
1aaf30e
v1alpha2: remove pointer from ProxmoxMachineSpec, disallow zero value
65278 Jan 30, 2026
202b865
v1alpha2: revert conditions hack until we convert to cluster-api v1beta2
65278 Jan 30, 2026
bfe861d
go mod tidy
wikkyk Feb 3, 2026
4c8d34c
feat: Add Conversion webhook for Hub v1alpha2 to Spoke v1alpha1
mcbenjemaa Feb 2, 2026
4e69ba9
v1alpha2: conversion webhook doesn't run defaulters
65278 Feb 4, 2026
0b8ea76
fix: move controlPlane validation from CRD to webhook
5-sigma Feb 5, 2026
e3fb283
bump all versions
wikkyk Feb 9, 2026
2610d6a
v1alpha2: handle ipam address creation when proxmoxcluster and cluste…
65278 Feb 9, 2026
22e9ba0
v1alpha2: updated cluster classes
65278 Feb 9, 2026
7958263
feat: Add missing conversion webhook for ProxmoxClusterTemplate (#612)
mcbenjemaa Feb 9, 2026
ac7f98c
v1alpha2: always quote IP addresses in cloudinit (fix gateway ending …
65278 Feb 10, 2026
dcfdc97
cloudinit/network.go: test yaml output to be valid
65278 Feb 11, 2026
5ca2c4e
Update to go-proxmox 0.3.2 (#615)
aeber Feb 11, 2026
5283c74
bump to go 1.25
wikkyk Feb 11, 2026
7f5e559
bump go to 1.25 (#616)
wikkyk Feb 11, 2026
264993f
build(deps): bump github.com/golangci/golangci-lint/v2 from 2.8.0 to …
dependabot[bot] Feb 11, 2026
831fb25
build(deps): bump golang.org/x/tools from 0.38.0 to 0.42.0
dependabot[bot] Feb 12, 2026
3c2d4b6
hack: fix yamlfmt import
65278 Feb 10, 2026
a166dac
build(deps): bump github.com/vektra/mockery/v2 in /hack/tools
dependabot[bot] Feb 12, 2026
727816d
build(deps): bump github.com/jarcoal/httpmock from 1.3.1 to 1.4.1 (#538)
dependabot[bot] Feb 12, 2026
0dc94fe
bump kubeapilinter
wikkyk Feb 11, 2026
889c386
pay off kubeapilinter with debt
wikkyk Feb 12, 2026
2ce37a1
update remaining k8s version references to 33
wikkyk Feb 12, 2026
2e55be8
yamlfmt
wikkyk Feb 12, 2026
8262a28
Revert "yamlfmt"
wikkyk Feb 12, 2026
0b4e77d
fix: sort IP addresses by pool offset to prevent flaky test ordering …
mcbenjemaa Feb 12, 2026
b4d9f6c
Migrate kube-api-linter from Go plugin to golangci-lint module (#624)
Copilot Feb 13, 2026
eac5c93
v1alpha2: retain proxmoxClusterTemplate behaviour in v1alpha1 (Cluste…
65278 Feb 13, 2026
7fde8fa
trigger workflows
wikkyk Feb 13, 2026
c43a7e1
v1alpha2: proxmoxMachine conversion should iterate over restored
65278 Feb 13, 2026
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
3 changes: 2 additions & 1 deletion .codespellignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
capi
proxmox
capmox
decorder
decorder
nd
6 changes: 6 additions & 0 deletions .custom-gcl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: v2.9.0
name: golangci-lint-custom
destination: ./bin
plugins:
- module: 'sigs.k8s.io/kube-api-linter'
version: v0.0.0-20260206102632-39e3d06a2850
7 changes: 3 additions & 4 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@ jobs:
- uses: actions/setup-go@v6
with:
go-version-file: go.mod
- name: build custom golangci-lint with kube-api-linter module
run: go run -modfile ./hack/tools/go.mod github.com/golangci/golangci-lint/v2/cmd/golangci-lint custom
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.1.6
args: '--timeout 10m'
run: ./bin/golangci-lint-custom run --timeout 10m

yamllint:
name: yamllint
Expand Down
28 changes: 23 additions & 5 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ linters:
- govet
- importas
- ineffassign
- kubeapilinter
- loggercheck
- misspell
- nakedret
Expand All @@ -31,6 +32,11 @@ linters:
- unused
- whitespace
settings:
custom:
kubeapilinter:
type: module
description: Kube API Linter lints Kube like APIs based on API conventions and best practices.
settings: {}
importas:
alias:
- pkg: k8s.io/api/(\w+)/(v[\w\d]+)
Expand Down Expand Up @@ -84,13 +90,15 @@ linters:
- linters:
- staticcheck
text: QF100(2|3|8)
- linters:
- staticcheck
text: ST1001
- linters:
- revive
text: dot-imports
- linters:
- unparam
text: always receives
- path: _test\.go
text: should not use dot imports
- path: (framework|e2e)/.*.go
text: should not use dot imports
- path: _test\.go
text: cyclomatic complexity
- linters:
Expand All @@ -108,6 +116,17 @@ linters:
- linters:
- revive
text: 'var-naming: avoid meaningless package names'
- path-except: api/v1alpha2
linters:
- kubeapilinter
- path: (.+)\.go$
linters:
- staticcheck
text: '(SA1019): "sigs.k8s.io/cluster-api/.*/v1beta1.*" is deprecated: .*'
- path: (.+)\.go$
linters:
- staticcheck
text: '(SA1019): "sigs.k8s.io/cluster-api/errors" is deprecated: .*'
paths:
- zz_generated.*\.go$
- .*conversion.*\.go$
Expand All @@ -117,7 +136,6 @@ linters:
- examples$
issues:
max-issues-per-linter: 0
max-same-issues: 0
formatters:
enable:
- gofmt
Expand Down
2 changes: 2 additions & 0 deletions .yamllint
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ ignore:
- config/certmanager
- config/prometheus
- config/rbac
- config/manager
- config/default
- test/e2e
- out
- .*.yaml
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Build the manager binary
FROM golang:1.24 AS builder
FROM golang:1.25 AS builder
ARG TARGETOS
ARG TARGETARCH

Expand All @@ -16,6 +16,7 @@ COPY cmd/main.go cmd/main.go
COPY api/ api/
COPY internal/ internal/
COPY pkg/ pkg/
COPY capiv1beta1/ capiv1beta1/

# Build
# the GOARCH has not a default value to allow the binary be built according to the host where the command
Expand Down
24 changes: 19 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Image URL to use all building/pushing image targets
IMG ?= controller:latest
# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
ENVTEST_K8S_VERSION = 1.30.0
ENVTEST_K8S_VERSION = 1.33.0

TOOLS_DIR := hack/tools

Expand Down Expand Up @@ -45,8 +45,11 @@ manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and Cust
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases

.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
generate: controller-gen conversion-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
$(CONTROLLER_GEN) object paths="./..."
$(CONVERSION_GEN) \
--output-file=zz_generated.conversion.go \
./api/v1alpha1

.PHONY: fmt
fmt: ## Run go fmt against code.
Expand All @@ -58,7 +61,8 @@ vet: ## Run go vet against code.

.PHONY: lint
lint: ## Run lint.
go run -modfile ./hack/tools/go.mod github.com/golangci/golangci-lint/v2/cmd/golangci-lint run
go run -modfile ./hack/tools/go.mod github.com/golangci/golangci-lint/v2/cmd/golangci-lint custom
./bin/golangci-lint-custom run

# Package names to test
WHAT ?= ./...
Expand Down Expand Up @@ -180,8 +184,12 @@ ENVTEST ?= $(LOCALBIN)/setup-envtest

## Tool Versions
KUSTOMIZE_VERSION ?= v5.0.0
CONTROLLER_TOOLS_VERSION ?= v0.16.5
ENVTEST_VERSION ?= 42a14a36c13b95dd6bc8b4ba69c181b16d50e3c0 # last version to support go1.24
CONTROLLER_TOOLS_VERSION ?= v0.18.0
ENVTEST_VERSION ?= 42a14a36c13b95dd6bc8b4ba69c181b16d50e3c0 # last version to support go1.24, don't update until we're on k8s/0.34

## Conversion gen
CONVERSION_GEN_VER := v0.33.3
CONVERSION_GEN := $(LOCALBIN)/conversion-gen

KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"
.PHONY: kustomize
Expand All @@ -199,6 +207,12 @@ $(CONTROLLER_GEN): $(LOCALBIN)
test -s $(LOCALBIN)/controller-gen && $(LOCALBIN)/controller-gen --version | grep -q $(CONTROLLER_TOOLS_VERSION) || \
GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)

.PHONY: conversion-gen
conversion-gen: $(CONVERSION_GEN) ## Download conversion-gen locally if necessary. If wrong version is installed, it will be overwritten.
$(CONVERSION_GEN): $(LOCALBIN)
test -s $(LOCALBIN)/conversion-gen && $(LOCALBIN)/conversion-gen | grep -q $(CONVERSION_GEN_VER) || \
GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/conversion-gen@$(CONVERSION_GEN_VER)

.PHONY: envtest
envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
$(ENVTEST): $(LOCALBIN)
Expand Down
29 changes: 29 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,33 @@ resources:
kind: ProxmoxClusterTemplate
path: github.com/ionos-cloud/cluster-api-provider-proxmox/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: cluster.x-k8s.io
group: infrastructure
kind: ProxmoxMachine
path: github.com/ionos-cloud/cluster-api-provider-proxmox/api/v1alpha2
version: v1alpha2
- api:
crdVersion: v1
namespaced: true
controller: true
domain: cluster.x-k8s.io
group: infrastructure
kind: ProxmoxCluster
path: github.com/ionos-cloud/cluster-api-provider-proxmox/api/v1alpha2
version: v1alpha2
webhooks:
defaulting: true
validation: true
webhookVersion: v2
- api:
crdVersion: v1
namespaced: true
domain: cluster.x-k8s.io
group: infrastructure
kind: ProxmoxMachineTemplate
path: github.com/ionos-cloud/cluster-api-provider-proxmox/api/v1alpha2
version: v1alpha2
version: "3"
30 changes: 21 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,27 @@ Check out the [quickstart guide](./docs/Usage.md#quick-start) for launching a cl
## Compatibility with Cluster API and Kubernetes Versions
This provider's versions are compatible with the following versions of Cluster API:

| | Cluster API v1beta1 (v1.4) | Cluster API v1beta1 (v1.5) | Cluster API v1beta1 (v1.6) | Cluster API v1beta1 (v1.7) | Cluster API v1beta1 (v1.8) | Cluster API v1beta1 (v1.9) |
|------------------------|:--------------------------:|:--------------------------:|:--------------------------:|:--------------------------:|:--------------------------:|:--------------------------:|
| CAPMOX v1alpha1 (v0.1) | ✓ | ✓ | ☓ | ☓ | ☓ | ☓ |
| CAPMOX v1alpha1 (v0.2) | ☓ | ✓ | ✓ | ☓ | ☓ | ☓ |
| CAPMOX v1alpha1 (v0.3) | ☓ | ✓ | ✓ | ✓ | ☓ | ☓ |
| CAPMOX v1alpha1 (v0.4) | ☓ | ✓ | ✓ | ✓ | ☓ | ☓ |
| CAPMOX v1alpha1 (v0.5) | ☓ | ☓ | ✓ | ✓ | ☓ | ☓ |
| CAPMOX v1alpha1 (v0.6) | ☓ | ☓ | ☓ | ✓ | ✓ | ☓ |
| CAPMOX v1alpha1 (v0.7) | ☓ | ☓ | ☓ | ☓ | ✓ | ✓ |
### CAPMOX v1alpha2 (current)

Cluster API v1beta2

| | CAPI v1.11 |
|-------------|:----------:|
| CAPMOX v0.8 | ✓ |

### CAPMOX v1alpha1 (obsolete)

Cluster API v1beta1

| | CAPI v1.4 | CAPI v1.5 | CAPI v1.6 | CAPI v1.7 | CAPI v1.8 | CAPI v1.9 | CAPI v1.10 |
|-------------|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:----------:|
| CAPMOX v0.1 | ✓ | ✓ | ☓ | ☓ | ☓ | ☓ | ☓ |
| CAPMOX v0.2 | ☓ | ✓ | ✓ | ☓ | ☓ | ☓ | ☓ |
| CAPMOX v0.3 | ☓ | ✓ | ✓ | ✓ | ☓ | ☓ | ☓ |
| CAPMOX v0.4 | ☓ | ✓ | ✓ | ✓ | ☓ | ☓ | ☓ |
| CAPMOX v0.5 | ☓ | ☓ | ✓ | ✓ | ☓ | ☓ | ☓ |
| CAPMOX v0.6 | ☓ | ☓ | ☓ | ✓ | ✓ | ☓ | ☓ |
| CAPMOX v0.7 | ☓ | ☓ | ☓ | ☓ | ✓ | ✓ | ✓ |

(See [Kubernetes support matrix](https://cluster-api.sigs.k8s.io/reference/versions.html) of Cluster API versions).

Expand Down
2 changes: 1 addition & 1 deletion api/v1alpha1/conditions_consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ limitations under the License.

package v1alpha1

import clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
import clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta1"

const (
// VMProvisionedCondition documents the status of the provisioning of a ProxmoxMachine and its underlying ProxmoxVM.
Expand Down
Loading
Loading