Script Example

This simple example for adding a Clone will help you to get started with scripting for the Oracle FS System.

Credentials Integration Method Example Script

The following example adds a Clone, calls a backup application, and then deletes the Clone. The example is based on the Credentials Integration method and demonstrates how a single response to a password prompt permits the subsequent FSCLI commands to run. This code example also contains return code checking and some basic response parsing.
Important! The example code provided here is for instructional purposes only to help you to get started with scripting for the Oracle Flash Storage System. As such, the use of this example code is unsupported.
Important! You must place your scripts in the same directory as the FSCLI binary.
#! /usr/bin/env bash
# example script using fscli credentials to add clone,
# call backup, and delete clone 

# verify command line arguments
if [ $# -ne 5 ]; then
    echo "Usage: ./$(basename $0) <ofs-user-account> <ofs-name-or-ip> <source-lun-fqn> <backup-server-fqn> <clone-lun-name>"
    exit 1
fi

# prompt for password
read -s -p "Password: " password
echo ""
echo ""

# check overall system status
command="./fscli system -list -status -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
state=$(echo "$response" | grep -w SystemStatus | awk -F': ' '{print $2}')
echo "system status is '$state'"
echo ""
   if [ $state != "NORMAL" ]
   then
      exit $rc 
   fi

# check source lun status
command="./fscli lun -list -details -lun $3 -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
state=$(echo "$response" | grep -w Status | awk -F': ' '{print $2}')
echo "source lun status is '$state'"
echo ""
   if [ $state != "ONLINE" ]
   then
      exit $rc 
   fi

# check backup server status
command="./fscli san_host -list -details -sanhost $4 -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
state=$(echo "$response" | grep -w ManagementState | awk -F': ' '{print $2}')
echo "backup server status is '$state'"
echo ""
   if [ $state != "AVAILABLE" ]
   then
      exit $rc 
   fi

# get next available lun number
command="./fscli hostmap -list -availablelunnumbers -host $4 -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
lunnumber=$(echo "$response" | grep -w LunNumber | head -n1 | awk -F': ' '{print $2}')
echo "next available lun number is '$lunnumber'"
echo ""

# add clone 
command="./fscli clone_lun -add -name $5 -source $3 -hostmap $4 -lunnumber $lunnumber -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
echo ""

# check clone status
command="./fscli clone_lun -list -details -clonelun /$5 -u $1 -oraclefs $2"
echo $command
command="echo $password | $command" 
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
state=$(echo "$response" | grep -w Status | awk -F': ' '{print $2}')
echo "clone lun status is '$state'"
echo ""
   if [ $state != "ONLINE" ]
   then
      exit $rc 
   fi

# call backup application
echo "call backup application"
echo "backup complete"
echo ""

# delete clone
command="./fscli clone_lun -delete -clonelun /$5 -suppresswarnings -u $1 -oraclefs $2"
echo $command
command="echo $password | $command"
response=$(eval $command)
rc=$(echo $?)
   if [ $rc == 0 ]
   then
      echo "command passed"
   else
      echo "command failed"
      exit $rc 
   fi
echo ""
echo ""

Credentials Integration Method Output Example

The following code example is the shell output after you have run the script.
$ ./d_clone_lun.sh administrator OFS_MACHINE_NAME /fooLunZ /HOST_NAME clone_fooLunZ
Password: 

./fscli system -list -status -u administrator -oraclefs OFS_MACHINE_NAME
command passed
system status is 'NORMAL'

./fscli lun -list -details -lun /fooLunZ -u administrator -oraclefs OFS_MACHINE_NAME
command passed
source lun status is 'ONLINE'

./fscli san_host -list -details -sanhost /HOST_NAME -u administrator -oraclefs OFS_MACHINE_NAME
command passed
backup server status is 'AVAILABLE'

./fscli hostmap -list -availablelunnumbers -host /HOST_NAME -u administrator -oraclefs OFS_MACHINE_NAME
command passed
next available lun number is '12'

./fscli clone_lun -add -name clone_fooLunZ -source /fooLunZ -hostmap /HOST_NAME -lunnumber 12 -u administrator -oraclefs OFS_MACHINE_NAME
command passed

./fscli clone_lun -list -details -clonelun /clone_fooLunZ -u administrator -oraclefs OFS_MACHINE_NAME
command passed
clone lun status is 'ONLINE'

call backup application
backup complete

./fscli clone_lun -delete -clonelun /clone_fooLunZ -suppresswarnings -u administrator -oraclefs OFS_MACHINE_NAME
command passed