harvester-installer
harvester-installer copied to clipboard
feat: support local iso mount for unattended install
Problem:
We want a blazing-fast way to spin up virtualized Harvester nodes for testing or something. It'd be better to have dependencies as few as possible.
Solution:
When in the auto-install mode and the local
keyword is provided in the ISO_URL
variable, the installer will try to mount the ISO from the local device /dev/sr0
.
Related Issue:
harvester/harvester#5385
Test plan:
Fire the following two commands to create a 2-node Harvester cluster.
# create mode (static)
CPUS=8
MEM=16384
DISK=300
HOSTNAME=node-0
IP=192.168.48.224
GW=192.168.48.1
NETMASK=255.255.255.0
DNS=1.1.1.1
MGMT_NIC=ens3
ISO=/tmp/harvester-master-amd64.iso
PASSWD=password
TOKEN=thisissecret
VIP=192.168.48.240
virt-install \
--name="$HOSTNAME" \
--cpu=host-passthrough \
--vcpus="$CPUS" \
--memory="$MEM" \
--disk path="$HOSTNAME"-disk-0.qcow2,format=qcow2,bus=virtio,size="$DISK" \
--location="$ISO",kernel=boot/kernel,initrd=boot/initrd \
--network=bridge=br0,model=virtio \
--os-type=linux \
--os-variant=auto \
--extra-args=" \
console=tty1 \
ip=$IP::$GW:$NETMASK:$HOSTNAME:$MGMT_NIC:none:$DNS \
net.ifnames=1 \
rd.cos.disable \
rd.live.dir=/ \
rd.live.squashimg=rootfs.squashfs \
root=live:CDLABEL=COS_LIVE \
harvester.os.dns_nameservers=$DNS \
harvester.os.hostname=$HOSTNAME \
harvester.os.ntp_servers=0.suse.pool.ntp.org \
harvester.os.password=$PASSWD \
harvester.scheme_version=1 \
harvester.token=$TOKEN \
harvester.install.automatic=true \
harvester.install.device=/dev/vda \
harvester.install.iso_url=local \
harvester.install.management_interface.bond_options.miimon=100 \
harvester.install.management_interface.bond_options.mode=balance-tlb \
harvester.install.management_interface.gateway=$GW \
harvester.install.management_interface.interfaces=name:$MGMT_NIC \
harvester.install.management_interface.ip=$IP \
harvester.install.management_interface.method=static \
harvester.install.management_interface.subnet_mask=$NETMASK \
harvester.install.mode=create \
harvester.install.skipchecks=true \
harvester.install.tty=tty1 \
harvester.install.vip=$VIP \
harvester.install.vip_mode=static" \
--noautoconsole \
--graphics=vnc \
--wait
# join mode (static)
CPUS=4
MEM=8192
DISK=300
HOSTNAME=node-1
IP=192.168.48.225
GW=192.168.48.1
NETMASK=255.255.255.0
DNS=1.1.1.1
MGMT_NIC=ens3
ISO=/tmp/harvester-master-amd64.iso
PASSWD=password
TOKEN=thisissecret
VIP=192.168.48.240
virt-install \
--name="$HOSTNAME" \
--cpu=host-passthrough \
--vcpus="$CPUS" \
--memory="$MEM" \
--disk path="$HOSTNAME"-disk-0.qcow2,format=qcow2,bus=virtio,size="$DISK" \
--location="$ISO",kernel=boot/kernel,initrd=boot/initrd \
--network=bridge=br0,model=virtio \
--os-type=linux \
--os-variant=auto \
--extra-args=" \
console=tty1 \
ip=$IP::$GW:$NETMASK:$HOSTNAME:$MGMT_NIC:none:$DNS \
net.ifnames=1 \
rd.cos.disable \
rd.live.dir=/ \
rd.live.squashimg=rootfs.squashfs \
root=live:CDLABEL=COS_LIVE \
harvester.os.dns_nameservers=$DNS \
harvester.os.hostname=$HOSTNAME \
harvester.os.ntp_servers=0.suse.pool.ntp.org \
harvester.os.password=$PASSWD \
harvester.scheme_version=1 \
harvester.server_url=https://$VIP:443 \
harvester.token=$TOKEN \
harvester.install.automatic=true \
harvester.install.device=/dev/vda \
harvester.install.iso_url=local \
harvester.install.management_interface.bond_options.miimon=100 \
harvester.install.management_interface.bond_options.mode=balance-tlb \
harvester.install.management_interface.gateway=$GW \
harvester.install.management_interface.interfaces=name:$MGMT_NIC \
harvester.install.management_interface.ip=$IP \
harvester.install.management_interface.method=static \
harvester.install.management_interface.subnet_mask=$NETMASK \
harvester.install.mode=join \
harvester.install.skipchecks=true \
harvester.install.tty=tty1" \
--noautoconsole \
--graphics=vnc \
--wait