Release v0.10.0
Breaking API Changes
v0.10.0 is a major update which brings major changes to the API.
v1alpha5 is no longer served
If you are still using v1alpha5, this will not work in v0.10.0. However, for this release only objects are still defined in the CRDs and the code is still present, so as a temporary workaround it is possible to manually edit the CRDs to set versions.served to true for v1alpha5 objects. This is not tested, and we have low confidence that this will work without problems. Some manual effort may be required to check and fix automatically converted objects.
v1alpha6 and v1alpha7 are deprecated
v1alpha6 and v1alpha7 objects will be automatically converted to v1beta during use. This is well tested. We donβt anticipate problems with these conversions.
We will stop serving and testing v1alpha6 in the next release.
v1alpha7 is not marked deprecated in v0.10.0 to allow a switch-over period without deprecation warnings, but will be marked deprecated in the next release. Will will stop serving and testing it in a release after that.
You should update to use v1beta1 natively as soon as possible.
v1beta1 is released
v1beta1 marks a major update to the CAPO API. The specific changes from v1alpha7 are documented here: https://cluster-api-openstack.sigs.k8s.io/topics/crd-changes/v1alpha7-to-v1beta1
More than this, though, it marks an intention by the maintainers to stop making breaking changes. The API will continue to evolve, but we will make every effort to do this without introducing more backwards-incompatible changes.
Removal of hardcoded Calico CNI security group rules
This is documented more completely in the API upgrade documentation.
Prior to v1beta1, when using managed security groups we would automatically add certain rules which were specific to Calico CNI. It was not possible to add rules for any other CNI. A common way to work round this was to set allowAllInClusterTraffic: true
.
With v1beta1 there are no longer any implicit rules for any CNI. However, it is now possible to specify custom rules in the cluster spec which will be automatically added to managed security groups. Users of Calico CNI must now add these rules explicitly. Users of other CNIs now have the option of using managed security groups.
Calico CNI rules will be added automatically when upgrading to v1beta1 from a previous API version.
The Calico CNI rules have been added to the release templates, so for now creating a cluster with clusterctl will continue to have Calico rules when using the default templates.
Management cluster changes
Removal of MutatingWebhookConfiguration
CAPO no longer uses a mutating webhook, and its configuration is removed. If you upgrade your management cluster with clusterctl this will be handled correctly. If you do it manually you must ensure you remove the MutatingWebhookConfiguration capo-mutating-webhook-configuration
. If you do not you may see errors like the one in #1927.
Minimum management cluster version is now 1.25
v0.10.0 now uses https://kubernetes.io/docs/reference/using-api/cel/ for some API validations, which only became available without a feature gate in 1.25. Consequently we now require the management cluster to be at least k8s 1.25.
Highlighted new features
API Reference documentation
We now automatically publish API reference documentation! The documentation for v1beta1 can be found here: https://cluster-api-openstack.sigs.k8s.io/api/v1beta1/api
Floating IP IPAM Provider
It is now possible to allocate floating IPs for individual machines using the new Floating IP IPAM Provider documented here: https://cluster-api-openstack.sigs.k8s.io/api/v1alpha1/api#infrastructure.cluster.x-k8s.io/v1alpha1.OpenStackFloatingIPPool
Attach them to a machine via the new floatingIPPoolRef in OpenStackMachineSpec: https://cluster-api-openstack.sigs.k8s.io/api/v1beta1/api#infrastructure.cluster.x-k8s.io/v1beta1.OpenStackMachineSpec
What's Changed
New Features
- β¨ Add
flatcar-sysext
template to use regular Flatcar images by @tormath1 in #1776 - β¨ Add flags for configuring rate limits by @tobiasgiese in #1815
- β¨ Change API for OpenStackMachine.Spec.Image by @EmilienM in #1796
- β¨ Update CI to use OpenStack Bobcat by @EmilienM in #1804
- β¨ Allow AZs to be Omitted at Runtime by @spjmurray in #1769
- β¨ Support BYO dual-stack Network by @MaysaMacedo in #1789
- β¨ IPAM provider for floating ips by @bilbobrovall in #1763
- β¨ add TLS configuration flags by @tuminoid in #1867
- β¨ Adds MaxIPs to OpenstackFloatingIPPool by @bilbobrovall in #1862
- β¨ Re-work ports management by @EmilienM in #1788
- β¨ Add support to set
allocation_pools
for subnet by @dulek in https://github.com/kubernetes-sigs/cluster-api-provider- - β¨ Add API docs for v1alpha1 by @mdbooth in #1993
- β¨ Adds IPAM support for floating ips in OpenStackMachine by @bilbobrovall in #1762
- π Fall back to cluster identityRef in absence of machine identityRef by @stephenfin in #1768
- π± Enforce restricted pod security standards by @lentzi90 in #1895
- π Add API reference documentation generation by @alexandrevilain in #1702
- π Make LB additional ports security-group generation are dynamic by @huxcrux in #1918
- feat: add configurable loadbalancer network by @oblazek in #1922
- π Include more device_owners when looking for a port for floating ip by @bilbobrovall in #1996
Bug fixes
- π Don't apply worker SG to control plane machines by @stephenfin in #1785
- π Fix potential panic during instance create by @mandre in #1803
- π Fix patching OpenstackMachine's immutable spec during reconcile by @strudelPi in #1807
- π fix: skip port deletion when instances have no port by @dulek in #1818
- π Fix random instance port deletion by @zioc in #1753
- π Persist API FloatingIP immediately on creation by @mdbooth in #1829
- π controllers: do not return a RequeueAfter and an error at the same time by @EmilienM in #1839
- πFix a stacktrace in LB logic by removing listener name from an error message when not set by @huxcrux in #1853
- πMake sure that allowedCidrs lists are compared correctly to avoid patching LB listener when not needed by @huxcrux in #1854
- π Prevent the bastion to be removed before it's been disabled by @EmilienM in #1866
- π Ignore 'OS_*' environment variables by @stephenfin in #1883
- π Fix cluster network cleanup by @dulek in #1880
- π loadbalancer: resolve ControlPlaneEndpoint.Host when needed by @EmilienM in #1738
- π api/additionalPorts: don't create UDP rules by @EmilienM in #1899
- π v1alpha5: Fix panic in conversion when port has no binding profile by @mdbooth in #1949
- π Fix accidental parsing of password by @JanGutter in #1953
Documentation
- π± Update links in release docs by @lentzi90 in #1798
- fix: fix the block device type name in doc by @okozachenko1203 in #1865
- π± Fix doc references to NodeCIDR in v1alpha8 by @mdbooth in #1889
Administrative
- Remove Tobias and Sean as maintainer by @tobiasgiese in #1793
- Add emilienm to CAPO reviewers by @EmilienM in #1898
openstack/pull/1836
API changes
β οΈ Stop serving v1alpha5 by @mdbooth in #1888- π± Deprecate v1alpha6 by @EmilienM in #1900
- π Revert "Move FloatingIP to Bastion spec" by @mdbooth in #1778
β οΈ Add v1alpha8 by @EmilienM in #1782- β¨ New API for Server Groups by @stephenfin in #1779
- β¨ New API: OpenStackCluster.Spec.ExternalNetwork by @EmilienM in #1790
- β¨ Move subnet options to SubnetSpec by @dulek in #1856
- β¨ AllNodes security groups API by @EmilienM in #1826
- β¨ Modify OpenStackCluster.Spec.Network API by @MaysaMacedo in https://github.com/kubernetes-sigs/cluster-api-provider-
- β¨ Move
spec.allowAllInClusterTraffic
tospec.ManagedSecurityGroups
by @EmilienM in #1892 β οΈ Move FloatingIP to Bastion spec by @mdbooth in #1824β οΈ Convert ServerMetadata from a map to a list by @mdbooth in #1828- π api: openstackcluster.status default to false by @EmilienM in #1842
- π Adds Kind to ipaddress pool name index by @bilbobrovall in #1864
- OpenstackFloatingIPPool: Adds popped ip to claimedIPs #1869 by @bilbobrovall in #1870
- π Remove
IdentityRef.Kind
by @EmilienM in #1903
openstack/pull/1847 - π± Rename
v1alpha8
tov1beta1
by @EmilienM in #1902 β οΈ API cleanup of PortOpts by @mdbooth in #1914β οΈ Move CloudName into IdentityRef and make cluster IdentityRef required by @mdbooth in #1915- Transform neutron filter tags into lists by @EmilienM in #1909
β οΈ Rename fields to correctly do uppercase acronyms by @dulek in #1934β οΈ OpenStackCluster api general cleanup by @mdbooth in #1930β οΈ Cleanup APILoadBalancer by @mdbooth in #1937- π± Rename Ports fields in status by @mdbooth in #1938
β οΈ ImageFilter - add exclusive validation -> pointers by @dulek in #1939β οΈ Remove security group rules from status by @mdbooth in #1957- π± Update FloatingIPPool to use v1beta1 by @mdbooth in #1962
- π Fix server metadata length validation by @mdbooth in #1964
β οΈ Bastion cleanup by @dulek in #1959β οΈ Store []ResolvedPortSpec in ReferencedMachineResources by @mdbooth in #1951- π± Rename referencedResources and dependentResources by @mdbooth in #1965
β οΈ Resolved and Resources become optional pointer types by @mdbooth in #1967β οΈ NetworkFilter to NetworkParam by @mdbooth in #1972β οΈ SubnetFilter to SubnetParam by @mdbooth in #1971β οΈ SecurityGroupFilter to SecurityGroupParam by @mdbooth in #1974β οΈ Split ImageFilter into ImageParam by @mdbooth in #1970β οΈ RouterFilter to RouterParam by @mdbooth in #1978β οΈ Bastion is enabled by default if specified by @mdbooth in #1990β οΈ Move InstanceID from Spec to Status by @mdbooth in #1988β οΈ ServerGroupFilter to ServerGroupParam by @mdbooth in #1991- π Document changes to Filters by @mdbooth in #1982
- π Rules are optional in security group rules before v1beta1 by @mdbooth in #2000
- π Make floatingIPNetwork a pointer and if there's only one external network use it as default by @bilbobrovall in #1998
- π Document the change of instanceID in v1beta1 by @pierreprinetti in #2003
- Add opt to use AZ for APISeverLoadBalancer by @dulek in #2004
β οΈ Allow explicitly empty volume AZ by @mdbooth in #2008
Changes to build, test, and CI, minor changes, and code tidy ups
- β¨ Add API validation test framework by @mdbooth in #1919
- β¨ Add junit output to e2e tests by @mdbooth in #1935
- π± Make it possible to use a pre-created volume type in e2e tests by @maxrantil in #1766
- π Move flatcar-sysext to v1alpha8 by @EmilienM in #1812
- CI fixes by @mandre in #1820
- π± Bump e2e node images to v1.28.5 by @lentzi90 in #1823
- e2e: remove "allow-all-in-cluster-traffic" patch by @EmilienM in #1834
- π± Decrease number of machines in e2e tests by @lentzi90 in #1849
- Migrate Dockerfile to use golang 1.21 to match go.mod in project by @huxcrux in #1857
- π± test: bump Flatcar version by @tormath1 in #1858
- π± Import CAPI v1.6.0 by @EmilienM in #1731
- β¨ Bump Go to 1.22.0 by @EmilienM in #1877
- π± Improve method signatures of conversion functions by @mdbooth in #1813
- π± change how we register scheme as per capi 1.6 by @kranurag7 in #1797
- π± Bump controller-tools to v0.14.0 by @mdbooth in #1825
- π± Enhance Tilt integration with CAPO using a ClusterClass template by @maxrantil in #1833
- π Fill up OpenStack cluster ReferencedResources with Image ID by @EmilienM in #1845
- π± Update the dev-test ClusterClass by @lentzi90 in #1848
- π e2e: stop testing upgrades from v1alpha5 (v0.6) by @EmilienM in #1893
- π± E2E: Add clusterctl upgrade test for v0.9 -> main by @lentzi90 in #1894
- π e2e: bastion tests by @EmilienM in #1822
- π± Enhancements to how controller-gen is invoked by @mdbooth in #1911
- π± Reduce cyclomatic complexity of ReconcileLoadBalancer by @mdbooth in #1904
- π Remove logger from scope by @mdbooth in #1913
- π± Reduce cyclomatic complexity of reconcileNetworkComponents by @mdbooth in #1905
- π ci: fix upgrades by dropping cloudName by @EmilienM in #1916
- π± Move webhooks into pkg/webhooks by @mdbooth in #1920
- π± Split v1alpha6 & v1alpha7 conversion into multiple files by @mdbooth in #1923
β οΈ Simplify v1alpha6 cluster restorer by @mdbooth in #1925- Fix CRD generation by @mdbooth in #1928
- π± Allow generating api-docs for individual versions by @mdbooth in #1929
- π CI: Specify external network by name by @mdbooth in #1932
- π± Move filter conversions out of /api by @mdbooth in #1924
- π± Add .gitattributes to identify generated files to GitHub by @mdbooth in #1963
- test: bump Flatcar version by @tormath1 in #1936
- π Fix port name after port creation failure by @mdbooth in #1941
- π Fix a race when updating status before reconcile completes by @mdbooth in #1955
- π± Deduplicate AdoptMachinePorts and AdoptBastionPorts by @mdbooth in #1944
- π Revert accidental update to previous API templates by @mdbooth in #1966
- π Consolidate and fix v1beta1 fuzzer funcs by @mdbooth in #1981
- π Add fuzz tests for v1alpha5 conversion by @mdbooth in #1984
- π Fix v1alpha7 machine restorer and test by @mdbooth in #1987
- π Fix multiple panics in restore functions by @mdbooth in #1989
- π± Bump version artifacts for release-0.10 by @mdbooth in #1994
- π± Remove legacy v1alpha7 filterconvert utils by @mdbooth in #1992
- π± Minor improvements to api validation tests by @mdbooth in #2001
- π± Cleanup security group created by e2e test by @mdbooth in #2010
- π Don't try to resolve machine on delete if cluster not ready by @mdbooth in #2006
- π Fix idempotent restore when setting ControlPlaneEndpoint by @mdbooth in #2011
- π± Bump k8s dep to 0.29.3 by @mdbooth in #2014
- π Fix crash on delete with no bastion by @mdbooth in #2017
New Contributors
- @mandre made their first contribution in #1803
- @strudelPi made their first contribution in #1807
- @kranurag7 made their first contribution in #1797
- @zioc made their first contribution in #1753
- @bilbobrovall made their first contribution in #1763
- @JanGutter made their first contribution in #1953
- @oblazek made their first contribution in #1922
- @nguyenhuukhoi made their first contribution in #2004
Full Changelog: v0.9.0...v0.10.0