diff --git a/test/cases/api/common/s3.sh b/test/cases/api/common/s3.sh index 5113db16c..17d0747cd 100644 --- a/test/cases/api/common/s3.sh +++ b/test/cases/api/common/s3.sh @@ -113,84 +113,6 @@ function createReqFileVSphere() { EOF } -# Create a cloud-int user-data file -# -# Returns: -# - path to the user-data file -# -# Arguments: -# $1 - default username -# $2 - path to the SSH public key to set as authorized for the user -function createCIUserdata() { - local _user="$1" - local _ssh_pubkey_path="$2" - - local _ci_userdata_dir - _ci_userdata_dir="$(mktemp -d -p "${WORKDIR}")" - local _ci_userdata_path="${_ci_userdata_dir}/user-data" - - cat > "${_ci_userdata_path}" < "${_ci_metadata_path}" <" to the name - greenprint "💿 ⬆️ Importing the converted VMDK image to VSphere" - $GOVC_CMD import.vmdk \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -ds="${GOVMOMI_DATASTORE}" \ - "${WORKDIR}/${VSPHERE_IMAGE_NAME}" \ - "${VSPHERE_VM_NAME}" - - # create the VM, but don't start it - greenprint "🖥️ Creating VM in VSphere" - $GOVC_CMD vm.create \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -pool="${GOVMOMI_CLUSTER}"/Resources \ - -ds="${GOVMOMI_DATASTORE}" \ - -folder="${GOVMOMI_FOLDER}" \ - -net="${GOVMOMI_NETWORK}" \ - -net.adapter=vmxnet3 \ - -m=4096 -c=2 -g=rhel8_64Guest -on=true -firmware=bios \ - -disk="${VSPHERE_VM_NAME}/${VSPHERE_IMAGE_NAME}" \ - -disk.controller=ide \ - -on=false \ - "${VSPHERE_VM_NAME}" - - # tagging vm as testing object - $GOVC_CMD tags.attach \ - -u "${GOVMOMI_USERNAME}":"${GOVMOMI_PASSWORD}"@"${GOVMOMI_URL}" \ - -k=true \ - -c "osbuild-composer testing" gitlab-ci-test \ - "/${GOVMOMI_DATACENTER}/vm/${GOVMOMI_FOLDER}/${VSPHERE_VM_NAME}" - - # upload ISO, create CDROM device and insert the ISO in it - greenprint "💿 ⬆️ Uploading the cloud-init user-data ISO to VSphere" - VSPHERE_CIDATA_ISO_PATH="${VSPHERE_VM_NAME}/cidata.iso" - $GOVC_CMD datastore.upload \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -ds="${GOVMOMI_DATASTORE}" \ - "${_ci_iso_path}" \ - "${VSPHERE_CIDATA_ISO_PATH}" - - local _cdrom_device - greenprint "🖥️ + 💿 Adding a CD-ROM device to the VM" - _cdrom_device="$($GOVC_CMD device.cdrom.add \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -vm "${VSPHERE_VM_NAME}")" - - greenprint "💿 Inserting the cloud-init ISO into the CD-ROM device" - $GOVC_CMD device.cdrom.insert \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -ds="${GOVMOMI_DATASTORE}" \ - -vm "${VSPHERE_VM_NAME}" \ - -device "${_cdrom_device}" \ - "${VSPHERE_CIDATA_ISO_PATH}" - - # start the VM - greenprint "🔌 Powering up the VSphere VM" - $GOVC_CMD vm.power \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - -on "${VSPHERE_VM_NAME}" - - HOST=$($GOVC_CMD vm.ip \ - -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ - -k=true \ - -dc="${GOVC_DATACENTER}" \ - "${VSPHERE_VM_NAME}") - greenprint "⏱ Waiting for the VSphere VM to respond to ssh" - _instanceWaitSSH "${HOST}" - - _ssh="ssh -oStrictHostKeyChecking=no -i ${_vsphere_ssh_key} $SSH_USER@$HOST" - _instanceCheck "${_ssh}" - - greenprint "✅ Successfully verified VSphere image with cloud-init" -} diff --git a/test/cases/api/common/vsphere.sh b/test/cases/api/common/vsphere.sh index 5ede4824b..0772baad4 100644 --- a/test/cases/api/common/vsphere.sh +++ b/test/cases/api/common/vsphere.sh @@ -28,3 +28,190 @@ function checkEnvVSphere() { printenv GOVMOMI_USERNAME GOVMOMI_PASSWORD GOVMOMI_URL GOVMOMI_CLUSTER GOVC_DATACENTER GOVMOMI_DATASTORE GOVMOMI_FOLDER GOVMOMI_NETWORK > /dev/null } +# Create a cloud-int user-data file +# +# Returns: +# - path to the user-data file +# +# Arguments: +# $1 - default username +# $2 - path to the SSH public key to set as authorized for the user +function createCIUserdata() { + local _user="$1" + local _ssh_pubkey_path="$2" + + local _ci_userdata_dir + _ci_userdata_dir="$(mktemp -d -p "${WORKDIR}")" + local _ci_userdata_path="${_ci_userdata_dir}/user-data" + + cat > "${_ci_userdata_path}" < "${_ci_metadata_path}" <" to the name + greenprint "💿 ⬆️ Importing the converted VMDK image to VSphere" + $GOVC_CMD import.vmdk \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -ds="${GOVMOMI_DATASTORE}" \ + "${WORKDIR}/${VSPHERE_IMAGE_NAME}" \ + "${VSPHERE_VM_NAME}" + + # create the VM, but don't start it + greenprint "🖥️ Creating VM in VSphere" + $GOVC_CMD vm.create \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -pool="${GOVMOMI_CLUSTER}"/Resources \ + -ds="${GOVMOMI_DATASTORE}" \ + -folder="${GOVMOMI_FOLDER}" \ + -net="${GOVMOMI_NETWORK}" \ + -net.adapter=vmxnet3 \ + -m=4096 -c=2 -g=rhel8_64Guest -on=true -firmware=bios \ + -disk="${VSPHERE_VM_NAME}/${VSPHERE_IMAGE_NAME}" \ + -disk.controller=ide \ + -on=false \ + "${VSPHERE_VM_NAME}" + + # tagging vm as testing object + $GOVC_CMD tags.attach \ + -u "${GOVMOMI_USERNAME}":"${GOVMOMI_PASSWORD}"@"${GOVMOMI_URL}" \ + -k=true \ + -c "osbuild-composer testing" gitlab-ci-test \ + "/${GOVMOMI_DATACENTER}/vm/${GOVMOMI_FOLDER}/${VSPHERE_VM_NAME}" + + # upload ISO, create CDROM device and insert the ISO in it + greenprint "💿 ⬆️ Uploading the cloud-init user-data ISO to VSphere" + VSPHERE_CIDATA_ISO_PATH="${VSPHERE_VM_NAME}/cidata.iso" + $GOVC_CMD datastore.upload \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -ds="${GOVMOMI_DATASTORE}" \ + "${_ci_iso_path}" \ + "${VSPHERE_CIDATA_ISO_PATH}" + + local _cdrom_device + greenprint "🖥️ + 💿 Adding a CD-ROM device to the VM" + _cdrom_device="$($GOVC_CMD device.cdrom.add \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -vm "${VSPHERE_VM_NAME}")" + + greenprint "💿 Inserting the cloud-init ISO into the CD-ROM device" + $GOVC_CMD device.cdrom.insert \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -ds="${GOVMOMI_DATASTORE}" \ + -vm "${VSPHERE_VM_NAME}" \ + -device "${_cdrom_device}" \ + "${VSPHERE_CIDATA_ISO_PATH}" + + # start the VM + greenprint "🔌 Powering up the VSphere VM" + $GOVC_CMD vm.power \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + -on "${VSPHERE_VM_NAME}" + + HOST=$($GOVC_CMD vm.ip \ + -u "${GOVMOMI_USERNAME}:${GOVMOMI_PASSWORD}@${GOVMOMI_URL}" \ + -k=true \ + -dc="${GOVC_DATACENTER}" \ + "${VSPHERE_VM_NAME}") + greenprint "⏱ Waiting for the VSphere VM to respond to ssh" + _instanceWaitSSH "${HOST}" + + _ssh="ssh -oStrictHostKeyChecking=no -i ${_vsphere_ssh_key} $SSH_USER@$HOST" + _instanceCheck "${_ssh}" + + greenprint "✅ Successfully verified VSphere image with cloud-init" +}