278b39c2fc
The current grenade job tests only with pdns4, but it would be valuable to also test with bind9 to discern upgrade issues when bind9 is in use. Change-Id: I118cc92e3950540d725f433dfe5d9590cbdab616
197 lines
5.1 KiB
Bash
Executable File
197 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o errexit
|
|
|
|
source $GRENADE_DIR/grenaderc
|
|
source $GRENADE_DIR/functions
|
|
|
|
source $TOP_DIR/openrc admin admin
|
|
source $TOP_DIR/stackrc
|
|
|
|
set -o xtrace
|
|
|
|
DESIGNATE_PROJECT=designate_grenade
|
|
DESIGNATE_USER=designate_grenade
|
|
DESIGNATE_PASS=designate_grenade
|
|
DESIGNATE_ZONE_NAME=example.com.
|
|
DESIGNATE_ZONE_EMAIL=hostmaster@example.com
|
|
DESIGNATE_RRSET_NAME=www.example.com.
|
|
DESIGNATE_RRSET_TYPE=A
|
|
DESIGNATE_RRSET_RECORD=10.0.0.1
|
|
DESIGNATE_SERVICE_PORT_DNS=${DESIGNATE_SERVICE_PORT_DNS:-53}
|
|
# used with dig to look up in DNS
|
|
DIG_FLAGS="-p $DESIGNATE_SERVICE_PORT_DNS @$SERVICE_HOST"
|
|
DIG_TIMEOUT=30
|
|
|
|
function _set_designate_user {
|
|
OS_TENANT_NAME=$DESIGNATE_PROJECT
|
|
OS_PROJECT_NAME=$DESIGNATE_PROJECT
|
|
OS_USERNAME=$DESIGNATE_USER
|
|
OS_PASSWORD=$DESIGNATE_PASS
|
|
}
|
|
|
|
function _ensure_recordset_present {
|
|
local record_name=$1
|
|
local record_type=$2
|
|
local record_value=$3
|
|
|
|
if [ "$DESIGNATE_BACKEND_DRIVER" = "fake" ] ; then
|
|
# if the backend is fake, there will be no actual DNS records
|
|
return 0
|
|
fi
|
|
|
|
if ! timeout $DIG_TIMEOUT sh -c "while ! dig +short $DIG_FLAGS $record_name $record_type | grep \"$record_value\"; do sleep 1; done"; then
|
|
die $LINENO "Error: record $record_name ($record_type) not found in DNS"
|
|
fi
|
|
|
|
# Display for debugging
|
|
dig $DIG_FLAGS $record_name $record_type
|
|
|
|
return 0
|
|
}
|
|
|
|
function create {
|
|
|
|
# create a tenant for the server
|
|
eval $(openstack project create -f shell -c id $DESIGNATE_PROJECT)
|
|
if [[ -z "$id" ]]; then
|
|
die $LINENO "Didn't create $DESIGNATE_PROJECT project"
|
|
fi
|
|
resource_save designate project_id $id
|
|
local project_id=$id
|
|
|
|
# create the user, and set $id locally
|
|
eval $(openstack user create $DESIGNATE_USER \
|
|
--project $project_id \
|
|
--password $DESIGNATE_PASS \
|
|
-f shell -c id)
|
|
if [[ -z "$id" ]]; then
|
|
die $LINENO "Didn't create $DESIGNATE_USER user"
|
|
fi
|
|
resource_save designate user_id $id
|
|
|
|
# BUG(sdague): this really shouldn't be required, in Keystone v2 a
|
|
# user created in a project was assigned to that project, in v3 it
|
|
# is not - https://bugs.launchpad.net/keystone/+bug/1662911
|
|
openstack role add Member --user $id --project $project_id
|
|
|
|
_set_designate_user
|
|
|
|
# Create a zone, and save the id
|
|
|
|
eval $(openstack zone create --email $DESIGNATE_ZONE_EMAIL \
|
|
$DESIGNATE_ZONE_NAME \
|
|
-f shell -c id)
|
|
|
|
|
|
resource_save designate zone_id $id
|
|
|
|
eval $(openstack recordset create --record $DESIGNATE_RRSET_RECORD \
|
|
--type $DESIGNATE_RRSET_TYPE \
|
|
$DESIGNATE_ZONE_NAME \
|
|
$DESIGNATE_RRSET_NAME \
|
|
-f shell -c id)
|
|
|
|
resource_save designate rrset_id $id
|
|
|
|
# wait until rrset moves to active state
|
|
local timeleft=1000
|
|
while [[ $timeleft -gt 0 ]]; do
|
|
local status
|
|
eval $(openstack recordset show $DESIGNATE_ZONE_NAME \
|
|
$DESIGNATE_RRSET_NAME \
|
|
-f shell -c status)
|
|
|
|
if [[ "$status" != "ACTIVE" ]]; then
|
|
if [[ "$cluster_state" == "Error" ]]; then
|
|
die $LINENO "Zone is in Error state"
|
|
fi
|
|
echo "Zone is still not in Active state"
|
|
sleep 10
|
|
timeleft=$((timeleft - 10))
|
|
if [[ $timeleft == 0 ]]; then
|
|
die $LINENO "Zone hasn't moved to Active state \
|
|
during 1000 seconds"
|
|
fi
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
}
|
|
|
|
function verify {
|
|
_set_designate_user
|
|
# check that cluster is in Active state
|
|
local zone_id
|
|
zone_id=$(resource_get designate zone_id)
|
|
|
|
local rrset_id
|
|
rrset_id=$(resource_get designate rrset_id)
|
|
|
|
eval $(openstack zone show $zone_id -f shell -c status)
|
|
echo -n $status
|
|
if [[ "$status" != "ACTIVE" ]]; then
|
|
die $LINENO "Zone is not in Active state anymore"
|
|
fi
|
|
|
|
eval $(openstack recordset show $zone_id $rrset_id -f shell -c status)
|
|
echo -n $status
|
|
if [[ "$status" != "ACTIVE" ]]; then
|
|
die $LINENO "Recordset is not in Active state anymore"
|
|
fi
|
|
|
|
echo "Designate verification: SUCCESS"
|
|
}
|
|
|
|
function verify_noapi {
|
|
_ensure_recordset_present $DESIGNATE_RRSET_NAME $DESIGNATE_RRSET_TYPE $DESIGNATE_RRSET_RECORD
|
|
}
|
|
|
|
function destroy {
|
|
_set_designate_user
|
|
set +o errexit
|
|
|
|
# delete cluster
|
|
local cluster_id
|
|
zone_id=$(resource_get designate zone_id)
|
|
openstack zone delete $zone_id > /dev/null
|
|
# wait for cluster deletion
|
|
local timeleft=500
|
|
while [[ $timeleft -gt 0 ]]; do
|
|
openstack zone show $zone_id > /dev/null
|
|
local rc=$?
|
|
|
|
if [[ "$rc" != 1 ]]; then
|
|
echo "Zone still exists"
|
|
sleep 5
|
|
timeleft=$((timeleft - 5))
|
|
if [[ $timeleft == 0 ]]; then
|
|
die $LINENO "Zone hasn't been deleted during 500 seconds"
|
|
fi
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Dispatcher
|
|
case $1 in
|
|
"create")
|
|
create
|
|
;;
|
|
"verify_noapi")
|
|
verify_noapi
|
|
;;
|
|
"verify")
|
|
verify
|
|
;;
|
|
"destroy")
|
|
destroy
|
|
;;
|
|
"force_destroy")
|
|
set +o errexit
|
|
destroy
|
|
;;
|
|
esac
|