1bf7708830
> bcl: this should really be [[packages]] since [[modules]] is > going to change to actual modules at some point Related: rhbz#1698366
159 lines
4.9 KiB
Bash
Executable File
159 lines
4.9 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!
|
|
#
|
|
#####
|
|
|
|
. /usr/share/beakerlib/beakerlib.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 "python2-pip"; then
|
|
rlRun -t -c "yum -y install python2-pip"
|
|
rlAssertRpm python2-pip
|
|
fi
|
|
|
|
rlRun -t -c "pip install --upgrade pip setuptools"
|
|
rlRun -t -c "pip 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"
|
|
__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"
|
|
if [ -n "$UUID" ]; then
|
|
until $CLI compose details $UUID | grep FINISHED; do
|
|
rlLogInfo "Waiting for compose to finish ..."
|
|
sleep 30
|
|
done;
|
|
else
|
|
rlFail "Compose UUID is empty!"
|
|
fi
|
|
rlPhaseEnd
|
|
|
|
rlPhaseStartTest "Upload VMDK image in vCenter"
|
|
rlRun -t -c "$CLI compose image $UUID"
|
|
IMAGE="$UUID-disk.vmdk"
|
|
|
|
python $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 successful" $?
|
|
rlPhaseEnd
|
|
|
|
rlPhaseStartTest "Start VM instance"
|
|
VM_NAME="Composer-Auto-VM-$UUID"
|
|
INSTANCE_UUID=`python $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=`python $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"
|
|
# verify we can login into that instance and root account is disabled
|
|
. ./tests/cli/lib/root_account.sh
|
|
check_root_account root $IP_ADDRESS "-i $SSH_KEY_DIR/id_rsa"
|
|
rlPhaseEnd
|
|
|
|
rlPhaseStartCleanup
|
|
# note: VMDK disk is removed when destroying the VM
|
|
python $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
|