From 345ee00b71e41d73972192c31ceae681fb0c672b Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Mon, 7 Jul 2025 16:41:03 +0200 Subject: [PATCH] Fix broken links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- CONTRIBUTING.md | 2 +- docs/development.md | 2 +- .../20211006-supervisor-based-apis.md | 34 ++++++----- ...0220907-node-affinity-and-anti-affinity.md | 56 +++++++++---------- docs/proposal/20220929-ipam-support.md | 56 +++++++++---------- docs/proposal/20241003-data-disk-support.md | 40 +++++++------ hack/verify-licenses.sh | 4 +- test/infrastructure/vcsim/README.md | 6 +- test/infrastructure/vm-operator/README.md | 2 +- 9 files changed, 97 insertions(+), 105 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11b1387fd7..e3e6b82a7e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,7 @@ releases to fix CVEs and critical bugs if needed. ## Dependency Licence Management -Cluster API provider vSphere follows the [license policy of the CNCF](https://github.com/cncf/foundation/blob/main/allowed-third-party-license-policy.md). This sets limits on which +Cluster API provider vSphere follows the [license policy of the CNCF](https://github.com/cncf/foundation/blob/main/policies-guidance/allowed-third-party-license-policy.md). This sets limits on which licenses dependencies and other artifacts use. For go dependencies only dependencies listed in the `go.mod` are considered dependencies. This is in line with [how dependencies are reviewed in Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/vendor.md#reviewing-and-approving-dependency-changes). ### Contributor Ladder diff --git a/docs/development.md b/docs/development.md index 23ed28caff..357104f1e8 100644 --- a/docs/development.md +++ b/docs/development.md @@ -2,7 +2,7 @@ ## Using Tilt for rapid iteration -Follow the instructions to use [Tilt with Cluster API](https://cluster-api.sigs.k8s.io/developer/tilt.html) +Follow the instructions to use [Tilt with Cluster API](https://cluster-api.sigs.k8s.io/developer/core/tilt.html) For example, given a directory layout of diff --git a/docs/proposal/20211006-supervisor-based-apis.md b/docs/proposal/20211006-supervisor-based-apis.md index 6f61e51599..f57d0474e6 100644 --- a/docs/proposal/20211006-supervisor-based-apis.md +++ b/docs/proposal/20211006-supervisor-based-apis.md @@ -13,24 +13,22 @@ status: implementable ## Table of Contents -- [Title](#title) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Implementation History](#implementation-history) +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Implementation History](#implementation-history) ## Glossary diff --git a/docs/proposal/20220907-node-affinity-and-anti-affinity.md b/docs/proposal/20220907-node-affinity-and-anti-affinity.md index 4b75af0faf..e7a61226c0 100644 --- a/docs/proposal/20220907-node-affinity-and-anti-affinity.md +++ b/docs/proposal/20220907-node-affinity-and-anti-affinity.md @@ -15,35 +15,33 @@ status: proposed ## Table of Contents -* [Support for Node affinity and anti-affinity](#support-for-node-affinity-and-anti-affinity) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Future Work](#future-work) - * [Non-Goals](#non-goals) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Story 3](#story-3) - * [Requirements](#requirements) - * [Functional Requirements](#functional-requirements) - * [Non-Functional Requirements](#non-functional-requirements) - * [Overall Design](#overall-design) - * [Cluster Modules](#cluster-modules) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [API changes](#api-changes) - * [VSphereCluster CR](#vspherecluster-cr) - * [VSphereVM CR](#vspherevm-cr) - * [Implementation Details](#implementation-details) - * [VSphereCluster controller changes](#vspherecluster-controller-changes) - * [VSphereVM controller changes](#vspherevm-controller-changes) - * [VSphereMachine controller changes](#vspheremachine-controller-changes) - * [Node label controller changes](#node-label-controller-changes) - * [Feature flags](#feature-flags) - * [Upgrade Strategy](#upgrade-strategy) +* [Glossary](#glossary) +* [Summary](#summary) +* [Motivation](#motivation) + * [Goals](#goals) + * [Future Work](#future-work) + * [Non-Goals](#non-goals) +* [Proposal](#proposal) + * [User Stories](#user-stories) + * [Story 1](#story-1) + * [Story 2](#story-2) + * [Story 3](#story-3) + * [Requirements](#requirements) + * [Functional Requirements](#functional-requirements) + * [Non-Functional Requirements](#non-functional-requirements) + * [Overall Design](#overall-design) + * [Cluster Modules](#cluster-modules) + * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + * [API changes](#api-changes) + * [VSphereCluster CR](#vspherecluster-cr) + * [VSphereVM CR](#vspherevm-cr) + * [Implementation Details](#implementation-details) + * [VSphereCluster controller changes](#vspherecluster-controller-changes) + * [VSphereVM controller changes](#vspherevm-controller-changes) + * [VSphereMachine controller changes](#vspheremachine-controller-changes) + * [Node label controller changes](#node-label-controller-changes) + * [Feature flags](#feature-flags) + * [Upgrade Strategy](#upgrade-strategy) ## Glossary diff --git a/docs/proposal/20220929-ipam-support.md b/docs/proposal/20220929-ipam-support.md index 059790479e..3b252cf11f 100644 --- a/docs/proposal/20220929-ipam-support.md +++ b/docs/proposal/20220929-ipam-support.md @@ -21,35 +21,33 @@ status: Implementable ## Table of Contents -- [CAPV IPAM Support](#capv-ipam-support) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [API Changes](#api-changes) - - [VSphereVM Controller Changes](#vspherevm-controller-changes) - - [Owner Reference and Finalizer](#owner-reference-and-finalizer) - - [Flavors](#flavors) - - [Validation](#validation) - - [Nameservers](#nameservers) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan](#test-plan) - - [Graduation Criteria](#graduation-criteria) - - [Version Skew Strategy](#version-skew-strategy) - - [References](#references) - - [Implementation History](#implementation-history) +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [API Changes](#api-changes) + - [VSphereVM Controller Changes](#vspherevm-controller-changes) + - [Owner Reference and Finalizer](#owner-reference-and-finalizer) + - [Flavors](#flavors) + - [Validation](#validation) + - [Nameservers](#nameservers) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Version Skew Strategy](#version-skew-strategy) +- [References](#references) +- [Implementation History](#implementation-history) ## Glossary diff --git a/docs/proposal/20241003-data-disk-support.md b/docs/proposal/20241003-data-disk-support.md index 4150daf6b2..b7c8f63391 100644 --- a/docs/proposal/20241003-data-disk-support.md +++ b/docs/proposal/20241003-data-disk-support.md @@ -16,26 +16,24 @@ status: implementable ## Table of Contents -* [CAPV ControlPlane Failure Domain](#capv-controlplane-failure-domain) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Requirements](#requirements) - * [Functional Requirements](#functional-requirements) - * [Overall Design](#overall-design) - * [For User Story 1](#for-user-story-1) - * [For User Story 2](#for-user-story-2) - * [API Design](#api-design) - * [Implementation Details](#implementation-details) - * [Notes/Constraints](#notesconstraints) - * [Upgrade Strategy](#upgrade-strategy) +* [Glossary](#glossary) +* [Summary](#summary) +* [Motivation](#motivation) + * [Goals](#goals) + * [Non-Goals/Future Work](#non-goalsfuture-work) +* [Proposal](#proposal) + * [User Stories](#user-stories) + * [Story 1](#story-1) + * [Story 2](#story-2) + * [Requirements](#requirements) + * [Functional Requirements](#functional-requirements) + * [Overall Design](#overall-design) + * [For User Story 1](#for-user-story-1) + * [For User Story 2](#for-user-story-2) + * [API Design](#api-design) + * [Implementation Details](#implementation-details) + * [Notes/Constraints](#notesconstraints) +* [Upgrade Strategy](#upgrade-strategy) ## Glossary @@ -245,4 +243,4 @@ If an existing template is modified, you will be greeted by an error message sim >vspheremachinetemplates.infrastructure.cluster.x-k8s.io "test-machine-template" was not valid: spec.template.spec: Invalid value: v1beta1.VSphereMachineTemplate{TypeMeta:v1.TypeMeta{Kind:"VSphereMachineTemplate", APIVersion:"infrastructure.cluster.x-k8s.io/v1beta1"}, ObjectMeta:v1.ObjectMeta{Name:"test-machine-template", GenerateName:"", Namespace:"openshift-cluster-api", SelfLink:"", UID:"7467ba3f-758e-4873-afc3-4b8ece9da737", ResourceVersion:"92227", Generation:2, CreationTimestamp:time.Date(2024, time.October, 31, 14, 35, 9, 0, time.Local), DeletionTimestamp:, DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference{v1.OwnerReference{APIVersion:"cluster.x-k8s.io/v1beta1", Kind:"Cluster", Name:"ngirard-multi-qxkhh", UID:"7c3030d9-8caa-40e2-a62c-db16d0749fb5", Controller:(*bool)(nil), BlockOwnerDeletion:(*bool)(nil)}}, Finalizers:[]string(nil), ManagedFields:[]v1.ManagedFieldsEntry{v1.ManagedFieldsEntry{Manager:"kubectl-create", Operation:"Update", APIVersion:"infrastructure.cluster.x-k8s.io/v1beta1", Time:time.Date(2024, time.October, 31, 14, 35, 9, 0, time.Local), FieldsType:"FieldsV1", FieldsV1:(*v1.FieldsV1)(0xc000ace450), Subresource:""}, v1.ManagedFieldsEntry{Manager:"cluster-api-controller-manager", Operation:"Update", APIVersion:"infrastructure.cluster.x-k8s.io/v1beta1", Time:time.Date(2024, time.October, 31, 14, 35, 58, 0, time.Local), FieldsType:"FieldsV1", FieldsV1:(*v1.FieldsV1)(0xc000ace4e0), Subresource:""}, v1.ManagedFieldsEntry{Manager:"kubectl-edit", Operation:"Update", APIVersion:"infrastructure.cluster.x-k8s.io/v1beta1", Time:time.Date(2024, time.November, 4, 13, 31, 33, 0, time.Local), FieldsType:"FieldsV1", FieldsV1:(*v1.FieldsV1)(0xc000ace510), Subresource:""}}}, Spec:v1beta1.VSphereMachineTemplateSpec{Template:v1beta1.VSphereMachineTemplateResource{ObjectMeta:v1beta1.ObjectMeta{Labels:map[string]string(nil), Annotations:map[string]string(nil)}, Spec:v1beta1.VSphereMachineSpec{VirtualMachineCloneSpec:v1beta1.VirtualMachineCloneSpec{Template:"CAPV_2_Disk", CloneMode:"linkedClone", Snapshot:"", Server:"vcenter.ci.ibmc.devcluster.openshift.com", Thumbprint:"", Datacenter:"cidatacenter", Folder:"/cidatacenter/vm/ngirard-multi-qxkhh", Datastore:"/cidatacenter/datastore/vsanDatastore", StoragePolicyName:"", ResourcePool:"/cidatacenter/host/cicluster", Network:v1beta1.NetworkSpec{Devices:[]v1beta1.NetworkDeviceSpec{v1beta1.NetworkDeviceSpec{NetworkName:"ci-vlan-1240", DeviceName:"", DHCP4:true, DHCP6:false, Gateway4:"", Gateway6:"", IPAddrs:[]string(nil), MTU:(*int64)(nil), MACAddr:"", Nameservers:[]string(nil), Routes:[]v1beta1.NetworkRouteSpec(nil), SearchDomains:[]string(nil), AddressesFromPools:[]v1.TypedLocalObjectReference(nil), DHCP4Overrides:(*v1beta1.DHCPOverrides)(nil), DHCP6Overrides:(*v1beta1.DHCPOverrides)(nil), SkipIPAllocation:false}}, Routes:[]v1beta1.NetworkRouteSpec(nil), PreferredAPIServerCIDR:""}, NumCPUs:4, NumCoresPerSocket:0, MemoryMiB:16384, DiskGiB:128, AdditionalDisksGiB:[]int32(nil), CustomVMXKeys:map[string]string(nil), TagIDs:[]string(nil), PciDevices:[]v1beta1.PCIDeviceSpec(nil), OS:"", HardwareVersion:"", DataDisks:[]v1beta1.VSphereDisk{v1beta1.VSphereDisk{Name:"", SizeGiB:69}, v1beta1.VSphereDisk{Name:"", SizeGiB:27}}}, ProviderID:(*string)(nil), FailureDomain:(*string)(nil), PowerOffMode:"hard", GuestSoftPowerOffTimeout:(*v1.Duration)(nil)}}}}: VSphereMachineTemplate spec.template.spec field is immutable. Please create a new resource instead. -This is why existing templates will need to be recreated if attempting to add data disks to the definition. \ No newline at end of file +This is why existing templates will need to be recreated if attempting to add data disks to the definition. diff --git a/hack/verify-licenses.sh b/hack/verify-licenses.sh index efe89fe85e..b6395c1442 100755 --- a/hack/verify-licenses.sh +++ b/hack/verify-licenses.sh @@ -22,7 +22,7 @@ if [[ "${TRACE-0}" == "1" ]]; then set -o xtrace fi -# This list is from https://github.com/cncf/foundation/blob/main/allowed-third-party-license-policy.md +# This list is from https://github.com/cncf/foundation/blob/main/policies-guidance/allowed-third-party-license-policy.md CNCF_LICENSE_ALLOWLIST=Apache-2.0,MIT,BSD-2-Clause,SD-2-Clause-FreeBSD,BSD-3-Clause,ISC,Python-2.0,PostgreSQL,X11,Zlib VERSION=${1} @@ -35,4 +35,4 @@ TRIVY="${REPO_ROOT}/hack/tools/bin/trivy/${VERSION}/trivy" $TRIVY filesystem . --license-full --ignored-licenses ${CNCF_LICENSE_ALLOWLIST} --scanners license --severity UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL -f json | \ # Specifically ignore 'github.com/hashicorp/hcl'. This is a known indirect dependency that we should remove where possible. # This query ensures we only skip github.com/hashicorp/hcl for as long as the license remains MPL-2.0 -jq '.Results[] | select( .Licenses[]?.PkgName == "github.com/hashicorp/hcl" and .Licenses[]?.Name == "MPL-2.0" | not) | if . == {} then . else error(.) end' \ No newline at end of file +jq '.Results[] | select( .Licenses[]?.PkgName == "github.com/hashicorp/hcl" and .Licenses[]?.Name == "MPL-2.0" | not) | if . == {} then . else error(.) end' diff --git a/test/infrastructure/vcsim/README.md b/test/infrastructure/vcsim/README.md index f49ac67395..af5afb6689 100644 --- a/test/infrastructure/vcsim/README.md +++ b/test/infrastructure/vcsim/README.md @@ -9,7 +9,7 @@ vcsim controller is a regular Kubernetes controller designed to be run aside to as a target infrastructure instead of a real vCenter. It is also worth to notice that vcsim controller leverages several components from Cluster API's in-memory -provider, and thus it is recommended to become familiar with this [document](https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/inmemory/README.md) +provider, and thus it is recommended to become familiar with this [document](https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/docker/internal/controllers/backends/inmemory/README.md) before reading the following paragraphs. ### Preparing a test environment (using vcsim) @@ -191,13 +191,13 @@ runtime extension, so it is possible to deploy it leveraging on the existing mac After starting tilt with `make tilt-up`, you can use the [vcsim.sh](scripts/vcsim.sh) script and the instruction above to create a test cluster. -See [Developing Cluster API with Tilt](https://cluster-api.sigs.k8s.io/developer/tilt) for more details. +See [Developing Cluster API with Tilt](https://cluster-api.sigs.k8s.io/developer/core/tilt) for more details. ### E2E tests vsim can be used to run a subset of CAPV E2E tests that can be executed by setting `GINKGO_FOCUS="\[vcsim\]"`. -See [Running the end-to-end tests locally](https://cluster-api.sigs.k8s.io/developer/testing#running-the-end-to-end-tests-locally) for more details. +See [Running the end-to-end tests locally](https://cluster-api.sigs.k8s.io/developer/core/testing#running-the-end-to-end-tests-locally) for more details. Note: The code for the E2E test setup will take care of creating the `VCenterSimulator`, the `ControlPlaneEndpoint` and to grab required variables from the corresponding `EnvVar`. diff --git a/test/infrastructure/vm-operator/README.md b/test/infrastructure/vm-operator/README.md index a3f50b36a3..6a4a52629a 100644 --- a/test/infrastructure/vm-operator/README.md +++ b/test/infrastructure/vm-operator/README.md @@ -84,7 +84,7 @@ NOTE: net-operator is not represented for sake of simplicity, it is complementar A subset of CAPV E2E tests can be executed using the supervisor mode by setting `GINKGO_FOCUS="\[supervisor\]"`. -See [Running the end-to-end tests locally](https://cluster-api.sigs.k8s.io/developer/testing#running-the-end-to-end-tests-locally) for more details. +See [Running the end-to-end tests locally](https://cluster-api.sigs.k8s.io/developer/core/testing#running-the-end-to-end-tests-locally) for more details. Note: The code responsible for E2E tests setup will take care of ensuring the management cluster and vCenter have all the dependencies required by the vm-operator; The only exception is the Content Library with