├── .dockerignore ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yaml │ ├── failing_test.yaml │ ├── feature_request.yaml │ ├── flaking_test.yaml │ ├── kubernetes_bump.md │ └── release_tracking.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yaml └── workflows │ ├── pr-dependabot.yaml │ ├── pr-gh-workflow-approve.yaml │ ├── pr-golangci-lint.yaml │ ├── pr-md-link-check.yaml │ ├── pr-verify.yaml │ ├── release.yaml │ ├── weekly-md-link-check.yaml │ ├── weekly-security-scan.yaml │ └── weekly-test-release.yaml ├── .gitignore ├── .golangci-kal.yml ├── .golangci.yml ├── .markdownlinkcheck.json ├── CHANGELOG ├── OWNERS ├── README.md ├── v1.10.0-beta.0.md ├── v1.10.0-beta.1.md ├── v1.10.0-rc.0.md ├── v1.10.0-rc.1.md ├── v1.10.0.md ├── v1.10.1.md ├── v1.10.2.md ├── v1.11.0-alpha.0.md ├── v1.4.6.md ├── v1.4.7.md ├── v1.4.8.md ├── v1.4.9.md ├── v1.5.1.md ├── v1.5.2.md ├── v1.5.3.md ├── v1.5.4.md ├── v1.5.5.md ├── v1.5.6.md ├── v1.5.7.md ├── v1.5.8.md ├── v1.6.0-beta.0.md ├── v1.6.0-beta.1.md ├── v1.6.0-rc.0.md ├── v1.6.0-rc.1.md ├── v1.6.0.md ├── v1.6.1.md ├── v1.6.2.md ├── v1.6.3.md ├── v1.6.4.md ├── v1.6.5.md ├── v1.6.6.md ├── v1.6.7.md ├── v1.6.8.md ├── v1.7.0-beta.0.md ├── v1.7.0-beta.1.md ├── v1.7.0-rc.0.md ├── v1.7.0-rc.1.md ├── v1.7.0.md ├── v1.7.1.md ├── v1.7.2.md ├── v1.7.3.md ├── v1.7.4.md ├── v1.7.5.md ├── v1.7.6.md ├── v1.7.7.md ├── v1.7.8.md ├── v1.7.9.md ├── v1.8.0-beta.0.md ├── v1.8.0-beta.1.md ├── v1.8.0-rc.0.md ├── v1.8.0-rc.1.md ├── v1.8.0.md ├── v1.8.1.md ├── v1.8.10.md ├── v1.8.11.md ├── v1.8.12.md ├── v1.8.2.md ├── v1.8.3.md ├── v1.8.4.md ├── v1.8.5.md ├── v1.8.6.md ├── v1.8.7.md ├── v1.8.8.md ├── v1.8.9.md ├── v1.9.0-beta.0.md ├── v1.9.0-beta.1.md ├── v1.9.0-rc.0.md ├── v1.9.0-rc.1.md ├── v1.9.0.md ├── v1.9.1.md ├── v1.9.2.md ├── v1.9.3.md ├── v1.9.4.md ├── v1.9.5.md ├── v1.9.6.md ├── v1.9.7.md └── v1.9.8.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Makefile ├── OWNERS ├── OWNERS_ALIASES ├── README.md ├── REVIEWING.md ├── SECURITY_CONTACTS ├── Tiltfile ├── api ├── .import-restrictions ├── addons │ ├── v1beta1 │ │ ├── .import-restrictions │ │ ├── clusterresourceset_types.go │ │ ├── clusterresourcesetbinding_types.go │ │ ├── clusterresourcesetbinding_types_test.go │ │ ├── condition_consts.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── v1beta2_condition_consts.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ └── v1beta2 │ │ ├── clusterresourceset_types.go │ │ ├── clusterresourcesetbinding_types.go │ │ ├── clusterresourcesetbinding_types_test.go │ │ ├── conversion.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── v1beta1_condition_consts.go │ │ └── zz_generated.deepcopy.go ├── bootstrap │ └── kubeadm │ │ ├── v1beta1 │ │ ├── .import-restrictions │ │ ├── condition_consts.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── kubeadm_types.go │ │ ├── kubeadm_types_test.go │ │ ├── kubeadmconfig_types.go │ │ ├── kubeadmconfigtemplate_types.go │ │ ├── v1beta2_condition_consts.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ │ └── v1beta2 │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── kubeadm_types.go │ │ ├── kubeadm_types_test.go │ │ ├── kubeadmconfig_types.go │ │ ├── kubeadmconfigtemplate_types.go │ │ ├── v1beta1_condition_consts.go │ │ └── zz_generated.deepcopy.go ├── controlplane │ └── kubeadm │ │ ├── v1beta1 │ │ ├── .import-restrictions │ │ ├── condition_consts.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── kubeadm_control_plane_types.go │ │ ├── kubeadmcontrolplanetemplate_types.go │ │ ├── v1beta2_condition_consts.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ │ └── v1beta2 │ │ ├── conversion.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── kubeadm_control_plane_types.go │ │ ├── kubeadmcontrolplanetemplate_types.go │ │ ├── v1beta1_condition_consts.go │ │ └── zz_generated.deepcopy.go ├── core │ ├── v1beta1 │ │ ├── .import-restrictions │ │ ├── cluster_phase_types.go │ │ ├── cluster_types.go │ │ ├── cluster_types_test.go │ │ ├── clusterclass_types.go │ │ ├── common_types.go │ │ ├── condition_consts.go │ │ ├── condition_types.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── machine_phase_types.go │ │ ├── machine_types.go │ │ ├── machinedeployment_types.go │ │ ├── machinedrainrules_types.go │ │ ├── machinehealthcheck_types.go │ │ ├── machinepool_types.go │ │ ├── machineset_types.go │ │ ├── v1beta2_condition_consts.go │ │ ├── zz_generated.conversion.go │ │ ├── zz_generated.deepcopy.go │ │ └── zz_generated.openapi.go │ └── v1beta2 │ │ ├── cluster_phase_types.go │ │ ├── cluster_types.go │ │ ├── clusterclass_types.go │ │ ├── common_types.go │ │ ├── condition_consts.go │ │ ├── condition_types.go │ │ ├── conversion.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── index │ │ ├── .import-restrictions │ │ ├── cluster.go │ │ ├── cluster_test.go │ │ ├── index.go │ │ ├── machine.go │ │ ├── machine_test.go │ │ ├── machinepool.go │ │ ├── machinepool_test.go │ │ ├── node.go │ │ └── node_test.go │ │ ├── machine_phase_types.go │ │ ├── machine_types.go │ │ ├── machinedeployment_types.go │ │ ├── machinedrainrules_types.go │ │ ├── machinehealthcheck_types.go │ │ ├── machinepool_types.go │ │ ├── machineset_types.go │ │ ├── v1beta1_condition_consts.go │ │ ├── zz_generated.deepcopy.go │ │ └── zz_generated.openapi.go ├── ipam │ ├── v1alpha1 │ │ ├── .import-restrictions │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── ipaddress_types.go │ │ ├── ipaddressclaim_types.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ ├── v1beta1 │ │ ├── .import-restrictions │ │ ├── condition_consts.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── ipaddress_types.go │ │ ├── ipaddressclaim_types.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ └── v1beta2 │ │ ├── conversion.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── ipaddress_types.go │ │ ├── ipaddressclaim_types.go │ │ ├── v1beta1_condition_consts.go │ │ └── zz_generated.deepcopy.go └── runtime │ ├── hooks │ └── v1alpha1 │ │ ├── common_types.go │ │ ├── discovery_types.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── lifecyclehooks_types.go │ │ ├── topologymutation_types.go │ │ ├── topologymutation_variable_types.go │ │ ├── zz_generated.deepcopy.go │ │ └── zz_generated.openapi.go │ ├── v1alpha1 │ ├── .import-restrictions │ ├── conversion.go │ ├── conversion_test.go │ ├── doc.go │ ├── extensionconfig_types.go │ ├── groupversion_info.go │ ├── zz_generated.conversion.go │ └── zz_generated.deepcopy.go │ └── v1beta2 │ ├── conversion.go │ ├── doc.go │ ├── extensionconfig_types.go │ ├── groupversion_info.go │ └── zz_generated.deepcopy.go ├── bootstrap ├── kubeadm │ ├── OWNERS │ ├── config │ │ ├── certmanager │ │ │ ├── certificate.yaml │ │ │ ├── kustomization.yaml │ │ │ └── kustomizeconfig.yaml │ │ ├── crd │ │ │ ├── bases │ │ │ │ ├── bootstrap.cluster.x-k8s.io_kubeadmconfigs.yaml │ │ │ │ └── bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yaml │ │ │ ├── kustomization.yaml │ │ │ ├── kustomizeconfig.yaml │ │ │ └── patches │ │ │ │ ├── webhook_in_kubeadmconfigs.yaml │ │ │ │ └── webhook_in_kubeadmconfigtemplates.yaml │ │ ├── default │ │ │ ├── kustomization.yaml │ │ │ ├── manager_image_patch.yaml │ │ │ ├── manager_pull_policy.yaml │ │ │ ├── manager_webhook_patch.yaml │ │ │ ├── namespace.yaml │ │ │ └── webhookcainjection_patch.yaml │ │ ├── manager │ │ │ ├── kustomization.yaml │ │ │ └── manager.yaml │ │ ├── rbac │ │ │ ├── kustomization.yaml │ │ │ ├── leader_election_role.yaml │ │ │ ├── leader_election_role_binding.yaml │ │ │ ├── role.yaml │ │ │ ├── role_binding.yaml │ │ │ └── service_account.yaml │ │ └── webhook │ │ │ ├── kustomization.yaml │ │ │ ├── kustomizeconfig.yaml │ │ │ ├── manifests.yaml │ │ │ └── service.yaml │ ├── controllers │ │ ├── alias.go │ │ └── doc.go │ ├── internal │ │ ├── builder │ │ │ ├── builders.go │ │ │ └── doc.go │ │ ├── cloudinit │ │ │ ├── boot_commands.go │ │ │ ├── cloudinit.go │ │ │ ├── cloudinit_test.go │ │ │ ├── commands.go │ │ │ ├── controlplane_init.go │ │ │ ├── controlplane_join.go │ │ │ ├── controlplane_test.go │ │ │ ├── disk_setup.go │ │ │ ├── doc.go │ │ │ ├── files.go │ │ │ ├── fs_setup.go │ │ │ ├── mounts.go │ │ │ ├── node.go │ │ │ ├── node_test.go │ │ │ ├── ntp.go │ │ │ ├── users.go │ │ │ └── utils.go │ │ ├── controllers │ │ │ ├── doc.go │ │ │ ├── kubeadmconfig_controller.go │ │ │ ├── kubeadmconfig_controller_reconciler_test.go │ │ │ ├── kubeadmconfig_controller_test.go │ │ │ ├── suite_test.go │ │ │ └── token.go │ │ ├── ignition │ │ │ ├── OWNERS │ │ │ ├── clc │ │ │ │ ├── clc.go │ │ │ │ └── clc_test.go │ │ │ ├── ignition.go │ │ │ └── ignition_test.go │ │ ├── locking │ │ │ ├── control_plane_init_mutex.go │ │ │ └── control_plane_init_mutex_test.go │ │ └── webhooks │ │ │ ├── doc.go │ │ │ ├── kubeadmconfig.go │ │ │ ├── kubeadmconfig_test.go │ │ │ ├── kubeadmconfigtemplate.go │ │ │ └── kubeadmconfigtemplate_test.go │ ├── main.go │ ├── types │ │ ├── README.md │ │ ├── doc.go │ │ ├── upstreamv1beta1 │ │ │ ├── bootstraptokenstring.go │ │ │ ├── bootstraptokenstring_test.go │ │ │ ├── conversion.go │ │ │ ├── conversion_no_fuzz_test.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── upstreamv1beta2 │ │ │ ├── bootstraptokenstring.go │ │ │ ├── bootstraptokenstring_test.go │ │ │ ├── conversion.go │ │ │ ├── conversion_no_fuzz_test.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── upstreamv1beta3 │ │ │ ├── bootstraptokenstring.go │ │ │ ├── bootstraptokenstring_test.go │ │ │ ├── conversion.go │ │ │ ├── conversion_no_fuzz_test.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── upstreamv1beta4 │ │ │ ├── bootstraptokenstring.go │ │ │ ├── bootstraptokenstring_test.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── utils.go │ │ └── utils_test.go │ └── webhooks │ │ ├── alias.go │ │ └── doc.go └── util │ ├── configowner.go │ ├── configowner_test.go │ └── suite_test.go ├── cloudbuild-nightly.yaml ├── cloudbuild.yaml ├── cmd └── clusterctl │ ├── Dockerfile │ ├── OWNERS │ ├── README.md │ ├── api │ ├── .import-restrictions │ └── v1alpha3 │ │ ├── annotations.go │ │ ├── groupversion_info.go │ │ ├── labels.go │ │ ├── metadata_type.go │ │ ├── metadata_type_test.go │ │ ├── provider_type.go │ │ ├── provider_type_test.go │ │ └── zz_generated.deepcopy.go │ ├── client │ ├── alias.go │ ├── alpha │ │ ├── client.go │ │ ├── doc.go │ │ ├── kubeadmcontrolplane.go │ │ ├── machinedeployment.go │ │ ├── rollout.go │ │ ├── rollout_pauser.go │ │ ├── rollout_pauser_test.go │ │ ├── rollout_restarter.go │ │ ├── rollout_restarter_test.go │ │ ├── rollout_resumer.go │ │ └── rollout_resumer_test.go │ ├── client.go │ ├── client_test.go │ ├── cluster │ │ ├── assets │ │ │ ├── cert-manager-test-resources.yaml │ │ │ └── topology-test │ │ │ │ ├── existing-my-cluster.yaml │ │ │ │ ├── existing-my-second-cluster.yaml │ │ │ │ ├── mock-CRDs.yaml │ │ │ │ ├── modified-CP-dockermachinepooltemplate.yaml │ │ │ │ ├── modified-CP-dockermachinetemplate.yaml │ │ │ │ ├── modified-my-cluster.yaml │ │ │ │ ├── my-cluster-class.yaml │ │ │ │ ├── new-clusterclass-and-cluster.yaml │ │ │ │ └── objects-in-different-namespaces.yaml │ │ ├── cert_manager.go │ │ ├── cert_manager_test.go │ │ ├── client.go │ │ ├── client_test.go │ │ ├── components.go │ │ ├── components_test.go │ │ ├── crd_migration.go │ │ ├── crd_migration_test.go │ │ ├── doc.go │ │ ├── installer.go │ │ ├── installer_test.go │ │ ├── inventory.go │ │ ├── inventory_test.go │ │ ├── mover.go │ │ ├── mover_test.go │ │ ├── objectgraph.go │ │ ├── objectgraph_test.go │ │ ├── ownergraph.go │ │ ├── proxy.go │ │ ├── proxy_test.go │ │ ├── template.go │ │ ├── template_test.go │ │ ├── upgrader.go │ │ ├── upgrader_info.go │ │ ├── upgrader_info_test.go │ │ ├── upgrader_test.go │ │ ├── workload_cluster.go │ │ └── workload_cluster_test.go │ ├── clusterclass.go │ ├── clusterclass_test.go │ ├── common.go │ ├── common_test.go │ ├── config.go │ ├── config │ │ ├── cert_manager.go │ │ ├── cert_manager_client.go │ │ ├── cert_manager_client_test.go │ │ ├── client.go │ │ ├── doc.go │ │ ├── imagemeta_client.go │ │ ├── imagemeta_client_test.go │ │ ├── provider.go │ │ ├── providers_client.go │ │ ├── providers_client_test.go │ │ ├── reader_memory.go │ │ ├── reader_memory_test.go │ │ ├── reader_viper.go │ │ ├── reader_viper_test.go │ │ ├── variables_client.go │ │ └── variables_client_test.go │ ├── config_test.go │ ├── delete.go │ ├── delete_test.go │ ├── describe.go │ ├── doc.go │ ├── generate_provider.go │ ├── get_kubeconfig.go │ ├── get_kubeconfig_test.go │ ├── init.go │ ├── init_test.go │ ├── move.go │ ├── move_test.go │ ├── repository │ │ ├── client.go │ │ ├── client_test.go │ │ ├── clusterclass_client.go │ │ ├── clusterclass_client_test.go │ │ ├── components.go │ │ ├── components_client.go │ │ ├── components_client_test.go │ │ ├── components_test.go │ │ ├── doc.go │ │ ├── metadata_client.go │ │ ├── metadata_client_test.go │ │ ├── overrides.go │ │ ├── overrides_test.go │ │ ├── repository_github.go │ │ ├── repository_github_test.go │ │ ├── repository_gitlab.go │ │ ├── repository_gitlab_test.go │ │ ├── repository_local.go │ │ ├── repository_local_test.go │ │ ├── repository_memory.go │ │ ├── repository_memory_test.go │ │ ├── repository_versions.go │ │ ├── template.go │ │ ├── template_client.go │ │ ├── template_client_test.go │ │ └── template_test.go │ ├── rollout.go │ ├── rollout_test.go │ ├── tree │ │ ├── annotations.go │ │ ├── discovery.go │ │ ├── discovery_test.go │ │ ├── doc.go │ │ ├── node_object.go │ │ ├── options.go │ │ ├── tree.go │ │ ├── tree_test.go │ │ └── util.go │ ├── upgrade.go │ ├── upgrade_test.go │ └── yamlprocessor │ │ ├── processor.go │ │ ├── simple_processor.go │ │ └── simple_processor_test.go │ ├── cmd │ ├── alpha.go │ ├── completion.go │ ├── config.go │ ├── config_repositories.go │ ├── config_repositories_test.go │ ├── delete.go │ ├── describe.go │ ├── describe_cluster.go │ ├── doc.go │ ├── generate.go │ ├── generate_cluster.go │ ├── generate_provider.go │ ├── generate_yaml.go │ ├── generate_yaml_test.go │ ├── get.go │ ├── get_kubeconfig.go │ ├── init.go │ ├── init_list_images.go │ ├── internal │ │ └── templates │ │ │ └── normalizers.go │ ├── move.go │ ├── rollout.go │ ├── rollout │ │ ├── pause.go │ │ ├── restart.go │ │ └── resume.go │ ├── root.go │ ├── upgrade.go │ ├── upgrade_apply.go │ ├── upgrade_plan.go │ ├── util.go │ ├── version.go │ ├── version_checker.go │ └── version_checker_test.go │ ├── config │ ├── crd │ │ ├── bases │ │ │ ├── clusterctl.cluster.x-k8s.io_metadata.yaml │ │ │ └── clusterctl.cluster.x-k8s.io_providers.yaml │ │ └── kustomization.yaml │ ├── embedded_manifest.go │ └── manifest │ │ └── clusterctl-api.yaml │ ├── hack │ └── create-local-repository.py │ ├── internal │ ├── scheme │ │ └── scheme.go │ ├── test │ │ ├── doc.go │ │ ├── fake_github.go │ │ ├── fake_objects.go │ │ ├── fake_processor.go │ │ ├── fake_proxy.go │ │ ├── fake_reader.go │ │ ├── fake_variable_client.go │ │ └── providers │ │ │ ├── bootstrap │ │ │ ├── generic_types.go │ │ │ ├── groupversion_info.go │ │ │ └── zz_generated.deepcopy.go │ │ │ ├── controlplane │ │ │ ├── generic_types.go │ │ │ ├── groupversion_info.go │ │ │ └── zz_generated.deepcopy.go │ │ │ ├── external │ │ │ ├── generic_types.go │ │ │ ├── groupversion_info.go │ │ │ └── zz_generated.deepcopy.go │ │ │ └── infrastructure │ │ │ ├── generic_types.go │ │ │ ├── groupversion_info.go │ │ │ └── zz_generated.deepcopy.go │ └── util │ │ ├── doc.go │ │ ├── obj_refs.go │ │ ├── obj_refs_test.go │ │ ├── objs.go │ │ └── objs_test.go │ ├── log │ ├── doc.go │ ├── log.go │ ├── logger.go │ ├── logger_test.go │ └── util.go │ └── main.go ├── code-of-conduct.md ├── config ├── certmanager │ ├── certificate.yaml │ ├── kustomization.yaml │ └── kustomizeconfig.yaml ├── crd │ ├── bases │ │ ├── addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml │ │ ├── addons.cluster.x-k8s.io_clusterresourcesets.yaml │ │ ├── cluster.x-k8s.io_clusterclasses.yaml │ │ ├── cluster.x-k8s.io_clusters.yaml │ │ ├── cluster.x-k8s.io_machinedeployments.yaml │ │ ├── cluster.x-k8s.io_machinedrainrules.yaml │ │ ├── cluster.x-k8s.io_machinehealthchecks.yaml │ │ ├── cluster.x-k8s.io_machinepools.yaml │ │ ├── cluster.x-k8s.io_machines.yaml │ │ ├── cluster.x-k8s.io_machinesets.yaml │ │ ├── ipam.cluster.x-k8s.io_ipaddressclaims.yaml │ │ ├── ipam.cluster.x-k8s.io_ipaddresses.yaml │ │ └── runtime.cluster.x-k8s.io_extensionconfigs.yaml │ ├── kustomization.yaml │ ├── kustomizeconfig.yaml │ └── patches │ │ ├── webhook_in_clusterclasses.yaml │ │ ├── webhook_in_clusterresourcesetbindings.yaml │ │ ├── webhook_in_clusterresourcesets.yaml │ │ ├── webhook_in_clusters.yaml │ │ ├── webhook_in_extensionconfigs.yaml │ │ ├── webhook_in_ipaddressclaims.yaml │ │ ├── webhook_in_ipaddresses.yaml │ │ ├── webhook_in_machinedeployments.yaml │ │ ├── webhook_in_machinedrainrules.yaml │ │ ├── webhook_in_machinehealthchecks.yaml │ │ ├── webhook_in_machinepools.yaml │ │ ├── webhook_in_machines.yaml │ │ └── webhook_in_machinesets.yaml ├── default │ ├── kustomization.yaml │ ├── manager_image_patch.yaml │ ├── manager_pull_policy.yaml │ ├── manager_role_aggregation_patch.yaml │ ├── manager_webhook_patch.yaml │ ├── namespace.yaml │ └── webhookcainjection_patch.yaml ├── manager │ ├── kustomization.yaml │ └── manager.yaml ├── metrics │ ├── crd-clusterrole.yaml │ ├── crd-metrics-config.yaml │ ├── kustomization.yaml │ └── templates │ │ ├── README.md │ │ ├── cluster.yaml │ │ ├── clusterclass.yaml │ │ ├── common_metrics.yaml │ │ ├── header.yaml │ │ ├── kubeadmconfig.yaml │ │ ├── kubeadmcontrolplane.yaml │ │ ├── machine.yaml │ │ ├── machinedeployment.yaml │ │ ├── machinehealthcheck.yaml │ │ ├── machinepool.yaml │ │ ├── machineset.yaml │ │ └── owner_metric.yaml ├── rbac │ ├── aggregated_role.yaml │ ├── kustomization.yaml │ ├── leader_election_role.yaml │ ├── leader_election_role_binding.yaml │ ├── role.yaml │ ├── role_binding.yaml │ └── service_account.yaml └── webhook │ ├── kustomization.yaml │ ├── kustomizeconfig.yaml │ ├── manifests.yaml │ └── service.yaml ├── controllers ├── alias.go ├── clustercache │ ├── cluster_accessor.go │ ├── cluster_accessor_client.go │ ├── cluster_accessor_client_test.go │ ├── cluster_accessor_test.go │ ├── cluster_cache.go │ ├── cluster_cache_fake.go │ ├── cluster_cache_test.go │ ├── doc.go │ ├── index.go │ ├── metrics.go │ └── suite_test.go ├── crdmigrator │ ├── crd_migrator.go │ ├── crd_migrator_test.go │ ├── suite_test.go │ └── test │ │ ├── t1 │ │ ├── crd │ │ │ └── test.cluster.x-k8s.io_testclusters.yaml │ │ └── v1beta1 │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── t2 │ │ ├── crd │ │ │ └── test.cluster.x-k8s.io_testclusters.yaml │ │ ├── v1beta1 │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1beta2 │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── t3 │ │ ├── crd │ │ │ └── test.cluster.x-k8s.io_testclusters.yaml │ │ ├── v1beta1 │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1beta2 │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ └── t4 │ │ ├── crd │ │ └── test.cluster.x-k8s.io_testclusters.yaml │ │ └── v1beta2 │ │ ├── types.go │ │ └── zz_generated.deepcopy.go ├── doc.go ├── external │ ├── doc.go │ ├── fake │ │ ├── controller.go │ │ └── doc.go │ ├── tracker.go │ ├── tracker_test.go │ ├── types.go │ ├── util.go │ └── util_test.go ├── noderefutil │ ├── util.go │ └── util_test.go └── remote │ ├── cluster.go │ ├── cluster_test.go │ ├── doc.go │ ├── fake │ └── cluster.go │ └── restconfig.go ├── controlplane └── kubeadm │ ├── OWNERS │ ├── config │ ├── certmanager │ │ ├── certificate.yaml │ │ ├── kustomization.yaml │ │ └── kustomizeconfig.yaml │ ├── crd │ │ ├── bases │ │ │ ├── controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml │ │ │ └── controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yaml │ │ ├── kustomization.yaml │ │ ├── kustomizeconfig.yaml │ │ └── patches │ │ │ ├── webhook_in_kubeadmcontrolplanes.yaml │ │ │ └── webhook_in_kubeadmcontrolplanetemplates.yaml │ ├── default │ │ ├── kustomization.yaml │ │ ├── manager_image_patch.yaml │ │ ├── manager_pull_policy.yaml │ │ ├── manager_role_aggregation_patch.yaml │ │ ├── manager_webhook_patch.yaml │ │ ├── namespace.yaml │ │ └── webhookcainjection_patch.yaml │ ├── manager │ │ ├── kustomization.yaml │ │ └── manager.yaml │ ├── rbac │ │ ├── aggregated_role.yaml │ │ ├── kustomization.yaml │ │ ├── leader_election_role.yaml │ │ ├── leader_election_role_binding.yaml │ │ ├── role.yaml │ │ ├── role_binding.yaml │ │ └── service_account.yaml │ └── webhook │ │ ├── kustomization.yaml │ │ ├── kustomizeconfig.yaml │ │ ├── manifests.yaml │ │ └── service.yaml │ ├── controllers │ ├── alias.go │ └── doc.go │ ├── internal │ ├── cluster.go │ ├── cluster_labels.go │ ├── cluster_test.go │ ├── control_plane.go │ ├── control_plane_test.go │ ├── controllers │ │ ├── consts.go │ │ ├── controller.go │ │ ├── controller_test.go │ │ ├── doc.go │ │ ├── fakes_test.go │ │ ├── helpers.go │ │ ├── helpers_test.go │ │ ├── remediation.go │ │ ├── remediation_test.go │ │ ├── scale.go │ │ ├── scale_test.go │ │ ├── status.go │ │ ├── status_test.go │ │ ├── suite_test.go │ │ ├── upgrade.go │ │ └── upgrade_test.go │ ├── doc.go │ ├── etcd │ │ ├── doc.go │ │ ├── etcd.go │ │ ├── etcd_test.go │ │ ├── fake │ │ │ └── client.go │ │ └── util │ │ │ ├── util.go │ │ │ └── util_test.go │ ├── etcd_client_generator.go │ ├── etcd_client_generator_test.go │ ├── filters.go │ ├── filters_test.go │ ├── proxy │ │ ├── addr.go │ │ ├── conn.go │ │ ├── dial.go │ │ └── proxy.go │ ├── suite_test.go │ ├── webhooks │ │ ├── doc.go │ │ ├── kubeadm_control_plane.go │ │ ├── kubeadm_control_plane_test.go │ │ ├── kubeadmcontrolplanetemplate.go │ │ ├── kubeadmcontrolplanetemplate_test.go │ │ ├── scale.go │ │ └── scale_test.go │ ├── workload_cluster.go │ ├── workload_cluster_conditions.go │ ├── workload_cluster_conditions_test.go │ ├── workload_cluster_coredns.go │ ├── workload_cluster_coredns_test.go │ ├── workload_cluster_etcd.go │ ├── workload_cluster_etcd_test.go │ ├── workload_cluster_rbac.go │ ├── workload_cluster_rbac_test.go │ └── workload_cluster_test.go │ ├── main.go │ └── webhooks │ ├── alias.go │ └── doc.go ├── dev └── vscode-example-configuration │ ├── settings.json │ ├── tasks.json │ └── test.env ├── docs ├── OWNERS ├── book │ ├── Makefile │ ├── book.toml │ ├── src │ │ ├── CONTRIBUTING.md │ │ ├── REVIEWING.md │ │ ├── SUMMARY.md │ │ ├── clusterctl │ │ │ ├── commands │ │ │ │ ├── additional-commands.md │ │ │ │ ├── alpha-rollout.md │ │ │ │ ├── commands.md │ │ │ │ ├── completion.md │ │ │ │ ├── delete.md │ │ │ │ ├── describe-cluster.md │ │ │ │ ├── generate-cluster.md │ │ │ │ ├── generate-provider.md │ │ │ │ ├── generate-yaml.md │ │ │ │ ├── get-kubeconfig.md │ │ │ │ ├── init.md │ │ │ │ ├── move.md │ │ │ │ └── upgrade.md │ │ │ ├── configuration.md │ │ │ ├── developers.md │ │ │ ├── overview.md │ │ │ └── plugins.md │ │ ├── code-of-conduct.md │ │ ├── developer │ │ │ ├── core │ │ │ │ ├── controllers │ │ │ │ │ ├── cluster-resource-set.md │ │ │ │ │ ├── cluster-topology.md │ │ │ │ │ ├── cluster.md │ │ │ │ │ ├── machine-deployment.md │ │ │ │ │ ├── machine-health-check.md │ │ │ │ │ ├── machine-pool.md │ │ │ │ │ ├── machine-set.md │ │ │ │ │ ├── machine.md │ │ │ │ │ └── overview.md │ │ │ │ ├── e2e.md │ │ │ │ ├── logging.md │ │ │ │ ├── overview.md │ │ │ │ ├── repository-layout.md │ │ │ │ ├── support-multiple-instances.md │ │ │ │ ├── testing.md │ │ │ │ ├── tilt.md │ │ │ │ └── tuning.md │ │ │ ├── getting-started.md │ │ │ └── providers │ │ │ │ ├── best-practices.md │ │ │ │ ├── contracts │ │ │ │ ├── bootstrap-config.md │ │ │ │ ├── clusterctl.md │ │ │ │ ├── control-plane.md │ │ │ │ ├── infra-cluster.md │ │ │ │ ├── infra-machine.md │ │ │ │ ├── ipam.md │ │ │ │ └── overview.md │ │ │ │ ├── getting-started │ │ │ │ ├── building-running-and-testing.md │ │ │ │ ├── cluster-email.png │ │ │ │ ├── configure-the-deployment.md │ │ │ │ ├── controllers-and-reconciliation.md │ │ │ │ ├── implement-api-types.md │ │ │ │ ├── initialize-repo-and-api-types.md │ │ │ │ ├── naming.md │ │ │ │ ├── overview.md │ │ │ │ └── webhooks.md │ │ │ │ ├── migrations │ │ │ │ ├── overview.md │ │ │ │ ├── v1.10-to-v1.11.md │ │ │ │ ├── v1.8-to-v1.9.md │ │ │ │ └── v1.9-to-v1.10.md │ │ │ │ ├── overview.md │ │ │ │ └── security-guidelines.md │ │ ├── images │ │ │ ├── bootstrap-provider.plantuml │ │ │ ├── bootstrap-provider.png │ │ │ ├── cluster-admission-cluster-controller.plantuml │ │ │ ├── cluster-admission-cluster-controller.png │ │ │ ├── cluster-admission-machine-controller.plantuml │ │ │ ├── cluster-admission-machine-controller.png │ │ │ ├── cluster-admission-machinedeployment-controller.plantuml │ │ │ ├── cluster-admission-machinedeployment-controller.png │ │ │ ├── cluster-admission-machinedeployment-controller.svg │ │ │ ├── cluster-admission-machinepool-controller.plantuml │ │ │ ├── cluster-admission-machinepool-controller.png │ │ │ ├── cluster-admission-machineset-controller.plantuml │ │ │ ├── cluster-admission-machineset-controller.png │ │ │ ├── cluster-infra-provider.plantuml │ │ │ ├── cluster-infra-provider.png │ │ │ ├── cluster-resource-set-controller.plantuml │ │ │ ├── cluster-resource-set-controller.png │ │ │ ├── cluster-topology-controller.plantuml │ │ │ ├── cluster-topology-controller.png │ │ │ ├── cluster-topology-reconciller.plantuml │ │ │ ├── cluster-topology-reconciller.png │ │ │ ├── control-plane-controller.plantuml │ │ │ ├── control-plane-controller.png │ │ │ ├── describe-cluster-disable-grouping.png │ │ │ ├── describe-cluster-echo.png │ │ │ ├── describe-cluster-how-grouping-works.png │ │ │ ├── describe-cluster-show-conditions.png │ │ │ ├── describe-cluster.png │ │ │ ├── introduction.png │ │ │ ├── introduction.svg │ │ │ ├── kubeadm-control-plane-machines-resources.plantuml │ │ │ ├── kubeadm-control-plane-machines-resources.png │ │ │ ├── machine-infra-provider.plantuml │ │ │ ├── machine-infra-provider.png │ │ │ ├── machine-phases.plantuml │ │ │ ├── machine-phases.png │ │ │ ├── machinehealthcheck-controller.plantuml │ │ │ ├── machinehealthcheck-controller.png │ │ │ ├── management-cluster.svg │ │ │ ├── management-workload-same-cluster.plantuml │ │ │ ├── management-workload-same-cluster.png │ │ │ ├── management-workload-separate-clusters.plantuml │ │ │ ├── management-workload-separate-clusters.png │ │ │ ├── metadata-propagation.jpg │ │ │ ├── metadata-propagation.pptx │ │ │ ├── runtime-sdk-lifecycle-hooks.png │ │ │ ├── runtime-sdk-topology-mutation.plantuml │ │ │ ├── runtime-sdk-topology-mutation.png │ │ │ ├── worker-machines-resources.plantuml │ │ │ └── worker-machines-resources.png │ │ ├── introduction.md │ │ ├── reference │ │ │ ├── api │ │ │ │ ├── crd-relationships.md │ │ │ │ ├── labels-and-annotations.md │ │ │ │ ├── metadata-propagation.md │ │ │ │ ├── owner-references.md │ │ │ │ └── reference.md │ │ │ ├── glossary.md │ │ │ ├── ports.md │ │ │ ├── providers.md │ │ │ ├── reference.md │ │ │ └── versions.md │ │ ├── security │ │ │ ├── index.md │ │ │ └── pod-security-standards.md │ │ ├── tasks │ │ │ ├── automated-machine-management │ │ │ │ ├── autoscaling.md │ │ │ │ ├── healthchecking.md │ │ │ │ ├── index.md │ │ │ │ ├── machine_deletions.md │ │ │ │ └── scaling.md │ │ │ ├── bootstrap │ │ │ │ ├── index.md │ │ │ │ ├── kubeadm-bootstrap │ │ │ │ │ ├── index.md │ │ │ │ │ └── kubelet-config.md │ │ │ │ └── microk8s-bootstrap.md │ │ │ ├── certs │ │ │ │ ├── auto-rotate-certificates-in-kcp.md │ │ │ │ ├── generate-kubeconfig.md │ │ │ │ ├── index.md │ │ │ │ └── using-custom-certificates.md │ │ │ ├── cluster-resource-set.md │ │ │ ├── control-plane │ │ │ │ ├── index.md │ │ │ │ ├── kubeadm-control-plane.md │ │ │ │ └── microk8s-control-plane.md │ │ │ ├── diagnostics.md │ │ │ ├── experimental-features │ │ │ │ ├── cluster-class │ │ │ │ │ ├── change-clusterclass.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── operate-cluster.md │ │ │ │ │ └── write-clusterclass.md │ │ │ │ ├── experimental-features.md │ │ │ │ ├── ignition.md │ │ │ │ ├── machine-pools.md │ │ │ │ ├── machineset-preflight-checks.md │ │ │ │ └── runtime-sdk │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── deploy-runtime-extension.md │ │ │ │ │ ├── implement-extensions.md │ │ │ │ │ ├── implement-lifecycle-hooks.md │ │ │ │ │ ├── implement-topology-mutation-hook.md │ │ │ │ │ └── index.md │ │ │ ├── external-etcd.md │ │ │ ├── index.md │ │ │ ├── multiple-providers.md │ │ │ ├── updating-machine-templates.md │ │ │ ├── upgrading-cluster-api-versions.md │ │ │ ├── upgrading-clusters.md │ │ │ ├── using-kustomize.md │ │ │ ├── verify-container-images.md │ │ │ └── workload-bootstrap-gitops.md │ │ └── user │ │ │ ├── concepts.md │ │ │ ├── manifesto.md │ │ │ ├── quick-start-operator.md │ │ │ ├── quick-start.md │ │ │ └── troubleshooting.md │ ├── theme │ │ ├── css │ │ │ ├── chrome.css │ │ │ └── custom.css │ │ ├── favicon.png │ │ └── highlight.css │ ├── util-embed.sh │ ├── util-releaselink.sh │ └── util-tabulate.sh ├── community │ ├── 20231016-in-place-updates.md │ ├── 20231018-karpenter-integration.md │ ├── 20241112-node-bootstrapping.md │ └── retired │ │ ├── 20221115-managed-kubernetes.md │ │ └── 20230111-alternative-communication-patterns.md ├── proposals │ ├── 20181121-machine-api.md │ ├── 20190610-machine-states-preboot-bootstrapping.md │ ├── 20190709-cluster-spec-crds.md │ ├── 20190919-machinepool-api.md │ ├── 20191016-clusterctl-redesign.md │ ├── 20191016-e2e-test-framework.md │ ├── 20191017-kubeadm-based-control-plane.md │ ├── 20191030-machine-health-checking.md │ ├── 20200220-cluster-resource-set.md │ ├── 20200330-spot-instances.md │ ├── 20200423-etcd-data-disk.md │ ├── 20200506-conditions.md │ ├── 20200511-clusterctl-extensible-template-processing.md │ ├── 20200602-machine-deletion-phase-hooks.md │ ├── 20200804-windows-support.md │ ├── 20201020-capi-provider-operator.md │ ├── 20210203-externally-managed-cluster-infrastructure.md │ ├── 20210210-insulate-users-from-kubeadm-API-changes.md │ ├── 20210222-kubelet-authentication.md │ ├── 20210310-opt-in-autoscaling-from-zero.md │ ├── 20210526-cluster-class-and-managed-topologies.md │ ├── 20220125-ipam-integration.md │ ├── 20220209-machinepool-machines.md │ ├── 20220221-runtime-SDK.md │ ├── 20220330-topology-mutation-hook.md │ ├── 20220411-cluster-api-state-metrics.md │ ├── 20220414-runtime-hooks.md │ ├── 20220712-cluster-api-addon-orchestration.md │ ├── 20220725-managed-kubernetes.md │ ├── 20220927-labels-and-annotations-sync-between-machine-and-nodes.md │ ├── 20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md │ ├── 20230407-flexible-managed-k8s-endpoints.md │ ├── 20240807-in-place-updates.md │ ├── 20240916-improve-status-in-CAPI-resources.md │ ├── 20240930-machine-drain-rules.md │ ├── 20250124-From CAPD(docker) to CAPD(dev) .md │ ├── YYYYMMDD-template.md │ └── images │ │ ├── capi-provider-operator │ │ ├── fig1.plantuml │ │ ├── fig1.png │ │ ├── fig2.plantuml │ │ ├── fig2.png │ │ ├── fig3.png │ │ └── fig4.png │ │ ├── cluster-class │ │ ├── create.plantuml │ │ ├── create.png │ │ ├── update.plantuml │ │ └── update.png │ │ ├── cluster-spec-crds │ │ ├── figure1.plantuml │ │ ├── figure1.png │ │ ├── figure2.plantuml │ │ └── figure2.png │ │ ├── clusterctl-extensible-templates │ │ ├── pkgCalls.plantuml │ │ ├── pkgCalls.png │ │ ├── templateClient.plantuml │ │ ├── templateClient.png │ │ ├── yamlProcessor.plantuml │ │ └── yamlProcessor.png │ │ ├── clusterctl-redesign │ │ ├── components.png │ │ ├── config.plantuml │ │ ├── config.png │ │ ├── init.plantuml │ │ └── init.png │ │ ├── conditions │ │ ├── cluster-provision-workflow.png │ │ └── upgrade-workflow.png │ │ ├── controlplane │ │ ├── controlplane-init-1.plantuml │ │ ├── controlplane-init-1.png │ │ ├── controlplane-init-2.plantuml │ │ ├── controlplane-init-2.png │ │ ├── controlplane-init-3.plantuml │ │ ├── controlplane-init-3.png │ │ ├── controlplane-init-4.plantuml │ │ ├── controlplane-init-4.png │ │ ├── controlplane-init-6.plantuml │ │ ├── controlplane-init-6.png │ │ ├── controlplane-init-7.plantuml │ │ └── controlplane-init-7.png │ │ ├── developer │ │ ├── diagram.plantuml │ │ └── diagram.png │ │ ├── externally-managed-cluster-infrastructure │ │ └── infrastructure.png │ │ ├── in-place-propagation │ │ ├── Metadata propagation.pptx │ │ ├── current-state.jpg │ │ ├── optional-changes.jpg │ │ └── proposed-changes.jpg │ │ ├── ipam-integration │ │ ├── consumption.png │ │ ├── sequence.png │ │ └── sequence.txt │ │ ├── kubelet-authentication │ │ ├── client-authenticator-flow.plantuml │ │ └── client-authenticator-flow.png │ │ ├── machine-health-check │ │ ├── mhc.plantuml │ │ ├── mhc.png │ │ └── mhc.svg │ │ ├── machine-states-preboot │ │ ├── Figure2.png │ │ ├── Figure3.plantuml │ │ ├── Figure3.png │ │ ├── Figure4.plantuml │ │ ├── Figure4.png │ │ ├── Figure5.plantuml │ │ ├── Figure5.png │ │ ├── Figure6.plantuml │ │ ├── Figure6.png │ │ ├── Figure7.plantuml │ │ ├── Figure7.png │ │ ├── Figure8.plantuml │ │ └── Figure8.png │ │ ├── machinepool-api │ │ ├── figure1.plantuml │ │ └── figure1.png │ │ ├── machinepool-machines │ │ ├── inframachinepool-scale-down.plantuml │ │ ├── inframachinepool-scale-down.png │ │ ├── inframachinepool-scale-up.plantuml │ │ ├── inframachinepool-scale-up.png │ │ ├── machinepool-machine-reconcile.plantuml │ │ ├── machinepool-machine-reconcile.png │ │ ├── machinepool-reconcile.plantuml │ │ └── machinepool-reconcile.png │ │ ├── runtime-hooks │ │ ├── runtime-hooks-openapi.yaml │ │ └── runtime-hooks.png │ │ ├── runtime-sdk │ │ ├── overview.png │ │ └── swagger-ui.png │ │ └── topology-mutation-hook │ │ ├── runtime-sdk-openapi.yaml │ │ ├── topology-reconciliation.plantuml │ │ └── topology-reconciliation.png └── release │ ├── OWNERS │ ├── release-cycle-overview.png │ ├── release-cycle.md │ ├── release-team-onboarding.md │ ├── release-team.md │ ├── release-templates.md │ ├── releases │ ├── release-1.10.md │ ├── release-1.11.md │ ├── release-1.3.md │ ├── release-1.4.md │ ├── release-1.5.md │ ├── release-1.6.md │ ├── release-1.7.md │ ├── release-1.8.md │ └── release-1.9.md │ └── role-handbooks │ ├── ci-signal │ └── README.md │ ├── communications │ └── README.md │ └── release-lead │ └── README.md ├── errors ├── clusters.go ├── consts.go ├── doc.go ├── kubeadmcontrolplane.go ├── machines.go └── pointer.go ├── exp ├── README.md ├── controllers │ ├── alias.go │ └── doc.go ├── doc.go ├── hack │ └── boilerplate.go.txt ├── internal │ ├── controllers │ │ ├── doc.go │ │ ├── machinepool_controller.go │ │ ├── machinepool_controller_noderef.go │ │ ├── machinepool_controller_noderef_test.go │ │ ├── machinepool_controller_phases.go │ │ ├── machinepool_controller_phases_test.go │ │ ├── machinepool_controller_test.go │ │ └── suite_test.go │ └── webhooks │ │ ├── doc.go │ │ ├── machinepool.go │ │ └── machinepool_test.go ├── ipam │ ├── internal │ │ └── webhooks │ │ │ ├── doc.go │ │ │ ├── ipaddress.go │ │ │ ├── ipaddress_test.go │ │ │ ├── ipaddressclaim.go │ │ │ └── ipaddressclaim_test.go │ └── webhooks │ │ ├── alias.go │ │ └── doc.go ├── runtime │ ├── catalog │ │ ├── builder.go │ │ ├── catalog.go │ │ ├── doc.go │ │ ├── openapi.go │ │ └── test │ │ │ └── catalog_test.go │ ├── client │ │ └── client.go │ ├── controllers │ │ ├── alias.go │ │ └── doc.go │ ├── internal │ │ └── controllers │ │ │ ├── doc.go │ │ │ ├── extensionconfig_controller.go │ │ │ ├── extensionconfig_controller_test.go │ │ │ ├── index.go │ │ │ ├── index_test.go │ │ │ ├── suite_test.go │ │ │ ├── warmup.go │ │ │ └── warmup_test.go │ ├── server │ │ └── server.go │ └── topologymutation │ │ ├── doc.go │ │ ├── errors.go │ │ ├── logRef.go │ │ ├── logRef_test.go │ │ ├── variables.go │ │ ├── variables_test.go │ │ ├── walker.go │ │ └── walker_test.go ├── topology │ ├── desiredstate │ │ ├── desired_state.go │ │ └── desired_state_test.go │ └── scope │ │ ├── blueprint.go │ │ ├── blueprint_test.go │ │ ├── doc.go │ │ ├── hookresponsetracker.go │ │ ├── hookresponsetracker_test.go │ │ ├── scope.go │ │ ├── scope_test.go │ │ ├── state.go │ │ ├── state_test.go │ │ ├── upgradetracker.go │ │ └── upgradetracker_test.go ├── util │ ├── suite_test.go │ ├── util.go │ └── util_test.go └── webhooks │ ├── alias.go │ └── doc.go ├── feature ├── feature.go └── gates.go ├── go.mod ├── go.sum ├── hack ├── boilerplate.go.txt ├── boilerplate │ ├── README.md │ ├── boilerplate.Dockerfile.txt │ ├── boilerplate.Makefile.txt │ ├── boilerplate.bzl.txt │ ├── boilerplate.generatebzl.txt │ ├── boilerplate.generatego.txt │ ├── boilerplate.go.txt │ ├── boilerplate.py │ ├── boilerplate.py.txt │ ├── boilerplate.sh.txt │ ├── boilerplate_test.py │ └── test │ │ ├── fail.go │ │ ├── fail.py │ │ ├── pass.go │ │ └── pass.py ├── docker-image-verify.sh ├── ensure-go.sh ├── ensure-kind.sh ├── ensure-trivy.sh ├── generate-doctoc.sh ├── get-project-maintainers.sh ├── kind-install-for-capd.sh ├── kind-install-for-capk.sh ├── kind-install.sh ├── observability │ ├── .gitignore │ ├── grafana │ │ ├── chart │ │ │ ├── kustomization.yaml │ │ │ └── values.yaml │ │ ├── dashboards │ │ │ ├── cluster-api-mgmt-apiserver-requests.json │ │ │ ├── cluster-api-performance.json │ │ │ ├── cluster-api-state.json │ │ │ ├── cluster-api-wl-apiserver-requests.json │ │ │ ├── controller-runtime.json │ │ │ └── runtime-extensions.json │ │ └── kustomization.yaml │ ├── kube-state-metrics │ │ ├── crd-sidecar-cm.yaml │ │ ├── crd-sidecar-patch.yaml │ │ ├── kustomization.yaml │ │ ├── rbac-crd-aggregation.yaml │ │ └── values.yaml │ ├── loki │ │ ├── kustomization.yaml │ │ └── values.yaml │ ├── metrics-server │ │ ├── kustomization.yaml │ │ └── values.yaml │ ├── namespace.yaml │ ├── parca │ │ ├── kustomization.yaml │ │ ├── rbac-pprof.yaml │ │ └── values.yaml │ ├── prometheus │ │ ├── kustomization.yaml │ │ └── values.yaml │ ├── promtail │ │ ├── kustomization.yaml │ │ └── values.yaml │ ├── tempo │ │ ├── kustomization.yaml │ │ └── values.yaml │ └── visualizer │ │ ├── kustomization.yaml │ │ └── values.yaml ├── pin-dependency.sh ├── setup-envtest-with-kind.sh ├── tools │ ├── .custom-gcl.yaml │ ├── conversion-verifier │ │ ├── doc.go │ │ └── main.go │ ├── go.mod │ ├── go.sum │ ├── internal │ │ ├── log-push │ │ │ ├── main.go │ │ │ └── main_test.go │ │ └── tilt-prepare │ │ │ └── main.go │ ├── mdbook │ │ ├── embed │ │ │ └── embed.go │ │ ├── releaselink │ │ │ └── releaselink.go │ │ └── tabulate │ │ │ └── tabulate.go │ ├── prowjob-gen │ │ ├── README.md │ │ ├── config.go │ │ ├── generator.go │ │ ├── main.go │ │ ├── main_test.go │ │ └── test │ │ │ ├── test-configuration.yaml │ │ │ ├── test-main.yaml.golden │ │ │ └── test.yaml.tpl │ ├── release │ │ ├── OWNERS │ │ ├── internal │ │ │ ├── constants.go │ │ │ └── update_providers │ │ │ │ ├── README.md │ │ │ │ ├── provider_issues.go │ │ │ │ └── provider_issues_test.go │ │ ├── notes │ │ │ ├── generator.go │ │ │ ├── github.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── main.go │ │ │ ├── main_test.go │ │ │ ├── print.go │ │ │ ├── process.go │ │ │ ├── ref.go │ │ │ ├── release_notes_integration_test.go │ │ │ └── test │ │ │ │ └── golden │ │ │ │ ├── v1.3.10.md │ │ │ │ └── v1.5.0.md │ │ └── weekly │ │ │ └── main.go │ ├── runtime-openapi-gen │ │ ├── main.go │ │ └── vendored_openapi.go │ └── triage │ │ ├── .gitignore │ │ ├── config.yaml │ │ └── triage-improvements.patch ├── utils.sh ├── verify-boilerplate.sh ├── verify-capi-book-summary.sh ├── verify-container-images.sh ├── verify-go-directive.sh ├── verify-import-restrictions.sh ├── verify-licenses.sh ├── verify-pr-title.sh ├── verify-shellcheck.sh ├── verify-starlark.sh └── version.sh ├── internal ├── api │ ├── addons │ │ ├── v1alpha3 │ │ │ ├── clusterresourceset_types.go │ │ │ ├── clusterresourcesetbinding_types.go │ │ │ ├── clusterresourcesetbinding_types_test.go │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1alpha4 │ │ │ ├── clusterresourceset_types.go │ │ │ ├── clusterresourcesetbinding_types.go │ │ │ ├── clusterresourcesetbinding_types_test.go │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ ├── bootstrap │ │ └── kubeadm │ │ │ ├── v1alpha3 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── kubeadmconfig_types.go │ │ │ ├── kubeadmconfigtemplate_types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ │ └── v1alpha4 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── kubeadm_types.go │ │ │ ├── kubeadm_types_test.go │ │ │ ├── kubeadmconfig_types.go │ │ │ ├── kubeadmconfigtemplate_types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ ├── controlplane │ │ └── kubeadm │ │ │ ├── v1alpha3 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── kubeadm_control_plane_types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ │ └── v1alpha4 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── groupversion_info.go │ │ │ ├── kubeadm_control_plane_types.go │ │ │ ├── kubeadmcontrolplanetemplate_types.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ └── core │ │ ├── v1alpha3 │ │ ├── cluster_phase_types.go │ │ ├── cluster_types.go │ │ ├── common_types.go │ │ ├── condition_consts.go │ │ ├── condition_types.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── machine_phase_types.go │ │ ├── machine_types.go │ │ ├── machinedeployment_types.go │ │ ├── machinehealthcheck_types.go │ │ ├── machinepool_types.go │ │ ├── machineset_types.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ │ └── v1alpha4 │ │ ├── cluster_phase_types.go │ │ ├── cluster_types.go │ │ ├── cluster_types_test.go │ │ ├── clusterclass_types.go │ │ ├── common_types.go │ │ ├── condition_consts.go │ │ ├── condition_types.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── groupversion_info.go │ │ ├── machine_phase_types.go │ │ ├── machine_types.go │ │ ├── machinedeployment_types.go │ │ ├── machinehealthcheck_types.go │ │ ├── machinepool_types.go │ │ ├── machineset_types.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go ├── contract │ ├── bootstrap.go │ ├── bootstrap_config_template.go │ ├── bootstrap_test.go │ ├── controlplane.go │ ├── controlplane_template.go │ ├── controlplane_template_test.go │ ├── controlplane_test.go │ ├── doc.go │ ├── infrastructure_cluster.go │ ├── infrastructure_cluster_template.go │ ├── infrastructure_cluster_test.go │ ├── infrastructure_machine.go │ ├── infrastructure_machine_template.go │ ├── infrastructure_machine_test.go │ ├── infrastructure_machinepool_template.go │ ├── metadata.go │ ├── metadata_test.go │ ├── references.go │ ├── references_test.go │ ├── types.go │ ├── types_test.go │ └── version.go ├── controllers │ ├── cluster │ │ ├── cluster_controller.go │ │ ├── cluster_controller_phases.go │ │ ├── cluster_controller_phases_test.go │ │ ├── cluster_controller_status.go │ │ ├── cluster_controller_status_test.go │ │ ├── cluster_controller_test.go │ │ ├── doc.go │ │ └── suite_test.go │ ├── clusterclass │ │ ├── clusterclass_controller.go │ │ ├── clusterclass_controller_status.go │ │ ├── clusterclass_controller_status_test.go │ │ ├── clusterclass_controller_test.go │ │ ├── doc.go │ │ └── suite_test.go │ ├── clusterresourceset │ │ ├── clusterresourceset_controller.go │ │ ├── clusterresourceset_controller_test.go │ │ ├── clusterresourceset_helpers.go │ │ ├── clusterresourceset_helpers_test.go │ │ ├── clusterresourceset_scope.go │ │ ├── clusterresourceset_scope_test.go │ │ ├── doc.go │ │ ├── predicates │ │ │ └── resource_predicates.go │ │ └── suite_test.go │ ├── clusterresourcesetbinding │ │ ├── clusterresourcesetbinding_controller.go │ │ └── doc.go │ ├── machine │ │ ├── doc.go │ │ ├── drain │ │ │ ├── drain.go │ │ │ ├── drain_test.go │ │ │ ├── filters.go │ │ │ └── filters_test.go │ │ ├── machine_controller.go │ │ ├── machine_controller_noderef.go │ │ ├── machine_controller_noderef_test.go │ │ ├── machine_controller_phases.go │ │ ├── machine_controller_phases_test.go │ │ ├── machine_controller_status.go │ │ ├── machine_controller_status_test.go │ │ ├── machine_controller_test.go │ │ ├── machine_helpers.go │ │ ├── machine_helpers_test.go │ │ └── suite_test.go │ ├── machinedeployment │ │ ├── doc.go │ │ ├── machinedeployment_controller.go │ │ ├── machinedeployment_controller_test.go │ │ ├── machinedeployment_rolling.go │ │ ├── machinedeployment_rolling_test.go │ │ ├── machinedeployment_rollout_ondelete.go │ │ ├── machinedeployment_status.go │ │ ├── machinedeployment_status_test.go │ │ ├── machinedeployment_sync.go │ │ ├── machinedeployment_sync_test.go │ │ ├── mdutil │ │ │ ├── doc.go │ │ │ ├── util.go │ │ │ └── util_test.go │ │ └── suite_test.go │ ├── machinehealthcheck │ │ ├── doc.go │ │ ├── machinehealthcheck_controller.go │ │ ├── machinehealthcheck_controller_test.go │ │ ├── machinehealthcheck_status_matcher_test.go │ │ ├── machinehealthcheck_targets.go │ │ ├── machinehealthcheck_targets_test.go │ │ └── suite_test.go │ ├── machineset │ │ ├── doc.go │ │ ├── machineset_controller.go │ │ ├── machineset_controller_status.go │ │ ├── machineset_controller_status_test.go │ │ ├── machineset_controller_test.go │ │ ├── machineset_delete_policy.go │ │ ├── machineset_delete_policy_test.go │ │ ├── machineset_preflight.go │ │ ├── machineset_preflight_test.go │ │ └── suite_test.go │ └── topology │ │ ├── OWNERS │ │ ├── cluster │ │ ├── blueprint.go │ │ ├── blueprint_test.go │ │ ├── cluster_controller.go │ │ ├── cluster_controller_test.go │ │ ├── conditions.go │ │ ├── conditions_test.go │ │ ├── current_state.go │ │ ├── current_state_test.go │ │ ├── doc.go │ │ ├── patches │ │ │ ├── api │ │ │ │ └── interface.go │ │ │ ├── engine.go │ │ │ ├── engine_test.go │ │ │ ├── external │ │ │ │ ├── external_patch_generator.go │ │ │ │ ├── external_patch_generator_test.go │ │ │ │ └── external_validator.go │ │ │ ├── inline │ │ │ │ ├── json_patch_generator.go │ │ │ │ └── json_patch_generator_test.go │ │ │ ├── patch.go │ │ │ ├── patch_test.go │ │ │ ├── template.go │ │ │ └── variables │ │ │ │ ├── errors.go │ │ │ │ ├── value.go │ │ │ │ ├── value_test.go │ │ │ │ ├── variables.go │ │ │ │ └── variables_test.go │ │ ├── reconcile_state.go │ │ ├── reconcile_state_test.go │ │ ├── structuredmerge │ │ │ ├── doc.go │ │ │ ├── drop_diff.go │ │ │ ├── drop_diff_test.go │ │ │ ├── dryrun.go │ │ │ ├── dryrun_test.go │ │ │ ├── interfaces.go │ │ │ ├── options.go │ │ │ ├── serversidepathhelper.go │ │ │ ├── serversidepathhelper_test.go │ │ │ └── suite_test.go │ │ ├── suite_test.go │ │ ├── util.go │ │ └── util_test.go │ │ ├── machinedeployment │ │ ├── doc.go │ │ ├── machinedeployment_controller.go │ │ ├── machinedeployment_controller_test.go │ │ └── suite_test.go │ │ └── machineset │ │ ├── doc.go │ │ ├── machineset_controller.go │ │ ├── machineset_controller_test.go │ │ ├── suite_test.go │ │ ├── util.go │ │ └── util_test.go ├── goproxy │ ├── doc.go │ ├── goproxy.go │ ├── goproxy_test.go │ └── test │ │ └── test_utils.go ├── hooks │ ├── tracking.go │ └── tracking_test.go ├── runtime │ ├── client │ │ ├── client.go │ │ ├── client_test.go │ │ └── fake │ │ │ └── fake_client.go │ ├── metrics │ │ └── metrics.go │ ├── registry │ │ ├── doc.go │ │ ├── registry.go │ │ └── registry_test.go │ └── test │ │ ├── v1alpha1 │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── doc.go │ │ ├── fake_types.go │ │ ├── groupversion_info.go │ │ ├── zz_generated.conversion.go │ │ └── zz_generated.deepcopy.go │ │ └── v1alpha2 │ │ ├── doc.go │ │ ├── fake_types.go │ │ ├── groupversion_info.go │ │ └── zz_generated.deepcopy.go ├── test │ └── envtest │ │ ├── doc.go │ │ ├── environment.go │ │ └── webhooks.go ├── topology │ ├── check │ │ ├── compatibility.go │ │ ├── compatibility_test.go │ │ ├── upgrade.go │ │ └── upgrade_test.go │ ├── clustershim │ │ └── clustershim.go │ ├── names │ │ ├── names.go │ │ └── names_test.go │ ├── ownerrefs │ │ └── ownerref.go │ ├── selectors │ │ └── selectors.go │ └── variables │ │ ├── cluster_variable_defaulting.go │ │ ├── cluster_variable_defaulting_test.go │ │ ├── cluster_variable_validation.go │ │ ├── cluster_variable_validation_test.go │ │ ├── clusterclass_variable_validation.go │ │ ├── clusterclass_variable_validation_test.go │ │ ├── doc.go │ │ ├── schema.go │ │ ├── schema_test.go │ │ └── utils.go ├── util │ ├── compare │ │ ├── equal.go │ │ └── equal_test.go │ ├── hash │ │ └── hash.go │ ├── kubeadm │ │ ├── kubeadm.go │ │ └── kubeadm_test.go │ ├── ssa │ │ ├── cache.go │ │ ├── filterintent.go │ │ ├── filterintent_test.go │ │ ├── managedfields.go │ │ ├── managedfields_test.go │ │ ├── matchers.go │ │ ├── metrics.go │ │ ├── patch.go │ │ ├── patch_test.go │ │ └── suite_test.go │ ├── taints │ │ ├── taints.go │ │ └── taints_test.go │ └── tree │ │ ├── doc.go │ │ ├── tree.go │ │ └── tree_test.go └── webhooks │ ├── cluster.go │ ├── cluster_test.go │ ├── clusterclass.go │ ├── clusterclass_test.go │ ├── clusterresourceset_webhook.go │ ├── clusterresourceset_webhook_test.go │ ├── clusterresourcesetbinding_webhook.go │ ├── clusterresourcesetbinding_webhook_test.go │ ├── doc.go │ ├── machine.go │ ├── machine_test.go │ ├── machinedeployment.go │ ├── machinedeployment_test.go │ ├── machinedrainrules.go │ ├── machinehealthcheck.go │ ├── machinehealthcheck_test.go │ ├── machineset.go │ ├── machineset_test.go │ ├── patch_validation.go │ ├── patch_validation_test.go │ ├── runtime │ ├── doc.go │ ├── extensionconfig_webhook.go │ └── extensionconfig_webhook_test.go │ ├── test │ ├── clusterclass_test.go │ ├── doc.go │ ├── machinedrainrules_test.go │ └── suite_test.go │ └── util │ └── util.go ├── logos ├── LICENSE.md ├── README.md ├── icons │ ├── CAPI icons.ai │ ├── README.md │ ├── cluster.png │ ├── cluster.svg │ ├── machine-deployment.png │ ├── machine-deployment.svg │ ├── machine-set.png │ ├── machine-set.svg │ ├── machine.png │ └── machine.svg ├── kubernetes-cluster-logos_1.pdf ├── kubernetes-cluster-logos_2.pdf ├── kubernetes-cluster-logos_final-01.svg └── kubernetes-cluster-logos_final-02.svg ├── main.go ├── metadata.yaml ├── netlify.toml ├── scripts ├── build-kind.sh ├── ci-apidiff.sh ├── ci-build.sh ├── ci-e2e-lib.sh ├── ci-e2e.sh ├── ci-test.sh ├── ci-verify.sh ├── go_install.sh ├── install-mdbook.sh └── lint-dockerfiles.sh ├── test ├── OWNERS ├── README.md ├── e2e │ ├── .gitignore │ ├── autoscaler.go │ ├── autoscaler_test.go │ ├── cluster_deletion.go │ ├── cluster_deletion_test.go │ ├── cluster_upgrade.go │ ├── cluster_upgrade_runtimesdk.go │ ├── cluster_upgrade_runtimesdk_test.go │ ├── cluster_upgrade_test.go │ ├── clusterclass_changes.go │ ├── clusterclass_changes_test.go │ ├── clusterclass_rollout.go │ ├── clusterclass_rollout_test.go │ ├── clusterctl_upgrade.go │ ├── clusterctl_upgrade_test.go │ ├── common.go │ ├── config │ │ └── docker.yaml │ ├── custom_assertions.go │ ├── data │ │ ├── autoscaler │ │ │ └── autoscaler-to-workload-workload.yaml │ │ ├── cni │ │ │ └── kindnet │ │ │ │ └── kindnet.yaml │ │ ├── infrastructure-docker │ │ │ ├── README.md │ │ │ ├── main │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ ├── md.yaml │ │ │ │ │ └── mp.yaml │ │ │ │ ├── cluster-template-ignition │ │ │ │ │ ├── ignition.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-in-memory.yaml │ │ │ │ ├── cluster-template-ipv6 │ │ │ │ │ ├── cluster-ipv6.yaml │ │ │ │ │ ├── kcp-ipv6.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ └── md-ipv6.yaml │ │ │ │ ├── cluster-template-kcp-adoption │ │ │ │ │ ├── step1 │ │ │ │ │ │ ├── cluster-with-cp0.yaml │ │ │ │ │ │ └── kustomization.yaml │ │ │ │ │ └── step2 │ │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-kcp-pre-drain │ │ │ │ │ ├── cluster.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-kcp-remediation │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ └── mhc.yaml │ │ │ │ ├── cluster-template-kcp-scale-in │ │ │ │ │ ├── kcp-scale-in-variable.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-machine-pool │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-md-remediation │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ ├── md.yaml │ │ │ │ │ └── mhc.yaml │ │ │ │ ├── cluster-template-topology-autoscaler │ │ │ │ │ ├── cluster-autoscaler.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-topology-dualstack-ipv4-primary │ │ │ │ │ ├── cluster.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-topology-dualstack-ipv6-primary │ │ │ │ │ ├── cluster.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-topology-kcp-only │ │ │ │ │ ├── cluster-topology-class.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-topology-no-workers │ │ │ │ │ ├── disable-control-plane-taint-variable.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ └── remove-topology-workers.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-upgrades-runtimesdk │ │ │ │ │ ├── cluster-runtimesdk.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template-upgrades │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── clusterclass-in-memory.yaml │ │ │ │ ├── clusterclass-quick-start-kcp-only │ │ │ │ │ ├── clusterclass-name.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ ├── remove-worker-patches.yaml │ │ │ │ │ └── remove-workers.yaml │ │ │ │ ├── clusterclass-quick-start-runtimesdk.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ │ ├── v0.3 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ └── md.yaml │ │ │ │ └── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ ├── v0.4 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ └── md.yaml │ │ │ │ └── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ ├── v1.10 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ └── md.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ │ ├── v1.5 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ └── md.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ │ ├── v1.6 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ ├── md.yaml │ │ │ │ │ └── mp.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ │ ├── v1.8 │ │ │ │ ├── bases │ │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ │ ├── crs.yaml │ │ │ │ │ └── md.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ │ └── kustomization.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ │ └── v1.9 │ │ │ │ ├── bases │ │ │ │ ├── cluster-with-kcp.yaml │ │ │ │ ├── cluster-with-topology.yaml │ │ │ │ ├── crs.yaml │ │ │ │ └── md.yaml │ │ │ │ ├── cluster-template-topology │ │ │ │ └── kustomization.yaml │ │ │ │ ├── cluster-template │ │ │ │ └── kustomization.yaml │ │ │ │ └── clusterclass-quick-start.yaml │ │ ├── kubetest │ │ │ ├── conformance.yaml │ │ │ └── dualstack.yaml │ │ └── shared │ │ │ ├── main │ │ │ ├── docker │ │ │ │ └── metadata.yaml │ │ │ └── metadata.yaml │ │ │ ├── v0.3 │ │ │ └── metadata.yaml │ │ │ ├── v0.4 │ │ │ └── metadata.yaml │ │ │ ├── v1.10 │ │ │ └── metadata.yaml │ │ │ ├── v1.5 │ │ │ └── metadata.yaml │ │ │ ├── v1.6 │ │ │ └── metadata.yaml │ │ │ ├── v1.8 │ │ │ └── metadata.yaml │ │ │ └── v1.9 │ │ │ └── metadata.yaml │ ├── doc.go │ ├── e2e_suite_test.go │ ├── internal │ │ └── log │ │ │ ├── doc.go │ │ │ └── log.go │ ├── k8s_conformance.go │ ├── k8s_conformance_test.go │ ├── kcp_adoption.go │ ├── kcp_adoption_test.go │ ├── kcp_remediations.go │ ├── kcp_remediations_test.go │ ├── machine_pool.go │ ├── machine_pool_test.go │ ├── md_remediations.go │ ├── md_remediations_test.go │ ├── md_rollout.go │ ├── md_rollout_test.go │ ├── md_scale.go │ ├── md_scale_test.go │ ├── node_drain.go │ ├── node_drain_test.go │ ├── quick_start.go │ ├── quick_start_test.go │ ├── scale.go │ ├── scale_test.go │ ├── self_hosted.go │ └── self_hosted_test.go ├── extension │ ├── .import-restrictions │ ├── Dockerfile │ ├── config │ │ ├── certmanager │ │ │ ├── certificate.yaml │ │ │ ├── kustomization.yaml │ │ │ └── kustomizeconfig.yaml │ │ ├── default │ │ │ ├── kustomization.yaml │ │ │ ├── manager.yaml │ │ │ ├── manager_image_patch.yaml │ │ │ ├── manager_pull_policy.yaml │ │ │ ├── manager_webhook_patch.yaml │ │ │ ├── namespace.yaml │ │ │ └── service.yaml │ │ ├── rbac │ │ │ ├── kustomization.yaml │ │ │ ├── leader_election_role.yaml │ │ │ ├── leader_election_role_binding.yaml │ │ │ ├── role.yaml │ │ │ ├── role_binding.yaml │ │ │ └── service_account.yaml │ │ └── tilt │ │ │ └── extensionconfig.yaml │ ├── handlers │ │ ├── lifecycle │ │ │ └── handlers.go │ │ └── topologymutation │ │ │ ├── handler.go │ │ │ ├── handler_integration_test.go │ │ │ ├── handler_test.go │ │ │ └── testdata │ │ │ └── clusterclass-quick-start-runtimesdk.yaml │ └── main.go ├── framework │ ├── OWNERS │ ├── README.md │ ├── alltypes_helpers.go │ ├── autoscaler_helpers.go │ ├── bootstrap │ │ ├── interfaces.go │ │ ├── kind_provider.go │ │ └── kind_util.go │ ├── cluster_helpers.go │ ├── cluster_proxy.go │ ├── cluster_topology_helpers.go │ ├── clusterctl │ │ ├── ca_injection.go │ │ ├── client.go │ │ ├── clusterctl_config.go │ │ ├── clusterctl_helpers.go │ │ ├── doc.go │ │ ├── e2e_config.go │ │ ├── e2e_config_test.go │ │ ├── logger │ │ │ ├── log_file.go │ │ │ └── logger.go │ │ └── repository.go │ ├── clusterresourceset_helpers.go │ ├── clusterresourceset_helpers_test.go │ ├── control_plane.go │ ├── controller_helpers.go │ ├── controlplane_helpers.go │ ├── convenience.go │ ├── convenience_test.go │ ├── crdmigration_helpers.go │ ├── daemonset_helpers.go │ ├── deployment_helpers.go │ ├── deployment_helpers_test.go │ ├── doc.go │ ├── docker_logcollector.go │ ├── exec │ │ └── command.go │ ├── finalizers_helpers.go │ ├── ginkgoextensions │ │ └── output.go │ ├── interfaces.go │ ├── internal │ │ └── log │ │ │ └── log.go │ ├── kubernetesversions │ │ ├── data │ │ │ ├── debian_injection_script.envsubst.sh.tpl │ │ │ └── kustomization.yaml │ │ ├── template.go │ │ ├── versions.go │ │ └── versions_test.go │ ├── kubetest │ │ ├── run.go │ │ └── setup.go │ ├── machine_helpers.go │ ├── machinedeployment_helpers.go │ ├── machinehealthcheck_helpers.go │ ├── machinepool_helpers.go │ ├── machines.go │ ├── machineset_helpers.go │ ├── namespace_helpers.go │ ├── node_helpers.go │ ├── ownerreference_helpers.go │ ├── pod_helpers.go │ ├── resourceversion_helpers.go │ ├── spec_helpers.go │ └── suite_helpers.go ├── go.mod ├── go.sum └── infrastructure │ ├── container │ ├── docker.go │ ├── fake.go │ ├── interface.go │ └── interface_test.go │ ├── docker │ ├── .gitignore │ ├── Dockerfile │ ├── OWNERS │ ├── README.md │ ├── api │ │ ├── .import-restrictions │ │ ├── v1alpha3 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── dockercluster_types.go │ │ │ ├── dockermachine_types.go │ │ │ ├── dockermachinetemplate_types.go │ │ │ ├── groupversion_info.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── v1alpha4 │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── conversion_test.go │ │ │ ├── doc.go │ │ │ ├── dockercluster_types.go │ │ │ ├── dockerclustertemplate_types.go │ │ │ ├── dockermachine_types.go │ │ │ ├── dockermachinetemplate_types.go │ │ │ ├── groupversion_info.go │ │ │ ├── zz_generated.conversion.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1beta1 │ │ │ ├── .import-restrictions │ │ │ ├── condition_consts.go │ │ │ ├── conversion.go │ │ │ ├── devcluster_types.go │ │ │ ├── devclustertemplate_types.go │ │ │ ├── devmachine_types.go │ │ │ ├── devmachinetemplate_types.go │ │ │ ├── doc.go │ │ │ ├── dockercluster_types.go │ │ │ ├── dockerclustertemplate_types.go │ │ │ ├── dockermachine_types.go │ │ │ ├── dockermachinetemplate_types.go │ │ │ ├── groupversion_info.go │ │ │ ├── v1beta2_condition_consts.go │ │ │ └── zz_generated.deepcopy.go │ ├── config │ │ ├── certmanager │ │ │ ├── certificate.yaml │ │ │ ├── kustomization.yaml │ │ │ └── kustomizeconfig.yaml │ │ ├── crd │ │ │ ├── bases │ │ │ │ ├── infrastructure.cluster.x-k8s.io_devclusters.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_devclustertemplates.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_devmachines.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_devmachinetemplates.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_dockerclusters.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_dockerclustertemplates.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_dockermachinepools.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_dockermachinepooltemplates.yaml │ │ │ │ ├── infrastructure.cluster.x-k8s.io_dockermachines.yaml │ │ │ │ └── infrastructure.cluster.x-k8s.io_dockermachinetemplates.yaml │ │ │ ├── kustomization.yaml │ │ │ ├── kustomizeconfig.yaml │ │ │ └── patches │ │ │ │ ├── webhook_in_devclusters.yaml │ │ │ │ ├── webhook_in_devclustertemplates.yaml │ │ │ │ ├── webhook_in_devmachines.yaml │ │ │ │ ├── webhook_in_devmachinetemplates.yaml │ │ │ │ ├── webhook_in_dockerclusters.yaml │ │ │ │ ├── webhook_in_dockerclustertemplates.yaml │ │ │ │ ├── webhook_in_dockermachinepools.yaml │ │ │ │ ├── webhook_in_dockermachinepooltemplates.yaml │ │ │ │ ├── webhook_in_dockermachines.yaml │ │ │ │ └── webhook_in_dockermachinetemplates.yaml │ │ ├── default │ │ │ ├── kustomization.yaml │ │ │ ├── manager_image_patch.yaml │ │ │ ├── manager_pull_policy.yaml │ │ │ ├── manager_webhook_patch.yaml │ │ │ ├── namespace.yaml │ │ │ └── webhookcainjection_patch.yaml │ │ ├── manager │ │ │ ├── kustomization.yaml │ │ │ └── manager.yaml │ │ ├── rbac │ │ │ ├── kustomization.yaml │ │ │ ├── leader_election_role.yaml │ │ │ ├── leader_election_role_binding.yaml │ │ │ ├── role.yaml │ │ │ ├── role_binding.yaml │ │ │ └── service_account.yaml │ │ └── webhook │ │ │ ├── kustomization.yaml │ │ │ ├── kustomizeconfig.yaml │ │ │ ├── manifests.yaml │ │ │ └── service.yaml │ ├── controllers │ │ └── alias.go │ ├── examples │ │ ├── machine-pool.yaml │ │ ├── simple-cluster-ipv6.yaml │ │ ├── simple-cluster-without-kcp.yaml │ │ └── simple-cluster.yaml │ ├── exp │ │ ├── README.md │ │ ├── api │ │ │ ├── .import-restrictions │ │ │ ├── v1alpha3 │ │ │ │ ├── conversion.go │ │ │ │ ├── conversion_test.go │ │ │ │ ├── doc.go │ │ │ │ ├── dockermachinepool_types.go │ │ │ │ ├── groupversion_info.go │ │ │ │ ├── zz_generated.conversion.go │ │ │ │ └── zz_generated.deepcopy.go │ │ │ ├── v1alpha4 │ │ │ │ ├── conversion.go │ │ │ │ ├── conversion_test.go │ │ │ │ ├── doc.go │ │ │ │ ├── dockermachinepool_types.go │ │ │ │ ├── groupversion_info.go │ │ │ │ ├── zz_generated.conversion.go │ │ │ │ └── zz_generated.deepcopy.go │ │ │ └── v1beta1 │ │ │ │ ├── .import-restrictions │ │ │ │ ├── conversion.go │ │ │ │ ├── dockermachinepool_types.go │ │ │ │ ├── dockermachinepooltemplate_types.go │ │ │ │ ├── groupversion_info.go │ │ │ │ └── zz_generated.deepcopy.go │ │ ├── controllers │ │ │ ├── alias.go │ │ │ └── exp.go │ │ ├── internal │ │ │ ├── controllers │ │ │ │ ├── dockermachinepool_controller.go │ │ │ │ └── dockermachinepool_controller_phases.go │ │ │ └── webhooks │ │ │ │ ├── doc.go │ │ │ │ └── dockermachinepool_webhook.go │ │ └── webhooks │ │ │ ├── alias.go │ │ │ └── doc.go │ ├── internal │ │ ├── controllers │ │ │ ├── backends │ │ │ │ ├── cluster.go │ │ │ │ ├── doc.go │ │ │ │ ├── docker │ │ │ │ │ ├── dockercluster_backend.go │ │ │ │ │ └── dockermachine_backend.go │ │ │ │ ├── inmemory │ │ │ │ │ ├── README.md │ │ │ │ │ ├── architecture.drawio.svg │ │ │ │ │ ├── inmemorycluster_backend.go │ │ │ │ │ ├── inmemorymachine_backend.go │ │ │ │ │ └── inmemorymachine_controller_test.go │ │ │ │ └── machine.go │ │ │ ├── devcluster_controller.go │ │ │ ├── devmachine_controller.go │ │ │ ├── doc.go │ │ │ ├── dockercluster_controller.go │ │ │ ├── dockermachine_controller.go │ │ │ ├── dockermachine_controller_test.go │ │ │ └── suite_test.go │ │ ├── docker │ │ │ ├── doc.go │ │ │ ├── errors.go │ │ │ ├── loadbalancer.go │ │ │ ├── machine.go │ │ │ ├── manager.go │ │ │ ├── manager_test.go │ │ │ ├── types │ │ │ │ ├── node.go │ │ │ │ └── node_test.go │ │ │ └── util.go │ │ ├── loadbalancer │ │ │ ├── config.go │ │ │ ├── config_test.go │ │ │ ├── const.go │ │ │ └── doc.go │ │ ├── provisioning │ │ │ ├── cloudinit │ │ │ │ ├── adapter.go │ │ │ │ ├── adapter_test.go │ │ │ │ ├── doc.go │ │ │ │ ├── runcmd.go │ │ │ │ ├── runcmd_test.go │ │ │ │ ├── unknown.go │ │ │ │ ├── unknown_test.go │ │ │ │ ├── writefiles.go │ │ │ │ └── writefiles_test.go │ │ │ ├── commands.go │ │ │ └── ignition │ │ │ │ ├── OWNERS │ │ │ │ ├── doc.go │ │ │ │ ├── kindadapter.go │ │ │ │ └── kindadapter_test.go │ │ └── webhooks │ │ │ ├── devcluster_webhook.go │ │ │ ├── devclustertemplate_webhook.go │ │ │ ├── devclustertemplate_webhook_test.go │ │ │ ├── devmachine_webhook.go │ │ │ ├── devmachinetemplate_webhook.go │ │ │ ├── devmachinetemplate_webhook_test.go │ │ │ ├── doc.go │ │ │ ├── dockercluster_webhook.go │ │ │ ├── dockerclustertemplate_webhook.go │ │ │ ├── dockerclustertemplate_webhook_test.go │ │ │ ├── dockermachinetemplate_webhook.go │ │ │ └── dockermachinetemplate_webhook_test.go │ ├── main.go │ ├── templates │ │ ├── cluster-template-development-mp.yaml │ │ ├── cluster-template-development.yaml │ │ ├── cluster-template-in-memory.yaml │ │ ├── clusterclass-in-memory.yaml │ │ └── clusterclass-quick-start.yaml │ └── webhooks │ │ ├── alias.go │ │ └── doc.go │ ├── inmemory │ ├── OWNERS │ └── pkg │ │ ├── cloud │ │ └── api │ │ │ └── v1alpha1 │ │ │ ├── etcdcluster_annotations.go │ │ │ ├── groupversion_info.go │ │ │ ├── machine_types.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── runtime │ │ ├── alias.go │ │ ├── cache │ │ │ ├── cache.go │ │ │ ├── cache_test.go │ │ │ ├── client.go │ │ │ ├── client_test.go │ │ │ ├── doc.go │ │ │ ├── gc.go │ │ │ ├── gc_test.go │ │ │ ├── hooks.go │ │ │ ├── informer.go │ │ │ ├── sync.go │ │ │ └── sync_test.go │ │ ├── client │ │ │ ├── client.go │ │ │ └── doc.go │ │ ├── doc.go │ │ ├── manager │ │ │ ├── doc.go │ │ │ └── manager.go │ │ └── resourcegroup │ │ │ ├── cached_resourcegroup.go │ │ │ ├── doc.go │ │ │ └── resourcegroup.go │ │ └── server │ │ ├── api │ │ ├── const.go │ │ ├── debug.go │ │ ├── doc.go │ │ ├── handler.go │ │ ├── metrics.go │ │ ├── portforward │ │ │ ├── doc.go │ │ │ └── httpstreams.go │ │ └── watch.go │ │ ├── certs.go │ │ ├── doc.go │ │ ├── etcd │ │ ├── doc.go │ │ ├── handler.go │ │ ├── handler_test.go │ │ └── metrics.go │ │ ├── listener.go │ │ ├── mux.go │ │ ├── mux_test.go │ │ └── proxy │ │ ├── addr.go │ │ ├── conn.go │ │ ├── dial.go │ │ ├── doc.go │ │ └── proxy.go │ └── kind │ ├── mapper.go │ └── mapper_test.go ├── util ├── annotations │ ├── helpers.go │ └── helpers_test.go ├── apiwarnings │ ├── doc.go │ ├── expressions.go │ ├── handler.go │ └── handler_test.go ├── cache │ ├── cache.go │ ├── cache_test.go │ └── doc.go ├── certs │ ├── certs.go │ ├── certs_test.go │ ├── consts.go │ └── types.go ├── collections │ ├── helpers.go │ ├── machine_collection.go │ ├── machine_collection_test.go │ ├── machine_filters.go │ ├── machine_filters_test.go │ └── suite_test.go ├── conditions │ ├── aggregate.go │ ├── aggregate_test.go │ ├── deprecated │ │ └── v1beta1 │ │ │ ├── doc.go │ │ │ ├── getter.go │ │ │ ├── getter_test.go │ │ │ ├── matcher.go │ │ │ ├── matcher_test.go │ │ │ ├── matchers.go │ │ │ ├── merge.go │ │ │ ├── merge_strategies.go │ │ │ ├── merge_strategies_test.go │ │ │ ├── merge_test.go │ │ │ ├── patch.go │ │ │ ├── patch_test.go │ │ │ ├── setter.go │ │ │ ├── setter_test.go │ │ │ ├── suite_test.go │ │ │ ├── unstructured.go │ │ │ └── unstructured_test.go │ ├── doc.go │ ├── getter.go │ ├── getter_test.go │ ├── matcher.go │ ├── matcher_test.go │ ├── merge_strategies.go │ ├── merge_strategies_test.go │ ├── mirror.go │ ├── mirror_test.go │ ├── options.go │ ├── patch.go │ ├── patch_test.go │ ├── setter.go │ ├── setter_test.go │ ├── sort.go │ ├── sort_test.go │ ├── summary.go │ └── summary_test.go ├── container │ ├── image.go │ └── image_test.go ├── contract │ ├── contract.go │ └── doc.go ├── conversion │ ├── conversion.go │ └── conversion_test.go ├── deprecated │ └── v1beta1 │ │ ├── conditions │ │ ├── doc.go │ │ ├── getter.go │ │ ├── getter_test.go │ │ ├── matcher.go │ │ ├── matcher_test.go │ │ ├── matchers.go │ │ ├── merge.go │ │ ├── merge_strategies.go │ │ ├── merge_strategies_test.go │ │ ├── merge_test.go │ │ ├── patch.go │ │ ├── patch_test.go │ │ ├── setter.go │ │ ├── setter_test.go │ │ ├── suite_test.go │ │ ├── unstructured.go │ │ ├── unstructured_test.go │ │ └── v1beta2 │ │ │ ├── aggregate.go │ │ │ ├── aggregate_test.go │ │ │ ├── doc.go │ │ │ ├── getter.go │ │ │ ├── getter_test.go │ │ │ ├── matcher.go │ │ │ ├── matcher_test.go │ │ │ ├── merge_strategies.go │ │ │ ├── merge_strategies_test.go │ │ │ ├── mirror.go │ │ │ ├── mirror_test.go │ │ │ ├── options.go │ │ │ ├── patch.go │ │ │ ├── patch_test.go │ │ │ ├── setter.go │ │ │ ├── setter_test.go │ │ │ ├── sort.go │ │ │ ├── sort_test.go │ │ │ ├── summary.go │ │ │ └── summary_test.go │ │ ├── patch │ │ ├── doc.go │ │ ├── options.go │ │ ├── patch.go │ │ ├── patch_test.go │ │ ├── suite_test.go │ │ ├── utils.go │ │ └── utils_test.go │ │ ├── paused │ │ ├── paused.go │ │ └── paused_test.go │ │ └── test │ │ └── builder │ │ ├── crd │ │ ├── deprecatedtest.cluster.x-k8s.io_phase0obj.yaml │ │ ├── deprecatedtest.cluster.x-k8s.io_phase1obj.yaml │ │ ├── deprecatedtest.cluster.x-k8s.io_phase2obj.yaml │ │ └── deprecatedtest.cluster.x-k8s.io_phase3obj.yaml │ │ ├── doc.go │ │ ├── v1beta2_transition.go │ │ └── zz_generated.deepcopy.go ├── failuredomains │ ├── failure_domains.go │ └── failure_domains_test.go ├── finalizers │ ├── finalizers.go │ └── finalizers_test.go ├── flags │ ├── manager.go │ └── manager_test.go ├── kubeconfig │ ├── kubeconfig.go │ ├── kubeconfig_test.go │ └── testing.go ├── labels │ ├── format │ │ ├── helpers.go │ │ └── helpers_test.go │ ├── helpers.go │ └── helpers_test.go ├── log │ ├── doc.go │ ├── log.go │ └── log_test.go ├── patch │ ├── doc.go │ ├── options.go │ ├── patch.go │ ├── patch_test.go │ ├── suite_test.go │ ├── utils.go │ └── utils_test.go ├── paused │ ├── paused.go │ └── paused_test.go ├── predicates │ ├── cluster_predicates.go │ ├── cluster_predicates_test.go │ └── generic_predicates.go ├── record │ └── recorder.go ├── resource │ ├── resource.go │ └── resource_test.go ├── retry.go ├── secret │ ├── certificates.go │ ├── certificates_test.go │ ├── consts.go │ ├── doc.go │ ├── secret.go │ └── secret_test.go ├── suite_test.go ├── test │ └── builder │ │ ├── README.md │ │ ├── bootstrap.go │ │ ├── builders.go │ │ ├── controlplane.go │ │ ├── crd │ │ ├── test.cluster.x-k8s.io_phase0obj.yaml │ │ ├── test.cluster.x-k8s.io_phase1obj.yaml │ │ ├── test.cluster.x-k8s.io_phase2obj.yaml │ │ └── test.cluster.x-k8s.io_phase3obj.yaml │ │ ├── crds.go │ │ ├── doc.go │ │ ├── infrastructure.go │ │ ├── remediation.go │ │ ├── v1beta2_transition.go │ │ └── zz_generated.deepcopy.go ├── topology │ ├── topology.go │ └── topology_test.go ├── util.go ├── util_test.go ├── version │ ├── version.go │ └── version_test.go └── yaml │ ├── yaml.go │ └── yaml_test.go ├── version └── version.go └── webhooks ├── alias.go └── doc.go /.gitattributes: -------------------------------------------------------------------------------- 1 | # Hide generated crd yamls by default in the Github diff UX 2 | **/config/crd/bases/*.yaml linguist-generated=true 3 | cmd/clusterctl/config/manifest/clusterctl-api.yaml linguist-generated=true -------------------------------------------------------------------------------- /.github/workflows/pr-verify.yaml: -------------------------------------------------------------------------------- 1 | name: PR title verifier 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened, edited, synchronize, reopened] 6 | 7 | jobs: 8 | verify: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2 13 | 14 | - name: Check if PR title is valid 15 | env: 16 | PR_TITLE: ${{ github.event.pull_request.title }} 17 | run: | 18 | ./hack/verify-pr-title.sh "${PR_TITLE}" 19 | 20 | -------------------------------------------------------------------------------- /.markdownlinkcheck.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignorePatterns": [{ 3 | "pattern": "^http://localhost" 4 | },{ 5 | "pattern": "https://azure.microsoft.com/en-us/products/kubernetes-service" 6 | }], 7 | "httpHeaders": [{ 8 | "comment": "Workaround as suggested here: https://github.com/tcort/markdown-link-check/issues/201", 9 | "urls": ["https://docs.github.com/"], 10 | "headers": { 11 | "Accept-Encoding": "zstd, br, gzip, deflate" 12 | } 13 | }], 14 | "timeout": "10s", 15 | "retryOn429": true, 16 | "retryCount": 5, 17 | "fallbackRetryDelay": "30s", 18 | "aliveStatusCodes": [200, 206] 19 | } 20 | -------------------------------------------------------------------------------- /CHANGELOG/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-release-lead 5 | 6 | reviewers: 7 | - cluster-api-release-team 8 | -------------------------------------------------------------------------------- /CHANGELOG/README.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | This folder contains release notes for past releases. Changes to this folder in the main branch trigger a GitHub Action that creates release tags and a draft release. 4 | 5 | See [release documentation](../docs/release/release-team.md) for more information. 6 | -------------------------------------------------------------------------------- /CHANGELOG/v1.7.8.md: -------------------------------------------------------------------------------- 1 | ## 👌 Kubernetes version support 2 | 3 | - Management Cluster: v1.26.x -> v1.30.x 4 | - Workload Cluster: v1.24.x -> v1.30.x 5 | 6 | [More information about version support can be found here](https://cluster-api.sigs.k8s.io/reference/versions.html) 7 | 8 | ## Changes since v1.7.7 9 | ## :chart_with_upwards_trend: Overview 10 | - 2 new commits merged 11 | 12 | ## :seedling: Others 13 | - clusterctl: Bump cert-manager to 1.16.1 (#11324) 14 | - Dependency: Uplift Go 1.22.8 (#11360) 15 | 16 | ## Dependencies 17 | 18 | ### Added 19 | _Nothing has changed._ 20 | 21 | ### Changed 22 | _Nothing has changed._ 23 | 24 | ### Removed 25 | _Nothing has changed._ 26 | 27 | _Thanks to all our contributors!_ 😊 28 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners for information on OWNERS files. 2 | # See the OWNERS_ALIASES file at https://github.com/kubernetes-sigs/cluster-api/blob/main/OWNERS_ALIASES for a list of members for each alias. 3 | 4 | approvers: 5 | - sig-cluster-lifecycle-leads 6 | - cluster-api-admins 7 | - cluster-api-maintainers 8 | 9 | reviewers: 10 | - cluster-api-maintainers 11 | - cluster-api-reviewers 12 | 13 | emeritus_approvers: 14 | - CecileRobertMichon 15 | - chuckha 16 | - detiber 17 | - kris-nova 18 | - ncdc 19 | - roberthbailey 20 | - davidewatson 21 | - ykakarap 22 | - killianmuldoon 23 | 24 | -------------------------------------------------------------------------------- /SECURITY_CONTACTS: -------------------------------------------------------------------------------- 1 | # Defined below are the security contacts for this repo. 2 | # 3 | # They are the contact point for the Product Security Team to reach out 4 | # to for triaging and handling of incoming issues. 5 | # 6 | # The below names agree to abide by the 7 | # [Embargo Policy](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md#embargo-policy) 8 | # and will be removed and replaced if they violate that agreement. 9 | # 10 | # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE 11 | # INSTRUCTIONS AT https://kubernetes.io/security/ 12 | 13 | fabriziopandini 14 | justinsb 15 | neolit123 16 | timothysc 17 | vincepri 18 | CecileRobertMichon 19 | -------------------------------------------------------------------------------- /api/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | # Enforce that our APIs do not depend on internal packages. 3 | - selectorRegexp: .*internal.* 4 | allowedPrefixes: [] 5 | forbiddenPrefixes: [] 6 | # Enforce that our APIs do not depend on CR packages. 7 | # This is overwritten e.g. in packages that require conversion. 8 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 9 | allowedPrefixes: [] 10 | forbiddenPrefixes: 11 | - "sigs.k8s.io/controller-runtime" 12 | -------------------------------------------------------------------------------- /api/addons/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/bootstrap/kubeadm/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/controlplane/kubeadm/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/core/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/core/v1beta2/index/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/ipam/v1alpha1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/ipam/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/ipam/v1beta2/conversion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2025 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package v1beta2 18 | 19 | func (*IPAddress) Hub() {} 20 | func (*IPAddressClaim) Hub() {} 21 | -------------------------------------------------------------------------------- /api/runtime/v1alpha1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /api/runtime/v1beta2/conversion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2025 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package v1beta2 18 | 19 | func (*ExtensionConfig) Hub() {} 20 | -------------------------------------------------------------------------------- /api/runtime/v1beta2/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2025 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package v1beta2 contains the v1beta2 implementation of ExtensionConfig. 18 | package v1beta2 19 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-bootstrap-provider-kubeadm-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-bootstrap-provider-kubeadm-reviewers 9 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/certmanager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - certificate.yaml 3 | 4 | configurations: 5 | - kustomizeconfig.yaml 6 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/certmanager/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This configuration is for teaching kustomize how to update name ref and var substitution 2 | nameReference: 3 | - kind: Issuer 4 | group: cert-manager.io 5 | fieldSpecs: 6 | - kind: Certificate 7 | group: cert-manager.io 8 | path: spec/issuerRef/name 9 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/crd/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This file is for teaching kustomize how to substitute name and namespace reference in CRD 2 | nameReference: 3 | - kind: Service 4 | version: v1 5 | fieldSpecs: 6 | - kind: CustomResourceDefinition 7 | group: apiextensions.k8s.io 8 | path: spec/conversion/webhook/clientConfig/service/name 9 | 10 | namespace: 11 | - kind: CustomResourceDefinition 12 | group: apiextensions.k8s.io 13 | path: spec/conversion/webhook/clientConfig/service/namespace 14 | create: false 15 | 16 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigs.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: kubeadmconfigs.bootstrap.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: capi-kubeadm-bootstrap-webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigtemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/default/manager_image_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - image: gcr.io/k8s-staging-cluster-api/kubeadm-bootstrap-controller:main 11 | name: manager 12 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/default/manager_pull_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | imagePullPolicy: Always 12 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/default/manager_webhook_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | ports: 12 | - containerPort: 9443 13 | name: webhook-server 14 | protocol: TCP 15 | volumeMounts: 16 | - mountPath: /tmp/k8s-webhook-server/serving-certs 17 | name: cert 18 | readOnly: true 19 | volumes: 20 | - name: cert 21 | secret: 22 | secretName: capi-kubeadm-bootstrap-webhook-service-cert 23 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/default/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | control-plane: controller-manager 6 | name: system 7 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/default/webhookcainjection_patch.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: admissionregistration.k8s.io/v1 3 | kind: MutatingWebhookConfiguration 4 | metadata: 5 | name: mutating-webhook-configuration 6 | annotations: 7 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 8 | --- 9 | apiVersion: admissionregistration.k8s.io/v1 10 | kind: ValidatingWebhookConfiguration 11 | metadata: 12 | name: validating-webhook-configuration 13 | annotations: 14 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 15 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - role.yaml 3 | - role_binding.yaml 4 | - service_account.yaml 5 | - leader_election_role.yaml 6 | - leader_election_role_binding.yaml 7 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/rbac/leader_election_role.yaml: -------------------------------------------------------------------------------- 1 | # permissions to do leader election. 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: leader-election-role 6 | rules: 7 | - apiGroups: 8 | - "" 9 | resources: 10 | - events 11 | verbs: 12 | - create 13 | - apiGroups: 14 | - "coordination.k8s.io" 15 | resources: 16 | - leases 17 | verbs: 18 | - get 19 | - list 20 | - watch 21 | - create 22 | - update 23 | - patch 24 | - delete 25 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: leader-election-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: leader-election-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: manager-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: manager-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: manager 5 | namespace: system 6 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/webhook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manifests.yaml 3 | - service.yaml 4 | 5 | configurations: 6 | - kustomizeconfig.yaml 7 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/config/webhook/service.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: webhook-service 6 | namespace: system 7 | spec: 8 | ports: 9 | - port: 443 10 | targetPort: webhook-server 11 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the Kubeadm controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/internal/cloudinit/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package cloudinit implements kubeadm cloudinit functionality. 18 | package cloudinit 19 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/internal/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the Kubeadm controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/internal/ignition/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-bootstrap-provider-kubeadm-ignition-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-bootstrap-provider-kubeadm-ignition-reviewers 9 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/types/README.md: -------------------------------------------------------------------------------- 1 | # Kubeadm types 2 | 3 | These types were copied in from `kubernetes/kubernetes`. 4 | 5 | The types found in `kubernetes/kubernetes` are incompatible with `controller-gen@v0.2`. 6 | 7 | `controller-gen@v0.2` requires that all fields of all embedded types have json struct tags and kubeadm types are missing a few. 8 | 9 | If the kubeadm types ever escape `kubernetes/kubernetes` then we will adopt those assuming the types do all have json struct tags. 10 | -------------------------------------------------------------------------------- /bootstrap/kubeadm/types/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package utils contains Kubeadm utility types. 18 | package utils 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-clusterctl-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-clusterctl-reviewers -------------------------------------------------------------------------------- /cmd/clusterctl/README.md: -------------------------------------------------------------------------------- 1 | # Clusterctl 2 | 3 | ## Compatibility notice 4 | 5 | The `clusterctl` CLI is developed in lock-step with Cluster API. We strongly recommend using the latest released version for the series you're using. For example, if you're managing clusters with Cluster API v0.3.7, the `clusterctl` version should be >= v0.3.7. 6 | 7 | When this package is used as a library, we do not currently provide any compatibility guarantees. We will make reasonable efforts to follow a typical deprecation period prior to removal, but breaking changes can happen when necessary. 8 | -------------------------------------------------------------------------------- /cmd/clusterctl/api/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: [] 4 | forbiddenPrefixes: 5 | - "sigs.k8s.io/controller-runtime" 6 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/alpha/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package alpha implements clusterctl alpha functionality. 18 | package alpha 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/cluster/assets/cert-manager-test-resources.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: cert-manager-test 5 | --- 6 | apiVersion: cert-manager.io/v1 7 | kind: Issuer 8 | metadata: 9 | name: test-selfsigned 10 | namespace: cert-manager-test 11 | spec: 12 | selfSigned: {} 13 | --- 14 | apiVersion: cert-manager.io/v1 15 | kind: Certificate 16 | metadata: 17 | name: selfsigned-cert 18 | namespace: cert-manager-test 19 | spec: 20 | dnsNames: 21 | - example.com 22 | secretName: selfsigned-cert-tls 23 | issuerRef: 24 | name: test-selfsigned 25 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/cluster/assets/topology-test/modified-CP-dockermachinepooltemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 2 | kind: DockerMachinePoolTemplate 3 | metadata: 4 | name: "docker-worker-machinepooltemplate" 5 | namespace: default 6 | spec: 7 | template: 8 | metadata: 9 | labels: 10 | docker-machinepool-template: test-template-worker 11 | spec: 12 | extraMounts: 13 | - containerPath: "/var/run/docker.sock" 14 | hostPath: "/var/run/docker.sock" 15 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/cluster/assets/topology-test/modified-CP-dockermachinetemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 2 | kind: DockerMachineTemplate 3 | metadata: 4 | name: "control-plane" 5 | namespace: default 6 | spec: 7 | template: 8 | metadata: 9 | labels: 10 | docker-machine-template: test-template-control-plane 11 | spec: 12 | extraMounts: 13 | - containerPath: "/var/run/docker.sock" 14 | hostPath: "/var/run/docker.sock" -------------------------------------------------------------------------------- /cmd/clusterctl/client/cluster/assets/topology-test/modified-my-cluster.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1beta2 2 | kind: Cluster 3 | metadata: 4 | name: "my-cluster" 5 | namespace: default 6 | labels: 7 | cni: kindnet 8 | spec: 9 | clusterNetwork: 10 | services: 11 | cidrBlocks: ["10.128.0.0/12"] 12 | pods: 13 | cidrBlocks: ["192.168.0.0/16"] 14 | serviceDomain: "cluster.local" 15 | topology: 16 | classRef: 17 | name: my-cluster-class 18 | version: v1.21.2 19 | controlPlane: 20 | metadata: {} 21 | replicas: 3 22 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/cluster/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package cluster implements clusterctl cluster functionality. 18 | package cluster 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/config/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package config implements clusterctl config functionality. 18 | package config 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package client implements clusterctl client functionality. 18 | package client 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/client/repository/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package repository implements clusterctl repository functionality. 18 | package repository 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/cmd/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package cmd implements clusterctl commands. 18 | package cmd 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/config/crd/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - bases/clusterctl.cluster.x-k8s.io_providers.yaml 6 | #- bases/clusterctl.cluster.x-k8s.io_metadata.yaml excluding metadata from the CRD manifest generation because metadata will be used as a ComponentConfig file only -------------------------------------------------------------------------------- /cmd/clusterctl/internal/test/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package test implements test functionality. 18 | package test 19 | -------------------------------------------------------------------------------- /cmd/clusterctl/internal/util/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package util implements clusterctl utilty functions. 18 | package util 19 | -------------------------------------------------------------------------------- /code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # Kubernetes Community Code of Conduct 2 | 3 | Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) 4 | -------------------------------------------------------------------------------- /config/certmanager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - certificate.yaml 5 | 6 | configurations: 7 | - kustomizeconfig.yaml 8 | -------------------------------------------------------------------------------- /config/certmanager/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This configuration is for teaching kustomize how to update name ref and var substitution 2 | nameReference: 3 | - kind: Issuer 4 | group: cert-manager.io 5 | fieldSpecs: 6 | - kind: Certificate 7 | group: cert-manager.io 8 | path: spec/issuerRef/name 9 | 10 | -------------------------------------------------------------------------------- /config/crd/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This file is for teaching kustomize how to substitute name and namespace reference in CRD 2 | nameReference: 3 | - kind: Service 4 | version: v1 5 | fieldSpecs: 6 | - kind: CustomResourceDefinition 7 | group: apiextensions.k8s.io 8 | path: spec/conversion/webhook/clientConfig/service/name 9 | 10 | namespace: 11 | - kind: CustomResourceDefinition 12 | group: apiextensions.k8s.io 13 | path: spec/conversion/webhook/clientConfig/service/namespace 14 | create: false 15 | 16 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_clusterclasses.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: clusterclasses.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_clusterresourcesetbindings.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: clusterresourcesetbindings.addons.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_clusterresourcesets.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: clusterresourcesets.addons.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_clusters.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: clusters.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_extensionconfigs.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: extensionconfigs.runtime.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_ipaddressclaims.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: ipaddressclaims.ipam.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_ipaddresses.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: ipaddresses.ipam.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machinedeployments.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machinedeployments.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machinedrainrules.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machinedrainrules.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machinehealthchecks.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machinehealthchecks.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machinepools.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machinepools.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machines.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machines.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/crd/patches/webhook_in_machinesets.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: machinesets.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /config/default/manager_image_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - image: gcr.io/k8s-staging-cluster-api/cluster-api-controller:main 11 | name: manager 12 | -------------------------------------------------------------------------------- /config/default/manager_pull_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | imagePullPolicy: Always 12 | -------------------------------------------------------------------------------- /config/default/manager_role_aggregation_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: manager-role 5 | labels: 6 | cluster.x-k8s.io/aggregate-to-manager: "true" 7 | --- 8 | apiVersion: rbac.authorization.k8s.io/v1 9 | kind: ClusterRoleBinding 10 | metadata: 11 | name: manager-rolebinding 12 | roleRef: 13 | apiGroup: rbac.authorization.k8s.io 14 | kind: ClusterRole 15 | name: aggregated-manager-role 16 | -------------------------------------------------------------------------------- /config/default/manager_webhook_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | ports: 12 | - containerPort: 9443 13 | name: webhook-server 14 | protocol: TCP 15 | volumeMounts: 16 | - mountPath: /tmp/k8s-webhook-server/serving-certs 17 | name: cert 18 | readOnly: true 19 | volumes: 20 | - name: cert 21 | secret: 22 | secretName: capi-webhook-service-cert 23 | -------------------------------------------------------------------------------- /config/default/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | control-plane: controller-manager 6 | name: system 7 | -------------------------------------------------------------------------------- /config/default/webhookcainjection_patch.yaml: -------------------------------------------------------------------------------- 1 | # This patch add annotation to admission webhook config and 2 | # the variables CERTIFICATE_NAMESPACE and CERTIFICATE_NAME will be substituted by kustomize. 3 | # uncomment the following lines to enable mutating webhook 4 | apiVersion: admissionregistration.k8s.io/v1 5 | kind: MutatingWebhookConfiguration 6 | metadata: 7 | name: mutating-webhook-configuration 8 | annotations: 9 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 10 | --- 11 | apiVersion: admissionregistration.k8s.io/v1 12 | kind: ValidatingWebhookConfiguration 13 | metadata: 14 | name: validating-webhook-configuration 15 | annotations: 16 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 17 | -------------------------------------------------------------------------------- /config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | -------------------------------------------------------------------------------- /config/metrics/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ./crd-clusterrole.yaml 3 | 4 | namespace: observability 5 | 6 | configMapGenerator: 7 | - name: kube-state-metrics-crd-config-capi 8 | files: 9 | - capi.yaml=crd-metrics-config.yaml 10 | options: 11 | disableNameSuffixHash: true 12 | labels: 13 | kube-state-metrics/custom-resource: "true" 14 | -------------------------------------------------------------------------------- /config/metrics/templates/README.md: -------------------------------------------------------------------------------- 1 | # Metrics 2 | 3 | **Disclaimer**: This is a temporary workaround. The long-term goal is to generate metric configuration from API type markers. 4 | 5 | The make target `generate-metrics-config` is used to generate a single file which contains the Cluster API specific custom resource configuration for kube-state-metrics. 6 | 7 | To regenerate the file `../crd-metrics-config.yaml`, execute the `make generate-metrics-config` command. 8 | -------------------------------------------------------------------------------- /config/metrics/templates/clusterclass.yaml: -------------------------------------------------------------------------------- 1 | - groupVersionKind: 2 | group: cluster.x-k8s.io 3 | kind: ClusterClass 4 | version: v1beta1 5 | labelsFromPath: 6 | name: 7 | - metadata 8 | - name 9 | namespace: 10 | - metadata 11 | - namespace 12 | uid: 13 | - metadata 14 | - uid 15 | metricNamePrefix: capi_clusterclass 16 | metrics: 17 | - name: info 18 | help: Information about a clusterclass. 19 | each: 20 | info: 21 | # TODO: added metadata.name even it's already defined above as the metric doesn't work with empty labelsFromPath. 22 | labelsFromPath: 23 | name: 24 | - metadata 25 | - name 26 | type: Info 27 | -------------------------------------------------------------------------------- /config/metrics/templates/header.yaml: -------------------------------------------------------------------------------- 1 | kind: CustomResourceStateMetrics 2 | spec: 3 | resources: 4 | -------------------------------------------------------------------------------- /config/metrics/templates/owner_metric.yaml: -------------------------------------------------------------------------------- 1 | - name: owner 2 | help: Owner references. 3 | each: 4 | info: 5 | labelsFromPath: 6 | owner_is_controller: 7 | - controller 8 | owner_kind: 9 | - kind 10 | owner_name: 11 | - name 12 | owner_uid: 13 | - uid 14 | path: 15 | - metadata 16 | - ownerReferences 17 | type: Info 18 | -------------------------------------------------------------------------------- /config/rbac/aggregated_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: aggregated-manager-role 5 | aggregationRule: 6 | clusterRoleSelectors: 7 | - matchLabels: 8 | cluster.x-k8s.io/aggregate-to-manager: "true" 9 | rules: [] 10 | -------------------------------------------------------------------------------- /config/rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - role_binding.yaml 5 | - role.yaml 6 | - service_account.yaml 7 | - leader_election_role.yaml 8 | - leader_election_role_binding.yaml 9 | - aggregated_role.yaml 10 | -------------------------------------------------------------------------------- /config/rbac/leader_election_role.yaml: -------------------------------------------------------------------------------- 1 | 2 | # permissions to do leader election. 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | kind: Role 5 | metadata: 6 | name: leader-election-role 7 | rules: 8 | - apiGroups: 9 | - "" 10 | resources: 11 | - events 12 | verbs: 13 | - create 14 | - apiGroups: 15 | - "coordination.k8s.io" 16 | resources: 17 | - leases 18 | verbs: 19 | - get 20 | - list 21 | - watch 22 | - create 23 | - update 24 | - patch 25 | - delete 26 | -------------------------------------------------------------------------------- /config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: leader-election-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: leader-election-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: manager-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: manager-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: manager 5 | namespace: system 6 | -------------------------------------------------------------------------------- /config/webhook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manifests.yaml 3 | - service.yaml 4 | 5 | configurations: 6 | - kustomizeconfig.yaml 7 | -------------------------------------------------------------------------------- /config/webhook/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: webhook-service 5 | namespace: system 6 | spec: 7 | ports: 8 | - port: 443 9 | targetPort: webhook-server 10 | -------------------------------------------------------------------------------- /controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2019 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /controllers/external/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package external implements external controller types. 18 | package external 19 | -------------------------------------------------------------------------------- /controllers/external/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2024 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package fake provides a fake controllers for testing. 18 | package fake 19 | -------------------------------------------------------------------------------- /controllers/remote/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package remote implements remote controllers. 18 | package remote 19 | -------------------------------------------------------------------------------- /controlplane/kubeadm/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-controlplane-provider-kubeadm-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-controlplane-provider-kubeadm-reviewers 9 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/certmanager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - certificate.yaml 3 | 4 | configurations: 5 | - kustomizeconfig.yaml 6 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/certmanager/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This configuration is for teaching kustomize how to update name ref and var substitution 2 | nameReference: 3 | - kind: Issuer 4 | group: cert-manager.io 5 | fieldSpecs: 6 | - kind: Certificate 7 | group: cert-manager.io 8 | path: spec/issuerRef/name 9 | 10 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/crd/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This file is for teaching kustomize how to substitute name and namespace reference in CRD 2 | nameReference: 3 | - kind: Service 4 | version: v1 5 | fieldSpecs: 6 | - kind: CustomResourceDefinition 7 | group: apiextensions.k8s.io 8 | path: spec/conversion/webhook/clientConfig/service/name 9 | 10 | namespace: 11 | - kind: CustomResourceDefinition 12 | group: apiextensions.k8s.io 13 | path: spec/conversion/webhook/clientConfig/service/namespace 14 | create: false 15 | 16 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanes.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: kubeadmcontrolplanes.controlplane.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanetemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/manager_image_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - image: gcr.io/k8s-staging-cluster-api/kubeadm-control-plane-controller:main 11 | name: manager 12 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/manager_pull_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | imagePullPolicy: Always 12 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/manager_role_aggregation_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: manager-role 5 | labels: 6 | kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true" 7 | --- 8 | apiVersion: rbac.authorization.k8s.io/v1 9 | kind: ClusterRoleBinding 10 | metadata: 11 | name: manager-rolebinding 12 | roleRef: 13 | apiGroup: rbac.authorization.k8s.io 14 | kind: ClusterRole 15 | name: aggregated-manager-role 16 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/manager_webhook_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | ports: 12 | - containerPort: 9443 13 | name: webhook-server 14 | protocol: TCP 15 | volumeMounts: 16 | - mountPath: /tmp/k8s-webhook-server/serving-certs 17 | name: cert 18 | readOnly: true 19 | volumes: 20 | - name: cert 21 | secret: 22 | secretName: capi-kubeadm-control-plane-webhook-service-cert 23 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | control-plane: controller-manager 6 | name: system 7 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/default/webhookcainjection_patch.yaml: -------------------------------------------------------------------------------- 1 | # This patch add annotation to admission webhook config and 2 | # the variables CERTIFICATE_NAMESPACE and CERTIFICATE_NAME will be substituted by kustomize. 3 | apiVersion: admissionregistration.k8s.io/v1 4 | kind: MutatingWebhookConfiguration 5 | metadata: 6 | name: mutating-webhook-configuration 7 | annotations: 8 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 9 | --- 10 | apiVersion: admissionregistration.k8s.io/v1 11 | kind: ValidatingWebhookConfiguration 12 | metadata: 13 | name: validating-webhook-configuration 14 | annotations: 15 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 16 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/aggregated_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: aggregated-manager-role 5 | aggregationRule: 6 | clusterRoleSelectors: 7 | - matchLabels: 8 | kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true" 9 | rules: [] 10 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - role.yaml 3 | - role_binding.yaml 4 | - service_account.yaml 5 | - leader_election_role.yaml 6 | - leader_election_role_binding.yaml 7 | - aggregated_role.yaml 8 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/leader_election_role.yaml: -------------------------------------------------------------------------------- 1 | # permissions to do leader election. 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: leader-election-role 6 | rules: 7 | - apiGroups: 8 | - "" 9 | resources: 10 | - events 11 | verbs: 12 | - create 13 | - apiGroups: 14 | - "coordination.k8s.io" 15 | resources: 16 | - leases 17 | verbs: 18 | - get 19 | - list 20 | - watch 21 | - create 22 | - update 23 | - patch 24 | - delete 25 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: leader-election-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: leader-election-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: manager-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: manager-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: manager 5 | namespace: system 6 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/webhook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manifests.yaml 3 | - service.yaml 4 | 5 | configurations: 6 | - kustomizeconfig.yaml 7 | -------------------------------------------------------------------------------- /controlplane/kubeadm/config/webhook/service.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: webhook-service 6 | namespace: system 7 | spec: 8 | ports: 9 | - port: 443 10 | targetPort: webhook-server 11 | -------------------------------------------------------------------------------- /controlplane/kubeadm/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the Kubeadm controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /controlplane/kubeadm/internal/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the Kubeadm controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /controlplane/kubeadm/internal/etcd/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | /* 18 | Package etcd provides a connection to an etcd member. 19 | */ 20 | package etcd 21 | -------------------------------------------------------------------------------- /dev/vscode-example-configuration/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "go.testEnvFile": "${workspaceFolder}/.vscode/test.env" 3 | } -------------------------------------------------------------------------------- /dev/vscode-example-configuration/test.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/dev/vscode-example-configuration/test.env -------------------------------------------------------------------------------- /docs/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-docs-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-docs-reviewers 9 | -------------------------------------------------------------------------------- /docs/book/src/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | {{#include ../../../CONTRIBUTING.md}} 2 | -------------------------------------------------------------------------------- /docs/book/src/REVIEWING.md: -------------------------------------------------------------------------------- 1 | {{#include ../../../REVIEWING.md}} 2 | -------------------------------------------------------------------------------- /docs/book/src/clusterctl/commands/additional-commands.md: -------------------------------------------------------------------------------- 1 | # clusterctl config repositories 2 | 3 | Display the list of providers and their repository configurations. 4 | 5 | clusterctl ships with a list of known providers; if necessary, edit 6 | $XDG_CONFIG_HOME/cluster-api/clusterctl.yaml file to add a new provider or to customize existing ones. 7 | 8 | # clusterctl help 9 | 10 | Help provides help for any command in the application. 11 | Simply type `clusterctl help [command]` for full details. 12 | 13 | # clusterctl version 14 | 15 | Print clusterctl version. 16 | 17 | # clusterctl init list-images 18 | 19 | Lists the container images required for initializing the management cluster. -------------------------------------------------------------------------------- /docs/book/src/clusterctl/commands/get-kubeconfig.md: -------------------------------------------------------------------------------- 1 | # clusterctl get kubeconfig 2 | 3 | This command prints the kubeconfig of an existing workload cluster into stdout. 4 | This functionality is available in clusterctl v0.3.9 or newer. 5 | 6 | ## Examples 7 | 8 | Get the kubeconfig of a workload cluster named foo. 9 | 10 | ```bash 11 | clusterctl get kubeconfig foo 12 | ``` 13 | 14 | Get the kubeconfig of a workload cluster named foo in the namespace bar 15 | 16 | ```bash 17 | clusterctl get kubeconfig foo --namespace bar 18 | ``` 19 | 20 | Get the kubeconfig of a workload cluster named foo using a specific context bar 21 | 22 | ```bash 23 | clusterctl get kubeconfig foo --kubeconfig-context bar 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/book/src/code-of-conduct.md: -------------------------------------------------------------------------------- 1 | {{#include ../../../code-of-conduct.md}} 2 | -------------------------------------------------------------------------------- /docs/book/src/developer/core/controllers/cluster-resource-set.md: -------------------------------------------------------------------------------- 1 | # `ClusterResourceSet` Controller 2 | 3 | The `ClusterResourceSet` provides a mechanism for applying resources - e.g. pods, deployments, daemonsets, secrets, configMaps - to a cluster once it is created. 4 | 5 | ![ClusterResourceSet Controller Activity Diagram](../../../images/cluster-resource-set-controller.png) 6 | 7 | Its main responsibility is to automatically apply a set of resources to newly-created and existing Clusters. Resources will be applied only once. 8 | 9 | 10 | ### Additional information 11 | 12 | * See ClusterResourceSet [proposal](https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20200220-cluster-resource-set.md) 13 | -------------------------------------------------------------------------------- /docs/book/src/developer/core/controllers/machine-health-check.md: -------------------------------------------------------------------------------- 1 | # MachineHealthCheck 2 | 3 | A MachineHealthCheck is responsible for remediating unhealthy Machines. 4 | 5 | Its main responsibilities are: 6 | * Checking the health of Nodes in the [workload clusters] against a list of unhealthy conditions 7 | * Remediating Machine's for Nodes determined to be unhealthy 8 | 9 | ![](../../../images/machinehealthcheck-controller.png) 10 | 11 | 12 | [workload clusters]: ../../../reference/glossary.md#workload-cluster 13 | -------------------------------------------------------------------------------- /docs/book/src/developer/providers/getting-started/cluster-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/developer/providers/getting-started/cluster-email.png -------------------------------------------------------------------------------- /docs/book/src/developer/providers/migrations/overview.md: -------------------------------------------------------------------------------- 1 | # Version migration 2 | 3 | The following pages provide an overview of relevant changes between versions of Cluster API and their direct successors. These guides are intended to assist 4 | maintainers of other providers and consumers of the Go API in upgrading from one version of Cluster API to a subsequent version. 5 | 6 | - [v1.8 to v1.9](v1.8-to-v1.9.md) 7 | - [v1.9 to v1.10](v1.9-to-v1.10.md) 8 | - [v1.10 to v1.11](v1.10-to-v1.11.md) 9 | 10 | For older versions please refer to [Older Cluster API documentation versions](../../../introduction.md#getting-started) 11 | -------------------------------------------------------------------------------- /docs/book/src/developer/providers/overview.md: -------------------------------------------------------------------------------- 1 | # Developing Cluster API providers 2 | 3 | This section of the book is about developing Cluster API providers. 4 | -------------------------------------------------------------------------------- /docs/book/src/images/bootstrap-provider.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | start 4 | 5 | :New/Updated resource; 6 | 7 | if (Deleted?) then (yes) 8 | stop 9 | else (no) 10 | if (Has machine owner?) then (yes) 11 | if (Cluster exists?) then (no) 12 | stop 13 | else (yes) 14 | if (Bootstrap data secret exists?) then (no) 15 | :Generate bootstrap data & create secret; 16 | else (yes) 17 | endif 18 | 19 | :Set status.dataSecretName; 20 | :set status.initialization.dataSecretCreated to true; 21 | endif 22 | else (no) 23 | endif 24 | endif 25 | :Patch resource to persist changes; 26 | stop 27 | 28 | @enduml 29 | -------------------------------------------------------------------------------- /docs/book/src/images/bootstrap-provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/bootstrap-provider.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-admission-cluster-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-admission-cluster-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-admission-machine-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-admission-machine-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-admission-machinedeployment-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-admission-machinedeployment-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-admission-machinepool-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-admission-machinepool-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-admission-machineset-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-admission-machineset-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-infra-provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-infra-provider.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-resource-set-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-resource-set-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-topology-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-topology-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/cluster-topology-reconciller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/cluster-topology-reconciller.png -------------------------------------------------------------------------------- /docs/book/src/images/control-plane-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/control-plane-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/describe-cluster-disable-grouping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/describe-cluster-disable-grouping.png -------------------------------------------------------------------------------- /docs/book/src/images/describe-cluster-echo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/describe-cluster-echo.png -------------------------------------------------------------------------------- /docs/book/src/images/describe-cluster-how-grouping-works.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/describe-cluster-how-grouping-works.png -------------------------------------------------------------------------------- /docs/book/src/images/describe-cluster-show-conditions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/describe-cluster-show-conditions.png -------------------------------------------------------------------------------- /docs/book/src/images/describe-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/describe-cluster.png -------------------------------------------------------------------------------- /docs/book/src/images/introduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/introduction.png -------------------------------------------------------------------------------- /docs/book/src/images/kubeadm-control-plane-machines-resources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/kubeadm-control-plane-machines-resources.png -------------------------------------------------------------------------------- /docs/book/src/images/machine-infra-provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/machine-infra-provider.png -------------------------------------------------------------------------------- /docs/book/src/images/machine-phases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/machine-phases.png -------------------------------------------------------------------------------- /docs/book/src/images/machinehealthcheck-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/machinehealthcheck-controller.png -------------------------------------------------------------------------------- /docs/book/src/images/management-workload-same-cluster.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | [clusterctl] 4 | 5 | package "Management/Workload Cluster" { 6 | [Kubeadm Control Plane Provider] as cakcp 7 | [Core Provider] as capi 8 | [Kubeadm Bootstrap Provider] as cabpk 9 | [Infrastructure Provider] as infra #white 10 | [API Server] as api #white 11 | [etcd] #white 12 | capi --> api 13 | cabpk --> api 14 | cakcp --> api 15 | infra --> api 16 | cakcp --> etcd 17 | } 18 | 19 | clusterctl -> api 20 | 21 | @enduml 22 | -------------------------------------------------------------------------------- /docs/book/src/images/management-workload-same-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/management-workload-same-cluster.png -------------------------------------------------------------------------------- /docs/book/src/images/management-workload-separate-clusters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/management-workload-separate-clusters.png -------------------------------------------------------------------------------- /docs/book/src/images/metadata-propagation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/metadata-propagation.jpg -------------------------------------------------------------------------------- /docs/book/src/images/metadata-propagation.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/metadata-propagation.pptx -------------------------------------------------------------------------------- /docs/book/src/images/runtime-sdk-lifecycle-hooks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/runtime-sdk-lifecycle-hooks.png -------------------------------------------------------------------------------- /docs/book/src/images/runtime-sdk-topology-mutation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/runtime-sdk-topology-mutation.png -------------------------------------------------------------------------------- /docs/book/src/images/worker-machines-resources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/src/images/worker-machines-resources.png -------------------------------------------------------------------------------- /docs/book/src/reference/api/reference.md: -------------------------------------------------------------------------------- 1 | # API Reference 2 | 3 | Cluster API currently exposes the following APIs: 4 | 5 | * the Cluster API Custom Resource Definitions (CRDs): [documentation](https://doc.crds.dev/github.com/kubernetes-sigs/cluster-api) 6 | 7 | * Golang APIs: [godoc](https://pkg.go.dev/sigs.k8s.io/cluster-api) 8 | 9 | Following pages provide additional documentation to better understand and use Cluster API types. 10 | 11 | * [Labels and Annotations](labels-and-annotations.md) 12 | 13 | * [CRD relationships](crd-relationships.md) 14 | 15 | * [Metadata propagation](metadata-propagation.md) 16 | 17 | * [Owner References](owner-references.md) 18 | -------------------------------------------------------------------------------- /docs/book/src/reference/reference.md: -------------------------------------------------------------------------------- 1 | # Reference 2 | 3 | This section contains various resources that define the Cluster API project. 4 | -------------------------------------------------------------------------------- /docs/book/src/security/index.md: -------------------------------------------------------------------------------- 1 | # Security Guidelines 2 | 3 | This section provides security guidelines useful to provision clusters which are 4 | _secure by default_ to follow the [secure defaults guidelines for cloud native apps]. 5 | 6 | [secure defaults guidelines for cloud native apps]: https://github.com/cncf/tag-security/blob/main/community/resources/security-whitepaper/secure-defaults-cloud-native-8.md -------------------------------------------------------------------------------- /docs/book/src/tasks/automated-machine-management/index.md: -------------------------------------------------------------------------------- 1 | # Automated Machine management 2 | 3 | This section details some tasks related to automated Machine management. 4 | 5 | - [Scaling](./scaling.md) 6 | - [Autoscaling](./autoscaling.md) 7 | - [Healthchecking](./healthchecking.md) 8 | - [Machine deletion process](./machine_deletions.md) 9 | -------------------------------------------------------------------------------- /docs/book/src/tasks/bootstrap/index.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 2 | 3 | This section provides details about bootstrap providers. 4 | -------------------------------------------------------------------------------- /docs/book/src/tasks/certs/index.md: -------------------------------------------------------------------------------- 1 | # Certificate Management 2 | 3 | This section details some tasks related to certificate management. 4 | -------------------------------------------------------------------------------- /docs/book/src/tasks/control-plane/index.md: -------------------------------------------------------------------------------- 1 | # Control Plane Management 2 | 3 | This section provides details about control plane providers. 4 | -------------------------------------------------------------------------------- /docs/book/src/tasks/experimental-features/runtime-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated via make 2 | runtime-sdk-openapi.yaml 3 | -------------------------------------------------------------------------------- /docs/book/src/tasks/index.md: -------------------------------------------------------------------------------- 1 | # Cluster Management Tasks 2 | 3 | This section provides details for some of the operations that need to be performed 4 | when managing clusters. 5 | -------------------------------------------------------------------------------- /docs/book/src/tasks/upgrading-cluster-api-versions.md: -------------------------------------------------------------------------------- 1 | # Upgrading Cluster API components 2 | 3 | ## When to upgrade 4 | 5 | In general, it's recommended to upgrade to the latest version of Cluster API to take advantage of bug fixes, new 6 | features and improvements. 7 | 8 | ## Considerations 9 | 10 | If moving between different API versions, there may be additional tasks that you need to complete. See below for 11 | detailed instructions. 12 | 13 | Ensure that the version of Cluster API is compatible with the Kubernetes version of the management cluster. 14 | 15 | ## Upgrading to newer versions of 1.0.x 16 | 17 | Use [clusterctl to upgrade between versions of Cluster API 1.0.x](../clusterctl/commands/upgrade.md). 18 | -------------------------------------------------------------------------------- /docs/book/src/user/quick-start-operator.md: -------------------------------------------------------------------------------- 1 | # Cluster API Operator Quickstart 2 | 3 | This section provides a quickstart guide for using the Cluster API Operator to create a Kubernetes cluster. 4 | To use the `clusterctl` quickstart path, visit [this quickstart guide](./quick-start.md). 5 | 6 | {{#embed-github repo:"kubernetes-sigs/cluster-api-operator" path:"docs/quickstart.md" }} -------------------------------------------------------------------------------- /docs/book/theme/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/book/theme/favicon.png -------------------------------------------------------------------------------- /docs/proposals/images/capi-provider-operator/fig1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/capi-provider-operator/fig1.png -------------------------------------------------------------------------------- /docs/proposals/images/capi-provider-operator/fig2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/capi-provider-operator/fig2.png -------------------------------------------------------------------------------- /docs/proposals/images/capi-provider-operator/fig3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/capi-provider-operator/fig3.png -------------------------------------------------------------------------------- /docs/proposals/images/capi-provider-operator/fig4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/capi-provider-operator/fig4.png -------------------------------------------------------------------------------- /docs/proposals/images/cluster-class/create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/cluster-class/create.png -------------------------------------------------------------------------------- /docs/proposals/images/cluster-class/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/cluster-class/update.png -------------------------------------------------------------------------------- /docs/proposals/images/cluster-spec-crds/figure1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/cluster-spec-crds/figure1.png -------------------------------------------------------------------------------- /docs/proposals/images/cluster-spec-crds/figure2.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | title Figure 2: Cluster State Transitions 3 | 4 | start 5 | 6 | :Pending; 7 | 8 | note right 9 | Cluster object is created but 10 | has no associated Infrastructure 11 | end note 12 | 13 | :Provisioning; 14 | 15 | note right 16 | Cluster has associated Infrastructure. 17 | Provider is provisioning it 18 | end note 19 | 20 | :Provisioned; 21 | note right 22 | Infrastructureis ready. 23 | APIEndpoint is set. 24 | end note 25 | 26 | stop 27 | 28 | hide footbox 29 | @enduml 30 | -------------------------------------------------------------------------------- /docs/proposals/images/cluster-spec-crds/figure2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/cluster-spec-crds/figure2.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-extensible-templates/pkgCalls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-extensible-templates/pkgCalls.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-extensible-templates/templateClient.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | class templateClient { 3 | listVariablesOnly: bool 4 | 5 | 6 | provider: config.Provider 7 | repository: Repository 8 | configVariablesClient: config.VariablesClient 9 | 10 | 11 | processor: YamlProcessor 12 | {method} Get(version, flavor, targetNamespace string) (Template, error) 13 | 14 | 15 | } 16 | note right 17 | An instance of this struct is created 18 | in newTemplateClient(TemplateClientInput). 19 | It defaults to using the default processor else 20 | it uses the specified yaml processor. 21 | end note 22 | @enduml 23 | -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-extensible-templates/templateClient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-extensible-templates/templateClient.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-extensible-templates/yamlProcessor.plantuml: -------------------------------------------------------------------------------- 1 | @startuml 2 | interface YamlProcessor{ 3 | {method} ArtifactName(version, flavor string) string 4 | {method} GetVariables([]byte) ([]string, error) 5 | {method} Process([]byte) ([]byte, error) 6 | } 7 | @enduml 8 | -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-extensible-templates/yamlProcessor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-extensible-templates/yamlProcessor.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-redesign/components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-redesign/components.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-redesign/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-redesign/config.png -------------------------------------------------------------------------------- /docs/proposals/images/clusterctl-redesign/init.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/clusterctl-redesign/init.png -------------------------------------------------------------------------------- /docs/proposals/images/conditions/cluster-provision-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/conditions/cluster-provision-workflow.png -------------------------------------------------------------------------------- /docs/proposals/images/conditions/upgrade-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/conditions/upgrade-workflow.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-1.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-2.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-3.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-4.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-6.png -------------------------------------------------------------------------------- /docs/proposals/images/controlplane/controlplane-init-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/controlplane/controlplane-init-7.png -------------------------------------------------------------------------------- /docs/proposals/images/developer/diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/developer/diagram.png -------------------------------------------------------------------------------- /docs/proposals/images/externally-managed-cluster-infrastructure/infrastructure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/externally-managed-cluster-infrastructure/infrastructure.png -------------------------------------------------------------------------------- /docs/proposals/images/in-place-propagation/Metadata propagation.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/in-place-propagation/Metadata propagation.pptx -------------------------------------------------------------------------------- /docs/proposals/images/in-place-propagation/current-state.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/in-place-propagation/current-state.jpg -------------------------------------------------------------------------------- /docs/proposals/images/in-place-propagation/optional-changes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/in-place-propagation/optional-changes.jpg -------------------------------------------------------------------------------- /docs/proposals/images/in-place-propagation/proposed-changes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/in-place-propagation/proposed-changes.jpg -------------------------------------------------------------------------------- /docs/proposals/images/ipam-integration/consumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/ipam-integration/consumption.png -------------------------------------------------------------------------------- /docs/proposals/images/ipam-integration/sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/ipam-integration/sequence.png -------------------------------------------------------------------------------- /docs/proposals/images/kubelet-authentication/client-authenticator-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/kubelet-authentication/client-authenticator-flow.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-health-check/mhc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-health-check/mhc.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure2.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure3.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure4.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure5.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure6.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure7.png -------------------------------------------------------------------------------- /docs/proposals/images/machine-states-preboot/Figure8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machine-states-preboot/Figure8.png -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-api/figure1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machinepool-api/figure1.png -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/inframachinepool-scale-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machinepool-machines/inframachinepool-scale-down.png -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/inframachinepool-scale-up.plantuml: -------------------------------------------------------------------------------- 1 | @startuml inframachinepool-scale-up 2 | :begin reconciling InfraMachinePool; 3 | if (status.InfrastructureMachineKind is set on InfraMachinePool) then (no) 4 | :set status.InfrastructureMachineKind to InfraMachinePoolMachine; 5 | else (yes) 6 | endif 7 | while (~# up to date replicas < # desired replicas ?) is (yes) 8 | :create provider specific resource representing a replica; 9 | endwhile (no) 10 | while (every replica has an InfraMachinePoolMachine?) is (no) 11 | :create InfraMachinePoolMachine representing a replica; 12 | endwhile (yes) 13 | :end reconciling InfraMachinePool; 14 | stop 15 | @enduml -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/inframachinepool-scale-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machinepool-machines/inframachinepool-scale-up.png -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/machinepool-machine-reconcile.plantuml: -------------------------------------------------------------------------------- 1 | @startuml machinepool-machine-reconcile 2 | :begin reconciling Machine; 3 | if (is deleting?) then (no) 4 | :ensure InfraMachinePoolMachine has ownerRef to Machine; 5 | else (yes) 6 | :cordon and drain node; 7 | :delete InfraMachinePoolMachine; 8 | :wait for InfraMachinePoolMachine to be deleted; 9 | :delete node; 10 | endif 11 | :continue reconciling Machine; 12 | stop 13 | @enduml 14 | -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/machinepool-machine-reconcile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machinepool-machines/machinepool-machine-reconcile.png -------------------------------------------------------------------------------- /docs/proposals/images/machinepool-machines/machinepool-reconcile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/machinepool-machines/machinepool-reconcile.png -------------------------------------------------------------------------------- /docs/proposals/images/runtime-hooks/runtime-hooks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/runtime-hooks/runtime-hooks.png -------------------------------------------------------------------------------- /docs/proposals/images/runtime-sdk/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/runtime-sdk/overview.png -------------------------------------------------------------------------------- /docs/proposals/images/runtime-sdk/swagger-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/runtime-sdk/swagger-ui.png -------------------------------------------------------------------------------- /docs/proposals/images/topology-mutation-hook/topology-reconciliation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/proposals/images/topology-mutation-hook/topology-reconciliation.png -------------------------------------------------------------------------------- /docs/release/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-release-lead 5 | 6 | reviewers: 7 | - cluster-api-release-team 8 | -------------------------------------------------------------------------------- /docs/release/release-cycle-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/docs/release/release-cycle-overview.png -------------------------------------------------------------------------------- /exp/README.md: -------------------------------------------------------------------------------- 1 | # Experimental 2 | 3 | ⚠️ This package holds experimental code and API types. ⚠️ 4 | 5 | ## Compatibility notice 6 | 7 | This package does not adhere to any compatibility guarantees. Some portions may eventually be promoted out of this package and considered stable/GA, while others may be removed entirely. 8 | 9 | ## Graduation criteria 10 | 11 | For more information on graduation criteria, see: [Contributing Guidelines](../CONTRIBUTING.md#experiments) 12 | -------------------------------------------------------------------------------- /exp/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements experimental controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /exp/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2019 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package exp implements experimental code. 18 | package exp 19 | -------------------------------------------------------------------------------- /exp/hack/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /exp/internal/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements experimental controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /exp/internal/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2023 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks contains external webhook implementations for some of our API types. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /exp/ipam/internal/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks implements experimental webhooks. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /exp/ipam/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks contains external webhook implementations for some of our API types. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /exp/runtime/catalog/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package catalog provides the Catalog and corresponding builders. 18 | package catalog 19 | -------------------------------------------------------------------------------- /exp/runtime/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the exp/runtime controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /exp/runtime/internal/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the exp/runtime controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /exp/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2023 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks contains external webhook implementations for some of our API types. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /hack/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /hack/boilerplate/README.md: -------------------------------------------------------------------------------- 1 | # Boilerplate utilities 2 | 3 | The boilerplate validation utilities have been copied and adapted from upstream Kubernetes, see https://github.com/kubernetes/kubernetes/blob/4dfd73940396730caf331e35cbb28235d233f2a0/hack/boilerplate. 4 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.Dockerfile.txt: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1.4 2 | 3 | # Copyright YEAR The Kubernetes Authors. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.Makefile.txt: -------------------------------------------------------------------------------- 1 | # Copyright YEAR The Kubernetes Authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.bzl.txt: -------------------------------------------------------------------------------- 1 | # Copyright YEAR The Kubernetes Authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.generatebzl.txt: -------------------------------------------------------------------------------- 1 | # Copyright The Kubernetes Authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.generatego.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright YEAR The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.py.txt: -------------------------------------------------------------------------------- 1 | # Copyright YEAR The Kubernetes Authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /hack/boilerplate/boilerplate.sh.txt: -------------------------------------------------------------------------------- 1 | # Copyright YEAR The Kubernetes Authors. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /hack/boilerplate/test/fail.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2014 The Kubernetes Authors. 3 | 4 | fail 5 | 6 | Licensed under the Apache License, Version 2.0 (the "License"); 7 | you may not use this file except in compliance with the License. 8 | You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, software 13 | distributed under the License is distributed on an "AS IS" BASIS, 14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | See the License for the specific language governing permissions and 16 | limitations under the License. 17 | */ 18 | 19 | // Package test contains test boilerplate. 20 | package test 21 | -------------------------------------------------------------------------------- /hack/boilerplate/test/fail.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # Copyright 2015 The Kubernetes Authors. 4 | # 5 | # failed 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | -------------------------------------------------------------------------------- /hack/boilerplate/test/pass.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2014 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package test 18 | -------------------------------------------------------------------------------- /hack/boilerplate/test/pass.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | # Copyright 2015 The Kubernetes Authors. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | True 18 | -------------------------------------------------------------------------------- /hack/observability/.gitignore: -------------------------------------------------------------------------------- 1 | # ignore cached helm charts 2 | .charts 3 | -------------------------------------------------------------------------------- /hack/observability/grafana/chart/kustomization.yaml: -------------------------------------------------------------------------------- 1 | helmCharts: 2 | - name: grafana 3 | repo: https://grafana.github.io/helm-charts 4 | releaseName: grafana 5 | namespace: observability 6 | valuesFile: values.yaml 7 | version: 8.10.1 8 | 9 | helmGlobals: 10 | # Store chart in ".charts" folder instead of "charts". 11 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 12 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 13 | chartHome: .charts 14 | -------------------------------------------------------------------------------- /hack/observability/kube-state-metrics/values.yaml: -------------------------------------------------------------------------------- 1 | # Add the CR configuration from the config map. 2 | volumeMounts: 3 | - mountPath: /etc/config 4 | name: config-volume 5 | 6 | volumes: 7 | - emptyDir: {} 8 | name: config-volume 9 | 10 | extraArgs: 11 | - "--custom-resource-state-config-file=/etc/config/crd-metrics-config.yaml" 12 | 13 | rbac: 14 | extraRules: 15 | - apiGroups: 16 | - apiextensions.k8s.io 17 | resources: 18 | - customresourcedefinitions 19 | verbs: 20 | - get 21 | - list 22 | - watch 23 | -------------------------------------------------------------------------------- /hack/observability/loki/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: loki 6 | repo: https://grafana.github.io/helm-charts 7 | releaseName: loki 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 6.27.0 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/metrics-server/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: metrics-server 6 | repo: https://kubernetes-sigs.github.io/metrics-server/ 7 | releaseName: metrics-server 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 3.12.2 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/metrics-server/values.yaml: -------------------------------------------------------------------------------- 1 | # Use insecure-tls so we can scrape kind Nodes. 2 | args: 3 | - --kubelet-insecure-tls 4 | -------------------------------------------------------------------------------- /hack/observability/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: observability 5 | 6 | -------------------------------------------------------------------------------- /hack/observability/parca/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | - rbac-pprof.yaml 4 | 5 | helmCharts: 6 | - name: parca 7 | repo: https://parca-dev.github.io/helm-charts/ 8 | releaseName: parca 9 | # Setting namespace via this field currently does not work with this Helm chart. 10 | namespace: default 11 | valuesFile: values.yaml 12 | version: 4.19.0 13 | 14 | helmGlobals: 15 | # Store chart in ".charts" folder instead of "charts". 16 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 17 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 18 | chartHome: .charts 19 | -------------------------------------------------------------------------------- /hack/observability/parca/rbac-pprof.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: parca-debug 5 | rules: 6 | - nonResourceURLs: 7 | - "/debug/pprof/*" 8 | verbs: 9 | - get 10 | --- 11 | apiVersion: rbac.authorization.k8s.io/v1 12 | kind: ClusterRoleBinding 13 | metadata: 14 | name: parca-debug 15 | roleRef: 16 | apiGroup: rbac.authorization.k8s.io 17 | kind: ClusterRole 18 | name: parca-debug 19 | subjects: 20 | - kind: ServiceAccount 21 | name: parca 22 | namespace: default 23 | -------------------------------------------------------------------------------- /hack/observability/prometheus/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: prometheus 6 | repo: https://prometheus-community.github.io/helm-charts 7 | releaseName: prometheus 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 27.5.0 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/promtail/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: promtail 6 | repo: https://grafana.github.io/helm-charts 7 | releaseName: promtail 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 6.16.6 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/tempo/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: tempo 6 | repo: https://grafana.github.io/helm-charts 7 | releaseName: tempo 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 1.18.2 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/visualizer/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../namespace.yaml 3 | 4 | helmCharts: 5 | - name: cluster-api-visualizer 6 | repo: https://jont828.github.io/cluster-api-visualizer/charts 7 | releaseName: visualizer 8 | namespace: observability 9 | valuesFile: values.yaml 10 | version: 1.4.0 11 | 12 | helmGlobals: 13 | # Store chart in ".charts" folder instead of "charts". 14 | # Otherwise "go mod tidy" picks up dependencies of go files contained in the Helm Chart. 15 | # "go mod tidy" ignores folders that begin with ".": https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. 16 | chartHome: .charts 17 | -------------------------------------------------------------------------------- /hack/observability/visualizer/values.yaml: -------------------------------------------------------------------------------- 1 | replicas: 1 2 | 3 | image: 4 | repository: ghcr.io/jont828 5 | name: cluster-api-visualizer 6 | pullPolicy: Always 7 | 8 | label: 9 | key: app 10 | value: visualizer 11 | -------------------------------------------------------------------------------- /hack/tools/.custom-gcl.yaml: -------------------------------------------------------------------------------- 1 | version: v2.1.0 2 | name: golangci-lint-kube-api-linter 3 | destination: ./bin 4 | plugins: 5 | - module: 'sigs.k8s.io/kube-api-linter' 6 | version: v0.0.0-20250515061849-37102c8f17a9 7 | -------------------------------------------------------------------------------- /hack/tools/prowjob-gen/test/test-main.yaml.golden: -------------------------------------------------------------------------------- 1 | # Code generated by cluster-api's prowjob-gen. DO NOT EDIT. 2 | main 3 | main 4 | bar 5 | foobar 6 | 1.29 -------------------------------------------------------------------------------- /hack/tools/prowjob-gen/test/test.yaml.tpl: -------------------------------------------------------------------------------- 1 | {{ .branch }} 2 | {{ ReplaceAll .branch "." "-" }} 3 | {{ TrimPrefix "foobar" "foo" }} 4 | {{ TrimPrefix "foobar" "bar" }} 5 | {{ (last $.config.Upgrades).From }} -------------------------------------------------------------------------------- /hack/tools/release/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-release-lead 5 | 6 | reviewers: 7 | - cluster-api-release-team 8 | -------------------------------------------------------------------------------- /hack/tools/triage/.gitignore: -------------------------------------------------------------------------------- 1 | triage-party.tmp/ 2 | .cache/ 3 | -------------------------------------------------------------------------------- /internal/controllers/cluster/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package cluster implements cluster controller. 18 | package cluster 19 | -------------------------------------------------------------------------------- /internal/controllers/machine/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package machine implements machine controller. 18 | package machine 19 | -------------------------------------------------------------------------------- /internal/controllers/machinedeployment/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package machinedeployment implements machinedeployment controller. 18 | package machinedeployment 19 | -------------------------------------------------------------------------------- /internal/controllers/machineset/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package machineset implements machineset controller. 18 | package machineset 19 | -------------------------------------------------------------------------------- /internal/controllers/topology/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-topology-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-topology-reviewers 9 | -------------------------------------------------------------------------------- /internal/goproxy/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package goproxy implements a goproxy client. 18 | package goproxy 19 | -------------------------------------------------------------------------------- /internal/runtime/registry/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package registry implements the RuntimeSDK registry. 18 | package registry 19 | -------------------------------------------------------------------------------- /internal/test/envtest/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package envtest contains the test environment to run integration tests. 18 | package envtest 19 | -------------------------------------------------------------------------------- /internal/topology/variables/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package variables implements validation and defaulting for ClusterClass variables. 18 | package variables 19 | -------------------------------------------------------------------------------- /internal/util/tree/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2025 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package tree implements utils for representing a tree in clusterctl commands or E2E tests. 18 | package tree 19 | -------------------------------------------------------------------------------- /internal/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks contains external webhook implementations for some of our API types. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /internal/webhooks/runtime/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package runtime contains the webhook implementation for runtime ExtensionConfig. 18 | package runtime 19 | -------------------------------------------------------------------------------- /logos/README.md: -------------------------------------------------------------------------------- 1 | # Cluster API related logos and artwork 2 | 3 | ## Cluster API - It's Kubernetes all the way down 4 | 5 | ![Cluster API - It's Kubernetes all the way down](kubernetes-cluster-logos_final-02.svg) 6 | 7 | [Pantone color reference](kubernetes-cluster-logos_2.pdf) 8 | 9 | ## Cluster API - Clusters as Cattle 10 | 11 | ![Cluster API - Clusters as Cattle](kubernetes-cluster-logos_final-01.svg) 12 | 13 | [Pantone color reference](kubernetes-cluster-logos_1.pdf) 14 | 15 | Use of any trademark or logo is subject to the trademark policy available at https://www.linuxfoundation.org/trademark-usage -------------------------------------------------------------------------------- /logos/icons/CAPI icons.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/icons/CAPI icons.ai -------------------------------------------------------------------------------- /logos/icons/README.md: -------------------------------------------------------------------------------- 1 | # Cluster API Icons Set 2 | 3 | These icons are a way to standardize Cluster API architecture diagrams, building on top of the [Kubernetes Icon Set](https://git.k8s.io/community/icons). Having uniform architecture diagrams improve understandibility. 4 | 5 | ## License 6 | The Kubernetes Icons Set is licensed under a choice of either Apache-2.0 7 | or CC-BY-4.0 (Creative Commons Attribution 4.0 International). The 8 | Kubernetes logo is a registered trademark of The Linux Foundation, and use 9 | of it as a trademark is subject to The Linux Foundation's Trademark Usage 10 | Guidelines at https://www.linuxfoundation.org/trademark-usage/. -------------------------------------------------------------------------------- /logos/icons/cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/icons/cluster.png -------------------------------------------------------------------------------- /logos/icons/machine-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/icons/machine-deployment.png -------------------------------------------------------------------------------- /logos/icons/machine-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/icons/machine-set.png -------------------------------------------------------------------------------- /logos/icons/machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/icons/machine.png -------------------------------------------------------------------------------- /logos/icons/machine.svg: -------------------------------------------------------------------------------- 1 | 2 | machine 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /logos/kubernetes-cluster-logos_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/kubernetes-cluster-logos_1.pdf -------------------------------------------------------------------------------- /logos/kubernetes-cluster-logos_2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/21be9a2e6e95a3103306c00fb8a1aa97bac8b2b3/logos/kubernetes-cluster-logos_2.pdf -------------------------------------------------------------------------------- /test/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-test-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-test-reviewers 9 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # Test 2 | 3 | ## Compatibility notice 4 | 5 | This package is not subject to deprecation notices or compatibility guarantees. 6 | 7 | - We iterate on the test framework quickly and frequently, and breaking changes are likely. External providers using this package should update to the latest API changes when updating Cluster API. Maintainers and contributors must give notice in release notes when a breaking change happens. 8 | 9 | - The docker provider, including its APIs, should only be used for development/testing purposes. APIs and code can change at any time without notice. 10 | -------------------------------------------------------------------------------- /test/e2e/.gitignore: -------------------------------------------------------------------------------- 1 | *.xml 2 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-ignition/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | patches: 6 | - path: ignition.yaml 7 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-ipv6/cluster-ipv6.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: cluster.x-k8s.io/v1beta1 3 | kind: Cluster 4 | metadata: 5 | name: '${CLUSTER_NAME}' 6 | spec: 7 | clusterNetwork: 8 | services: 9 | cidrBlocks: ['${DOCKER_SERVICE_IPV6_CIDRS}'] 10 | pods: 11 | cidrBlocks: ['${DOCKER_POD_IPV6_CIDRS}'] 12 | --- 13 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 14 | kind: DockerCluster 15 | metadata: 16 | name: '${CLUSTER_NAME}' 17 | spec: 18 | controlPlaneEndpoint: 19 | port: 7777 20 | host: "" 21 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-ipv6/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | patches: 6 | - path: cluster-ipv6.yaml 7 | - path: md-ipv6.yaml 8 | - path: kcp-ipv6.yaml 9 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-ipv6/md-ipv6.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 3 | kind: KubeadmConfigTemplate 4 | metadata: 5 | name: "${CLUSTER_NAME}-md-0" 6 | spec: 7 | template: 8 | spec: 9 | initConfiguration: 10 | nodeRegistration: 11 | kubeletExtraArgs: 12 | node-ip: "::" 13 | joinConfiguration: 14 | nodeRegistration: 15 | kubeletExtraArgs: 16 | node-ip: "::" 17 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-adoption/step1/kustomization.yaml: -------------------------------------------------------------------------------- 1 | labels: 2 | - includeSelectors: true 3 | pairs: 4 | kcp-adoption.step1: "" 5 | 6 | resources: 7 | - cluster-with-cp0.yaml 8 | - ../../bases/crs.yaml 9 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-adoption/step2/kustomization.yaml: -------------------------------------------------------------------------------- 1 | labels: 2 | - includeSelectors: true 3 | pairs: 4 | kcp-adoption.step2: "" 5 | 6 | resources: 7 | - ../../bases/cluster-with-kcp.yaml 8 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-pre-drain/cluster.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: cluster.x-k8s.io/v1beta1 3 | kind: Cluster 4 | metadata: 5 | name: '${CLUSTER_NAME}' 6 | spec: 7 | topology: 8 | class: quick-start 9 | controlPlane: 10 | metadata: 11 | annotations: 12 | pre-drain.delete.hook.machine.cluster.x-k8s.io/kcp-ready-check: "true" -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-pre-drain/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../cluster-template-upgrades 3 | patches: 4 | - path: cluster.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-remediation/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | - mhc.yaml 6 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-scale-in/kcp-scale-in-variable.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /spec/topology/variables/- 3 | value: 4 | name: kubeadmControlPlaneMaxSurge 5 | value: "0" -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-kcp-scale-in/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/crs.yaml 3 | - ../bases/cluster-with-topology.yaml 4 | 5 | patches: 6 | - path: kcp-scale-in-variable.yaml 7 | target: 8 | group: cluster.x-k8s.io 9 | version: v1beta1 10 | kind: Cluster 11 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-machine-pool/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/mp.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-md-remediation/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | - mhc.yaml 6 | 7 | patches: 8 | - path: md.yaml 9 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-md-remediation/md.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1beta1 2 | kind: MachineDeployment 3 | metadata: 4 | name: "${CLUSTER_NAME}-md-0" 5 | spec: 6 | template: 7 | metadata: 8 | labels: 9 | "e2e.remediation.label": "" 10 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-md-remediation/mhc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # MachineHealthCheck object with 3 | # - a selector that targets all the machines with label e2e.remediation.label="" 4 | # - unhealthyConditions triggering remediation after 10s the condition is set 5 | apiVersion: cluster.x-k8s.io/v1beta1 6 | kind: MachineHealthCheck 7 | metadata: 8 | name: "${CLUSTER_NAME}-mhc-0" 9 | spec: 10 | clusterName: "${CLUSTER_NAME}" 11 | maxUnhealthy: 100% 12 | selector: 13 | matchLabels: 14 | e2e.remediation.label: "" 15 | unhealthyConditions: 16 | - type: e2e.remediation.condition 17 | status: "False" 18 | timeout: 10s 19 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-autoscaler/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/crs.yaml 3 | - cluster-autoscaler.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-dualstack-ipv4-primary/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | 5 | patches: 6 | - path: cluster.yaml 7 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-dualstack-ipv6-primary/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | 5 | patches: 6 | - path: cluster.yaml 7 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-kcp-only/cluster-topology-class.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /spec/topology/class 3 | value: "quick-start-kcp-only" 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-kcp-only/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../cluster-template-topology-no-workers 3 | 4 | patches: 5 | - path: cluster-topology-class.yaml 6 | target: 7 | group: cluster.x-k8s.io 8 | version: v1beta1 9 | kind: Cluster 10 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-no-workers/disable-control-plane-taint-variable.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /spec/topology/variables/- 3 | value: 4 | name: controlPlaneTaint 5 | value: false 6 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-no-workers/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | 5 | patches: 6 | - path: disable-control-plane-taint-variable.yaml 7 | target: 8 | group: cluster.x-k8s.io 9 | version: v1beta1 10 | kind: Cluster 11 | - path: remove-topology-workers.yaml 12 | target: 13 | group: cluster.x-k8s.io 14 | version: v1beta1 15 | kind: Cluster 16 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology-no-workers/remove-topology-workers.yaml: -------------------------------------------------------------------------------- 1 | - op: remove 2 | path: /spec/topology/workers 3 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-upgrades-runtimesdk/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/crs.yaml 3 | - cluster-runtimesdk.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template-upgrades/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/clusterclass-quick-start-kcp-only/clusterclass-name.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /metadata/name 3 | value: quick-start-kcp-only 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/clusterclass-quick-start-kcp-only/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../clusterclass-quick-start.yaml 3 | 4 | patches: 5 | - path: remove-workers.yaml 6 | target: 7 | group: cluster.x-k8s.io 8 | version: v1beta1 9 | kind: ClusterClass 10 | - path: clusterclass-name.yaml 11 | target: 12 | group: cluster.x-k8s.io 13 | version: v1beta1 14 | kind: ClusterClass 15 | - path: remove-worker-patches.yaml 16 | target: 17 | group: cluster.x-k8s.io 18 | version: v1beta1 19 | kind: ClusterClass 20 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/clusterclass-quick-start-kcp-only/remove-worker-patches.yaml: -------------------------------------------------------------------------------- 1 | - op: remove 2 | path: /spec/patches/14 3 | - op: remove 4 | path: /spec/patches/9 5 | - op: remove 6 | path: /spec/patches/5 7 | - op: remove 8 | path: /spec/patches/4/definitions/0/selector/matchResources/machineDeploymentClass 9 | - op: remove 10 | path: /spec/patches/3/definitions/2 11 | - op: remove 12 | path: /spec/patches/3/definitions/0 13 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/main/clusterclass-quick-start-kcp-only/remove-workers.yaml: -------------------------------------------------------------------------------- 1 | - op: remove 2 | path: /spec/workers 3 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v0.3/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v0.4/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.10/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.10/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.5/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.5/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.6/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.6/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.8/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.8/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.9/cluster-template-topology/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-topology.yaml 3 | - ../bases/crs.yaml 4 | -------------------------------------------------------------------------------- /test/e2e/data/infrastructure-docker/v1.9/cluster-template/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ../bases/cluster-with-kcp.yaml 3 | - ../bases/md.yaml 4 | - ../bases/crs.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/data/kubetest/conformance.yaml: -------------------------------------------------------------------------------- 1 | ginkgo.focus: \[Conformance\] 2 | ginkgo.skip: \[Serial\] 3 | disable-log-dump: true 4 | # ginkgo.progress flag is deprecated but its still used in 5 | # k8s versions <= v1.26, we have to keep it as long as we 6 | # support these versions. 7 | ginkgo.progress: true 8 | ginkgo.slow-spec-threshold: 120s 9 | ginkgo.flake-attempts: 3 10 | ginkgo.trace: true 11 | ginkgo.v: true 12 | # Use 5m instead of the default 10m to fail faster 13 | # if kube-system Pods are not coming up. 14 | system-pods-startup-timeout: 5m 15 | # TODO: (killianmuldoon) This flag is not currently working with the conformance set-up. 16 | # ginkgo.noColor: true 17 | -------------------------------------------------------------------------------- /test/e2e/data/kubetest/dualstack.yaml: -------------------------------------------------------------------------------- 1 | ginkgo.focus: \[Feature\:IPv6DualStack\] 2 | ginkgo.skip: \[Feature\:SCTPConnectivity\] 3 | disable-log-dump: true 4 | # ginkgo.progress flag is deprecated but its still used when 5 | # we run kubetest on K8s versions <= v1.26, we have to keep it 6 | # as long as we support these versions. 7 | ginkgo.progress: true 8 | ginkgo.slow-spec-threshold: 120s 9 | ginkgo.flake-attempts: 3 10 | ginkgo.trace: true 11 | ginkgo.v: true 12 | ginkgo.no-color: true 13 | # Use 5m instead of the default 10m to fail faster 14 | # if kube-system Pods are not coming up. 15 | system-pods-startup-timeout: 5m 16 | -------------------------------------------------------------------------------- /test/e2e/data/shared/v0.3/metadata.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 2 | kind: Metadata 3 | releaseSeries: 4 | - major: 0 5 | minor: 3 6 | contract: v1alpha3 7 | - major: 0 8 | minor: 2 9 | contract: v1alpha2 -------------------------------------------------------------------------------- /test/e2e/data/shared/v0.4/metadata.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 2 | kind: Metadata 3 | releaseSeries: 4 | - major: 0 5 | minor: 4 6 | contract: v1alpha4 7 | - major: 0 8 | minor: 3 9 | contract: v1alpha3 10 | - major: 0 11 | minor: 2 12 | contract: v1alpha2 -------------------------------------------------------------------------------- /test/e2e/data/shared/v1.5/metadata.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 2 | kind: Metadata 3 | releaseSeries: 4 | - major: 1 5 | minor: 5 6 | contract: v1beta1 7 | - major: 1 8 | minor: 4 9 | contract: v1beta1 10 | - major: 1 11 | minor: 3 12 | contract: v1beta1 13 | - major: 1 14 | minor: 2 15 | contract: v1beta1 16 | - major: 1 17 | minor: 1 18 | contract: v1beta1 19 | - major: 1 20 | minor: 0 21 | contract: v1beta1 22 | - major: 0 23 | minor: 4 24 | contract: v1alpha4 25 | - major: 0 26 | minor: 3 27 | contract: v1alpha3 28 | - major: 0 29 | minor: 2 30 | contract: v1alpha2 -------------------------------------------------------------------------------- /test/e2e/data/shared/v1.6/metadata.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 2 | kind: Metadata 3 | releaseSeries: 4 | - major: 1 5 | minor: 6 6 | contract: v1beta1 7 | - major: 1 8 | minor: 5 9 | contract: v1beta1 10 | - major: 1 11 | minor: 4 12 | contract: v1beta1 13 | - major: 1 14 | minor: 3 15 | contract: v1beta1 16 | - major: 1 17 | minor: 2 18 | contract: v1beta1 19 | - major: 1 20 | minor: 1 21 | contract: v1beta1 22 | - major: 1 23 | minor: 0 24 | contract: v1beta1 25 | - major: 0 26 | minor: 4 27 | contract: v1alpha4 28 | - major: 0 29 | minor: 3 30 | contract: v1alpha3 31 | -------------------------------------------------------------------------------- /test/e2e/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package e2e implements end to end testing. 18 | package e2e 19 | -------------------------------------------------------------------------------- /test/e2e/internal/log/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package log implements log handling. 18 | package log 19 | -------------------------------------------------------------------------------- /test/extension/.import-restrictions: -------------------------------------------------------------------------------- 1 | # Enforce that the test extension implementation and its integration tests 2 | # do not depend on internal packages. 3 | rules: 4 | - selectorRegexp: .*internal.* 5 | allowedPrefixes: [] 6 | forbiddenPrefixes: [] 7 | -------------------------------------------------------------------------------- /test/extension/config/certmanager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - certificate.yaml 5 | 6 | configurations: 7 | - kustomizeconfig.yaml 8 | -------------------------------------------------------------------------------- /test/extension/config/certmanager/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This configuration is for teaching kustomize how to update name ref and var substitution 2 | nameReference: 3 | - kind: Issuer 4 | group: cert-manager.io 5 | fieldSpecs: 6 | - kind: Certificate 7 | group: cert-manager.io 8 | path: spec/issuerRef/name 9 | -------------------------------------------------------------------------------- /test/extension/config/default/manager_image_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - image: gcr.io/k8s-staging-cluster-api/test-extension:main 11 | name: manager 12 | -------------------------------------------------------------------------------- /test/extension/config/default/manager_pull_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | imagePullPolicy: Always 12 | -------------------------------------------------------------------------------- /test/extension/config/default/manager_webhook_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | ports: 12 | - containerPort: 9443 13 | name: webhook-server 14 | protocol: TCP 15 | volumeMounts: 16 | - mountPath: /tmp/k8s-webhook-server/serving-certs 17 | name: cert 18 | readOnly: true 19 | volumes: 20 | - name: cert 21 | secret: 22 | secretName: test-extension-webhook-service-cert 23 | -------------------------------------------------------------------------------- /test/extension/config/default/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: system 5 | -------------------------------------------------------------------------------- /test/extension/config/default/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: webhook-service 5 | spec: 6 | ports: 7 | - port: 443 8 | targetPort: webhook-server 9 | selector: 10 | app: test-extension-manager 11 | -------------------------------------------------------------------------------- /test/extension/config/rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - leader_election_role.yaml 5 | - leader_election_role_binding.yaml 6 | - role.yaml 7 | - role_binding.yaml 8 | - service_account.yaml 9 | -------------------------------------------------------------------------------- /test/extension/config/rbac/leader_election_role.yaml: -------------------------------------------------------------------------------- 1 | 2 | # permissions to do leader election. 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | kind: Role 5 | metadata: 6 | name: leader-election-role 7 | rules: 8 | - apiGroups: 9 | - "" 10 | resources: 11 | - events 12 | verbs: 13 | - create 14 | - apiGroups: 15 | - "coordination.k8s.io" 16 | resources: 17 | - leases 18 | verbs: 19 | - get 20 | - list 21 | - watch 22 | - create 23 | - update 24 | - patch 25 | - delete 26 | -------------------------------------------------------------------------------- /test/extension/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: leader-election-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: leader-election-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /test/extension/config/rbac/role.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: ClusterRole 4 | metadata: 5 | name: manager-role 6 | rules: 7 | - apiGroups: 8 | - "" 9 | resources: 10 | - configmaps 11 | verbs: 12 | - create 13 | - get 14 | - list 15 | - patch 16 | - update 17 | - watch 18 | - apiGroups: 19 | - authentication.k8s.io 20 | resources: 21 | - tokenreviews 22 | verbs: 23 | - create 24 | - apiGroups: 25 | - authorization.k8s.io 26 | resources: 27 | - subjectaccessreviews 28 | verbs: 29 | - create 30 | -------------------------------------------------------------------------------- /test/extension/config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | # Note: this is specific of the CAPI test-extension, because it uses a ConfigMap to define life-cycle hooks answers. 2 | # other Runtime extensions provider might want to drop this ClusterRoleBinding or make it scoped to a namespace changing kind to RoleBinding. 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | kind: ClusterRoleBinding 5 | metadata: 6 | creationTimestamp: null 7 | name: manager-rolebinding 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: manager-role 12 | subjects: 13 | - kind: ServiceAccount 14 | name: manager 15 | namespace: system 16 | -------------------------------------------------------------------------------- /test/extension/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: manager 5 | namespace: system 6 | -------------------------------------------------------------------------------- /test/framework/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-test-framework-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-test-framework-reviewers 9 | -------------------------------------------------------------------------------- /test/framework/README.md: -------------------------------------------------------------------------------- 1 | # CAPI e2e testing framework 2 | 3 | This framework aims to define common end-to-end patterns that can be reused across Cluster API providers. 4 | 5 | See https://cluster-api.sigs.k8s.io/developer/e2e.html for more information. -------------------------------------------------------------------------------- /test/framework/clusterctl/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package clusterctl implements clusterctl interaction. 18 | package clusterctl 19 | -------------------------------------------------------------------------------- /test/framework/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package framework implements the test framework. 18 | package framework 19 | -------------------------------------------------------------------------------- /test/framework/kubernetesversions/data/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | namespace: default 4 | resources: 5 | - ci-artifacts-source-template.yaml 6 | patches: 7 | - path: kubeadmcontrolplane-patch.yaml 8 | target: 9 | group: controlplane.cluster.x-k8s.io 10 | kind: KubeadmControlPlane 11 | name: .*-control-plane 12 | version: v1beta2 13 | - path: kubeadmconfigtemplate-patch.yaml 14 | target: 15 | group: bootstrap.cluster.x-k8s.io 16 | kind: KubeadmConfigTemplate 17 | name: .*-md-0 18 | version: v1beta2 19 | - path: platform-kustomization.yaml 20 | -------------------------------------------------------------------------------- /test/infrastructure/docker/.gitignore: -------------------------------------------------------------------------------- 1 | # invalid samples. 2 | config/samples 3 | 4 | # vscode 5 | .vscode 6 | 7 | # goland 8 | .idea 9 | 10 | # ignore build output 11 | dist 12 | bin 13 | manager_image_patch.yaml-e 14 | cover.out 15 | manager 16 | 17 | # test results 18 | *.xml 19 | 20 | e2e/resources/** 21 | -------------------------------------------------------------------------------- /test/infrastructure/docker/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs: http://git.k8s.io/community/contributors/guide/owners.md 2 | 3 | approvers: 4 | - cluster-api-provider-docker-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-provider-docker-reviewers 9 | -------------------------------------------------------------------------------- /test/infrastructure/docker/api/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /test/infrastructure/docker/api/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: [] 4 | forbiddenPrefixes: 5 | - "sigs.k8s.io/controller-runtime" 6 | -------------------------------------------------------------------------------- /test/infrastructure/docker/api/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package v1beta1 18 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/certmanager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - certificate.yaml 6 | 7 | configurations: 8 | - kustomizeconfig.yaml 9 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/certmanager/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This configuration is for teaching kustomize how to update name ref and var substitution 2 | nameReference: 3 | - kind: Issuer 4 | group: cert-manager.io 5 | fieldSpecs: 6 | - kind: Certificate 7 | group: cert-manager.io 8 | path: spec/issuerRef/name 9 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # This file is for teaching kustomize how to substitute name and namespace reference in CRD 2 | nameReference: 3 | - kind: Service 4 | version: v1 5 | fieldSpecs: 6 | - kind: CustomResourceDefinition 7 | group: apiextensions.k8s.io 8 | path: spec/conversion/webhook/clientConfig/service/name 9 | 10 | namespace: 11 | - kind: CustomResourceDefinition 12 | group: apiextensions.k8s.io 13 | path: spec/conversion/webhook/clientConfig/service/namespace 14 | create: false 15 | 16 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_devclusters.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: devclusters.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_devclustertemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: devclustertemplates.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_devmachines.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: devmachines.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_devmachinetemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: devmachinetemplates.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockerclusters.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockerclusters.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockerclustertemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockerclustertemplates.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockermachinepools.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockermachinepools.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockermachinepooltemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockermachinepooltemplates.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockermachines.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockermachines.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/crd/patches/webhook_in_dockermachinetemplates.yaml: -------------------------------------------------------------------------------- 1 | # The following patch enables conversion webhook for CRD 2 | # CRD conversion requires k8s 1.13 or later. 3 | apiVersion: apiextensions.k8s.io/v1 4 | kind: CustomResourceDefinition 5 | metadata: 6 | name: dockermachinetemplates.infrastructure.cluster.x-k8s.io 7 | spec: 8 | conversion: 9 | strategy: Webhook 10 | webhook: 11 | conversionReviewVersions: ["v1", "v1beta1"] 12 | clientConfig: 13 | service: 14 | namespace: system 15 | name: webhook-service 16 | path: /convert 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/default/manager_image_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | # Change the value of image field below to your controller image URL 11 | - image: gcr.io/k8s-staging-cluster-api/capd-manager:main 12 | name: manager 13 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/default/manager_pull_policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | imagePullPolicy: Always 12 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/default/manager_webhook_patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: controller-manager 5 | namespace: system 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: manager 11 | ports: 12 | - containerPort: 9443 13 | name: webhook-server 14 | protocol: TCP 15 | volumeMounts: 16 | - mountPath: /tmp/k8s-webhook-server/serving-certs 17 | name: cert 18 | readOnly: true 19 | volumes: 20 | - name: cert 21 | secret: 22 | secretName: capd-webhook-service-cert # this secret will not be prefixed, since it's not managed by kustomize 23 | 24 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/default/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | control-plane: controller-manager 6 | # CAPD requires the privileged policy because it needs to mount the docker socket using a hostPath. 7 | pod-security.kubernetes.io/enforce: privileged 8 | pod-security.kubernetes.io/warn: privileged 9 | pod-security.kubernetes.io/audit: privileged 10 | name: system 11 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/default/webhookcainjection_patch.yaml: -------------------------------------------------------------------------------- 1 | # This patch add annotation to admission webhook config and 2 | # the variables CERTIFICATE_NAMESPACE and CERTIFICATE_NAME will be substituted by kustomize. 3 | apiVersion: admissionregistration.k8s.io/v1 4 | kind: ValidatingWebhookConfiguration 5 | metadata: 6 | name: validating-webhook-configuration 7 | annotations: 8 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 9 | --- 10 | apiVersion: admissionregistration.k8s.io/v1 11 | kind: MutatingWebhookConfiguration 12 | metadata: 13 | name: mutating-webhook-configuration 14 | annotations: 15 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 16 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - role.yaml 5 | - role_binding.yaml 6 | - service_account.yaml 7 | - leader_election_role.yaml 8 | - leader_election_role_binding.yaml 9 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/rbac/leader_election_role.yaml: -------------------------------------------------------------------------------- 1 | # permissions to do leader election. 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: leader-election-role 6 | rules: 7 | - apiGroups: 8 | - "" 9 | resources: 10 | - events 11 | verbs: 12 | - create 13 | - apiGroups: 14 | - "coordination.k8s.io" 15 | resources: 16 | - leases 17 | verbs: 18 | - get 19 | - list 20 | - watch 21 | - create 22 | - update 23 | - patch 24 | - delete 25 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: leader-election-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: leader-election-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: manager-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: manager-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: manager 5 | namespace: system 6 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/webhook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manifests.yaml 3 | - service.yaml 4 | 5 | configurations: 6 | - kustomizeconfig.yaml 7 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/webhook/kustomizeconfig.yaml: -------------------------------------------------------------------------------- 1 | # the following config is for teaching kustomize where to look at when substituting vars. 2 | # It requires kustomize v2.1.0 or newer to work properly. 3 | nameReference: 4 | - kind: Service 5 | version: v1 6 | fieldSpecs: 7 | - kind: ValidatingWebhookConfiguration 8 | group: admissionregistration.k8s.io 9 | path: webhooks/clientConfig/service/name 10 | 11 | namespace: 12 | - kind: ValidatingWebhookConfiguration 13 | group: admissionregistration.k8s.io 14 | path: webhooks/clientConfig/service/namespace 15 | create: true 16 | 17 | -------------------------------------------------------------------------------- /test/infrastructure/docker/config/webhook/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: webhook-service 5 | namespace: system 6 | spec: 7 | ports: 8 | - port: 443 9 | targetPort: webhook-server 10 | 11 | -------------------------------------------------------------------------------- /test/infrastructure/docker/exp/api/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: 4 | - "sigs.k8s.io/controller-runtime/pkg/conversion" 5 | forbiddenPrefixes: [] 6 | -------------------------------------------------------------------------------- /test/infrastructure/docker/exp/api/v1beta1/.import-restrictions: -------------------------------------------------------------------------------- 1 | rules: 2 | - selectorRegexp: sigs[.]k8s[.]io/controller-runtime 3 | allowedPrefixes: [] 4 | forbiddenPrefixes: 5 | - "sigs.k8s.io/controller-runtime" 6 | -------------------------------------------------------------------------------- /test/infrastructure/docker/exp/api/v1beta1/conversion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package v1beta1 18 | 19 | func (*DockerMachinePool) Hub() {} 20 | -------------------------------------------------------------------------------- /test/infrastructure/docker/internal/controllers/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package controllers implements the Docker controllers. 18 | package controllers 19 | -------------------------------------------------------------------------------- /test/infrastructure/docker/internal/docker/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package docker implements docker functionality. 18 | package docker 19 | -------------------------------------------------------------------------------- /test/infrastructure/docker/internal/provisioning/ignition/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs at https://go.k8s.io/owners 2 | 3 | approvers: 4 | - cluster-api-bootstrap-provider-kubeadm-ignition-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-bootstrap-provider-kubeadm-ignition-reviewers 9 | -------------------------------------------------------------------------------- /test/infrastructure/docker/internal/webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2023 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks implements docker infrastructure webhooks. 18 | package webhooks 19 | -------------------------------------------------------------------------------- /test/infrastructure/inmemory/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs: http://git.k8s.io/community/contributors/guide/owners.md 2 | 3 | approvers: 4 | - cluster-api-provider-inmemory-maintainers 5 | 6 | reviewers: 7 | - cluster-api-reviewers 8 | - cluster-api-provider-inmemory-reviewers 9 | -------------------------------------------------------------------------------- /util/apiwarnings/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2024 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package apiwarnings defines warning handlers used with API clients. 18 | package apiwarnings 19 | -------------------------------------------------------------------------------- /util/cache/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2024 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package cache implements some cache utils. 18 | package cache 19 | -------------------------------------------------------------------------------- /util/conditions/deprecated/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package v1beta1 implements condition utilities. 18 | package v1beta1 19 | -------------------------------------------------------------------------------- /util/contract/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package contract contains utils related to the Cluster API contract. 18 | package contract 19 | -------------------------------------------------------------------------------- /util/log/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2017 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package log provides log utils. 18 | package log 19 | -------------------------------------------------------------------------------- /util/patch/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package patch implements patch utilities. 18 | package patch 19 | -------------------------------------------------------------------------------- /util/secret/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package secret implements utilities for secret handling. 18 | package secret 19 | -------------------------------------------------------------------------------- /util/test/builder/README.md: -------------------------------------------------------------------------------- 1 | # "Generic" custom resource builder 2 | 3 | This package helps create custom resources definitions of "generic" Cluster API resources. For example, resources for a "generic" infra provider, such as InfraClusters, InfraMachines, InfraTemplates, etc. These resources are used for testing Cluster API controllers that reconcile resources created by different infrastructure, bootstrap, and control-plane providers. 4 | 5 | ## Compatibility notice 6 | 7 | This package does not adhere to any compatibility guarantees. This package is meant to be used by tests only. 8 | -------------------------------------------------------------------------------- /webhooks/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2021 The Kubernetes Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Package webhooks contains external webhook implementations for some of our API types. 18 | package webhooks 19 | --------------------------------------------------------------------------------