@@ -23,9 +23,10 @@ SSH_OPTS=(
2323 -o ConnectTimeout=3
2424)
2525
26- # for local validate
27- # 1: local validate, 0: workflow
28- LOCAL_VALIDATE=${LOCAL_VALIDATE:- 0}
26+ # for local validate, workflow ignore it
27+ # "$value": local image path, "": workflow default
28+ # your qcow2 image should be in ${LOCAL_IMG_PATH}/${OS_IMAGE}
29+ LOCAL_IMG_PATH=${LOCAL_IMG_PATH:- " " }
2930
3031function cloud_user_data() {
3132 # generate ssh keys for passwordless login
@@ -57,12 +58,17 @@ growpart:
5758 mode: auto
5859 devices: ['/']
5960 ignore_growroot_disabled: false
61+ EOF
6062
61- # runcmd:
62- # - mkdir -p /mnt/host
63- # - echo "hostshare /mnt/host 9p trans=virtio,version=9p2000.L,access=any,_netdev 0 0" >> /etc/fstab
64- # - mount -a
63+ if [ -n " $LOCAL_IMG_PATH " ]; then
64+ tee -a ${CLOUD_USER_DATA} > /dev/null << EOF
65+ runcmd:
66+ - mkdir -p ${VM_ROOT}
67+ - echo "hostshare ${VM_ROOT} 9p trans=virtio,version=9p2000.L,access=any,_netdev 0 0" >> /etc/fstab
68+ - mount -a
6569EOF
70+ fi
71+
6672 touch " $CLOUD_META_DATA "
6773
6874 # validate cloud-init user-data
7278function prepare_qcow2_image() {
7379 sudo mkdir -p ${LIBVIRT_IMAGE_DIR}
7480
75- if [ $LOCAL_VALIDATE -eq 1 ]; then
76- echo -e " LOCAL_VALIDATE =${LOCAL_VALIDATE } , cp ./assets/ ${ARCH } /${OS_IMAGE} ${LIBVIRT_IMAGE_DIR} /"
77- sudo cp ./assets/ ${ARCH } /${OS_IMAGE} ${LIBVIRT_IMAGE_DIR} /
81+ if [ -n " $LOCAL_IMG_PATH " ]; then
82+ echo -e " LOCAL_IMG_PATH =${LOCAL_IMG_PATH } , cp ${LOCAL_IMG_PATH } /${OS_IMAGE} ${LIBVIRT_IMAGE_DIR} /"
83+ sudo cp ${LOCAL_IMG_PATH } /${OS_IMAGE} ${LIBVIRT_IMAGE_DIR} /
7884 else
7985 docker pull huatuo/os-distro-test:${OS_DISTRO} .${ARCH}
8086 cid=$( docker create huatuo/os-distro-test:${OS_DISTRO} .${ARCH} )
8187 docker cp ${cid} :/data/${OS_IMAGE} .zst .
8288 zstd --decompress -f --rm --threads=0 ${OS_IMAGE} .zst
8389
8490 sudo mv ${OS_IMAGE} ${LIBVIRT_IMAGE_DIR} /
85-
8691 fi
8792
8893 sudo chown libvirt-qemu:kvm ${LIBVIRT_IMAGE_DIR} /${OS_IMAGE}
@@ -105,21 +110,28 @@ function install_vm() {
105110 echo -e " install vm ${VM_NAME} from qcow2 [${LIBVIRT_IMAGE_DIR} /${OS_IMAGE} ], resize to ${VM_DISK_SIZE} "
106111
107112 # install vm
113+ VIRT_LOCAL_ARG=()
114+ if [ -n " $LOCAL_IMG_PATH " ]; then
115+ VIRT_LOCAL_ARG=(
116+ --filesystem source=" $( pwd) " ,target=hostshare,type=mount,accessmode=passthrough
117+ )
118+ fi
119+
108120 VIRT_COMMON_ARG=(
109121 --name " ${VM_NAME} "
110122 --os-variant " ${OS_DISTRO} "
111123 --vcpus " ${VM_VCPUS} "
112124 --memory " ${VM_MEMORY_MB} "
113125 --disk path=" ${LIBVIRT_IMAGE_DIR} /${OS_IMAGE} " ,bus=virtio,cache=none,format=qcow2
114126 --network network=default,model=virtio,mac=${VM_MAC}
115- # --filesystem source="$(pwd)",target=hostshare,type=mount,accessmode=passthrough
116127 --import
117128 --graphics none
118129 --noautoconsole
119130 )
120131 VIRT_X86_64_ARG=(
121132 " ${VIRT_COMMON_ARG[@]} "
122133 --cloud-init user-data=${CLOUD_USER_DATA}
134+ " ${VIRT_LOCAL_ARG[@]} "
123135 )
124136 VIRT_ARM64_ARG=(
125137 " ${VIRT_COMMON_ARG[@]} "
@@ -128,6 +140,7 @@ function install_vm() {
128140 # --cpu cortex-a57
129141 --disk path=" ${CLOUD_INIT_ISO} " ,device=cdrom
130142 --boot loader=/usr/share/AAVMF/AAVMF_CODE.fd,loader.readonly=yes,loader.type=pflash,nvram.template=/usr/share/AAVMF/AAVMF_VARS.fd
143+ " ${VIRT_LOCAL_ARG[@]} "
131144 )
132145
133146 case " $ARCH " in
@@ -184,24 +197,24 @@ function wait_for_k8s_ready() {
184197}
185198
186199function rsync_workspace_to_vm() {
187- echo -e " rsync workspace → vm ${VM_NAME} :/mnt/host ..."
200+ echo -e " rsync workspace → vm ${VM_NAME} :${VM_ROOT} ..."
188201
189- if [ $LOCAL_VALIDATE -eq 1 ]; then
190- echo -e " LOCAL_VALIDATE =${LOCAL_VALIDATE } , skip rsync."
202+ if [ -n " $LOCAL_IMG_PATH " ]; then
203+ echo -e " LOCAL_IMG_PATH =${LOCAL_IMG_PATH } , skip rsync."
191204 return 0
192205 fi
193206
194- ssh " ${SSH_OPTS[@]} " " root@${VM_IP} " " mkdir -p /mnt/host "
207+ ssh " ${SSH_OPTS[@]} " " root@${VM_IP} " " mkdir -p ${VM_ROOT} "
195208
196209 rsync -az --delete \
197210 --numeric-ids \
198211 -e " ssh ${SSH_OPTS[*]} " \
199- ./ root@${VM_IP} :/mnt/host /
212+ ./ root@${VM_IP} :${VM_ROOT} /
200213
201- ssh " ${SSH_OPTS[@]} " " root@${VM_IP} " " ls -lah /mnt/host "
214+ ssh " ${SSH_OPTS[@]} " " root@${VM_IP} " " ls -lah ${VM_ROOT} "
202215}
203216
204- echo -e " \n\n------- ARCH : $ARCH OS_DISTRO: $OS_DISTRO "
217+ echo -e " \n\nARCH : $ARCH OS_DISTRO: $OS_DISTRO "
205218case " $OS_DISTRO " in
206219ubuntu* )
207220 u_version=${OS_DISTRO# ubuntu}
@@ -227,4 +240,4 @@ wait_for_k8s_ready
227240echo -e " ✅ k8s is ready."
228241
229242rsync_workspace_to_vm
230- echo -e " ✅ rsync to VM path ${VM_NAME} :/mnt/host done."
243+ echo -e " ✅ rsync to VM path ${VM_NAME} :${VM_ROOT} done."
0 commit comments