API cookbook: refreshing a container in Delphix self-service
Delphix Self-Service administrators can use this API cookbook recipe to refresh a container in Delphix Self-Service (Jet Stream) using the Delphix Engine API.
The following script is for educational and demonstration purposes only and is not supported by Delphix.
Download script:
Refreshing a Self-Service container
Copy
#!/bin/bash
# A sample script for calls to the API. This one refresh Jet Stream container.
##### Constants
# Describes a Delphix software revision.
# Please change version are per your Delphix Engine CLI, if different
VERSION="1.8.0"##### Default Values. These can be overwriten with optional arguments.
engine="172.16.151.154"username="delphix_admin"password="landshark"##examples##
# Refresh container from latest point in time of Template
#./refreshContainer.sh -T JS_DATA_TEMPLATE-13 JS_DATA_CONTAINER-20
# Refresh container from specific bookmark
#./refreshContainer.sh -b JS_BOOKMARK-76 JS_DATA_CONTAINER-20
# Refresh container from specific point in time of branch
#./refreshContainer.sh -t "2016-08-08T10:00:00.000Z" -B JS_BRANCH-50 JS_DATA_CONTAINER-20
##### Functions
# Help Menu
function usage {
echo "Usage: refreshContainer.sh [[-h] | options...] <containername> <template>"
echo "Create a Jet Stream Bookmark on the given branch."
echo "" echo "Positional arguments"
echo " <containerName>"
echo " <template>"
echo ""
echo "Optional Arguments:"
echo " -h Show this message and exit"
echo " -d Delphix engine IP address or host name, otherwise revert to default"
echo " -u USER:PASSWORD Server user and password, otherwise revert to default"
echo " -T template reference from which need to refresh from latest point in time"
echo " -b Bookmark name from which need to refresh container. If no bookmark is included, the branch will be created at the latest point in time. Type: string. Format JS_BOOKMARK-<n> (Optional)"
echo " -t The time from where the container should be refreshed. This must be accompanied with branch name from which need to pick up time. Type: date, must be in ISO 8601 extended format [yyyy]-[MM]-[dd]T[HH]:[mm]:[ss].[SSS]Z"
echo " -B Branch name from which need to refresh container, at specific time. Type: string. Format JS_BRANCH-<n> (Optional)"}
# Create Our Session, including establishing the API version.
function create_session
{
# Pulling the version into parts. The {} are necessary for string manipulation.
# Strip out longest match following "." This leaves only the major version.
major=${VERSION%%.*}
# Strip out the shortest match preceding "." This leaves minor.micro.
minorMicro=${VERSION#*.}
# Strip out the shortest match followint "." This leaves the minor version.
minor=${minorMicro%.*}
# Strip out the longest match preceding "." This leaves the micro version.
micro=${VERSION##*.}
# Quick note about the <<-. If the redirection operator << is followed by a - (dash), all leading TAB from the document data will be
# ignored. This is useful to have optical nice code also when using here-documents. Otherwise you must have the EOF be on a line by itself,
# no parens, no tabs or anything.
echo "creating session..." result=$(curl -s -S -X POST -k --data @- http://${engine}/resources/json/delphix/session \
-c ~/cookies.txt -H "Content-Type: application/json" <<-EOF
{
"type": "APISession",
"version": {
"type": "APIVersion",
"major": $major,
"minor": $minor,
"micro": $micro
}
}
EOF)
check_result
}
# Authenticate the DE for the provided user.
function authenticate_de
{
echo "authenticating delphix engine..." result=$(curl -s -S -X POST -k --data @- http://${engine}/resources/json/delphix/login \
-b ~/cookies.txt -c ~/cookies.txt -H "Content-Type: application/json" <<-EOF
{
"type": "LoginRequest",
"username": "${username}",
"password": "${password}" }
EOF)
check_result
}
function restore_container
{
# If there is not timeInput and no bookmark name, we need to use JSTimelinePointLatestTimeInput from template.
if [[ -n $template && -z $inputTime && -z $bookmark ]]
then
pointParams="\"type\": \"JSTimelinePointLatestTimeInput\",
\"sourceDataLayout\": \"${template}\"" # If there is a timeInput and no bookmark name, we need to use Input Time.
elif [[ -n $inputTime && -n $branchRef && -z $bookmark && -z $template ]]
then
pointParams="\"type\": \"JSTimelinePointTimeInput\",
\"branch\": \"${branchRef}\",
\"time\": \"${inputTime}\"" # If there is a bookmark name and no time input, we need to use bookmark
elif [[ -n $bookmark && -z $template && -z $inputTime ]]
then
pointParams="\"type\": \"JSTimelinePointBookmarkInput\",
\"bookmark\": \"${bookmark}\"" fi
echo "pointParams" $pointParams
result=$(curl -s -X POST -k --data @- http://${engine}/resources/json/delphix/jetstream/container/${containerRef}/restore \
-b ~/cookies.txt -H "Content-Type: application/json" <<-EOF
{
$pointParams
}
EOF)
check_result
echo "confirming job completed successfully..." # Get everything in the result that comes after job.
temp=${result#*\"job\":\"}
# Get rid of everything after
jobRef=${temp%%\"*}
result=$(curl -s -X GET -k http://${engine}/resources/json/delphix/job/${jobRef} \
-b ~/cookies.txt -H "Content-Type: application/json")
# Get everything in the result that comes after job.
temp=${result#*\"jobState\":\"}
# Get rid of everything after
jobState=${temp%%\"*}
check_result
while [ $jobState = "RUNNING" ]
do
sleep 1
result=$(curl -s -X GET -k http://${engine}/resources/json/delphix/job/${jobRef} \
-b ~/cookies.txt -H "Content-Type: application/json")
# Get everything in the result that comes after job.
temp=${result#*\"jobState\":\"}
# Get rid of everything after
jobState=${temp%%\"*}
check_result
done
if [ $jobState = "COMPLETED" ]
then
echo "successfully refresh container $containerName" else
echo "unable to refresh container" echo result
fi
}
# Check the result of the curl. If there are problems, inform the user then exit.
function check_result
{
exitStatus=$?
if [ $exitStatus -ne 0 ]
then
echo "command failed with exit status $exitStatus" exit 1
elif [[ $result != *"OKResult"* ]]
then
echo "" echo $result
exit 1
fi
}
##### Main
while getopts "u:d:T:b:t:B:h" flag; do
case "$flag" in
u ) username=${OPTARG%:*}
password=${OPTARG##*:}
;;
d ) engine=$OPTARG
;;
T ) template=$OPTARG
;;
b ) bookmark=$OPTARG
;;
t ) inputTime=$OPTARG
;;
B ) branchRef=$OPTARG
;;
h ) usage
exit
;;
* ) usage
exit 1
esac
done
# Shift the parameters so we only have the positional arguments left
shift $((OPTIND-1))
# Check that there are 1 positional arguments
if [ $# != 1 ]
then
usage
exit 1
fi
# Get the one positional arguments
containerRef=$1
create_session
authenticate_de
restore_container