You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.9 KiB
126 lines
3.9 KiB
#!/bin/bash
|
|
|
|
#set -x # debug mode
|
|
set -e
|
|
|
|
# =============================================================================================
|
|
# global vars
|
|
|
|
# force english messages
|
|
export LANG=C
|
|
export LC_ALL=C
|
|
|
|
# template vm vars
|
|
TEMPLATE_VMID="900"
|
|
TEMPLATE_VMSTORAGE="local"
|
|
SNIPPET_STORAGE="local"
|
|
VMDISK_OPTIONS=",discard=on"
|
|
|
|
TEMPLATE_IGNITION="fcos-base-tmplt.yaml"
|
|
|
|
# fcos version
|
|
STREAMS=stable
|
|
VERSION=32.20201018.3.0
|
|
PLATEFORM=qemu
|
|
BASEURL=https://builds.coreos.fedoraproject.org
|
|
|
|
# =============================================================================================
|
|
# main()
|
|
|
|
# pve storage exist ?
|
|
echo -n "Check if vm storage ${TEMPLATE_VMSTORAGE} exist... "
|
|
pvesh get /storage/${TEMPLATE_VMSTORAGE} --noborder --noheader &> /dev/null || {
|
|
echo -e "[failed]"
|
|
exit 1
|
|
}
|
|
echo "[ok]"
|
|
|
|
# pve storage snippet ok ?
|
|
echo -n "Check if snippet storage ${SNIPPET_STORAGE} exist... "
|
|
pvesh get /storage/${SNIPPET_STORAGE} --noborder --noheader &> /dev/null || {
|
|
echo -e "[failed]"
|
|
exit 1
|
|
}
|
|
echo "[ok]"
|
|
|
|
# pve storage snippet enable
|
|
pvesh get /storage/${SNIPPET_STORAGE} --noborder --noheader | grep -q snippets || {
|
|
echo "You musr activate content snippet on storage: ${SNIPPET_STORAGE}"
|
|
exit 1
|
|
}
|
|
|
|
# copy files
|
|
echo "Copy hook-script and ignition config to snippet storage..."
|
|
snippet_storage="$(pvesh get /storage/${SNIPPET_STORAGE} --noborder --noheader | grep ^path | awk '{print $NF}')"
|
|
cp -av ${TEMPLATE_IGNITION} hook-fcos.sh ${snippet_storage}/snippets
|
|
sed -e "/^COREOS_TMPLT/ c\COREOS_TMPLT=${snippet_storage}/snippets/${TEMPLATE_IGNITION}" -i ${snippet_storage}/snippets/hook-fcos.sh
|
|
chmod 755 ${snippet_storage}/snippets/hook-fcos.sh
|
|
|
|
# storage type ? (https://pve.proxmox.com/wiki/Storage)
|
|
echo -n "Get storage \"${TEMPLATE_VMSTORAGE}\" type... "
|
|
case "$(pvesh get /storage/${TEMPLATE_VMSTORAGE} --noborder --noheader | grep ^type | awk '{print $2}')" in
|
|
dir|nfs|cifs|glusterfs|cephfs) TEMPLATE_VMSTORAGE_type="file"; echo "[file]"; ;;
|
|
lvm|lvmthin|iscsi|iscsidirect|rbd|zfs|zfspool) TEMPLATE_VMSTORAGE_type="block"; echo "[block]" ;;
|
|
*)
|
|
echo "[unknown]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# download fcos vdisk
|
|
[[ ! -e fedora-coreos-${VERSION}-${PLATEFORM}.x86_64.qcow2 ]]&& {
|
|
echo "Download fedora coreos..."
|
|
wget -q --show-progress \
|
|
${BASEURL}/prod/streams/${STREAMS}/builds/${VERSION}/x86_64/fedora-coreos-${VERSION}-${PLATEFORM}.x86_64.qcow2.xz
|
|
xz -dv fedora-coreos-${VERSION}-${PLATEFORM}.x86_64.qcow2.xz
|
|
}
|
|
|
|
# create a new VM
|
|
echo "Create fedora coreos vm ${VMID}"
|
|
qm create ${TEMPLATE_VMID} --name fcos-tmplt
|
|
qm set ${TEMPLATE_VMID} --memory 4096 \
|
|
--cpu host \
|
|
--cores 4 \
|
|
--agent enabled=1 \
|
|
--autostart \
|
|
--onboot 1 \
|
|
--ostype l26 \
|
|
--tablet 0 \
|
|
--boot c --bootdisk scsi0
|
|
|
|
template_vmcreated=$(date +%Y-%m-%d)
|
|
qm set ${TEMPLATE_VMID} --description "Fedora CoreOS - Geco-iT Template
|
|
|
|
- Version : ${VERSION}
|
|
- Cloud-init : true
|
|
|
|
Creation date : ${template_vmcreated}
|
|
"
|
|
|
|
qm set ${TEMPLATE_VMID} --net0 virtio,bridge=vmbr0
|
|
#qm set ${TEMPLATE_VMID} --net1 virtio,bridge=vmbr1
|
|
|
|
echo -e "\nCreate Cloud-init vmdisk..."
|
|
qm set ${TEMPLATE_VMID} --ide2 ${TEMPLATE_VMSTORAGE}:cloudinit
|
|
|
|
# import fedora disk
|
|
if [[ "x${TEMPLATE_VMSTORAGE_type}" = "xfile" ]]
|
|
then
|
|
vmdisk_name="${TEMPLATE_VMID}/vm-${TEMPLATE_VMID}-disk-0.qcow2"
|
|
vmdisk_format="--format qcow2"
|
|
else
|
|
vmdisk_name="vm-${TEMPLATE_VMID}-disk-0"
|
|
vmdisk_format=""
|
|
fi
|
|
qm importdisk ${TEMPLATE_VMID} fedora-coreos-${VERSION}-${PLATEFORM}.x86_64.qcow2 ${TEMPLATE_VMSTORAGE} ${vmdisk_format}
|
|
qm set ${TEMPLATE_VMID} --scsihw virtio-scsi-pci --scsi0 ${TEMPLATE_VMSTORAGE}:${vmdisk_name}${VMDISK_OPTIONS}
|
|
|
|
# set hook-script
|
|
qm set ${TEMPLATE_VMID} -hookscript ${SNIPPET_STORAGE}:snippets/hook-fcos.sh
|
|
|
|
|
|
# convert vm template
|
|
echo -n "Convert VM ${TEMPLATE_VMID} in proxmox vm template... "
|
|
qm template ${TEMPLATE_VMID} &> /dev/null || true
|
|
echo "[done]"
|