diff --git a/README.md b/README.md index 39eedcf6ce..50230412f3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The table below shows the currently provided operating systems for each provider | Amazon Linux 2023 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | Azure Linux 3 | ❌ | 💙 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | CentOS 9 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | -| Flatcar | ✅ | 💙 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | 💙 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | +| Flatcar | ✅ | 💙 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | 💙 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | | Oracle Linux 9 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | Photon 4 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | Photon 5 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 💙 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | diff --git a/docs/book/src/capi/providers/vultr.md b/docs/book/src/capi/providers/vultr.md index f78254202d..41fbc3ee14 100644 --- a/docs/book/src/capi/providers/vultr.md +++ b/docs/book/src/capi/providers/vultr.md @@ -24,6 +24,7 @@ for the different operating systems. | File | Description | |------|-------------| +| `flatcar-stable.json` | The settings for the Flatcar Stable image | | `ubuntu-2204.json` | The settings for the Ubuntu 22.04 image | | `ubuntu-2404.json` | The settings for the Ubuntu 24.04 image | | `ubuntu-2604.json` | The settings for the Ubuntu 26.04 image | diff --git a/images/capi/Makefile b/images/capi/Makefile index 52f459a556..1399b39db6 100644 --- a/images/capi/Makefile +++ b/images/capi/Makefile @@ -193,6 +193,7 @@ deps-lint: deps-common .PHONY: deps-vultr deps-vultr: ## Installs/checks dependencies for Vultr builds deps-vultr: deps-common + hack/ensure-jq.sh $(PACKER) init packer/config.pkr.hcl $(PACKER) init packer/vultr/config.pkr.hcl @@ -412,7 +413,7 @@ HCLOUD_BUILD_NAMES ?= hcloud-ubuntu-2204 hcloud-ubuntu-2404 hcloud-ubuntu-2604 h PROXMOX_BUILD_NAMES ?= proxmox-ubuntu-2204 proxmox-ubuntu-2404 proxmox-ubuntu-2404-efi proxmox-ubuntu-2604 proxmox-ubuntu-2604-efi proxmox-rockylinux-9 proxmox-flatcar -VULTR_BUILD_NAMES ?= vultr-ubuntu-2204 vultr-ubuntu-2404 vultr-ubuntu-2604 +VULTR_BUILD_NAMES ?= vultr-ubuntu-2204 vultr-ubuntu-2404 vultr-ubuntu-2604 vultr-flatcar-stable MAAS_BUILD_NAMES ?= maas-ubuntu-2204-efi maas-ubuntu-2404-efi maas-ubuntu-2604-efi MAAS_ARM64_BUILD_NAMES ?= maas-ubuntu-2204-arm64 maas-ubuntu-2404-arm64 @@ -662,7 +663,22 @@ $(PROXMOX_VALIDATE_TARGETS): deps-proxmox set-ssh-password .PHONY: $(VULTR_BUILD_TARGETS) $(VULTR_BUILD_TARGETS): deps-vultr - $(PACKER) build $(PACKER_NODE_FLAGS) -var-file="$(abspath packer/vultr/$(subst build-vultr-,,$@).json)" $(ABSOLUTE_PACKER_VAR_FILES) packer/vultr/packer.json + @set -eu; \ + VULTR_VAR_FILE="$(abspath packer/vultr/$(subst build-vultr-,,$@).json)"; \ + VULTR_USERDATA_FILE="$$(jq -r '.userdata_file // empty' "$${VULTR_VAR_FILE}")"; \ + PACKER_USERDATA_ARGS=(); \ + VULTR_USERDATA_BASE64=""; \ + if [[ -n "$${VULTR_USERDATA_FILE}" ]]; then \ + if [[ ! -f "$${VULTR_USERDATA_FILE}" ]]; then \ + echo "Vultr userdata_file not found: $${VULTR_USERDATA_FILE}" >&2; \ + exit 1; \ + fi; \ + jq -e . "$${VULTR_USERDATA_FILE}" >/dev/null; \ + VULTR_USERDATA_BASE64="$$( { base64 -w0 || base64; } 2>/dev/null < "$${VULTR_USERDATA_FILE}" | tr -d '\n' )"; \ + echo "Vultr userdata preprocess: file=$${VULTR_USERDATA_FILE} bytes=$$(wc -c < "$${VULTR_USERDATA_FILE}") b64_len=$${#VULTR_USERDATA_BASE64}" >&2; \ + PACKER_USERDATA_ARGS=(-var "userdata_base64=$${VULTR_USERDATA_BASE64}"); \ + fi; \ + $(PACKER) build $(PACKER_NODE_FLAGS) -var-file="$${VULTR_VAR_FILE}" $(ABSOLUTE_PACKER_VAR_FILES) "$${PACKER_USERDATA_ARGS[@]}" packer/vultr/packer.json .PHONY: $(VULTR_VALIDATE_TARGETS) $(VULTR_VALIDATE_TARGETS): deps-vultr @@ -904,6 +920,7 @@ build-proxmox-all: $(PROXMOX_BUILD_TARGETS) ## Builds all Proxmox images build-vultr-ubuntu-2204: ## Builds Ubuntu 22.04 Vultr Snapshot build-vultr-ubuntu-2404: ## Builds Ubuntu 24.04 Vultr Snapshot build-vultr-ubuntu-2604: ## Builds Ubuntu 26.04 Vultr Snapshot +build-vultr-flatcar-stable: ## Builds Flatcar Stable Vultr Snapshot build-vultr-all: $(VULTR_BUILD_TARGETS) ## Builds all Vultr Snapshots build-scaleway-rockylinux-9: ## Builds Rocky Linux 9 Scaleway image @@ -1066,6 +1083,7 @@ validate-proxmox-all: $(PROXMOX_VALIDATE_TARGETS) ## Validates all Proxmox Packe validate-vultr-ubuntu-2204: ## Validates Ubuntu 22.04 Vultr Snapshot Packer config validate-vultr-ubuntu-2404: ## Validates Ubuntu 24.04 Vultr Snapshot Packer config validate-vultr-ubuntu-2604: ## Validates Ubuntu 26.04 Vultr Snapshot Packer config +validate-vultr-flatcar-stable: ## Validates Flatcar Stable Vultr Snapshot Packer config validate-vultr-all: $(VULTR_VALIDATE_TARGETS) ## Validates all Vultr Snapshot Packer config validate-scaleway-rockylinux-9: ## Validates Rocky Linux 9 Scaleway image Packer config diff --git a/images/capi/packer/vultr/flatcar-stable.json b/images/capi/packer/vultr/flatcar-stable.json new file mode 100644 index 0000000000..13114c8e64 --- /dev/null +++ b/images/capi/packer/vultr/flatcar-stable.json @@ -0,0 +1,16 @@ +{ + "ansible_extra_vars": "ansible_python_interpreter=/opt/bin/python", + "ansible_user": "core", + "build_name": "flatcar-stable", + "kubernetes_cni_source_type": "http", + "kubernetes_source_type": "http", + "os": "2077", + "python_path": "/opt/bin/builder-env/site-packages", + "snapshot_name_suffix": "on Flatcar Stable", + "source_image": "flatcar-stable-x64", + "ssh_username": "core", + "systemd_prefix": "/etc/systemd", + "sysusr_prefix": "/opt", + "sysusrlocal_prefix": "/opt", + "userdata_file": "packer/files/flatcar/ignition/bootstrap-cloud.json" +} diff --git a/images/capi/packer/vultr/packer.json b/images/capi/packer/vultr/packer.json index 294ce2f7b4..187ab84d12 100644 --- a/images/capi/packer/vultr/packer.json +++ b/images/capi/packer/vultr/packer.json @@ -6,12 +6,21 @@ "plan_id": "{{ user `plan` }}", "region_id": "{{ user `region` }}", "snapshot_description": "Cluster API Kubernetes {{ user `kubernetes_semver` }} {{ user `snapshot_name_suffix` }}", - "ssh_username": "root", + "ssh_username": "{{user `ssh_username`}}", "tag": "cluster-api-{{ user `build_name` }}:{{ user `kubernetes_semver` | replace_all `.` `-` }}", - "type": "vultr" + "type": "vultr", + "userdata": "{{ user `userdata_base64` }}" } ], "provisioners": [ + { + "environment_vars": [ + "PYPY_HTTP_SOURCE={{user `pypy_http_source`}}" + ], + "execute_command": "BUILD_NAME={{user `build_name`}}; if [[ \"${BUILD_NAME}\" == *\"flatcar\"* ]]; then sudo {{.Vars}} -S -E bash '{{.Path}}'; fi", + "script": "./packer/files/flatcar/scripts/bootstrap-flatcar.sh", + "type": "shell" + }, { "ansible_env_vars": [ "ANSIBLE_SSH_ARGS='{{user `existing_ansible_ssh_args`}} {{user `ansible_common_ssh_args`}}'" @@ -28,13 +37,14 @@ ], "playbook_file": "./ansible/node.yml", "type": "ansible", - "user": "packer" + "user": "{{user `ansible_user`}}" } ], "variables": { "ansible_common_vars": "", "ansible_extra_vars": "", "ansible_scp_extra_args": "", + "ansible_user": "packer", "api_key": "{{env `VULTR_API_KEY`}}", "build_timestamp": "{{timestamp}}", "containerd_enable_limit_no_file": "false", @@ -66,6 +76,9 @@ "os": "{{ user `os` }}", "plan": "vc2-1c-1gb", "region": "ewr", - "runc_version": null + "runc_version": null, + "ssh_username": "root", + "userdata_base64": "", + "userdata_file": "" } }