1d5a0a378b
This change is needed for VMWare testing due to changes in the storage, and the datastore we used before is not available for the time being.
157 lines
4.7 KiB
Bash
Executable File
157 lines
4.7 KiB
Bash
Executable File
#!/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:-NFS-Node1}"
|
|
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"
|
|
rlRun -t -c "mv $UUID-disk.vmdk Composer-Test-$UUID-disk.vmdk"
|
|
IMAGE="Composer-Test-$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-Test-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
|