harvester-installer icon indicating copy to clipboard operation
harvester-installer copied to clipboard

feat: support local iso mount for unattended install

Open starbops opened this issue 11 months ago • 0 comments

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

starbops avatar Mar 09 '24 15:03 starbops