Skip to content

Instantly share code, notes, and snippets.

@ravnoor
Forked from nkabir/01-netcfg.yaml
Created September 22, 2023 18:55
Show Gist options
  • Select an option

  • Save ravnoor/b17cf53e4d8fc66e5d38979b80143e53 to your computer and use it in GitHub Desktop.

Select an option

Save ravnoor/b17cf53e4d8fc66e5d38979b80143e53 to your computer and use it in GitHub Desktop.

Revisions

  1. @nkabir nkabir revised this gist Nov 29, 2020. 1 changed file with 50 additions and 0 deletions.
    50 changes: 50 additions & 0 deletions virt-clone.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    #!/usr/bin/env bash

    set -o errexit
    set -o pipefail



    source ${LABKEY_DA:?}/lib/redo/leaf/kvm.bash
    readonly KVMCPU_NAME=${FOLDER_NAME:?}

    # clone image for use as dom

    set -o errexit
    set -o pipefail

    virt-clone \
    --original {{ image }}-vi \
    --name {{ name }} \
    --auto-clone --debug

    # https://www.cyberciti.biz/faq/reset-a-kvm-clone-virtual-machines-with-virt-sysprep-on-linux/
    # ignore ssh rules to preserve key-based access
    readonly SYSPREP_OPERATIONS=$(virt-sysprep --list | cut -d* -f1 | cut -d' ' -f1 | grep -v ssh | pyp "','.join(pp)")

    sudo virt-sysprep \
    -d ${KVMCPU_NAME:?} \
    --no-network \
    --operations "${SYSPREP_OPERATIONS}"



    sudo virt-customize \
    --no-network \
    -d ${KVMCPU_NAME:?} \
    --hostname ${KVMCPU_NAME:?}

    virt-xml \
    ${KVMCPU_NAME:?} \
    --edit \
    --vcpus {{ vcpus }}

    virt-xml \
    ${KVMCPU_NAME:?} \
    --edit \
    --memory {{ ram }}

    virt-xml \
    ${KVMCPU_NAME:?} \
    --edit \
    --network "network={{ network }}"
  2. @nkabir nkabir revised this gist Nov 29, 2020. 1 changed file with 72 additions and 0 deletions.
    72 changes: 72 additions & 0 deletions virt-installer.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    #!/usr/bin/env bash
    set -o errexit
    set -o pipefail

    # Remove prior instance if it exists
    sudo rm -f "${VIRTINSTALL_FA:?}"
    cp -v "${VIRTBUILDER_FA:?}" "${VIRTINSTALL_FA:?}" 1>&2

    qemu-img resize "${VIRTINSTALL_FA:?}" "{{ disk }}"

    virt-customize \
    --hostname ${VIRTINSTALL_NAME:?} \
    --install qemu-guest-agent,molly-guard \
    --firstboot-install cloud-initramfs-growroot \
    --firstboot-command "growpart /dev/vda 1" \
    --firstboot-command "resize2fs /dev/vda1" \
    {%- if graphics == 'mate' %}
    --firstboot-install tasksel \
    --firstboot-command "tasksel install ubuntu-mate-core" \
    --firstboot-command "poweroff" \
    {%- endif %}
    --add "${VIRTINSTALL_FA:?}"

    virt-install \
    --name "${VIRTINSTALL_NAME:?}" \
    --network "network={{ network }},model=virtio" \
    --ram "{{ ram }}" \
    --vcpus {{ vcpus }} \
    --os-variant "{{ os_variant }}" \
    --virt-type kvm \
    {%- if (graphics == 'spice' or graphics == 'mate') %}
    --video qxl --channel spicevmc --graphics "spice" \
    {%- else %}
    --graphics "{{ graphics }}" \
    {%- endif %}
    --console "{{ console }}" \
    {%- if graphics != 'mate' %}
    --noautoconsole \
    {%- endif %}
    --import \
    --disk "path=${VIRTINSTALL_FA:?},device=disk,bus=virtio,format=${KVM_IMAGE_FORMAT:?}" 1>&2

    # change ownership to current user
    sudo chown ${USER:?}:kvm ${VIRTINSTALL_FA:?}

    # Attach extra disks if configured
    {% if raid is defined %}
    {%- for letter in raid.letters %}
    EXTRA_DISK_{{ letter | upper }}=${KVM_IMAGE_DA:?}/${VIRTINSTALL_NAME:?}-{{ letter }}.${KVM_IMAGE_FORMAT:?}
    EXTRA_DISK_DEVICE_{{ letter | upper }}=vd{{ letter }}
    qemu-img create \
    -f "${KVM_IMAGE_FORMAT:?}" \
    "${EXTRA_DISK_{{ letter | upper }}}" \
    "{{ raid.size }}"
    virsh attach-disk ${VIRTINSTALL_NAME:?} \
    --source ${EXTRA_DISK_{{ letter | upper }}} \
    --target ${EXTRA_DISK_DEVICE_{{ letter | upper }}} \
    --driver qemu \
    --subdriver "${KVM_IMAGE_FORMAT:?}" \
    --targetbus virtio \
    --persistent
    {%- endfor %}
    {% endif %}

    virt-xml ${VIRTINSTALL_NAME:?} --edit --cpu mode='host-passthrough'

    # shut down virtual machine
    readonly running_target=$(virsh list --all | grep "running" | gawk '{ print $2 }' | grep "^${VIRTINSTALL_NAME:?}$")

    if [[ ! -z "${running_target}" ]]; then
    virsh destroy ${VIRTINSTALL_NAME:?}
    fi
  3. @nkabir nkabir revised this gist Nov 29, 2020. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions 01-netcfg.yaml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,8 @@
    # may be templated in the future
    network:
    version: 2
    renderer: networkd
    ethernets:
    eth0:
    dhcp4: true
    optional: true
  4. @nkabir nkabir created this gist Nov 29, 2020.
    45 changes: 45 additions & 0 deletions virt-cloud-builder.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    #!/usr/bin/env bash
    set -o errexit
    set -o pipefail

    readonly CODENAME="{{ os_version }}"
    # image file name
    readonly IMG_FR="${CODENAME:?}-server-cloudimg-amd64.img"

    # cloud image uri
    readonly IMG_URI=https://cloud-images.ubuntu.com/${CODENAME:?}/current/${IMG_FR:?}

    # absolute path to cloud image file
    readonly IMG_FA="${KVM_IMAGE_DA:?}/${IMG_FR:?}"

    # absolute path to virtbuilder file
    readonly VB_FA="${KVM_IMAGE_DA:?}/${VIRTBUILDER_NAME:?}.${KVM_IMAGE_FORMAT:?}"

    # does img file exist?
    [[ -e "${IMG_FA:?}" ]] || {
    curl "${IMG_URI:?}" -o "${IMG_FA:?}"
    }

    # copy downloaded cloud img to qcow2
    cp "${IMG_FA:?}" "${VB_FA:?}"

    # bug in cloud image
    # https://bugs.launchpad.net/cloud-images/+bug/1573095

    # generates <name>-vb.qcow2
    virt-customize \
    --format "${KVM_IMAGE_FORMAT:?}" \
    --no-network \
    --hostname "${VIRTBUILDER_NAME:?}" \
    --ssh-inject "root:file:$HOME/.ssh/id_rsa.pub" \
    --copy-in build/01-netcfg.yaml:/etc/netplan \
    --root-password "file:$HOME/.ssh/kvm.password" \
    --run-command "sed -i 's/ console=ttyS0//g' /etc/default/grub.d/50-cloudimg-settings.cfg" \
    --run-command "sed -i 's/GRUB_CMDLINE_LINUX/GRUB_CMDLINE_LINUX=\"net.ifnames=0 biosdevname=0 console=tty1\"/g' /etc/default/grub" \
    --run-command "update-grub" \
    --run-command "sed -i 's/ibm-p8-kvm-03-guest-02.virt.pnr.lab.eng.rdu2.redhat.com//g' /etc/hosts" \
    --run-command "systemctl mask apt-daily.service apt-daily-upgrade.service" \
    --firstboot-command "netplan generate && netplan apply" \
    --firstboot-command "dpkg-reconfigure openssh-server" \
    --firstboot-command "sync" \
    -a "${VB_FA:?}"