#!/bin/bash # Note: execute this file from the project root directory ##### # # Make sure we can build an image and deploy it inside vSphere! # ##### set -e . /usr/share/beakerlib/beakerlib.sh . $(dirname $0)/lib/lib.sh CLI="${CLI:-./src/bin/composer-cli}" rlJournalStart rlPhaseStartSetup if [ -z "$V_HOST" ]; then rlFail "V_HOST is empty!" else rlLogInfo "V_HOST=$V_HOST" fi if [ -z "$V_USERNAME" ]; then rlFail "V_USERNAME is empty!" else rlLogInfo "V_USERNAME=$V_USERNAME" fi if [ -z "$V_PASSWORD" ]; then rlFail "V_PASSWORD is empty!" else rlLogInfo "V_PASSWORD is configured" fi V_DATACENTER="${V_DATACENTER:-RH_Engineering}" rlLogInfo "V_DATACENTER=$V_DATACENTER" V_CLUSTER="${V_CLUSTER:-vMotion-Cluster}" rlLogInfo "V_CLUSTER=$V_CLUSTER" V_NETWORK="${V_NETWORK:-vMotion-Network}" rlLogInfo "V_NETWORK=$V_NETWORK" V_DATASTORE="${V_DATASTORE:-iSCSI-Node2}" rlLogInfo "V_DATASTORE=$V_DATASTORE" V_FOLDER="${V_FOLDER:-Composer}" rlLogInfo "V_FOLDER=$V_FOLDER" if ! rlCheckRpm "python3-pip"; then rlRun -t -c "dnf -y install python3-pip" rlAssertRpm python3-pip fi rlRun -t -c "pip3 install pyvmomi" TMP_DIR=`mktemp -d /tmp/composer-vmware.XXXXX` SAMPLES="$TMP_DIR/pyvmomi-community-samples" if [ ! -d "$SAMPLES" ]; then rlRun -t -c "git clone https://github.com/weldr/pyvmomi-community-samples $SAMPLES" pushd $SAMPLES && git checkout composer_testing && popd fi SAMPLES="$SAMPLES/samples" rlPhaseEnd rlPhaseStartTest "compose start" rlAssertEquals "SELinux operates in enforcing mode" "$(getenforce)" "Enforcing" SSH_KEY_DIR=`mktemp -d /tmp/composer-ssh-keys.XXXXXX` rlRun -t -c "ssh-keygen -t rsa -N '' -f $SSH_KEY_DIR/id_rsa" PUB_KEY=`cat $SSH_KEY_DIR/id_rsa.pub` cat > $TMP_DIR/vmware.toml << __EOF__ name = "vmware" description = "HTTP image for vmware" version = "0.0.1" [[packages]] name = "httpd" version = "*" [[customizations.user]] name = "root" key = "$PUB_KEY" [customizations.kernel] append = "custom_cmdline_arg" __EOF__ rlRun -t -c "$CLI blueprints push $TMP_DIR/vmware.toml" UUID=`$CLI compose start vmware vmdk` rlAssertEquals "exit code should be zero" $? 0 UUID=`echo $UUID | cut -f 2 -d' '` rlPhaseEnd rlPhaseStartTest "compose finished" wait_for_compose $UUID rlPhaseEnd rlPhaseStartTest "Upload VMDK image in vCenter" rlRun -t -c "$CLI compose image $UUID" IMAGE="$UUID-disk.vmdk" python3 $SAMPLES/upload_file_to_datastore.py -S -s $V_HOST -u $V_USERNAME -p $V_PASSWORD \ -d $V_DATASTORE -l `readlink -f $IMAGE` -r $IMAGE rlAssert0 "Image upload successfull" $? rlPhaseEnd rlPhaseStartTest "Start VM instance" VM_NAME="Composer-Auto-VM-$UUID" INSTANCE_UUID=`python3 $SAMPLES/create_vm.py -S -s $V_HOST -u $V_USERNAME -p $V_PASSWORD \ --datacenter $V_DATACENTER -c $V_CLUSTER -f $V_FOLDER -d $V_DATASTORE \ --portgroup $V_NETWORK -v $IMAGE -m 2048 -g rhel7_64Guest -n $VM_NAME \ --power-on` if [ -z "$INSTANCE_UUID" ]; then rlFail "INSTANCE_UUID is empty!" else rlLogInfo "INSTANCE_UUID=$INSTANCE_UUID" fi # wait for instance to become running and had assigned a public IP IP_ADDRESS="None" while [ "$IP_ADDRESS" == "None" ]; do rlLogInfo "IP_ADDRESS is not assigned yet ..." sleep 30 IP_ADDRESS=`python3 $SAMPLES/find_by_uuid.py -S -s $V_HOST -u $V_USERNAME -p $V_PASSWORD \ --uuid $INSTANCE_UUID | grep 'ip address' | tr -d ' ' | cut -f2- -d:` done rlLogInfo "Running instance IP_ADDRESS=$IP_ADDRESS" rlLogInfo "Waiting 30sec for instance to initialize ..." sleep 30 rlPhaseEnd rlPhaseStartTest "Verify VM instance" # run generic tests to verify the instance verify_image root "$IP_ADDRESS" "-i $SSH_KEY_DIR/id_rsa" rlPhaseEnd rlPhaseStartCleanup # note: vmdk disk is removed when destroying the VM python3 $SAMPLES/destroy_vm.py -S -s $V_HOST -u $V_USERNAME -p $V_PASSWORD --uuid $INSTANCE_UUID rlAssert0 "VM destroyed" $? rlRun -t -c "$CLI compose delete $UUID" rlRun -t -c "rm -rf $IMAGE $TMP_DIR $SSH_KEY_DIR" rlPhaseEnd rlJournalEnd rlJournalPrintText