mirror of
https://github.com/kubernetes-sigs/kubespray.git
synced 2026-04-11 04:59:26 -02:30
image-builder:- add build-only validation mode and image selection (#13128)
This commit is contained in:
@@ -1,2 +1,8 @@
|
|||||||
deploy:
|
deploy:
|
||||||
ansible-playbook -i hosts.ini -e docker_password=$(docker_password) cluster.yml
|
ansible-playbook -i hosts.ini -e docker_password=$(docker_password) cluster.yml
|
||||||
|
|
||||||
|
validate:
|
||||||
|
ansible-playbook -i hosts.ini -e '{"kubevirt_images_push": false}' cluster.yml
|
||||||
|
|
||||||
|
validate-single:
|
||||||
|
ansible-playbook -i hosts.ini -e '{"kubevirt_images_push": false, "kubevirt_images_selected": ["$(image_name)"]}' cluster.yml
|
||||||
|
|||||||
@@ -55,3 +55,24 @@ make docker_password=<quay-robot-token>
|
|||||||
|
|
||||||
3. Submit a PR with the `defaults/main.yml` change so CI can use the new image.
|
3. Submit a PR with the `defaults/main.yml` change so CI can use the new image.
|
||||||
See [#12379](https://github.com/kubernetes-sigs/kubespray/pull/12379) for an example.
|
See [#12379](https://github.com/kubernetes-sigs/kubespray/pull/12379) for an example.
|
||||||
|
|
||||||
|
## CI Validation
|
||||||
|
|
||||||
|
### Build only
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd test-infra/image-builder/
|
||||||
|
make validate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build only for one image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd test-infra/image-builder/
|
||||||
|
make validate-single image_name=ubuntu-2404
|
||||||
|
```
|
||||||
|
|
||||||
|
## Runtime Variables
|
||||||
|
|
||||||
|
- `kubevirt_images_push` (default: `true`): when `false`, skip docker login/push/logout.
|
||||||
|
- `kubevirt_images_selected` (default: `[]`): list of image keys to build. Empty list builds all images.
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ images_dir: /images/base
|
|||||||
docker_user: kubespray+buildvmimages
|
docker_user: kubespray+buildvmimages
|
||||||
docker_host: quay.io
|
docker_host: quay.io
|
||||||
registry: quay.io/kubespray
|
registry: quay.io/kubespray
|
||||||
|
kubevirt_images_push: true
|
||||||
|
kubevirt_images_selected: []
|
||||||
|
|
||||||
images:
|
images:
|
||||||
ubuntu-2004:
|
ubuntu-2004:
|
||||||
|
|||||||
@@ -1,58 +1,71 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- name: Create image directory
|
- name: Build kubevirt images
|
||||||
file:
|
vars:
|
||||||
state: directory
|
kubevirt_images_to_build: "{{ images | dict2items if kubevirt_images_selected | length == 0 else ([images] | community.general.keep_keys(target=kubevirt_images_selected))[0] | dict2items }}"
|
||||||
path: "{{ images_dir }}"
|
block:
|
||||||
mode: "0755"
|
- name: Validate selected image names
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- kubevirt_images_selected | length == 0 or kubevirt_images_to_build | length > 0
|
||||||
|
fail_msg: "No matching images found in `images` for `kubevirt_images_selected={{ kubevirt_images_selected }}`"
|
||||||
|
|
||||||
- name: Download images files
|
- name: Create image directory
|
||||||
get_url:
|
file:
|
||||||
url: "{{ item.value.url }}"
|
state: directory
|
||||||
dest: "{{ images_dir }}/{{ item.value.filename }}"
|
path: "{{ images_dir }}"
|
||||||
checksum: "{{ item.value.checksum }}"
|
mode: "0755"
|
||||||
mode: "0644"
|
|
||||||
loop: "{{ images | dict2items }}"
|
|
||||||
|
|
||||||
- name: Unxz compressed images
|
- name: Download images files
|
||||||
command: unxz --force {{ images_dir }}/{{ item.value.filename }}
|
get_url:
|
||||||
loop: "{{ images | dict2items }}"
|
url: "{{ item.value.url }}"
|
||||||
when:
|
dest: "{{ images_dir }}/{{ item.value.filename }}"
|
||||||
- item.value.filename.endswith('.xz')
|
checksum: "{{ item.value.checksum }}"
|
||||||
|
mode: "0644"
|
||||||
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
|
|
||||||
- name: Convert images which is not in qcow2 format
|
- name: Unxz compressed images
|
||||||
command: qemu-img convert -O qcow2 {{ images_dir }}/{{ item.value.filename.rstrip('.xz') }} {{ images_dir }}/{{ item.key }}.qcow2
|
command: unxz --force {{ images_dir }}/{{ item.value.filename }}
|
||||||
loop: "{{ images | dict2items }}"
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
when:
|
when:
|
||||||
- not (item.value.converted | bool)
|
- item.value.filename.endswith('.xz')
|
||||||
|
|
||||||
- name: Make sure all images are ending with qcow2
|
- name: Convert images which is not in qcow2 format
|
||||||
command: cp {{ images_dir }}/{{ item.value.filename.rstrip('.xz') }} {{ images_dir }}/{{ item.key }}.qcow2
|
command: qemu-img convert -O qcow2 {{ images_dir }}/{{ item.value.filename.rstrip('.xz') }} {{ images_dir }}/{{ item.key }}.qcow2
|
||||||
loop: "{{ images | dict2items }}"
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
when:
|
when:
|
||||||
- item.value.converted | bool
|
- not (item.value.converted | bool)
|
||||||
|
|
||||||
- name: Resize images
|
- name: Make sure all images are ending with qcow2
|
||||||
command: qemu-img resize {{ images_dir }}/{{ item.key }}.qcow2 +8G
|
command: cp {{ images_dir }}/{{ item.value.filename.rstrip('.xz') }} {{ images_dir }}/{{ item.key }}.qcow2
|
||||||
loop: "{{ images | dict2items }}"
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
|
when:
|
||||||
|
- item.value.converted | bool
|
||||||
|
|
||||||
# STEP 2: Include the images inside a container
|
- name: Resize images
|
||||||
- name: Template default Dockerfile
|
command: qemu-img resize {{ images_dir }}/{{ item.key }}.qcow2 +8G
|
||||||
template:
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
src: Dockerfile
|
|
||||||
dest: "{{ images_dir }}/Dockerfile"
|
|
||||||
mode: "0644"
|
|
||||||
|
|
||||||
- name: Create docker images for each OS
|
# STEP 2: Include the images inside a container
|
||||||
command: docker build -t {{ registry }}/vm-{{ item.key }}:{{ item.value.tag }} --build-arg cloud_image="{{ item.key }}.qcow2" {{ images_dir }}
|
- name: Template default Dockerfile
|
||||||
loop: "{{ images | dict2items }}"
|
template:
|
||||||
|
src: Dockerfile
|
||||||
|
dest: "{{ images_dir }}/Dockerfile"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
- name: Docker login
|
- name: Create docker images for each OS
|
||||||
command: docker login -u="{{ docker_user }}" -p="{{ docker_password }}" "{{ docker_host }}"
|
command: docker build -t {{ registry }}/vm-{{ item.key }}:{{ item.value.tag }} --build-arg cloud_image="{{ item.key }}.qcow2" {{ images_dir }}
|
||||||
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
|
|
||||||
- name: Docker push image
|
- name: Docker login
|
||||||
command: docker push {{ registry }}/vm-{{ item.key }}:{{ item.value.tag }}
|
command: docker login -u="{{ docker_user }}" -p="{{ docker_password }}" "{{ docker_host }}"
|
||||||
loop: "{{ images | dict2items }}"
|
when: kubevirt_images_push
|
||||||
|
|
||||||
- name: Docker logout
|
- name: Docker push image
|
||||||
command: docker logout -u="{{ docker_user }}" "{{ docker_host }}"
|
command: docker push {{ registry }}/vm-{{ item.key }}:{{ item.value.tag }}
|
||||||
|
loop: "{{ kubevirt_images_to_build }}"
|
||||||
|
when: kubevirt_images_push
|
||||||
|
|
||||||
|
- name: Docker logout
|
||||||
|
command: docker logout -u="{{ docker_user }}" "{{ docker_host }}"
|
||||||
|
when: kubevirt_images_push
|
||||||
|
|||||||
Reference in New Issue
Block a user