This repository was archived by the owner on Mar 13, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathMakefile
More file actions
115 lines (102 loc) · 3.63 KB
/
Makefile
File metadata and controls
115 lines (102 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
.PHONY: help build-cpu build-gpu build-all upload-cpu upload-gpu upload-all clean show-image
# Default variables
BUILD_DIR ?= /tmp/vm-images-build-$(shell date +%s)
IMAGE_TYPE ?= cpu
TIMESTAMP := $(shell date +%Y%m%d-%H%M%S)
IMAGE_NAME := ubuntu-2404-$(IMAGE_TYPE)-$(TIMESTAMP)
# Path configuration
REPO_DIR := $(shell pwd)
VM_IMAGES_DIR := $(REPO_DIR)/vm-images
OPENSTACK_RC ?= /etc/kolla/admin-openrc.sh
UV ?= uv
IMAGE_TAGS ?=
help:
@echo "VM Image Build Makefile"
@echo ""
@echo "Requirements:"
@echo " - uv (https://docs.astral.sh/uv/)"
@echo ""
@echo "Targets:"
@echo " build-cpu - Build CPU image"
@echo " build-gpu - Build GPU image"
@echo " build-all - Build both CPU and GPU images"
@echo " upload-cpu - Upload CPU image to OpenStack"
@echo " upload-gpu - Upload GPU image to OpenStack"
@echo " upload-all - Upload both images to OpenStack"
@echo " show-image - Show built image information"
@echo " clean - Clean up build directory"
@echo ""
@echo "Variables:"
@echo " BUILD_DIR=$(BUILD_DIR)"
@echo " IMAGE_TYPE=$(IMAGE_TYPE)"
@echo " IMAGE_NAME=$(IMAGE_NAME)"
@echo " UV=$(UV)"
@echo " IMAGE_TAGS=$(IMAGE_TAGS) # OpenStack image tags (e.g., '--tag key=value --tag key2=value2')"
build-cpu:
@$(MAKE) _build IMAGE_TYPE=cpu
build-gpu:
@$(MAKE) _build IMAGE_TYPE=gpu
build-all:
@$(MAKE) build-cpu
@$(MAKE) build-gpu
_build:
@echo "======================================"
@echo "Building $(IMAGE_TYPE) image: $(IMAGE_NAME)"
@echo "======================================"
mkdir -p $(BUILD_DIR)-$(IMAGE_TYPE)
cp -r $(VM_IMAGES_DIR)/* $(BUILD_DIR)-$(IMAGE_TYPE)/
cd $(BUILD_DIR)-$(IMAGE_TYPE) && \
sed -i 's/imagename: $(IMAGE_TYPE)-image.qcow2/imagename: $(IMAGE_NAME).qcow2/' $(IMAGE_TYPE)-image.yaml
cd $(BUILD_DIR)-$(IMAGE_TYPE) && \
$(UV) sync && \
IMAGE_YAML=$(IMAGE_TYPE)-image.yaml UV=$(UV) $(UV) run bash build-image.sh
@echo ""
@$(MAKE) show-image IMAGE_TYPE=$(IMAGE_TYPE) BUILD_DIR=$(BUILD_DIR)
show-image:
@echo "======================================"
@echo "Built Image Information"
@echo "======================================"
@cd $(BUILD_DIR)-$(IMAGE_TYPE) && \
IMAGE_FILE=$$(ls -1 *.qcow2 2>/dev/null | head -1) && \
if [ -n "$$IMAGE_FILE" ]; then \
echo "Image Path: $(BUILD_DIR)-$(IMAGE_TYPE)/$$IMAGE_FILE"; \
echo "Image Size: $$(ls -lh $$IMAGE_FILE | awk '{print $$5}')"; \
echo "Full Details:"; \
ls -lh $$IMAGE_FILE; \
echo ""; \
if command -v qemu-img &> /dev/null; then \
echo "QEMU Image Info:"; \
qemu-img info $$IMAGE_FILE; \
fi; \
else \
echo "No .qcow2 image file found!"; \
fi
@echo "======================================"
upload-cpu:
@$(MAKE) _upload IMAGE_TYPE=cpu
upload-gpu:
@$(MAKE) _upload IMAGE_TYPE=gpu
upload-all:
@$(MAKE) upload-cpu
@$(MAKE) upload-gpu
_upload:
@echo "======================================"
@echo "Uploading $(IMAGE_TYPE) image to OpenStack"
@echo "======================================"
@cd $(BUILD_DIR)-$(IMAGE_TYPE) && \
. $(OPENSTACK_RC) && \
IMAGE_FILE=$$(ls -1 *.qcow2 2>/dev/null | head -1) && \
IMAGE_BASE=$$(basename $$IMAGE_FILE .qcow2) && \
echo "Uploading $$IMAGE_FILE..." && \
$(UV) run openstack image create $$IMAGE_BASE \
--public --disk-format qcow2 \
--container-format bare \
--file $$IMAGE_FILE \
$(IMAGE_TAGS) && \
echo "Image uploaded successfully!" && \
$(UV) run openstack image show $$IMAGE_BASE
clean:
@echo "Cleaning up build directories..."
@if [ -d "$(BUILD_DIR)-cpu" ]; then sudo rm -rf $(BUILD_DIR)-cpu; fi
@if [ -d "$(BUILD_DIR)-gpu" ]; then sudo rm -rf $(BUILD_DIR)-gpu; fi
@echo "Cleanup complete"