API cookbook: creating a user in Delphix self-service

Delphix Self-Service administrators can use this API cookbook recipe to create a user on 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:

Creating a Self-Service User

Copy
#!/bin/bash

# A sample script for calls to the API. This one creates a Jet Stream user.

##### Constants

# Describes a Delphix software revision.
# Please change version as per your Delphix Engine CLI, if different
VERSION="1.11.9"

##### Default Values. These can be overwritten with optional arguments.
engine="10.43.90.86"
username="admin"
password="delphix"

## examples ##
# Create user with NATIVE authentication
# ./createJSUser.sh -P <password> NATIVE <username>
# Create user with LDAP authentication
# ./createJSUser.sh -r <principal> <LDAP username>

##### Functions

# Help Menu
function usage {
    echo "Usage: createJSUser.sh [[-h] | options...] <auth> <newjsuser>"
    echo "Create a Jet Stream Only user."
    echo ""
    echo "Positional arguments"
    echo " <auth>"
    echo " <newjsuser>"
    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 " -P password for NATIVE authentication"
    echo " -f firstName of user"
    echo " -l lastName of user"
    echo " -e emailAddress of user"
    echo " -o homePhoneNumber of user"
    echo " -m mobilePhoneNumber of user"
    echo " -w workPhoneNumber of user"
    echo " -r principal for LDAP authentication"
}

# 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 following "." This leaves the minor version.
    minor=${minorMicro%.*}
    # Strip out the longest match preceding "." This leaves the micro version.
    micro=${VERSION##*.}

    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 create_user {
    # Check on authorization type
    if [[ $authtype = "NATIVE" && -n $userpwd ]]; then 
        pointParams="\"authenticationType\":\"$authtype\",
        \"credential\":{
            \"type\":\"PasswordCredential\",
            \"password\":\"$userpwd\"}"
    elif [[ $authtype = "LDAP" && -n $principal ]]; then
        pointParams="\"authenticationType\":\"$authtype\",
        \"principal\":\"$principal\"" 
    fi

    # These are the required parameters.
    paramString="\"type\": \"User\",
    \"name\": \"${newjsuser}\","

    # Fill in optional parameters if there are any.
    if [[ -n $firstname ]]; then
        paramString="$paramString \"firstName\": \"$firstname\","
    fi

    if [[ -n $lastname ]]; then
        paramString="$paramString \"lastName\": \"$lastname\","
    fi 

    if [[ -n $emailaddress ]]; then
        paramString="$paramString \"emailAddress\": \"$emailaddress\","
    fi 

    if [[ -n $homephone ]]; then
        paramString="$paramString \"homePhoneNumber\": \"$homephone\","
    fi 

    if [[ -n $mobilephone ]]; then
        paramString="$paramString \"mobilePhoneNumber\": \"$mobilephone\","
    fi 

    if [[ -n $workphone ]]; then
        paramString="$paramString \"workPhoneNumber\": \"$workphone\","
    fi 

    paramString="$paramString ${pointParams}"

    result=$(curl -s -X POST -k --data @- http://${engine}/resources/json/delphix/user \
        -b ~/cookies.txt -H "Content-Type: application/json" <<-EOF
    {
        $paramString
    }
    EOF)

    check_result

    # Extracting USER ID from result
    temp=${result#*\"result\":\"}
    userRef=${temp%%\"*}

    echo "New user $newjsuser successfully created"

    ##### ROLE-3 is Jet Stream Role
    result=$(curl -s -X POST -k --data @- http://${engine}/resources/json/delphix/authorization \
        -b ~/cookies.txt -H "Content-Type: application/json" <<-EOF
    {
        "type": "Authorization",
        "role": "ROLE-3",
        "target": "$userRef",
        "user": "$userRef"
    }
    EOF)

    check_result

    echo "Assigned Jet Stream Role to user $newjsuser"
}

# 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:P:r:f:l:e:o:m:w:h" flag; do
    case "$flag" in
        u ) username=${OPTARG%:*}
            password=${OPTARG##*:}
            ;;
        d ) engine=$OPTARG
            ;;
        P ) userpwd=$OPTARG
            ;;
        r ) principal=$OPTARG
            ;; 
        f ) firstname=$OPTARG
            ;;
        l ) lastname=$OPTARG
            ;;
        e ) emailaddress=$OPTARG
            ;;
        o ) homephone=$OPTARG
            ;;
        m ) mobilephone=$OPTARG
            ;;
        w ) workphone=$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 2 positional arguments
if [ $# != 2 ]; then
    echo "usage1"
    usage
    exit 1
fi

# Get the two positional arguments
authtype=$1
shift
newjsuser=$1

create_session
authenticate_de
create_user